opal-d3 0.0.20170205 → 0.0.20170822
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/d3.js +1295 -778
- data/lib/opal/d3/version.rb +1 -1
- data/spec/axis_spec.rb +36 -36
- data/spec/html/d3.js +1 -0
- data/spec/misc_spec.rb +1 -1
- data/spec/nest_spec.rb +4 -4
- data/spec/selection_manipulation_spec.rb +1 -1
- metadata +2 -2
- data/spec/html/d3.js +0 -16393
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: bf0da071ddbd8da7c59eceede1655360c7f12983
         | 
| 4 | 
            +
              data.tar.gz: 1f64c540471fbac2d1ad5c4141e139d1da81b26e
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 3620b72503511ed215c94662027cf3013c50e6d98b6242faa5e8a53484fa8d938d3801af401736d3c23bc374815cfcfe426a1fb6d651768e87ad4f1dfeddce4c
         | 
| 7 | 
            +
              data.tar.gz: 0df3a9c5ca621c961b2c0e49a6014f93de539c39990ec75e449c3350d88587cc155cfa5a6e002548ec1e902c9db334530b0a3eaaf0e9f78c9ffb588245827126
         | 
    
        data/README.md
    CHANGED
    
    | @@ -4,4 +4,4 @@ It implements interface fairly closely following javascript API, except with blo | |
| 4 4 |  | 
| 5 5 | 
             
            About 60% of D3 APIs are implemented. Pull requests for the rest welcome.
         | 
| 6 6 |  | 
| 7 | 
            -
            For some examples check `demo` directory.
         | 
| 7 | 
            +
            For some examples check `demo` directory or [visit demo site](https://taw.github.io/opal-d3/).
         | 
    
        data/d3.js
    CHANGED
    
    | @@ -1,11 +1,11 @@ | |
| 1 | 
            -
            // https://d3js.org Version 4. | 
| 1 | 
            +
            // https://d3js.org Version 4.10.0. Copyright 2017 Mike Bostock.
         | 
| 2 2 | 
             
            (function (global, factory) {
         | 
| 3 3 | 
             
            	typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
         | 
| 4 4 | 
             
            	typeof define === 'function' && define.amd ? define(['exports'], factory) :
         | 
| 5 5 | 
             
            	(factory((global.d3 = global.d3 || {})));
         | 
| 6 6 | 
             
            }(this, (function (exports) { 'use strict';
         | 
| 7 7 |  | 
| 8 | 
            -
            var version = "4. | 
| 8 | 
            +
            var version = "4.10.0";
         | 
| 9 9 |  | 
| 10 10 | 
             
            var ascending = function(a, b) {
         | 
| 11 11 | 
             
              return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
         | 
| @@ -47,6 +47,37 @@ var ascendingBisect = bisector(ascending); | |
| 47 47 | 
             
            var bisectRight = ascendingBisect.right;
         | 
| 48 48 | 
             
            var bisectLeft = ascendingBisect.left;
         | 
| 49 49 |  | 
| 50 | 
            +
            var pairs = function(array, f) {
         | 
| 51 | 
            +
              if (f == null) f = pair;
         | 
| 52 | 
            +
              var i = 0, n = array.length - 1, p = array[0], pairs = new Array(n < 0 ? 0 : n);
         | 
| 53 | 
            +
              while (i < n) pairs[i] = f(p, p = array[++i]);
         | 
| 54 | 
            +
              return pairs;
         | 
| 55 | 
            +
            };
         | 
| 56 | 
            +
             | 
| 57 | 
            +
            function pair(a, b) {
         | 
| 58 | 
            +
              return [a, b];
         | 
| 59 | 
            +
            }
         | 
| 60 | 
            +
             | 
| 61 | 
            +
            var cross = function(values0, values1, reduce) {
         | 
| 62 | 
            +
              var n0 = values0.length,
         | 
| 63 | 
            +
                  n1 = values1.length,
         | 
| 64 | 
            +
                  values = new Array(n0 * n1),
         | 
| 65 | 
            +
                  i0,
         | 
| 66 | 
            +
                  i1,
         | 
| 67 | 
            +
                  i,
         | 
| 68 | 
            +
                  value0;
         | 
| 69 | 
            +
             | 
| 70 | 
            +
              if (reduce == null) reduce = pair;
         | 
| 71 | 
            +
             | 
| 72 | 
            +
              for (i0 = i = 0; i0 < n0; ++i0) {
         | 
| 73 | 
            +
                for (value0 = values0[i0], i1 = 0; i1 < n1; ++i1, ++i) {
         | 
| 74 | 
            +
                  values[i] = reduce(value0, values1[i1]);
         | 
| 75 | 
            +
                }
         | 
| 76 | 
            +
              }
         | 
| 77 | 
            +
             | 
| 78 | 
            +
              return values;
         | 
| 79 | 
            +
            };
         | 
| 80 | 
            +
             | 
| 50 81 | 
             
            var descending = function(a, b) {
         | 
| 51 82 | 
             
              return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;
         | 
| 52 83 | 
             
            };
         | 
| @@ -55,36 +86,36 @@ var number = function(x) { | |
| 55 86 | 
             
              return x === null ? NaN : +x;
         | 
| 56 87 | 
             
            };
         | 
| 57 88 |  | 
| 58 | 
            -
            var variance = function( | 
| 59 | 
            -
              var n =  | 
| 89 | 
            +
            var variance = function(values, valueof) {
         | 
| 90 | 
            +
              var n = values.length,
         | 
| 60 91 | 
             
                  m = 0,
         | 
| 61 | 
            -
                  a,
         | 
| 62 | 
            -
                  d,
         | 
| 63 | 
            -
                  s = 0,
         | 
| 64 92 | 
             
                  i = -1,
         | 
| 65 | 
            -
                   | 
| 93 | 
            +
                  mean = 0,
         | 
| 94 | 
            +
                  value,
         | 
| 95 | 
            +
                  delta,
         | 
| 96 | 
            +
                  sum = 0;
         | 
| 66 97 |  | 
| 67 | 
            -
              if ( | 
| 98 | 
            +
              if (valueof == null) {
         | 
| 68 99 | 
             
                while (++i < n) {
         | 
| 69 | 
            -
                  if (!isNaN( | 
| 70 | 
            -
                     | 
| 71 | 
            -
                     | 
| 72 | 
            -
                     | 
| 100 | 
            +
                  if (!isNaN(value = number(values[i]))) {
         | 
| 101 | 
            +
                    delta = value - mean;
         | 
| 102 | 
            +
                    mean += delta / ++m;
         | 
| 103 | 
            +
                    sum += delta * (value - mean);
         | 
| 73 104 | 
             
                  }
         | 
| 74 105 | 
             
                }
         | 
| 75 106 | 
             
              }
         | 
| 76 107 |  | 
| 77 108 | 
             
              else {
         | 
| 78 109 | 
             
                while (++i < n) {
         | 
| 79 | 
            -
                  if (!isNaN( | 
| 80 | 
            -
                     | 
| 81 | 
            -
                     | 
| 82 | 
            -
                     | 
| 110 | 
            +
                  if (!isNaN(value = number(valueof(values[i], i, values)))) {
         | 
| 111 | 
            +
                    delta = value - mean;
         | 
| 112 | 
            +
                    mean += delta / ++m;
         | 
| 113 | 
            +
                    sum += delta * (value - mean);
         | 
| 83 114 | 
             
                  }
         | 
| 84 115 | 
             
                }
         | 
| 85 116 | 
             
              }
         | 
| 86 117 |  | 
| 87 | 
            -
              if ( | 
| 118 | 
            +
              if (m > 1) return sum / (m - 1);
         | 
| 88 119 | 
             
            };
         | 
| 89 120 |  | 
| 90 121 | 
             
            var deviation = function(array, f) {
         | 
| @@ -92,30 +123,42 @@ var deviation = function(array, f) { | |
| 92 123 | 
             
              return v ? Math.sqrt(v) : v;
         | 
| 93 124 | 
             
            };
         | 
| 94 125 |  | 
| 95 | 
            -
            var extent = function( | 
| 96 | 
            -
              var  | 
| 97 | 
            -
                   | 
| 98 | 
            -
                   | 
| 99 | 
            -
                   | 
| 100 | 
            -
                   | 
| 101 | 
            -
             | 
| 102 | 
            -
              if ( | 
| 103 | 
            -
                while (++i < n)  | 
| 104 | 
            -
             | 
| 105 | 
            -
             | 
| 106 | 
            -
             | 
| 126 | 
            +
            var extent = function(values, valueof) {
         | 
| 127 | 
            +
              var n = values.length,
         | 
| 128 | 
            +
                  i = -1,
         | 
| 129 | 
            +
                  value,
         | 
| 130 | 
            +
                  min,
         | 
| 131 | 
            +
                  max;
         | 
| 132 | 
            +
             | 
| 133 | 
            +
              if (valueof == null) {
         | 
| 134 | 
            +
                while (++i < n) { // Find the first comparable value.
         | 
| 135 | 
            +
                  if ((value = values[i]) != null && value >= value) {
         | 
| 136 | 
            +
                    min = max = value;
         | 
| 137 | 
            +
                    while (++i < n) { // Compare the remaining values.
         | 
| 138 | 
            +
                      if ((value = values[i]) != null) {
         | 
| 139 | 
            +
                        if (min > value) min = value;
         | 
| 140 | 
            +
                        if (max < value) max = value;
         | 
| 141 | 
            +
                      }
         | 
| 142 | 
            +
                    }
         | 
| 143 | 
            +
                  }
         | 
| 107 144 | 
             
                }
         | 
| 108 145 | 
             
              }
         | 
| 109 146 |  | 
| 110 147 | 
             
              else {
         | 
| 111 | 
            -
                while (++i < n)  | 
| 112 | 
            -
             | 
| 113 | 
            -
             | 
| 114 | 
            -
             | 
| 148 | 
            +
                while (++i < n) { // Find the first comparable value.
         | 
| 149 | 
            +
                  if ((value = valueof(values[i], i, values)) != null && value >= value) {
         | 
| 150 | 
            +
                    min = max = value;
         | 
| 151 | 
            +
                    while (++i < n) { // Compare the remaining values.
         | 
| 152 | 
            +
                      if ((value = valueof(values[i], i, values)) != null) {
         | 
| 153 | 
            +
                        if (min > value) min = value;
         | 
| 154 | 
            +
                        if (max < value) max = value;
         | 
| 155 | 
            +
                      }
         | 
| 156 | 
            +
                    }
         | 
| 157 | 
            +
                  }
         | 
| 115 158 | 
             
                }
         | 
| 116 159 | 
             
              }
         | 
| 117 160 |  | 
| 118 | 
            -
              return [ | 
| 161 | 
            +
              return [min, max];
         | 
| 119 162 | 
             
            };
         | 
| 120 163 |  | 
| 121 164 | 
             
            var array = Array.prototype;
         | 
| @@ -152,14 +195,42 @@ var e5 = Math.sqrt(10); | |
| 152 195 | 
             
            var e2 = Math.sqrt(2);
         | 
| 153 196 |  | 
| 154 197 | 
             
            var ticks = function(start, stop, count) {
         | 
| 155 | 
            -
              var  | 
| 156 | 
            -
             | 
| 157 | 
            -
             | 
| 158 | 
            -
             | 
| 159 | 
            -
             | 
| 160 | 
            -
             | 
| 198 | 
            +
              var reverse = stop < start,
         | 
| 199 | 
            +
                  i = -1,
         | 
| 200 | 
            +
                  n,
         | 
| 201 | 
            +
                  ticks,
         | 
| 202 | 
            +
                  step;
         | 
| 203 | 
            +
             | 
| 204 | 
            +
              if (reverse) n = start, start = stop, stop = n;
         | 
| 205 | 
            +
             | 
| 206 | 
            +
              if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];
         | 
| 207 | 
            +
             | 
| 208 | 
            +
              if (step > 0) {
         | 
| 209 | 
            +
                start = Math.ceil(start / step);
         | 
| 210 | 
            +
                stop = Math.floor(stop / step);
         | 
| 211 | 
            +
                ticks = new Array(n = Math.ceil(stop - start + 1));
         | 
| 212 | 
            +
                while (++i < n) ticks[i] = (start + i) * step;
         | 
| 213 | 
            +
              } else {
         | 
| 214 | 
            +
                start = Math.floor(start * step);
         | 
| 215 | 
            +
                stop = Math.ceil(stop * step);
         | 
| 216 | 
            +
                ticks = new Array(n = Math.ceil(start - stop + 1));
         | 
| 217 | 
            +
                while (++i < n) ticks[i] = (start - i) / step;
         | 
| 218 | 
            +
              }
         | 
| 219 | 
            +
             | 
| 220 | 
            +
              if (reverse) ticks.reverse();
         | 
| 221 | 
            +
             | 
| 222 | 
            +
              return ticks;
         | 
| 161 223 | 
             
            };
         | 
| 162 224 |  | 
| 225 | 
            +
            function tickIncrement(start, stop, count) {
         | 
| 226 | 
            +
              var step = (stop - start) / Math.max(0, count),
         | 
| 227 | 
            +
                  power = Math.floor(Math.log(step) / Math.LN10),
         | 
| 228 | 
            +
                  error = step / Math.pow(10, power);
         | 
| 229 | 
            +
              return power >= 0
         | 
| 230 | 
            +
                  ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)
         | 
| 231 | 
            +
                  : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);
         | 
| 232 | 
            +
            }
         | 
| 233 | 
            +
             | 
| 163 234 | 
             
            function tickStep(start, stop, count) {
         | 
| 164 235 | 
             
              var step0 = Math.abs(stop - start) / Math.max(0, count),
         | 
| 165 236 | 
             
                  step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),
         | 
| @@ -195,12 +266,15 @@ var histogram = function() { | |
| 195 266 | 
             
                    tz = threshold(values, x0, x1);
         | 
| 196 267 |  | 
| 197 268 | 
             
                // Convert number of thresholds into uniform thresholds.
         | 
| 198 | 
            -
                if (!Array.isArray(tz))  | 
| 269 | 
            +
                if (!Array.isArray(tz)) {
         | 
| 270 | 
            +
                  tz = tickStep(x0, x1, tz);
         | 
| 271 | 
            +
                  tz = sequence(Math.ceil(x0 / tz) * tz, Math.floor(x1 / tz) * tz, tz); // exclusive
         | 
| 272 | 
            +
                }
         | 
| 199 273 |  | 
| 200 274 | 
             
                // Remove any thresholds outside the domain.
         | 
| 201 275 | 
             
                var m = tz.length;
         | 
| 202 276 | 
             
                while (tz[0] <= x0) tz.shift(), --m;
         | 
| 203 | 
            -
                while (tz[m - 1]  | 
| 277 | 
            +
                while (tz[m - 1] > x1) tz.pop(), --m;
         | 
| 204 278 |  | 
| 205 279 | 
             
                var bins = new Array(m + 1),
         | 
| 206 280 | 
             
                    bin;
         | 
| @@ -238,17 +312,17 @@ var histogram = function() { | |
| 238 312 | 
             
              return histogram;
         | 
| 239 313 | 
             
            };
         | 
| 240 314 |  | 
| 241 | 
            -
            var threshold = function( | 
| 242 | 
            -
              if ( | 
| 243 | 
            -
              if (!(n =  | 
| 244 | 
            -
              if ((p = +p) <= 0 || n < 2) return + | 
| 245 | 
            -
              if (p >= 1) return + | 
| 315 | 
            +
            var threshold = function(values, p, valueof) {
         | 
| 316 | 
            +
              if (valueof == null) valueof = number;
         | 
| 317 | 
            +
              if (!(n = values.length)) return;
         | 
| 318 | 
            +
              if ((p = +p) <= 0 || n < 2) return +valueof(values[0], 0, values);
         | 
| 319 | 
            +
              if (p >= 1) return +valueof(values[n - 1], n - 1, values);
         | 
| 246 320 | 
             
              var n,
         | 
| 247 | 
            -
                   | 
| 248 | 
            -
                   | 
| 249 | 
            -
                   | 
| 250 | 
            -
                   | 
| 251 | 
            -
              return  | 
| 321 | 
            +
                  i = (n - 1) * p,
         | 
| 322 | 
            +
                  i0 = Math.floor(i),
         | 
| 323 | 
            +
                  value0 = +valueof(values[i0], i0, values),
         | 
| 324 | 
            +
                  value1 = +valueof(values[i0 + 1], i0 + 1, values);
         | 
| 325 | 
            +
              return value0 + (value1 - value0) * (i - i0);
         | 
| 252 326 | 
             
            };
         | 
| 253 327 |  | 
| 254 328 | 
             
            var freedmanDiaconis = function(values, min, max) {
         | 
| @@ -260,55 +334,85 @@ var scott = function(values, min, max) { | |
| 260 334 | 
             
              return Math.ceil((max - min) / (3.5 * deviation(values) * Math.pow(values.length, -1 / 3)));
         | 
| 261 335 | 
             
            };
         | 
| 262 336 |  | 
| 263 | 
            -
            var max = function( | 
| 264 | 
            -
              var  | 
| 265 | 
            -
                   | 
| 266 | 
            -
                   | 
| 267 | 
            -
                   | 
| 268 | 
            -
             | 
| 269 | 
            -
              if ( | 
| 270 | 
            -
                while (++i < n)  | 
| 271 | 
            -
             | 
| 337 | 
            +
            var max = function(values, valueof) {
         | 
| 338 | 
            +
              var n = values.length,
         | 
| 339 | 
            +
                  i = -1,
         | 
| 340 | 
            +
                  value,
         | 
| 341 | 
            +
                  max;
         | 
| 342 | 
            +
             | 
| 343 | 
            +
              if (valueof == null) {
         | 
| 344 | 
            +
                while (++i < n) { // Find the first comparable value.
         | 
| 345 | 
            +
                  if ((value = values[i]) != null && value >= value) {
         | 
| 346 | 
            +
                    max = value;
         | 
| 347 | 
            +
                    while (++i < n) { // Compare the remaining values.
         | 
| 348 | 
            +
                      if ((value = values[i]) != null && value > max) {
         | 
| 349 | 
            +
                        max = value;
         | 
| 350 | 
            +
                      }
         | 
| 351 | 
            +
                    }
         | 
| 352 | 
            +
                  }
         | 
| 353 | 
            +
                }
         | 
| 272 354 | 
             
              }
         | 
| 273 355 |  | 
| 274 356 | 
             
              else {
         | 
| 275 | 
            -
                while (++i < n)  | 
| 276 | 
            -
             | 
| 357 | 
            +
                while (++i < n) { // Find the first comparable value.
         | 
| 358 | 
            +
                  if ((value = valueof(values[i], i, values)) != null && value >= value) {
         | 
| 359 | 
            +
                    max = value;
         | 
| 360 | 
            +
                    while (++i < n) { // Compare the remaining values.
         | 
| 361 | 
            +
                      if ((value = valueof(values[i], i, values)) != null && value > max) {
         | 
| 362 | 
            +
                        max = value;
         | 
| 363 | 
            +
                      }
         | 
| 364 | 
            +
                    }
         | 
| 365 | 
            +
                  }
         | 
| 366 | 
            +
                }
         | 
| 277 367 | 
             
              }
         | 
| 278 368 |  | 
| 279 | 
            -
              return  | 
| 369 | 
            +
              return max;
         | 
| 280 370 | 
             
            };
         | 
| 281 371 |  | 
| 282 | 
            -
            var mean = function( | 
| 283 | 
            -
              var  | 
| 284 | 
            -
                   | 
| 285 | 
            -
                  a,
         | 
| 372 | 
            +
            var mean = function(values, valueof) {
         | 
| 373 | 
            +
              var n = values.length,
         | 
| 374 | 
            +
                  m = n,
         | 
| 286 375 | 
             
                  i = -1,
         | 
| 287 | 
            -
                   | 
| 376 | 
            +
                  value,
         | 
| 377 | 
            +
                  sum = 0;
         | 
| 288 378 |  | 
| 289 | 
            -
              if ( | 
| 290 | 
            -
                while (++i < n)  | 
| 379 | 
            +
              if (valueof == null) {
         | 
| 380 | 
            +
                while (++i < n) {
         | 
| 381 | 
            +
                  if (!isNaN(value = number(values[i]))) sum += value;
         | 
| 382 | 
            +
                  else --m;
         | 
| 383 | 
            +
                }
         | 
| 291 384 | 
             
              }
         | 
| 292 385 |  | 
| 293 386 | 
             
              else {
         | 
| 294 | 
            -
                while (++i < n)  | 
| 387 | 
            +
                while (++i < n) {
         | 
| 388 | 
            +
                  if (!isNaN(value = number(valueof(values[i], i, values)))) sum += value;
         | 
| 389 | 
            +
                  else --m;
         | 
| 390 | 
            +
                }
         | 
| 295 391 | 
             
              }
         | 
| 296 392 |  | 
| 297 | 
            -
              if ( | 
| 393 | 
            +
              if (m) return sum / m;
         | 
| 298 394 | 
             
            };
         | 
| 299 395 |  | 
| 300 | 
            -
            var median = function( | 
| 301 | 
            -
              var  | 
| 302 | 
            -
                   | 
| 303 | 
            -
                   | 
| 304 | 
            -
                   | 
| 396 | 
            +
            var median = function(values, valueof) {
         | 
| 397 | 
            +
              var n = values.length,
         | 
| 398 | 
            +
                  i = -1,
         | 
| 399 | 
            +
                  value,
         | 
| 400 | 
            +
                  numbers = [];
         | 
| 305 401 |  | 
| 306 | 
            -
              if ( | 
| 307 | 
            -
                while (++i < n)  | 
| 402 | 
            +
              if (valueof == null) {
         | 
| 403 | 
            +
                while (++i < n) {
         | 
| 404 | 
            +
                  if (!isNaN(value = number(values[i]))) {
         | 
| 405 | 
            +
                    numbers.push(value);
         | 
| 406 | 
            +
                  }
         | 
| 407 | 
            +
                }
         | 
| 308 408 | 
             
              }
         | 
| 309 409 |  | 
| 310 410 | 
             
              else {
         | 
| 311 | 
            -
                while (++i < n)  | 
| 411 | 
            +
                while (++i < n) {
         | 
| 412 | 
            +
                  if (!isNaN(value = number(valueof(values[i], i, values)))) {
         | 
| 413 | 
            +
                    numbers.push(value);
         | 
| 414 | 
            +
                  }
         | 
| 415 | 
            +
                }
         | 
| 312 416 | 
             
              }
         | 
| 313 417 |  | 
| 314 418 | 
             
              return threshold(numbers.sort(ascending), 0.5);
         | 
| @@ -336,29 +440,39 @@ var merge = function(arrays) { | |
| 336 440 | 
             
              return merged;
         | 
| 337 441 | 
             
            };
         | 
| 338 442 |  | 
| 339 | 
            -
            var min = function( | 
| 340 | 
            -
              var  | 
| 341 | 
            -
                   | 
| 342 | 
            -
                   | 
| 343 | 
            -
                   | 
| 344 | 
            -
             | 
| 345 | 
            -
              if ( | 
| 346 | 
            -
                while (++i < n)  | 
| 347 | 
            -
             | 
| 443 | 
            +
            var min = function(values, valueof) {
         | 
| 444 | 
            +
              var n = values.length,
         | 
| 445 | 
            +
                  i = -1,
         | 
| 446 | 
            +
                  value,
         | 
| 447 | 
            +
                  min;
         | 
| 448 | 
            +
             | 
| 449 | 
            +
              if (valueof == null) {
         | 
| 450 | 
            +
                while (++i < n) { // Find the first comparable value.
         | 
| 451 | 
            +
                  if ((value = values[i]) != null && value >= value) {
         | 
| 452 | 
            +
                    min = value;
         | 
| 453 | 
            +
                    while (++i < n) { // Compare the remaining values.
         | 
| 454 | 
            +
                      if ((value = values[i]) != null && min > value) {
         | 
| 455 | 
            +
                        min = value;
         | 
| 456 | 
            +
                      }
         | 
| 457 | 
            +
                    }
         | 
| 458 | 
            +
                  }
         | 
| 459 | 
            +
                }
         | 
| 348 460 | 
             
              }
         | 
| 349 461 |  | 
| 350 462 | 
             
              else {
         | 
| 351 | 
            -
                while (++i < n)  | 
| 352 | 
            -
             | 
| 463 | 
            +
                while (++i < n) { // Find the first comparable value.
         | 
| 464 | 
            +
                  if ((value = valueof(values[i], i, values)) != null && value >= value) {
         | 
| 465 | 
            +
                    min = value;
         | 
| 466 | 
            +
                    while (++i < n) { // Compare the remaining values.
         | 
| 467 | 
            +
                      if ((value = valueof(values[i], i, values)) != null && min > value) {
         | 
| 468 | 
            +
                        min = value;
         | 
| 469 | 
            +
                      }
         | 
| 470 | 
            +
                    }
         | 
| 471 | 
            +
                  }
         | 
| 472 | 
            +
                }
         | 
| 353 473 | 
             
              }
         | 
| 354 474 |  | 
| 355 | 
            -
              return  | 
| 356 | 
            -
            };
         | 
| 357 | 
            -
             | 
| 358 | 
            -
            var pairs = function(array) {
         | 
| 359 | 
            -
              var i = 0, n = array.length - 1, p = array[0], pairs = new Array(n < 0 ? 0 : n);
         | 
| 360 | 
            -
              while (i < n) pairs[i] = [p, p = array[++i]];
         | 
| 361 | 
            -
              return pairs;
         | 
| 475 | 
            +
              return min;
         | 
| 362 476 | 
             
            };
         | 
| 363 477 |  | 
| 364 478 | 
             
            var permute = function(array, indexes) {
         | 
| @@ -367,17 +481,21 @@ var permute = function(array, indexes) { | |
| 367 481 | 
             
              return permutes;
         | 
| 368 482 | 
             
            };
         | 
| 369 483 |  | 
| 370 | 
            -
            var scan = function( | 
| 371 | 
            -
              if (!(n =  | 
| 372 | 
            -
              var  | 
| 373 | 
            -
                   | 
| 484 | 
            +
            var scan = function(values, compare) {
         | 
| 485 | 
            +
              if (!(n = values.length)) return;
         | 
| 486 | 
            +
              var n,
         | 
| 487 | 
            +
                  i = 0,
         | 
| 374 488 | 
             
                  j = 0,
         | 
| 375 489 | 
             
                  xi,
         | 
| 376 | 
            -
                  xj =  | 
| 490 | 
            +
                  xj = values[j];
         | 
| 377 491 |  | 
| 378 | 
            -
              if ( | 
| 492 | 
            +
              if (compare == null) compare = ascending;
         | 
| 379 493 |  | 
| 380 | 
            -
              while (++i < n)  | 
| 494 | 
            +
              while (++i < n) {
         | 
| 495 | 
            +
                if (compare(xi = values[i], xj) < 0 || compare(xj, xj) !== 0) {
         | 
| 496 | 
            +
                  xj = xi, j = i;
         | 
| 497 | 
            +
                }
         | 
| 498 | 
            +
              }
         | 
| 381 499 |  | 
| 382 500 | 
             
              if (compare(xj, xj) === 0) return j;
         | 
| 383 501 | 
             
            };
         | 
| @@ -397,21 +515,25 @@ var shuffle = function(array, i0, i1) { | |
| 397 515 | 
             
              return array;
         | 
| 398 516 | 
             
            };
         | 
| 399 517 |  | 
| 400 | 
            -
            var sum = function( | 
| 401 | 
            -
              var  | 
| 402 | 
            -
                   | 
| 403 | 
            -
                   | 
| 404 | 
            -
                   | 
| 518 | 
            +
            var sum = function(values, valueof) {
         | 
| 519 | 
            +
              var n = values.length,
         | 
| 520 | 
            +
                  i = -1,
         | 
| 521 | 
            +
                  value,
         | 
| 522 | 
            +
                  sum = 0;
         | 
| 405 523 |  | 
| 406 | 
            -
              if ( | 
| 407 | 
            -
                while (++i < n)  | 
| 524 | 
            +
              if (valueof == null) {
         | 
| 525 | 
            +
                while (++i < n) {
         | 
| 526 | 
            +
                  if (value = +values[i]) sum += value; // Note: zero and null are equivalent.
         | 
| 527 | 
            +
                }
         | 
| 408 528 | 
             
              }
         | 
| 409 529 |  | 
| 410 530 | 
             
              else {
         | 
| 411 | 
            -
                while (++i < n)  | 
| 531 | 
            +
                while (++i < n) {
         | 
| 532 | 
            +
                  if (value = +valueof(values[i], i, values)) sum += value;
         | 
| 533 | 
            +
                }
         | 
| 412 534 | 
             
              }
         | 
| 413 535 |  | 
| 414 | 
            -
              return  | 
| 536 | 
            +
              return sum;
         | 
| 415 537 | 
             
            };
         | 
| 416 538 |  | 
| 417 539 | 
             
            var transpose = function(matrix) {
         | 
| @@ -444,21 +566,25 @@ var bottom = 3; | |
| 444 566 | 
             
            var left = 4;
         | 
| 445 567 | 
             
            var epsilon = 1e-6;
         | 
| 446 568 |  | 
| 447 | 
            -
            function translateX( | 
| 448 | 
            -
               | 
| 449 | 
            -
             | 
| 569 | 
            +
            function translateX(x) {
         | 
| 570 | 
            +
              return "translate(" + (x + 0.5) + ",0)";
         | 
| 571 | 
            +
            }
         | 
| 572 | 
            +
             | 
| 573 | 
            +
            function translateY(y) {
         | 
| 574 | 
            +
              return "translate(0," + (y + 0.5) + ")";
         | 
| 450 575 | 
             
            }
         | 
| 451 576 |  | 
| 452 | 
            -
            function  | 
| 453 | 
            -
               | 
| 454 | 
            -
             | 
| 577 | 
            +
            function number$1(scale) {
         | 
| 578 | 
            +
              return function(d) {
         | 
| 579 | 
            +
                return +scale(d);
         | 
| 580 | 
            +
              };
         | 
| 455 581 | 
             
            }
         | 
| 456 582 |  | 
| 457 583 | 
             
            function center(scale) {
         | 
| 458 | 
            -
              var offset = scale.bandwidth() / 2;
         | 
| 584 | 
            +
              var offset = Math.max(0, scale.bandwidth() - 1) / 2; // Adjust for 0.5px offset.
         | 
| 459 585 | 
             
              if (scale.round()) offset = Math.round(offset);
         | 
| 460 586 | 
             
              return function(d) {
         | 
| 461 | 
            -
                return scale(d) + offset;
         | 
| 587 | 
            +
                return +scale(d) + offset;
         | 
| 462 588 | 
             
              };
         | 
| 463 589 | 
             
            }
         | 
| 464 590 |  | 
| @@ -472,26 +598,26 @@ function axis(orient, scale) { | |
| 472 598 | 
             
                  tickFormat = null,
         | 
| 473 599 | 
             
                  tickSizeInner = 6,
         | 
| 474 600 | 
             
                  tickSizeOuter = 6,
         | 
| 475 | 
            -
                  tickPadding = 3 | 
| 601 | 
            +
                  tickPadding = 3,
         | 
| 602 | 
            +
                  k = orient === top || orient === left ? -1 : 1,
         | 
| 603 | 
            +
                  x = orient === left || orient === right ? "x" : "y",
         | 
| 604 | 
            +
                  transform = orient === top || orient === bottom ? translateX : translateY;
         | 
| 476 605 |  | 
| 477 606 | 
             
              function axis(context) {
         | 
| 478 607 | 
             
                var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues,
         | 
| 479 608 | 
             
                    format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity$1) : tickFormat,
         | 
| 480 609 | 
             
                    spacing = Math.max(tickSizeInner, 0) + tickPadding,
         | 
| 481 | 
            -
                    transform = orient === top || orient === bottom ? translateX : translateY,
         | 
| 482 610 | 
             
                    range = scale.range(),
         | 
| 483 | 
            -
                    range0 = range[0] + 0.5,
         | 
| 484 | 
            -
                    range1 = range[range.length - 1] + 0.5,
         | 
| 485 | 
            -
                    position = (scale.bandwidth ? center :  | 
| 611 | 
            +
                    range0 = +range[0] + 0.5,
         | 
| 612 | 
            +
                    range1 = +range[range.length - 1] + 0.5,
         | 
| 613 | 
            +
                    position = (scale.bandwidth ? center : number$1)(scale.copy()),
         | 
| 486 614 | 
             
                    selection = context.selection ? context.selection() : context,
         | 
| 487 615 | 
             
                    path = selection.selectAll(".domain").data([null]),
         | 
| 488 616 | 
             
                    tick = selection.selectAll(".tick").data(values, scale).order(),
         | 
| 489 617 | 
             
                    tickExit = tick.exit(),
         | 
| 490 618 | 
             
                    tickEnter = tick.enter().append("g").attr("class", "tick"),
         | 
| 491 619 | 
             
                    line = tick.select("line"),
         | 
| 492 | 
            -
                    text = tick.select("text") | 
| 493 | 
            -
                    k = orient === top || orient === left ? -1 : 1,
         | 
| 494 | 
            -
                    x, y = orient === left || orient === right ? (x = "x", "y") : (x = "y", "x");
         | 
| 620 | 
            +
                    text = tick.select("text");
         | 
| 495 621 |  | 
| 496 622 | 
             
                path = path.merge(path.enter().insert("path", ".tick")
         | 
| 497 623 | 
             
                    .attr("class", "domain")
         | 
| @@ -501,14 +627,11 @@ function axis(orient, scale) { | |
| 501 627 |  | 
| 502 628 | 
             
                line = line.merge(tickEnter.append("line")
         | 
| 503 629 | 
             
                    .attr("stroke", "#000")
         | 
| 504 | 
            -
                    .attr(x + "2", k * tickSizeInner)
         | 
| 505 | 
            -
                    .attr(y + "1", 0.5)
         | 
| 506 | 
            -
                    .attr(y + "2", 0.5));
         | 
| 630 | 
            +
                    .attr(x + "2", k * tickSizeInner));
         | 
| 507 631 |  | 
| 508 632 | 
             
                text = text.merge(tickEnter.append("text")
         | 
| 509 633 | 
             
                    .attr("fill", "#000")
         | 
| 510 634 | 
             
                    .attr(x, k * spacing)
         | 
| 511 | 
            -
                    .attr(y, 0.5)
         | 
| 512 635 | 
             
                    .attr("dy", orient === top ? "0em" : orient === bottom ? "0.71em" : "0.32em"));
         | 
| 513 636 |  | 
| 514 637 | 
             
                if (context !== selection) {
         | 
| @@ -519,11 +642,11 @@ function axis(orient, scale) { | |
| 519 642 |  | 
| 520 643 | 
             
                  tickExit = tickExit.transition(context)
         | 
| 521 644 | 
             
                      .attr("opacity", epsilon)
         | 
| 522 | 
            -
                      .attr("transform", function(d) { return  | 
| 645 | 
            +
                      .attr("transform", function(d) { return isFinite(d = position(d)) ? transform(d) : this.getAttribute("transform"); });
         | 
| 523 646 |  | 
| 524 647 | 
             
                  tickEnter
         | 
| 525 648 | 
             
                      .attr("opacity", epsilon)
         | 
| 526 | 
            -
                      .attr("transform", function(d) {  | 
| 649 | 
            +
                      .attr("transform", function(d) { var p = this.parentNode.__axis; return transform(p && isFinite(p = p(d)) ? p : position(d)); });
         | 
| 527 650 | 
             
                }
         | 
| 528 651 |  | 
| 529 652 | 
             
                tickExit.remove();
         | 
| @@ -535,7 +658,7 @@ function axis(orient, scale) { | |
| 535 658 |  | 
| 536 659 | 
             
                tick
         | 
| 537 660 | 
             
                    .attr("opacity", 1)
         | 
| 538 | 
            -
                    .attr("transform", function(d) { return transform(position | 
| 661 | 
            +
                    .attr("transform", function(d) { return transform(position(d)); });
         | 
| 539 662 |  | 
| 540 663 | 
             
                line
         | 
| 541 664 | 
             
                    .attr(x + "2", k * tickSizeInner);
         | 
| @@ -1127,9 +1250,9 @@ var selection_exit = function() { | |
| 1127 1250 | 
             
              return new Selection(this._exit || this._groups.map(sparse), this._parents);
         | 
| 1128 1251 | 
             
            };
         | 
| 1129 1252 |  | 
| 1130 | 
            -
            var selection_merge = function(selection) {
         | 
| 1253 | 
            +
            var selection_merge = function(selection$$1) {
         | 
| 1131 1254 |  | 
| 1132 | 
            -
              for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {
         | 
| 1255 | 
            +
              for (var groups0 = this._groups, groups1 = selection$$1._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {
         | 
| 1133 1256 | 
             
                for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {
         | 
| 1134 1257 | 
             
                  if (node = group0[i] || group1[i]) {
         | 
| 1135 1258 | 
             
                    merge[i] = node;
         | 
| @@ -1283,7 +1406,7 @@ var selection_attr = function(name, value) { | |
| 1283 1406 | 
             
                  : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));
         | 
| 1284 1407 | 
             
            };
         | 
| 1285 1408 |  | 
| 1286 | 
            -
            var  | 
| 1409 | 
            +
            var defaultView = function(node) {
         | 
| 1287 1410 | 
             
              return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node
         | 
| 1288 1411 | 
             
                  || (node.document && node) // node is a Window
         | 
| 1289 1412 | 
             
                  || node.defaultView; // node is a Document
         | 
| @@ -1310,17 +1433,19 @@ function styleFunction(name, value, priority) { | |
| 1310 1433 | 
             
            }
         | 
| 1311 1434 |  | 
| 1312 1435 | 
             
            var selection_style = function(name, value, priority) {
         | 
| 1313 | 
            -
              var node;
         | 
| 1314 1436 | 
             
              return arguments.length > 1
         | 
| 1315 1437 | 
             
                  ? this.each((value == null
         | 
| 1316 1438 | 
             
                        ? styleRemove : typeof value === "function"
         | 
| 1317 1439 | 
             
                        ? styleFunction
         | 
| 1318 1440 | 
             
                        : styleConstant)(name, value, priority == null ? "" : priority))
         | 
| 1319 | 
            -
                  :  | 
| 1320 | 
            -
                      .getComputedStyle(node, null)
         | 
| 1321 | 
            -
                      .getPropertyValue(name);
         | 
| 1441 | 
            +
                  : styleValue(this.node(), name);
         | 
| 1322 1442 | 
             
            };
         | 
| 1323 1443 |  | 
| 1444 | 
            +
            function styleValue(node, name) {
         | 
| 1445 | 
            +
              return node.style.getPropertyValue(name)
         | 
| 1446 | 
            +
                  || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);
         | 
| 1447 | 
            +
            }
         | 
| 1448 | 
            +
             | 
| 1324 1449 | 
             
            function propertyRemove(name) {
         | 
| 1325 1450 | 
             
              return function() {
         | 
| 1326 1451 | 
             
                delete this[name];
         | 
| @@ -1529,13 +1654,13 @@ var selection_datum = function(value) { | |
| 1529 1654 | 
             
            };
         | 
| 1530 1655 |  | 
| 1531 1656 | 
             
            function dispatchEvent(node, type, params) {
         | 
| 1532 | 
            -
              var window | 
| 1533 | 
            -
                  event = window | 
| 1657 | 
            +
              var window = defaultView(node),
         | 
| 1658 | 
            +
                  event = window.CustomEvent;
         | 
| 1534 1659 |  | 
| 1535 | 
            -
              if (event) {
         | 
| 1660 | 
            +
              if (typeof event === "function") {
         | 
| 1536 1661 | 
             
                event = new event(type, params);
         | 
| 1537 1662 | 
             
              } else {
         | 
| 1538 | 
            -
                event = window | 
| 1663 | 
            +
                event = window.document.createEvent("Event");
         | 
| 1539 1664 | 
             
                if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;
         | 
| 1540 1665 | 
             
                else event.initEvent(type, false, false);
         | 
| 1541 1666 | 
             
              }
         | 
| @@ -1711,6 +1836,10 @@ function defaultSubject(d) { | |
| 1711 1836 | 
             
              return d == null ? {x: exports.event.x, y: exports.event.y} : d;
         | 
| 1712 1837 | 
             
            }
         | 
| 1713 1838 |  | 
| 1839 | 
            +
            function touchable() {
         | 
| 1840 | 
            +
              return "ontouchstart" in this;
         | 
| 1841 | 
            +
            }
         | 
| 1842 | 
            +
             | 
| 1714 1843 | 
             
            var drag = function() {
         | 
| 1715 1844 | 
             
              var filter = defaultFilter$1,
         | 
| 1716 1845 | 
             
                  container = defaultContainer,
         | 
| @@ -1718,15 +1847,20 @@ var drag = function() { | |
| 1718 1847 | 
             
                  gestures = {},
         | 
| 1719 1848 | 
             
                  listeners = dispatch("start", "drag", "end"),
         | 
| 1720 1849 | 
             
                  active = 0,
         | 
| 1850 | 
            +
                  mousedownx,
         | 
| 1851 | 
            +
                  mousedowny,
         | 
| 1721 1852 | 
             
                  mousemoving,
         | 
| 1722 | 
            -
                  touchending | 
| 1853 | 
            +
                  touchending,
         | 
| 1854 | 
            +
                  clickDistance2 = 0;
         | 
| 1723 1855 |  | 
| 1724 | 
            -
              function drag(selection | 
| 1725 | 
            -
                selection | 
| 1856 | 
            +
              function drag(selection) {
         | 
| 1857 | 
            +
                selection
         | 
| 1726 1858 | 
             
                    .on("mousedown.drag", mousedowned)
         | 
| 1859 | 
            +
                  .filter(touchable)
         | 
| 1727 1860 | 
             
                    .on("touchstart.drag", touchstarted)
         | 
| 1728 1861 | 
             
                    .on("touchmove.drag", touchmoved)
         | 
| 1729 1862 | 
             
                    .on("touchend.drag touchcancel.drag", touchended)
         | 
| 1863 | 
            +
                    .style("touch-action", "none")
         | 
| 1730 1864 | 
             
                    .style("-webkit-tap-highlight-color", "rgba(0,0,0,0)");
         | 
| 1731 1865 | 
             
              }
         | 
| 1732 1866 |  | 
| @@ -1738,12 +1872,17 @@ var drag = function() { | |
| 1738 1872 | 
             
                dragDisable(exports.event.view);
         | 
| 1739 1873 | 
             
                nopropagation();
         | 
| 1740 1874 | 
             
                mousemoving = false;
         | 
| 1875 | 
            +
                mousedownx = exports.event.clientX;
         | 
| 1876 | 
            +
                mousedowny = exports.event.clientY;
         | 
| 1741 1877 | 
             
                gesture("start");
         | 
| 1742 1878 | 
             
              }
         | 
| 1743 1879 |  | 
| 1744 1880 | 
             
              function mousemoved() {
         | 
| 1745 1881 | 
             
                noevent();
         | 
| 1746 | 
            -
                mousemoving  | 
| 1882 | 
            +
                if (!mousemoving) {
         | 
| 1883 | 
            +
                  var dx = exports.event.clientX - mousedownx, dy = exports.event.clientY - mousedowny;
         | 
| 1884 | 
            +
                  mousemoving = dx * dx + dy * dy > clickDistance2;
         | 
| 1885 | 
            +
                }
         | 
| 1747 1886 | 
             
                gestures.mouse("drag");
         | 
| 1748 1887 | 
             
              }
         | 
| 1749 1888 |  | 
| @@ -1833,6 +1972,10 @@ var drag = function() { | |
| 1833 1972 | 
             
                return value === listeners ? drag : value;
         | 
| 1834 1973 | 
             
              };
         | 
| 1835 1974 |  | 
| 1975 | 
            +
              drag.clickDistance = function(_) {
         | 
| 1976 | 
            +
                return arguments.length ? (clickDistance2 = (_ = +_) * _, drag) : Math.sqrt(clickDistance2);
         | 
| 1977 | 
            +
              };
         | 
| 1978 | 
            +
             | 
| 1836 1979 | 
             
              return drag;
         | 
| 1837 1980 | 
             
            };
         | 
| 1838 1981 |  | 
| @@ -2408,7 +2551,7 @@ function nogamma(a, b) { | |
| 2408 2551 | 
             
              return d ? linear(a, d) : constant$3(isNaN(a) ? b : a);
         | 
| 2409 2552 | 
             
            }
         | 
| 2410 2553 |  | 
| 2411 | 
            -
            var interpolateRgb = ( | 
| 2554 | 
            +
            var interpolateRgb = (function rgbGamma(y) {
         | 
| 2412 2555 | 
             
              var color$$1 = gamma(y);
         | 
| 2413 2556 |  | 
| 2414 2557 | 
             
              function rgb$$1(start, end) {
         | 
| @@ -2428,7 +2571,7 @@ var interpolateRgb = ((function rgbGamma(y) { | |
| 2428 2571 | 
             
              rgb$$1.gamma = rgbGamma;
         | 
| 2429 2572 |  | 
| 2430 2573 | 
             
              return rgb$$1;
         | 
| 2431 | 
            -
            }) | 
| 2574 | 
            +
            })(1);
         | 
| 2432 2575 |  | 
| 2433 2576 | 
             
            function rgbSpline(spline) {
         | 
| 2434 2577 | 
             
              return function(colors) {
         | 
| @@ -2581,7 +2724,7 @@ var interpolateValue = function(a, b) { | |
| 2581 2724 | 
             
                  : b instanceof color ? interpolateRgb
         | 
| 2582 2725 | 
             
                  : b instanceof Date ? date
         | 
| 2583 2726 | 
             
                  : Array.isArray(b) ? array$1
         | 
| 2584 | 
            -
                  : isNaN(b) ? object
         | 
| 2727 | 
            +
                  : typeof b.valueOf !== "function" && typeof b.toString !== "function" || isNaN(b) ? object
         | 
| 2585 2728 | 
             
                  : reinterpolate)(a, b);
         | 
| 2586 2729 | 
             
            };
         | 
| 2587 2730 |  | 
| @@ -2863,7 +3006,7 @@ var clockLast = 0; | |
| 2863 3006 | 
             
            var clockNow = 0;
         | 
| 2864 3007 | 
             
            var clockSkew = 0;
         | 
| 2865 3008 | 
             
            var clock = typeof performance === "object" && performance.now ? performance : Date;
         | 
| 2866 | 
            -
            var setFrame = typeof  | 
| 3009 | 
            +
            var setFrame = typeof window === "object" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };
         | 
| 2867 3010 |  | 
| 2868 3011 | 
             
            function now() {
         | 
| 2869 3012 | 
             
              return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);
         | 
| @@ -2959,7 +3102,7 @@ function sleep(time) { | |
| 2959 3102 | 
             
                if (time < Infinity) timeout = setTimeout(wake, delay);
         | 
| 2960 3103 | 
             
                if (interval) interval = clearInterval(interval);
         | 
| 2961 3104 | 
             
              } else {
         | 
| 2962 | 
            -
                if (!interval) interval = setInterval(poke, pokeDelay);
         | 
| 3105 | 
            +
                if (!interval) clockLast = clockNow, interval = setInterval(poke, pokeDelay);
         | 
| 2963 3106 | 
             
                frame = 1, setFrame(wake);
         | 
| 2964 3107 | 
             
              }
         | 
| 2965 3108 | 
             
            }
         | 
| @@ -3141,7 +3284,7 @@ function create(node, id, self) { | |
| 3141 3284 |  | 
| 3142 3285 | 
             
            var interrupt = function(node, name) {
         | 
| 3143 3286 | 
             
              var schedules = node.__transition,
         | 
| 3144 | 
            -
                  schedule,
         | 
| 3287 | 
            +
                  schedule$$1,
         | 
| 3145 3288 | 
             
                  active,
         | 
| 3146 3289 | 
             
                  empty = true,
         | 
| 3147 3290 | 
             
                  i;
         | 
| @@ -3151,11 +3294,11 @@ var interrupt = function(node, name) { | |
| 3151 3294 | 
             
              name = name == null ? null : name + "";
         | 
| 3152 3295 |  | 
| 3153 3296 | 
             
              for (i in schedules) {
         | 
| 3154 | 
            -
                if ((schedule = schedules[i]).name !== name) { empty = false; continue; }
         | 
| 3155 | 
            -
                active = schedule.state > STARTING && schedule.state < ENDING;
         | 
| 3156 | 
            -
                schedule.state = ENDED;
         | 
| 3157 | 
            -
                schedule.timer.stop();
         | 
| 3158 | 
            -
                if (active) schedule.on.call("interrupt", node, node.__data__, schedule.index, schedule.group);
         | 
| 3297 | 
            +
                if ((schedule$$1 = schedules[i]).name !== name) { empty = false; continue; }
         | 
| 3298 | 
            +
                active = schedule$$1.state > STARTING && schedule$$1.state < ENDING;
         | 
| 3299 | 
            +
                schedule$$1.state = ENDED;
         | 
| 3300 | 
            +
                schedule$$1.timer.stop();
         | 
| 3301 | 
            +
                if (active) schedule$$1.on.call("interrupt", node, node.__data__, schedule$$1.index, schedule$$1.group);
         | 
| 3159 3302 | 
             
                delete schedules[i];
         | 
| 3160 3303 | 
             
              }
         | 
| 3161 3304 |  | 
| @@ -3171,8 +3314,8 @@ var selection_interrupt = function(name) { | |
| 3171 3314 | 
             
            function tweenRemove(id, name) {
         | 
| 3172 3315 | 
             
              var tween0, tween1;
         | 
| 3173 3316 | 
             
              return function() {
         | 
| 3174 | 
            -
                var schedule = set$1(this, id),
         | 
| 3175 | 
            -
                    tween = schedule.tween;
         | 
| 3317 | 
            +
                var schedule$$1 = set$1(this, id),
         | 
| 3318 | 
            +
                    tween = schedule$$1.tween;
         | 
| 3176 3319 |  | 
| 3177 3320 | 
             
                // If this node shared tween with the previous node,
         | 
| 3178 3321 | 
             
                // just assign the updated shared tween and we’re done!
         | 
| @@ -3188,7 +3331,7 @@ function tweenRemove(id, name) { | |
| 3188 3331 | 
             
                  }
         | 
| 3189 3332 | 
             
                }
         | 
| 3190 3333 |  | 
| 3191 | 
            -
                schedule.tween = tween1;
         | 
| 3334 | 
            +
                schedule$$1.tween = tween1;
         | 
| 3192 3335 | 
             
              };
         | 
| 3193 3336 | 
             
            }
         | 
| 3194 3337 |  | 
| @@ -3196,8 +3339,8 @@ function tweenFunction(id, name, value) { | |
| 3196 3339 | 
             
              var tween0, tween1;
         | 
| 3197 3340 | 
             
              if (typeof value !== "function") throw new Error;
         | 
| 3198 3341 | 
             
              return function() {
         | 
| 3199 | 
            -
                var schedule = set$1(this, id),
         | 
| 3200 | 
            -
                    tween = schedule.tween;
         | 
| 3342 | 
            +
                var schedule$$1 = set$1(this, id),
         | 
| 3343 | 
            +
                    tween = schedule$$1.tween;
         | 
| 3201 3344 |  | 
| 3202 3345 | 
             
                // If this node shared tween with the previous node,
         | 
| 3203 3346 | 
             
                // just assign the updated shared tween and we’re done!
         | 
| @@ -3213,7 +3356,7 @@ function tweenFunction(id, name, value) { | |
| 3213 3356 | 
             
                  if (i === n) tween1.push(t);
         | 
| 3214 3357 | 
             
                }
         | 
| 3215 3358 |  | 
| 3216 | 
            -
                schedule.tween = tween1;
         | 
| 3359 | 
            +
                schedule$$1.tween = tween1;
         | 
| 3217 3360 | 
             
              };
         | 
| 3218 3361 | 
             
            }
         | 
| 3219 3362 |  | 
| @@ -3239,8 +3382,8 @@ function tweenValue(transition, name, value) { | |
| 3239 3382 | 
             
              var id = transition._id;
         | 
| 3240 3383 |  | 
| 3241 3384 | 
             
              transition.each(function() {
         | 
| 3242 | 
            -
                var schedule = set$1(this, id);
         | 
| 3243 | 
            -
                (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);
         | 
| 3385 | 
            +
                var schedule$$1 = set$1(this, id);
         | 
| 3386 | 
            +
                (schedule$$1.value || (schedule$$1.value = {}))[name] = value.apply(this, arguments);
         | 
| 3244 3387 | 
             
              });
         | 
| 3245 3388 |  | 
| 3246 3389 | 
             
              return function(node) {
         | 
| @@ -3248,7 +3391,7 @@ function tweenValue(transition, name, value) { | |
| 3248 3391 | 
             
              };
         | 
| 3249 3392 | 
             
            }
         | 
| 3250 3393 |  | 
| 3251 | 
            -
            var interpolate | 
| 3394 | 
            +
            var interpolate = function(a, b) {
         | 
| 3252 3395 | 
             
              var c;
         | 
| 3253 3396 | 
             
              return (typeof b === "number" ? reinterpolate
         | 
| 3254 3397 | 
             
                  : b instanceof color ? interpolateRgb
         | 
| @@ -3319,11 +3462,11 @@ function attrFunctionNS$1(fullname, interpolate$$1, value) { | |
| 3319 3462 | 
             
            }
         | 
| 3320 3463 |  | 
| 3321 3464 | 
             
            var transition_attr = function(name, value) {
         | 
| 3322 | 
            -
              var fullname = namespace(name), i = fullname === "transform" ? interpolateTransformSvg : interpolate | 
| 3465 | 
            +
              var fullname = namespace(name), i = fullname === "transform" ? interpolateTransformSvg : interpolate;
         | 
| 3323 3466 | 
             
              return this.attrTween(name, typeof value === "function"
         | 
| 3324 3467 | 
             
                  ? (fullname.local ? attrFunctionNS$1 : attrFunction$1)(fullname, i, tweenValue(this, "attr." + name, value))
         | 
| 3325 3468 | 
             
                  : value == null ? (fullname.local ? attrRemoveNS$1 : attrRemove$1)(fullname)
         | 
| 3326 | 
            -
                  : (fullname.local ? attrConstantNS$1 : attrConstant$1)(fullname, i, value));
         | 
| 3469 | 
            +
                  : (fullname.local ? attrConstantNS$1 : attrConstant$1)(fullname, i, value + ""));
         | 
| 3327 3470 | 
             
            };
         | 
| 3328 3471 |  | 
| 3329 3472 | 
             
            function attrTweenNS(fullname, value) {
         | 
| @@ -3430,10 +3573,10 @@ var transition_filter = function(match) { | |
| 3430 3573 | 
             
              return new Transition(subgroups, this._parents, this._name, this._id);
         | 
| 3431 3574 | 
             
            };
         | 
| 3432 3575 |  | 
| 3433 | 
            -
            var transition_merge = function(transition) {
         | 
| 3434 | 
            -
              if (transition._id !== this._id) throw new Error;
         | 
| 3576 | 
            +
            var transition_merge = function(transition$$1) {
         | 
| 3577 | 
            +
              if (transition$$1._id !== this._id) throw new Error;
         | 
| 3435 3578 |  | 
| 3436 | 
            -
              for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {
         | 
| 3579 | 
            +
              for (var groups0 = this._groups, groups1 = transition$$1._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {
         | 
| 3437 3580 | 
             
                for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {
         | 
| 3438 3581 | 
             
                  if (node = group0[i] || group1[i]) {
         | 
| 3439 3582 | 
             
                    merge[i] = node;
         | 
| @@ -3459,15 +3602,15 @@ function start(name) { | |
| 3459 3602 | 
             
            function onFunction(id, name, listener) {
         | 
| 3460 3603 | 
             
              var on0, on1, sit = start(name) ? init : set$1;
         | 
| 3461 3604 | 
             
              return function() {
         | 
| 3462 | 
            -
                var schedule = sit(this, id),
         | 
| 3463 | 
            -
                    on = schedule.on;
         | 
| 3605 | 
            +
                var schedule$$1 = sit(this, id),
         | 
| 3606 | 
            +
                    on = schedule$$1.on;
         | 
| 3464 3607 |  | 
| 3465 3608 | 
             
                // If this node shared a dispatch with the previous node,
         | 
| 3466 3609 | 
             
                // just assign the updated shared dispatch and we’re done!
         | 
| 3467 3610 | 
             
                // Otherwise, copy-on-write.
         | 
| 3468 3611 | 
             
                if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);
         | 
| 3469 3612 |  | 
| 3470 | 
            -
                schedule.on = on1;
         | 
| 3613 | 
            +
                schedule$$1.on = on1;
         | 
| 3471 3614 | 
             
              };
         | 
| 3472 3615 | 
             
            }
         | 
| 3473 3616 |  | 
| @@ -3539,17 +3682,16 @@ var transition_selection = function() { | |
| 3539 3682 | 
             
              return new Selection$1(this._groups, this._parents);
         | 
| 3540 3683 | 
             
            };
         | 
| 3541 3684 |  | 
| 3542 | 
            -
            function styleRemove$1(name, interpolate$$ | 
| 3685 | 
            +
            function styleRemove$1(name, interpolate$$1) {
         | 
| 3543 3686 | 
             
              var value00,
         | 
| 3544 3687 | 
             
                  value10,
         | 
| 3545 3688 | 
             
                  interpolate0;
         | 
| 3546 3689 | 
             
              return function() {
         | 
| 3547 | 
            -
                var  | 
| 3548 | 
            -
                     | 
| 3549 | 
            -
                    value1 = (this.style.removeProperty(name), style.getPropertyValue(name));
         | 
| 3690 | 
            +
                var value0 = styleValue(this, name),
         | 
| 3691 | 
            +
                    value1 = (this.style.removeProperty(name), styleValue(this, name));
         | 
| 3550 3692 | 
             
                return value0 === value1 ? null
         | 
| 3551 3693 | 
             
                    : value0 === value00 && value1 === value10 ? interpolate0
         | 
| 3552 | 
            -
                    : interpolate0 = interpolate$$ | 
| 3694 | 
            +
                    : interpolate0 = interpolate$$1(value00 = value0, value10 = value1);
         | 
| 3553 3695 | 
             
              };
         | 
| 3554 3696 | 
             
            }
         | 
| 3555 3697 |  | 
| @@ -3559,40 +3701,39 @@ function styleRemoveEnd(name) { | |
| 3559 3701 | 
             
              };
         | 
| 3560 3702 | 
             
            }
         | 
| 3561 3703 |  | 
| 3562 | 
            -
            function styleConstant$1(name, interpolate$$ | 
| 3704 | 
            +
            function styleConstant$1(name, interpolate$$1, value1) {
         | 
| 3563 3705 | 
             
              var value00,
         | 
| 3564 3706 | 
             
                  interpolate0;
         | 
| 3565 3707 | 
             
              return function() {
         | 
| 3566 | 
            -
                var value0 =  | 
| 3708 | 
            +
                var value0 = styleValue(this, name);
         | 
| 3567 3709 | 
             
                return value0 === value1 ? null
         | 
| 3568 3710 | 
             
                    : value0 === value00 ? interpolate0
         | 
| 3569 | 
            -
                    : interpolate0 = interpolate$$ | 
| 3711 | 
            +
                    : interpolate0 = interpolate$$1(value00 = value0, value1);
         | 
| 3570 3712 | 
             
              };
         | 
| 3571 3713 | 
             
            }
         | 
| 3572 3714 |  | 
| 3573 | 
            -
            function styleFunction$1(name, interpolate$$ | 
| 3715 | 
            +
            function styleFunction$1(name, interpolate$$1, value) {
         | 
| 3574 3716 | 
             
              var value00,
         | 
| 3575 3717 | 
             
                  value10,
         | 
| 3576 3718 | 
             
                  interpolate0;
         | 
| 3577 3719 | 
             
              return function() {
         | 
| 3578 | 
            -
                var  | 
| 3579 | 
            -
                    value0 = style.getPropertyValue(name),
         | 
| 3720 | 
            +
                var value0 = styleValue(this, name),
         | 
| 3580 3721 | 
             
                    value1 = value(this);
         | 
| 3581 | 
            -
                if (value1 == null) value1 = (this.style.removeProperty(name),  | 
| 3722 | 
            +
                if (value1 == null) value1 = (this.style.removeProperty(name), styleValue(this, name));
         | 
| 3582 3723 | 
             
                return value0 === value1 ? null
         | 
| 3583 3724 | 
             
                    : value0 === value00 && value1 === value10 ? interpolate0
         | 
| 3584 | 
            -
                    : interpolate0 = interpolate$$ | 
| 3725 | 
            +
                    : interpolate0 = interpolate$$1(value00 = value0, value10 = value1);
         | 
| 3585 3726 | 
             
              };
         | 
| 3586 3727 | 
             
            }
         | 
| 3587 3728 |  | 
| 3588 3729 | 
             
            var transition_style = function(name, value, priority) {
         | 
| 3589 | 
            -
              var i = (name += "") === "transform" ? interpolateTransformCss : interpolate | 
| 3730 | 
            +
              var i = (name += "") === "transform" ? interpolateTransformCss : interpolate;
         | 
| 3590 3731 | 
             
              return value == null ? this
         | 
| 3591 3732 | 
             
                      .styleTween(name, styleRemove$1(name, i))
         | 
| 3592 3733 | 
             
                      .on("end.style." + name, styleRemoveEnd(name))
         | 
| 3593 3734 | 
             
                  : this.styleTween(name, typeof value === "function"
         | 
| 3594 3735 | 
             
                      ? styleFunction$1(name, i, tweenValue(this, "style." + name, value))
         | 
| 3595 | 
            -
                      : styleConstant$1(name, i, value), priority);
         | 
| 3736 | 
            +
                      : styleConstant$1(name, i, value + ""), priority);
         | 
| 3596 3737 | 
             
            };
         | 
| 3597 3738 |  | 
| 3598 3739 | 
             
            function styleTween(name, value, priority) {
         | 
| @@ -3957,13 +4098,13 @@ var root$1 = [null]; | |
| 3957 4098 |  | 
| 3958 4099 | 
             
            var active = function(node, name) {
         | 
| 3959 4100 | 
             
              var schedules = node.__transition,
         | 
| 3960 | 
            -
                  schedule,
         | 
| 4101 | 
            +
                  schedule$$1,
         | 
| 3961 4102 | 
             
                  i;
         | 
| 3962 4103 |  | 
| 3963 4104 | 
             
              if (schedules) {
         | 
| 3964 4105 | 
             
                name = name == null ? null : name + "";
         | 
| 3965 4106 | 
             
                for (i in schedules) {
         | 
| 3966 | 
            -
                  if ((schedule = schedules[i]).state > SCHEDULED && schedule.name === name) {
         | 
| 4107 | 
            +
                  if ((schedule$$1 = schedules[i]).state > SCHEDULED && schedule$$1.name === name) {
         | 
| 3967 4108 | 
             
                    return new Transition([[node]], root$1, name, +i);
         | 
| 3968 4109 | 
             
                  }
         | 
| 3969 4110 | 
             
                }
         | 
| @@ -4172,7 +4313,7 @@ function brush$1(dim) { | |
| 4172 4313 | 
             
                    .on("mousedown.brush touchstart.brush", started);
         | 
| 4173 4314 | 
             
              }
         | 
| 4174 4315 |  | 
| 4175 | 
            -
              brush.move = function(group, selection | 
| 4316 | 
            +
              brush.move = function(group, selection) {
         | 
| 4176 4317 | 
             
                if (group.selection) {
         | 
| 4177 4318 | 
             
                  group
         | 
| 4178 4319 | 
             
                      .on("start.brush", function() { emitter(this, arguments).beforestart().start(); })
         | 
| @@ -4182,7 +4323,7 @@ function brush$1(dim) { | |
| 4182 4323 | 
             
                            state = that.__brush,
         | 
| 4183 4324 | 
             
                            emit = emitter(that, arguments),
         | 
| 4184 4325 | 
             
                            selection0 = state.selection,
         | 
| 4185 | 
            -
                            selection1 = dim.input(typeof selection | 
| 4326 | 
            +
                            selection1 = dim.input(typeof selection === "function" ? selection.apply(this, arguments) : selection, state.extent),
         | 
| 4186 4327 | 
             
                            i = interpolateValue(selection0, selection1);
         | 
| 4187 4328 |  | 
| 4188 4329 | 
             
                        function tween(t) {
         | 
| @@ -4199,7 +4340,7 @@ function brush$1(dim) { | |
| 4199 4340 | 
             
                        var that = this,
         | 
| 4200 4341 | 
             
                            args = arguments,
         | 
| 4201 4342 | 
             
                            state = that.__brush,
         | 
| 4202 | 
            -
                            selection1 = dim.input(typeof selection | 
| 4343 | 
            +
                            selection1 = dim.input(typeof selection === "function" ? selection.apply(that, args) : selection, state.extent),
         | 
| 4203 4344 | 
             
                            emit = emitter(that, args).beforestart();
         | 
| 4204 4345 |  | 
| 4205 4346 | 
             
                        interrupt(that);
         | 
| @@ -4212,22 +4353,22 @@ function brush$1(dim) { | |
| 4212 4353 |  | 
| 4213 4354 | 
             
              function redraw() {
         | 
| 4214 4355 | 
             
                var group = select(this),
         | 
| 4215 | 
            -
                    selection | 
| 4356 | 
            +
                    selection = local$$1(this).selection;
         | 
| 4216 4357 |  | 
| 4217 | 
            -
                if (selection | 
| 4358 | 
            +
                if (selection) {
         | 
| 4218 4359 | 
             
                  group.selectAll(".selection")
         | 
| 4219 4360 | 
             
                      .style("display", null)
         | 
| 4220 | 
            -
                      .attr("x", selection | 
| 4221 | 
            -
                      .attr("y", selection | 
| 4222 | 
            -
                      .attr("width", selection | 
| 4223 | 
            -
                      .attr("height", selection | 
| 4361 | 
            +
                      .attr("x", selection[0][0])
         | 
| 4362 | 
            +
                      .attr("y", selection[0][1])
         | 
| 4363 | 
            +
                      .attr("width", selection[1][0] - selection[0][0])
         | 
| 4364 | 
            +
                      .attr("height", selection[1][1] - selection[0][1]);
         | 
| 4224 4365 |  | 
| 4225 4366 | 
             
                  group.selectAll(".handle")
         | 
| 4226 4367 | 
             
                      .style("display", null)
         | 
| 4227 | 
            -
                      .attr("x", function(d) { return d.type[d.type.length - 1] === "e" ? selection | 
| 4228 | 
            -
                      .attr("y", function(d) { return d.type[0] === "s" ? selection | 
| 4229 | 
            -
                      .attr("width", function(d) { return d.type === "n" || d.type === "s" ? selection | 
| 4230 | 
            -
                      .attr("height", function(d) { return d.type === "e" || d.type === "w" ? selection | 
| 4368 | 
            +
                      .attr("x", function(d) { return d.type[d.type.length - 1] === "e" ? selection[1][0] - handleSize / 2 : selection[0][0] - handleSize / 2; })
         | 
| 4369 | 
            +
                      .attr("y", function(d) { return d.type[0] === "s" ? selection[1][1] - handleSize / 2 : selection[0][1] - handleSize / 2; })
         | 
| 4370 | 
            +
                      .attr("width", function(d) { return d.type === "n" || d.type === "s" ? selection[1][0] - selection[0][0] + handleSize : handleSize; })
         | 
| 4371 | 
            +
                      .attr("height", function(d) { return d.type === "e" || d.type === "w" ? selection[1][1] - selection[0][1] + handleSize : handleSize; });
         | 
| 4231 4372 | 
             
                }
         | 
| 4232 4373 |  | 
| 4233 4374 | 
             
                else {
         | 
| @@ -4285,7 +4426,7 @@ function brush$1(dim) { | |
| 4285 4426 | 
             
                    signY = dim === X ? null : signsY[type],
         | 
| 4286 4427 | 
             
                    state = local$$1(that),
         | 
| 4287 4428 | 
             
                    extent = state.extent,
         | 
| 4288 | 
            -
                    selection | 
| 4429 | 
            +
                    selection = state.selection,
         | 
| 4289 4430 | 
             
                    W = extent[0][0], w0, w1,
         | 
| 4290 4431 | 
             
                    N = extent[0][1], n0, n1,
         | 
| 4291 4432 | 
             
                    E = extent[1][0], e0, e1,
         | 
| @@ -4301,15 +4442,15 @@ function brush$1(dim) { | |
| 4301 4442 | 
             
                    emit = emitter(that, arguments).beforestart();
         | 
| 4302 4443 |  | 
| 4303 4444 | 
             
                if (type === "overlay") {
         | 
| 4304 | 
            -
                  state.selection = selection | 
| 4445 | 
            +
                  state.selection = selection = [
         | 
| 4305 4446 | 
             
                    [w0 = dim === Y ? W : point0[0], n0 = dim === X ? N : point0[1]],
         | 
| 4306 4447 | 
             
                    [e0 = dim === Y ? E : w0, s0 = dim === X ? S : n0]
         | 
| 4307 4448 | 
             
                  ];
         | 
| 4308 4449 | 
             
                } else {
         | 
| 4309 | 
            -
                  w0 = selection | 
| 4310 | 
            -
                  n0 = selection | 
| 4311 | 
            -
                  e0 = selection | 
| 4312 | 
            -
                  s0 = selection | 
| 4450 | 
            +
                  w0 = selection[0][0];
         | 
| 4451 | 
            +
                  n0 = selection[0][1];
         | 
| 4452 | 
            +
                  e0 = selection[1][0];
         | 
| 4453 | 
            +
                  s0 = selection[1][1];
         | 
| 4313 4454 | 
             
                }
         | 
| 4314 4455 |  | 
| 4315 4456 | 
             
                w1 = w0;
         | 
| @@ -4395,14 +4536,14 @@ function brush$1(dim) { | |
| 4395 4536 | 
             
                    if (type in flipY) overlay.attr("cursor", cursors[type = flipY[type]]);
         | 
| 4396 4537 | 
             
                  }
         | 
| 4397 4538 |  | 
| 4398 | 
            -
                  if (state.selection) selection | 
| 4399 | 
            -
                  if (lockX) w1 = selection | 
| 4400 | 
            -
                  if (lockY) n1 = selection | 
| 4539 | 
            +
                  if (state.selection) selection = state.selection; // May be set by brush.move!
         | 
| 4540 | 
            +
                  if (lockX) w1 = selection[0][0], e1 = selection[1][0];
         | 
| 4541 | 
            +
                  if (lockY) n1 = selection[0][1], s1 = selection[1][1];
         | 
| 4401 4542 |  | 
| 4402 | 
            -
                  if (selection | 
| 4403 | 
            -
                      || selection | 
| 4404 | 
            -
                      || selection | 
| 4405 | 
            -
                      || selection | 
| 4543 | 
            +
                  if (selection[0][0] !== w1
         | 
| 4544 | 
            +
                      || selection[0][1] !== n1
         | 
| 4545 | 
            +
                      || selection[1][0] !== e1
         | 
| 4546 | 
            +
                      || selection[1][1] !== s1) {
         | 
| 4406 4547 | 
             
                    state.selection = [[w1, n1], [e1, s1]];
         | 
| 4407 4548 | 
             
                    redraw.call(that);
         | 
| 4408 4549 | 
             
                    emit.brush();
         | 
| @@ -4422,8 +4563,8 @@ function brush$1(dim) { | |
| 4422 4563 | 
             
                  }
         | 
| 4423 4564 | 
             
                  group.attr("pointer-events", "all");
         | 
| 4424 4565 | 
             
                  overlay.attr("cursor", cursors.overlay);
         | 
| 4425 | 
            -
                  if (state.selection) selection | 
| 4426 | 
            -
                  if (empty(selection | 
| 4566 | 
            +
                  if (state.selection) selection = state.selection; // May be set by brush.move (on start)!
         | 
| 4567 | 
            +
                  if (empty(selection)) state.selection = null, redraw.call(that);
         | 
| 4427 4568 | 
             
                  emit.end();
         | 
| 4428 4569 | 
             
                }
         | 
| 4429 4570 |  | 
| @@ -4766,14 +4907,16 @@ Path.prototype = path.prototype = { | |
| 4766 4907 | 
             
                // Is this arc empty? We’re done.
         | 
| 4767 4908 | 
             
                if (!r) return;
         | 
| 4768 4909 |  | 
| 4910 | 
            +
                // Does the angle go the wrong way? Flip the direction.
         | 
| 4911 | 
            +
                if (da < 0) da = da % tau$2 + tau$2;
         | 
| 4912 | 
            +
             | 
| 4769 4913 | 
             
                // Is this a complete circle? Draw two arcs to complete the circle.
         | 
| 4770 4914 | 
             
                if (da > tauEpsilon) {
         | 
| 4771 4915 | 
             
                  this._ += "A" + r + "," + r + ",0,1," + cw + "," + (x - dx) + "," + (y - dy) + "A" + r + "," + r + ",0,1," + cw + "," + (this._x1 = x0) + "," + (this._y1 = y0);
         | 
| 4772 4916 | 
             
                }
         | 
| 4773 4917 |  | 
| 4774 | 
            -
                //  | 
| 4775 | 
            -
                else {
         | 
| 4776 | 
            -
                  if (da < 0) da = da % tau$2 + tau$2;
         | 
| 4918 | 
            +
                // Is this arc non-empty? Draw an arc!
         | 
| 4919 | 
            +
                else if (da > epsilon$1) {
         | 
| 4777 4920 | 
             
                  this._ += "A" + r + "," + r + ",0," + (+(da >= pi$2)) + "," + cw + "," + (this._x1 = x + r * Math.cos(a1)) + "," + (this._y1 = y + r * Math.sin(a1));
         | 
| 4778 4921 | 
             
                }
         | 
| 4779 4922 | 
             
              },
         | 
| @@ -4950,10 +5093,10 @@ var nest = function() { | |
| 4950 5093 | 
             
                  nest;
         | 
| 4951 5094 |  | 
| 4952 5095 | 
             
              function apply(array, depth, createResult, setResult) {
         | 
| 4953 | 
            -
                if (depth >= keys.length)  | 
| 4954 | 
            -
             | 
| 4955 | 
            -
             | 
| 4956 | 
            -
             | 
| 5096 | 
            +
                if (depth >= keys.length) {
         | 
| 5097 | 
            +
                  if (sortValues != null) array.sort(sortValues);
         | 
| 5098 | 
            +
                  return rollup != null ? rollup(array) : array;
         | 
| 5099 | 
            +
                }
         | 
| 4957 5100 |  | 
| 4958 5101 | 
             
                var i = -1,
         | 
| 4959 5102 | 
             
                    n = array.length,
         | 
| @@ -5098,7 +5241,7 @@ function inferColumns(rows) { | |
| 5098 5241 | 
             
            }
         | 
| 5099 5242 |  | 
| 5100 5243 | 
             
            var dsv = function(delimiter) {
         | 
| 5101 | 
            -
              var reFormat = new RegExp("[\"" + delimiter + "\n]"),
         | 
| 5244 | 
            +
              var reFormat = new RegExp("[\"" + delimiter + "\n\r]"),
         | 
| 5102 5245 | 
             
                  delimiterCode = delimiter.charCodeAt(0);
         | 
| 5103 5246 |  | 
| 5104 5247 | 
             
              function parse(text, f) {
         | 
| @@ -6058,17 +6201,17 @@ var manyBody = function() { | |
| 6058 6201 | 
             
              }
         | 
| 6059 6202 |  | 
| 6060 6203 | 
             
              function accumulate(quad) {
         | 
| 6061 | 
            -
                var strength = 0, q, c, x | 
| 6204 | 
            +
                var strength = 0, q, c, x, y, i;
         | 
| 6062 6205 |  | 
| 6063 6206 | 
             
                // For internal nodes, accumulate forces from child quadrants.
         | 
| 6064 6207 | 
             
                if (quad.length) {
         | 
| 6065 | 
            -
                  for (x | 
| 6208 | 
            +
                  for (x = y = i = 0; i < 4; ++i) {
         | 
| 6066 6209 | 
             
                    if ((q = quad[i]) && (c = q.value)) {
         | 
| 6067 | 
            -
                      strength += c, x | 
| 6210 | 
            +
                      strength += c, x += c * q.x, y += c * q.y;
         | 
| 6068 6211 | 
             
                    }
         | 
| 6069 6212 | 
             
                  }
         | 
| 6070 | 
            -
                  quad.x = x | 
| 6071 | 
            -
                  quad.y = y | 
| 6213 | 
            +
                  quad.x = x / strength;
         | 
| 6214 | 
            +
                  quad.y = y / strength;
         | 
| 6072 6215 | 
             
                }
         | 
| 6073 6216 |  | 
| 6074 6217 | 
             
                // For leaf nodes, accumulate forces from coincident quadrants.
         | 
| @@ -6086,20 +6229,20 @@ var manyBody = function() { | |
| 6086 6229 | 
             
              function apply(quad, x1, _, x2) {
         | 
| 6087 6230 | 
             
                if (!quad.value) return true;
         | 
| 6088 6231 |  | 
| 6089 | 
            -
                var x | 
| 6090 | 
            -
                    y | 
| 6232 | 
            +
                var x = quad.x - node.x,
         | 
| 6233 | 
            +
                    y = quad.y - node.y,
         | 
| 6091 6234 | 
             
                    w = x2 - x1,
         | 
| 6092 | 
            -
                    l = x | 
| 6235 | 
            +
                    l = x * x + y * y;
         | 
| 6093 6236 |  | 
| 6094 6237 | 
             
                // Apply the Barnes-Hut approximation if possible.
         | 
| 6095 6238 | 
             
                // Limit forces for very close nodes; randomize direction if coincident.
         | 
| 6096 6239 | 
             
                if (w * w / theta2 < l) {
         | 
| 6097 6240 | 
             
                  if (l < distanceMax2) {
         | 
| 6098 | 
            -
                    if (x | 
| 6099 | 
            -
                    if (y | 
| 6241 | 
            +
                    if (x === 0) x = jiggle(), l += x * x;
         | 
| 6242 | 
            +
                    if (y === 0) y = jiggle(), l += y * y;
         | 
| 6100 6243 | 
             
                    if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);
         | 
| 6101 | 
            -
                    node.vx += x | 
| 6102 | 
            -
                    node.vy += y | 
| 6244 | 
            +
                    node.vx += x * quad.value * alpha / l;
         | 
| 6245 | 
            +
                    node.vy += y * quad.value * alpha / l;
         | 
| 6103 6246 | 
             
                  }
         | 
| 6104 6247 | 
             
                  return true;
         | 
| 6105 6248 | 
             
                }
         | 
| @@ -6109,15 +6252,15 @@ var manyBody = function() { | |
| 6109 6252 |  | 
| 6110 6253 | 
             
                // Limit forces for very close nodes; randomize direction if coincident.
         | 
| 6111 6254 | 
             
                if (quad.data !== node || quad.next) {
         | 
| 6112 | 
            -
                  if (x | 
| 6113 | 
            -
                  if (y | 
| 6255 | 
            +
                  if (x === 0) x = jiggle(), l += x * x;
         | 
| 6256 | 
            +
                  if (y === 0) y = jiggle(), l += y * y;
         | 
| 6114 6257 | 
             
                  if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);
         | 
| 6115 6258 | 
             
                }
         | 
| 6116 6259 |  | 
| 6117 6260 | 
             
                do if (quad.data !== node) {
         | 
| 6118 6261 | 
             
                  w = strengths[quad.data.index] * alpha / l;
         | 
| 6119 | 
            -
                  node.vx += x | 
| 6120 | 
            -
                  node.vy += y | 
| 6262 | 
            +
                  node.vx += x * w;
         | 
| 6263 | 
            +
                  node.vy += y * w;
         | 
| 6121 6264 | 
             
                } while (quad = quad.next);
         | 
| 6122 6265 | 
             
              }
         | 
| 6123 6266 |  | 
| @@ -6263,6 +6406,14 @@ var formatGroup = function(grouping, thousands) { | |
| 6263 6406 | 
             
              };
         | 
| 6264 6407 | 
             
            };
         | 
| 6265 6408 |  | 
| 6409 | 
            +
            var formatNumerals = function(numerals) {
         | 
| 6410 | 
            +
              return function(value) {
         | 
| 6411 | 
            +
                return value.replace(/[0-9]/g, function(i) {
         | 
| 6412 | 
            +
                  return numerals[+i];
         | 
| 6413 | 
            +
                });
         | 
| 6414 | 
            +
              };
         | 
| 6415 | 
            +
            };
         | 
| 6416 | 
            +
             | 
| 6266 6417 | 
             
            var formatDefault = function(x, p) {
         | 
| 6267 6418 | 
             
              x = x.toPrecision(p);
         | 
| 6268 6419 |  | 
| @@ -6323,9 +6474,11 @@ var formatTypes = { | |
| 6323 6474 | 
             
            // [[fill]align][sign][symbol][0][width][,][.precision][type]
         | 
| 6324 6475 | 
             
            var re = /^(?:(.)?([<>=^]))?([+\-\( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?([a-z%])?$/i;
         | 
| 6325 6476 |  | 
| 6326 | 
            -
             | 
| 6477 | 
            +
            function formatSpecifier(specifier) {
         | 
| 6327 6478 | 
             
              return new FormatSpecifier(specifier);
         | 
| 6328 | 
            -
            } | 
| 6479 | 
            +
            }
         | 
| 6480 | 
            +
             | 
| 6481 | 
            +
            formatSpecifier.prototype = FormatSpecifier.prototype; // instanceof
         | 
| 6329 6482 |  | 
| 6330 6483 | 
             
            function FormatSpecifier(specifier) {
         | 
| 6331 6484 | 
             
              if (!(match = re.exec(specifier))) throw new Error("invalid format: " + specifier);
         | 
| @@ -6373,16 +6526,18 @@ FormatSpecifier.prototype.toString = function() { | |
| 6373 6526 | 
             
                  + this.type;
         | 
| 6374 6527 | 
             
            };
         | 
| 6375 6528 |  | 
| 6376 | 
            -
            var  | 
| 6377 | 
            -
             | 
| 6378 | 
            -
            function identity$3(x) {
         | 
| 6529 | 
            +
            var identity$3 = function(x) {
         | 
| 6379 6530 | 
             
              return x;
         | 
| 6380 | 
            -
            }
         | 
| 6531 | 
            +
            };
         | 
| 6532 | 
            +
             | 
| 6533 | 
            +
            var prefixes = ["y","z","a","f","p","n","\xB5","m","","k","M","G","T","P","E","Z","Y"];
         | 
| 6381 6534 |  | 
| 6382 6535 | 
             
            var formatLocale = function(locale) {
         | 
| 6383 6536 | 
             
              var group = locale.grouping && locale.thousands ? formatGroup(locale.grouping, locale.thousands) : identity$3,
         | 
| 6384 6537 | 
             
                  currency = locale.currency,
         | 
| 6385 | 
            -
                  decimal = locale.decimal | 
| 6538 | 
            +
                  decimal = locale.decimal,
         | 
| 6539 | 
            +
                  numerals = locale.numerals ? formatNumerals(locale.numerals) : identity$3,
         | 
| 6540 | 
            +
                  percent = locale.percent || "%";
         | 
| 6386 6541 |  | 
| 6387 6542 | 
             
              function newFormat(specifier) {
         | 
| 6388 6543 | 
             
                specifier = formatSpecifier(specifier);
         | 
| @@ -6400,7 +6555,7 @@ var formatLocale = function(locale) { | |
| 6400 6555 | 
             
                // Compute the prefix and suffix.
         | 
| 6401 6556 | 
             
                // For SI-prefix, the suffix is lazily computed.
         | 
| 6402 6557 | 
             
                var prefix = symbol === "$" ? currency[0] : symbol === "#" && /[boxX]/.test(type) ? "0" + type.toLowerCase() : "",
         | 
| 6403 | 
            -
                    suffix = symbol === "$" ? currency[1] : /[%p]/.test(type) ?  | 
| 6558 | 
            +
                    suffix = symbol === "$" ? currency[1] : /[%p]/.test(type) ? percent : "";
         | 
| 6404 6559 |  | 
| 6405 6560 | 
             
                // What format function should we use?
         | 
| 6406 6561 | 
             
                // Is this an integer type?
         | 
| @@ -6427,27 +6582,12 @@ var formatLocale = function(locale) { | |
| 6427 6582 | 
             
                  } else {
         | 
| 6428 6583 | 
             
                    value = +value;
         | 
| 6429 6584 |  | 
| 6430 | 
            -
                    // Convert negative to positive, and compute the prefix.
         | 
| 6431 | 
            -
                    // Note that -0 is not less than 0, but 1 / -0 is!
         | 
| 6432 | 
            -
                    var valueNegative = (value < 0 || 1 / value < 0) && (value *= -1, true);
         | 
| 6433 | 
            -
             | 
| 6434 6585 | 
             
                    // Perform the initial formatting.
         | 
| 6435 | 
            -
                     | 
| 6586 | 
            +
                    var valueNegative = value < 0;
         | 
| 6587 | 
            +
                    value = formatType(Math.abs(value), precision);
         | 
| 6436 6588 |  | 
| 6437 | 
            -
                    // If  | 
| 6438 | 
            -
                     | 
| 6439 | 
            -
                    if (valueNegative) {
         | 
| 6440 | 
            -
                      i = -1, n = value.length;
         | 
| 6441 | 
            -
                      valueNegative = false;
         | 
| 6442 | 
            -
                      while (++i < n) {
         | 
| 6443 | 
            -
                        if (c = value.charCodeAt(i), (48 < c && c < 58)
         | 
| 6444 | 
            -
                            || (type === "x" && 96 < c && c < 103)
         | 
| 6445 | 
            -
                            || (type === "X" && 64 < c && c < 71)) {
         | 
| 6446 | 
            -
                          valueNegative = true;
         | 
| 6447 | 
            -
                          break;
         | 
| 6448 | 
            -
                        }
         | 
| 6449 | 
            -
                      }
         | 
| 6450 | 
            -
                    }
         | 
| 6589 | 
            +
                    // If a negative value rounds to zero during formatting, treat as positive.
         | 
| 6590 | 
            +
                    if (valueNegative && +value === 0) valueNegative = false;
         | 
| 6451 6591 |  | 
| 6452 6592 | 
             
                    // Compute the prefix and suffix.
         | 
| 6453 6593 | 
             
                    valuePrefix = (valueNegative ? (sign === "(" ? sign : "-") : sign === "-" || sign === "(" ? "" : sign) + valuePrefix;
         | 
| @@ -6479,11 +6619,13 @@ var formatLocale = function(locale) { | |
| 6479 6619 |  | 
| 6480 6620 | 
             
                  // Reconstruct the final output based on the desired alignment.
         | 
| 6481 6621 | 
             
                  switch (align) {
         | 
| 6482 | 
            -
                    case "<":  | 
| 6483 | 
            -
                    case "=":  | 
| 6484 | 
            -
                    case "^":  | 
| 6622 | 
            +
                    case "<": value = valuePrefix + value + valueSuffix + padding; break;
         | 
| 6623 | 
            +
                    case "=": value = valuePrefix + padding + value + valueSuffix; break;
         | 
| 6624 | 
            +
                    case "^": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;
         | 
| 6625 | 
            +
                    default: value = padding + valuePrefix + value + valueSuffix; break;
         | 
| 6485 6626 | 
             
                  }
         | 
| 6486 | 
            -
             | 
| 6627 | 
            +
             | 
| 6628 | 
            +
                  return numerals(value);
         | 
| 6487 6629 | 
             
                }
         | 
| 6488 6630 |  | 
| 6489 6631 | 
             
                format.toString = function() {
         | 
| @@ -6626,8 +6768,8 @@ function streamGeometry(geometry, stream) { | |
| 6626 6768 | 
             
            }
         | 
| 6627 6769 |  | 
| 6628 6770 | 
             
            var streamObjectType = {
         | 
| 6629 | 
            -
              Feature: function( | 
| 6630 | 
            -
                streamGeometry( | 
| 6771 | 
            +
              Feature: function(object, stream) {
         | 
| 6772 | 
            +
                streamGeometry(object.geometry, stream);
         | 
| 6631 6773 | 
             
              },
         | 
| 6632 6774 | 
             
              FeatureCollection: function(object, stream) {
         | 
| 6633 6775 | 
             
                var features = object.features, i = -1, n = features.length;
         | 
| @@ -6874,8 +7016,10 @@ function linePoint(lambda, phi) { | |
| 6874 7016 | 
             
                  }
         | 
| 6875 7017 | 
             
                }
         | 
| 6876 7018 | 
             
              } else {
         | 
| 6877 | 
            -
                 | 
| 7019 | 
            +
                ranges.push(range = [lambda0$1 = lambda, lambda1 = lambda]);
         | 
| 6878 7020 | 
             
              }
         | 
| 7021 | 
            +
              if (phi < phi0) phi0 = phi;
         | 
| 7022 | 
            +
              if (phi > phi1) phi1 = phi;
         | 
| 6879 7023 | 
             
              p0 = p, lambda2 = lambda;
         | 
| 6880 7024 | 
             
            }
         | 
| 6881 7025 |  | 
| @@ -7074,9 +7218,8 @@ function centroidRingPoint(lambda, phi) { | |
| 7074 7218 | 
             
                  cy = z0 * x - x0 * z,
         | 
| 7075 7219 | 
             
                  cz = x0 * y - y0 * x,
         | 
| 7076 7220 | 
             
                  m = sqrt(cx * cx + cy * cy + cz * cz),
         | 
| 7077 | 
            -
                   | 
| 7078 | 
            -
                  v = m && - | 
| 7079 | 
            -
                  w = atan2(m, u); // line weight
         | 
| 7221 | 
            +
                  w = asin(m), // line weight = angle
         | 
| 7222 | 
            +
                  v = m && -w / m; // area weight multiplier
         | 
| 7080 7223 | 
             
              X2 += v * cx;
         | 
| 7081 7224 | 
             
              Y2 += v * cy;
         | 
| 7082 7225 | 
             
              Z2 += v * cz;
         | 
| @@ -7643,6 +7786,71 @@ var extent$1 = function() { | |
| 7643 7786 | 
             
              };
         | 
| 7644 7787 | 
             
            };
         | 
| 7645 7788 |  | 
| 7789 | 
            +
            var sum$1 = adder();
         | 
| 7790 | 
            +
             | 
| 7791 | 
            +
            var polygonContains = function(polygon, point) {
         | 
| 7792 | 
            +
              var lambda = point[0],
         | 
| 7793 | 
            +
                  phi = point[1],
         | 
| 7794 | 
            +
                  normal = [sin$1(lambda), -cos$1(lambda), 0],
         | 
| 7795 | 
            +
                  angle = 0,
         | 
| 7796 | 
            +
                  winding = 0;
         | 
| 7797 | 
            +
             | 
| 7798 | 
            +
              sum$1.reset();
         | 
| 7799 | 
            +
             | 
| 7800 | 
            +
              for (var i = 0, n = polygon.length; i < n; ++i) {
         | 
| 7801 | 
            +
                if (!(m = (ring = polygon[i]).length)) continue;
         | 
| 7802 | 
            +
                var ring,
         | 
| 7803 | 
            +
                    m,
         | 
| 7804 | 
            +
                    point0 = ring[m - 1],
         | 
| 7805 | 
            +
                    lambda0 = point0[0],
         | 
| 7806 | 
            +
                    phi0 = point0[1] / 2 + quarterPi,
         | 
| 7807 | 
            +
                    sinPhi0 = sin$1(phi0),
         | 
| 7808 | 
            +
                    cosPhi0 = cos$1(phi0);
         | 
| 7809 | 
            +
             | 
| 7810 | 
            +
                for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) {
         | 
| 7811 | 
            +
                  var point1 = ring[j],
         | 
| 7812 | 
            +
                      lambda1 = point1[0],
         | 
| 7813 | 
            +
                      phi1 = point1[1] / 2 + quarterPi,
         | 
| 7814 | 
            +
                      sinPhi1 = sin$1(phi1),
         | 
| 7815 | 
            +
                      cosPhi1 = cos$1(phi1),
         | 
| 7816 | 
            +
                      delta = lambda1 - lambda0,
         | 
| 7817 | 
            +
                      sign$$1 = delta >= 0 ? 1 : -1,
         | 
| 7818 | 
            +
                      absDelta = sign$$1 * delta,
         | 
| 7819 | 
            +
                      antimeridian = absDelta > pi$3,
         | 
| 7820 | 
            +
                      k = sinPhi0 * sinPhi1;
         | 
| 7821 | 
            +
             | 
| 7822 | 
            +
                  sum$1.add(atan2(k * sign$$1 * sin$1(absDelta), cosPhi0 * cosPhi1 + k * cos$1(absDelta)));
         | 
| 7823 | 
            +
                  angle += antimeridian ? delta + sign$$1 * tau$3 : delta;
         | 
| 7824 | 
            +
             | 
| 7825 | 
            +
                  // Are the longitudes either side of the point’s meridian (lambda),
         | 
| 7826 | 
            +
                  // and are the latitudes smaller than the parallel (phi)?
         | 
| 7827 | 
            +
                  if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) {
         | 
| 7828 | 
            +
                    var arc = cartesianCross(cartesian(point0), cartesian(point1));
         | 
| 7829 | 
            +
                    cartesianNormalizeInPlace(arc);
         | 
| 7830 | 
            +
                    var intersection = cartesianCross(normal, arc);
         | 
| 7831 | 
            +
                    cartesianNormalizeInPlace(intersection);
         | 
| 7832 | 
            +
                    var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * asin(intersection[2]);
         | 
| 7833 | 
            +
                    if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) {
         | 
| 7834 | 
            +
                      winding += antimeridian ^ delta >= 0 ? 1 : -1;
         | 
| 7835 | 
            +
                    }
         | 
| 7836 | 
            +
                  }
         | 
| 7837 | 
            +
                }
         | 
| 7838 | 
            +
              }
         | 
| 7839 | 
            +
             | 
| 7840 | 
            +
              // First, determine whether the South pole is inside or outside:
         | 
| 7841 | 
            +
              //
         | 
| 7842 | 
            +
              // It is inside if:
         | 
| 7843 | 
            +
              // * the polygon winds around it in a clockwise direction.
         | 
| 7844 | 
            +
              // * the polygon does not (cumulatively) wind around it, but has a negative
         | 
| 7845 | 
            +
              //   (counter-clockwise) area.
         | 
| 7846 | 
            +
              //
         | 
| 7847 | 
            +
              // Second, count the (signed) number of times a segment crosses a lambda
         | 
| 7848 | 
            +
              // from the point to the South pole.  If it is zero, then the point is the
         | 
| 7849 | 
            +
              // same side as the South pole.
         | 
| 7850 | 
            +
             | 
| 7851 | 
            +
              return (angle < -epsilon$2 || angle < epsilon$2 && sum$1 < -epsilon$2) ^ (winding & 1);
         | 
| 7852 | 
            +
            };
         | 
| 7853 | 
            +
             | 
| 7646 7854 | 
             
            var lengthSum = adder();
         | 
| 7647 7855 | 
             
            var lambda0$2;
         | 
| 7648 7856 | 
             
            var sinPhi0$1;
         | 
| @@ -7701,6 +7909,87 @@ var distance = function(a, b) { | |
| 7701 7909 | 
             
              return length$1(object$1);
         | 
| 7702 7910 | 
             
            };
         | 
| 7703 7911 |  | 
| 7912 | 
            +
            var containsObjectType = {
         | 
| 7913 | 
            +
              Feature: function(object, point) {
         | 
| 7914 | 
            +
                return containsGeometry(object.geometry, point);
         | 
| 7915 | 
            +
              },
         | 
| 7916 | 
            +
              FeatureCollection: function(object, point) {
         | 
| 7917 | 
            +
                var features = object.features, i = -1, n = features.length;
         | 
| 7918 | 
            +
                while (++i < n) if (containsGeometry(features[i].geometry, point)) return true;
         | 
| 7919 | 
            +
                return false;
         | 
| 7920 | 
            +
              }
         | 
| 7921 | 
            +
            };
         | 
| 7922 | 
            +
             | 
| 7923 | 
            +
            var containsGeometryType = {
         | 
| 7924 | 
            +
              Sphere: function() {
         | 
| 7925 | 
            +
                return true;
         | 
| 7926 | 
            +
              },
         | 
| 7927 | 
            +
              Point: function(object, point) {
         | 
| 7928 | 
            +
                return containsPoint(object.coordinates, point);
         | 
| 7929 | 
            +
              },
         | 
| 7930 | 
            +
              MultiPoint: function(object, point) {
         | 
| 7931 | 
            +
                var coordinates = object.coordinates, i = -1, n = coordinates.length;
         | 
| 7932 | 
            +
                while (++i < n) if (containsPoint(coordinates[i], point)) return true;
         | 
| 7933 | 
            +
                return false;
         | 
| 7934 | 
            +
              },
         | 
| 7935 | 
            +
              LineString: function(object, point) {
         | 
| 7936 | 
            +
                return containsLine(object.coordinates, point);
         | 
| 7937 | 
            +
              },
         | 
| 7938 | 
            +
              MultiLineString: function(object, point) {
         | 
| 7939 | 
            +
                var coordinates = object.coordinates, i = -1, n = coordinates.length;
         | 
| 7940 | 
            +
                while (++i < n) if (containsLine(coordinates[i], point)) return true;
         | 
| 7941 | 
            +
                return false;
         | 
| 7942 | 
            +
              },
         | 
| 7943 | 
            +
              Polygon: function(object, point) {
         | 
| 7944 | 
            +
                return containsPolygon(object.coordinates, point);
         | 
| 7945 | 
            +
              },
         | 
| 7946 | 
            +
              MultiPolygon: function(object, point) {
         | 
| 7947 | 
            +
                var coordinates = object.coordinates, i = -1, n = coordinates.length;
         | 
| 7948 | 
            +
                while (++i < n) if (containsPolygon(coordinates[i], point)) return true;
         | 
| 7949 | 
            +
                return false;
         | 
| 7950 | 
            +
              },
         | 
| 7951 | 
            +
              GeometryCollection: function(object, point) {
         | 
| 7952 | 
            +
                var geometries = object.geometries, i = -1, n = geometries.length;
         | 
| 7953 | 
            +
                while (++i < n) if (containsGeometry(geometries[i], point)) return true;
         | 
| 7954 | 
            +
                return false;
         | 
| 7955 | 
            +
              }
         | 
| 7956 | 
            +
            };
         | 
| 7957 | 
            +
             | 
| 7958 | 
            +
            function containsGeometry(geometry, point) {
         | 
| 7959 | 
            +
              return geometry && containsGeometryType.hasOwnProperty(geometry.type)
         | 
| 7960 | 
            +
                  ? containsGeometryType[geometry.type](geometry, point)
         | 
| 7961 | 
            +
                  : false;
         | 
| 7962 | 
            +
            }
         | 
| 7963 | 
            +
             | 
| 7964 | 
            +
            function containsPoint(coordinates, point) {
         | 
| 7965 | 
            +
              return distance(coordinates, point) === 0;
         | 
| 7966 | 
            +
            }
         | 
| 7967 | 
            +
             | 
| 7968 | 
            +
            function containsLine(coordinates, point) {
         | 
| 7969 | 
            +
              var ab = distance(coordinates[0], coordinates[1]),
         | 
| 7970 | 
            +
                  ao = distance(coordinates[0], point),
         | 
| 7971 | 
            +
                  ob = distance(point, coordinates[1]);
         | 
| 7972 | 
            +
              return ao + ob <= ab + epsilon$2;
         | 
| 7973 | 
            +
            }
         | 
| 7974 | 
            +
             | 
| 7975 | 
            +
            function containsPolygon(coordinates, point) {
         | 
| 7976 | 
            +
              return !!polygonContains(coordinates.map(ringRadians), pointRadians(point));
         | 
| 7977 | 
            +
            }
         | 
| 7978 | 
            +
             | 
| 7979 | 
            +
            function ringRadians(ring) {
         | 
| 7980 | 
            +
              return ring = ring.map(pointRadians), ring.pop(), ring;
         | 
| 7981 | 
            +
            }
         | 
| 7982 | 
            +
             | 
| 7983 | 
            +
            function pointRadians(point) {
         | 
| 7984 | 
            +
              return [point[0] * radians, point[1] * radians];
         | 
| 7985 | 
            +
            }
         | 
| 7986 | 
            +
             | 
| 7987 | 
            +
            var contains = function(object, point) {
         | 
| 7988 | 
            +
              return (object && containsObjectType.hasOwnProperty(object.type)
         | 
| 7989 | 
            +
                  ? containsObjectType[object.type]
         | 
| 7990 | 
            +
                  : containsGeometry)(object, point);
         | 
| 7991 | 
            +
            };
         | 
| 7992 | 
            +
             | 
| 7704 7993 | 
             
            function graticuleX(y0, y1, dy) {
         | 
| 7705 7994 | 
             
              var y = sequence(y0, y1 - epsilon$2, dy).concat(y1);
         | 
| 7706 7995 | 
             
              return function(x) { return y.map(function(y) { return [x, y]; }); };
         | 
| @@ -8053,16 +8342,58 @@ PathContext.prototype = { | |
| 8053 8342 | 
             
              result: noop$1
         | 
| 8054 8343 | 
             
            };
         | 
| 8055 8344 |  | 
| 8056 | 
            -
             | 
| 8057 | 
            -
             | 
| 8058 | 
            -
             | 
| 8345 | 
            +
            var lengthSum$1 = adder();
         | 
| 8346 | 
            +
            var lengthRing;
         | 
| 8347 | 
            +
            var x00$2;
         | 
| 8348 | 
            +
            var y00$2;
         | 
| 8349 | 
            +
            var x0$4;
         | 
| 8350 | 
            +
            var y0$4;
         | 
| 8059 8351 |  | 
| 8060 | 
            -
             | 
| 8061 | 
            -
               | 
| 8062 | 
            -
               | 
| 8063 | 
            -
                 | 
| 8352 | 
            +
            var lengthStream$1 = {
         | 
| 8353 | 
            +
              point: noop$1,
         | 
| 8354 | 
            +
              lineStart: function() {
         | 
| 8355 | 
            +
                lengthStream$1.point = lengthPointFirst$1;
         | 
| 8064 8356 | 
             
              },
         | 
| 8065 | 
            -
               | 
| 8357 | 
            +
              lineEnd: function() {
         | 
| 8358 | 
            +
                if (lengthRing) lengthPoint$1(x00$2, y00$2);
         | 
| 8359 | 
            +
                lengthStream$1.point = noop$1;
         | 
| 8360 | 
            +
              },
         | 
| 8361 | 
            +
              polygonStart: function() {
         | 
| 8362 | 
            +
                lengthRing = true;
         | 
| 8363 | 
            +
              },
         | 
| 8364 | 
            +
              polygonEnd: function() {
         | 
| 8365 | 
            +
                lengthRing = null;
         | 
| 8366 | 
            +
              },
         | 
| 8367 | 
            +
              result: function() {
         | 
| 8368 | 
            +
                var length = +lengthSum$1;
         | 
| 8369 | 
            +
                lengthSum$1.reset();
         | 
| 8370 | 
            +
                return length;
         | 
| 8371 | 
            +
              }
         | 
| 8372 | 
            +
            };
         | 
| 8373 | 
            +
             | 
| 8374 | 
            +
            function lengthPointFirst$1(x, y) {
         | 
| 8375 | 
            +
              lengthStream$1.point = lengthPoint$1;
         | 
| 8376 | 
            +
              x00$2 = x0$4 = x, y00$2 = y0$4 = y;
         | 
| 8377 | 
            +
            }
         | 
| 8378 | 
            +
             | 
| 8379 | 
            +
            function lengthPoint$1(x, y) {
         | 
| 8380 | 
            +
              x0$4 -= x, y0$4 -= y;
         | 
| 8381 | 
            +
              lengthSum$1.add(sqrt(x0$4 * x0$4 + y0$4 * y0$4));
         | 
| 8382 | 
            +
              x0$4 = x, y0$4 = y;
         | 
| 8383 | 
            +
            }
         | 
| 8384 | 
            +
             | 
| 8385 | 
            +
            function PathString() {
         | 
| 8386 | 
            +
              this._string = [];
         | 
| 8387 | 
            +
            }
         | 
| 8388 | 
            +
             | 
| 8389 | 
            +
            PathString.prototype = {
         | 
| 8390 | 
            +
              _radius: 4.5,
         | 
| 8391 | 
            +
              _circle: circle$1(4.5),
         | 
| 8392 | 
            +
              pointRadius: function(_) {
         | 
| 8393 | 
            +
                if ((_ = +_) !== this._radius) this._radius = _, this._circle = null;
         | 
| 8394 | 
            +
                return this;
         | 
| 8395 | 
            +
              },
         | 
| 8396 | 
            +
              polygonStart: function() {
         | 
| 8066 8397 | 
             
                this._line = 0;
         | 
| 8067 8398 | 
             
              },
         | 
| 8068 8399 | 
             
              polygonEnd: function() {
         | 
| @@ -8087,6 +8418,7 @@ PathString.prototype = { | |
| 8087 8418 | 
             
                    break;
         | 
| 8088 8419 | 
             
                  }
         | 
| 8089 8420 | 
             
                  default: {
         | 
| 8421 | 
            +
                    if (this._circle == null) this._circle = circle$1(this._radius);
         | 
| 8090 8422 | 
             
                    this._string.push("M", x, ",", y, this._circle);
         | 
| 8091 8423 | 
             
                    break;
         | 
| 8092 8424 | 
             
                  }
         | 
| @@ -8097,6 +8429,8 @@ PathString.prototype = { | |
| 8097 8429 | 
             
                  var result = this._string.join("");
         | 
| 8098 8430 | 
             
                  this._string = [];
         | 
| 8099 8431 | 
             
                  return result;
         | 
| 8432 | 
            +
                } else {
         | 
| 8433 | 
            +
                  return null;
         | 
| 8100 8434 | 
             
                }
         | 
| 8101 8435 | 
             
              }
         | 
| 8102 8436 | 
             
            };
         | 
| @@ -8126,6 +8460,11 @@ var index$1 = function(projection, context) { | |
| 8126 8460 | 
             
                return areaStream$1.result();
         | 
| 8127 8461 | 
             
              };
         | 
| 8128 8462 |  | 
| 8463 | 
            +
              path.measure = function(object) {
         | 
| 8464 | 
            +
                geoStream(object, projectionStream(lengthStream$1));
         | 
| 8465 | 
            +
                return lengthStream$1.result();
         | 
| 8466 | 
            +
              };
         | 
| 8467 | 
            +
             | 
| 8129 8468 | 
             
              path.bounds = function(object) {
         | 
| 8130 8469 | 
             
                geoStream(object, projectionStream(boundsStream$1));
         | 
| 8131 8470 | 
             
                return boundsStream$1.result();
         | 
| @@ -8156,71 +8495,6 @@ var index$1 = function(projection, context) { | |
| 8156 8495 | 
             
              return path.projection(projection).context(context);
         | 
| 8157 8496 | 
             
            };
         | 
| 8158 8497 |  | 
| 8159 | 
            -
            var sum$1 = adder();
         | 
| 8160 | 
            -
             | 
| 8161 | 
            -
            var polygonContains = function(polygon, point) {
         | 
| 8162 | 
            -
              var lambda = point[0],
         | 
| 8163 | 
            -
                  phi = point[1],
         | 
| 8164 | 
            -
                  normal = [sin$1(lambda), -cos$1(lambda), 0],
         | 
| 8165 | 
            -
                  angle = 0,
         | 
| 8166 | 
            -
                  winding = 0;
         | 
| 8167 | 
            -
             | 
| 8168 | 
            -
              sum$1.reset();
         | 
| 8169 | 
            -
             | 
| 8170 | 
            -
              for (var i = 0, n = polygon.length; i < n; ++i) {
         | 
| 8171 | 
            -
                if (!(m = (ring = polygon[i]).length)) continue;
         | 
| 8172 | 
            -
                var ring,
         | 
| 8173 | 
            -
                    m,
         | 
| 8174 | 
            -
                    point0 = ring[m - 1],
         | 
| 8175 | 
            -
                    lambda0 = point0[0],
         | 
| 8176 | 
            -
                    phi0 = point0[1] / 2 + quarterPi,
         | 
| 8177 | 
            -
                    sinPhi0 = sin$1(phi0),
         | 
| 8178 | 
            -
                    cosPhi0 = cos$1(phi0);
         | 
| 8179 | 
            -
             | 
| 8180 | 
            -
                for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) {
         | 
| 8181 | 
            -
                  var point1 = ring[j],
         | 
| 8182 | 
            -
                      lambda1 = point1[0],
         | 
| 8183 | 
            -
                      phi1 = point1[1] / 2 + quarterPi,
         | 
| 8184 | 
            -
                      sinPhi1 = sin$1(phi1),
         | 
| 8185 | 
            -
                      cosPhi1 = cos$1(phi1),
         | 
| 8186 | 
            -
                      delta = lambda1 - lambda0,
         | 
| 8187 | 
            -
                      sign$$1 = delta >= 0 ? 1 : -1,
         | 
| 8188 | 
            -
                      absDelta = sign$$1 * delta,
         | 
| 8189 | 
            -
                      antimeridian = absDelta > pi$3,
         | 
| 8190 | 
            -
                      k = sinPhi0 * sinPhi1;
         | 
| 8191 | 
            -
             | 
| 8192 | 
            -
                  sum$1.add(atan2(k * sign$$1 * sin$1(absDelta), cosPhi0 * cosPhi1 + k * cos$1(absDelta)));
         | 
| 8193 | 
            -
                  angle += antimeridian ? delta + sign$$1 * tau$3 : delta;
         | 
| 8194 | 
            -
             | 
| 8195 | 
            -
                  // Are the longitudes either side of the point’s meridian (lambda),
         | 
| 8196 | 
            -
                  // and are the latitudes smaller than the parallel (phi)?
         | 
| 8197 | 
            -
                  if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) {
         | 
| 8198 | 
            -
                    var arc = cartesianCross(cartesian(point0), cartesian(point1));
         | 
| 8199 | 
            -
                    cartesianNormalizeInPlace(arc);
         | 
| 8200 | 
            -
                    var intersection = cartesianCross(normal, arc);
         | 
| 8201 | 
            -
                    cartesianNormalizeInPlace(intersection);
         | 
| 8202 | 
            -
                    var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * asin(intersection[2]);
         | 
| 8203 | 
            -
                    if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) {
         | 
| 8204 | 
            -
                      winding += antimeridian ^ delta >= 0 ? 1 : -1;
         | 
| 8205 | 
            -
                    }
         | 
| 8206 | 
            -
                  }
         | 
| 8207 | 
            -
                }
         | 
| 8208 | 
            -
              }
         | 
| 8209 | 
            -
             | 
| 8210 | 
            -
              // First, determine whether the South pole is inside or outside:
         | 
| 8211 | 
            -
              //
         | 
| 8212 | 
            -
              // It is inside if:
         | 
| 8213 | 
            -
              // * the polygon winds around it in a clockwise direction.
         | 
| 8214 | 
            -
              // * the polygon does not (cumulatively) wind around it, but has a negative
         | 
| 8215 | 
            -
              //   (counter-clockwise) area.
         | 
| 8216 | 
            -
              //
         | 
| 8217 | 
            -
              // Second, count the (signed) number of times a segment crosses a lambda
         | 
| 8218 | 
            -
              // from the point to the South pole.  If it is zero, then the point is the
         | 
| 8219 | 
            -
              // same side as the South pole.
         | 
| 8220 | 
            -
             | 
| 8221 | 
            -
              return (angle < -epsilon$2 || angle < epsilon$2 && sum$1 < -epsilon$2) ^ (winding & 1);
         | 
| 8222 | 
            -
            };
         | 
| 8223 | 
            -
             | 
| 8224 8498 | 
             
            var clip = function(pointVisible, clipLine, interpolate, start) {
         | 
| 8225 8499 | 
             
              return function(rotate, sink) {
         | 
| 8226 8500 | 
             
                var line = clipLine(sink),
         | 
| @@ -8481,7 +8755,7 @@ var clipCircle = function(radius, delta) { | |
| 8481 8755 | 
             
                    // TODO ignore if not clipping polygons.
         | 
| 8482 8756 | 
             
                    if (v !== v0) {
         | 
| 8483 8757 | 
             
                      point2 = intersect(point0, point1);
         | 
| 8484 | 
            -
                      if (pointEqual(point0, point2) || pointEqual(point1, point2)) {
         | 
| 8758 | 
            +
                      if (!point2 || pointEqual(point0, point2) || pointEqual(point1, point2)) {
         | 
| 8485 8759 | 
             
                        point1[0] += epsilon$2;
         | 
| 8486 8760 | 
             
                        point1[1] += epsilon$2;
         | 
| 8487 8761 | 
             
                        v = visible(point1[0], point1[1]);
         | 
| @@ -9098,31 +9372,38 @@ var mercator = function() { | |
| 9098 9372 |  | 
| 9099 9373 | 
             
            function mercatorProjection(project) {
         | 
| 9100 9374 | 
             
              var m = projection(project),
         | 
| 9375 | 
            +
                  center = m.center,
         | 
| 9101 9376 | 
             
                  scale = m.scale,
         | 
| 9102 9377 | 
             
                  translate = m.translate,
         | 
| 9103 9378 | 
             
                  clipExtent = m.clipExtent,
         | 
| 9104 | 
            -
                   | 
| 9379 | 
            +
                  x0 = null, y0, x1, y1; // clip extent
         | 
| 9105 9380 |  | 
| 9106 9381 | 
             
              m.scale = function(_) {
         | 
| 9107 | 
            -
                return arguments.length ? (scale(_),  | 
| 9382 | 
            +
                return arguments.length ? (scale(_), reclip()) : scale();
         | 
| 9108 9383 | 
             
              };
         | 
| 9109 9384 |  | 
| 9110 9385 | 
             
              m.translate = function(_) {
         | 
| 9111 | 
            -
                return arguments.length ? (translate(_),  | 
| 9386 | 
            +
                return arguments.length ? (translate(_), reclip()) : translate();
         | 
| 9387 | 
            +
              };
         | 
| 9388 | 
            +
             | 
| 9389 | 
            +
              m.center = function(_) {
         | 
| 9390 | 
            +
                return arguments.length ? (center(_), reclip()) : center();
         | 
| 9112 9391 | 
             
              };
         | 
| 9113 9392 |  | 
| 9114 9393 | 
             
              m.clipExtent = function(_) {
         | 
| 9115 | 
            -
                 | 
| 9116 | 
            -
                if (clipAuto = _ == null) {
         | 
| 9117 | 
            -
                  var k = pi$3 * scale(),
         | 
| 9118 | 
            -
                      t = translate();
         | 
| 9119 | 
            -
                  _ = [[t[0] - k, t[1] - k], [t[0] + k, t[1] + k]];
         | 
| 9120 | 
            -
                }
         | 
| 9121 | 
            -
                clipExtent(_);
         | 
| 9122 | 
            -
                return m;
         | 
| 9394 | 
            +
                return arguments.length ? ((_ == null ? x0 = y0 = x1 = y1 = null : (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1])), reclip()) : x0 == null ? null : [[x0, y0], [x1, y1]];
         | 
| 9123 9395 | 
             
              };
         | 
| 9124 9396 |  | 
| 9125 | 
            -
               | 
| 9397 | 
            +
              function reclip() {
         | 
| 9398 | 
            +
                var k = pi$3 * scale(),
         | 
| 9399 | 
            +
                    t = m(rotation(m.rotate()).invert([0, 0]));
         | 
| 9400 | 
            +
                return clipExtent(x0 == null
         | 
| 9401 | 
            +
                    ? [[t[0] - k, t[1] - k], [t[0] + k, t[1] + k]] : project === mercatorRaw
         | 
| 9402 | 
            +
                    ? [[Math.max(t[0] - k, x0), y0], [Math.min(t[0] + k, x1), y1]]
         | 
| 9403 | 
            +
                    : [[x0, Math.max(t[1] - k, y0)], [x1, Math.min(t[1] + k, y1)]]);
         | 
| 9404 | 
            +
              }
         | 
| 9405 | 
            +
             | 
| 9406 | 
            +
              return reclip();
         | 
| 9126 9407 | 
             
            }
         | 
| 9127 9408 |  | 
| 9128 9409 | 
             
            function tany(y) {
         | 
| @@ -9216,7 +9497,7 @@ function scaleTranslate(kx, ky, tx, ty) { | |
| 9216 9497 | 
             
            }
         | 
| 9217 9498 |  | 
| 9218 9499 | 
             
            var identity$5 = function() {
         | 
| 9219 | 
            -
              var k = 1, tx = 0, ty = 0, sx = 1, sy = 1, transform = identity$4, // scale, translate and reflect
         | 
| 9500 | 
            +
              var k = 1, tx = 0, ty = 0, sx = 1, sy = 1, transform$$1 = identity$4, // scale, translate and reflect
         | 
| 9220 9501 | 
             
                  x0 = null, y0, x1, y1, clip = identity$4, // clip extent
         | 
| 9221 9502 | 
             
                  cache,
         | 
| 9222 9503 | 
             
                  cacheStream,
         | 
| @@ -9229,22 +9510,22 @@ var identity$5 = function() { | |
| 9229 9510 |  | 
| 9230 9511 | 
             
              return projection = {
         | 
| 9231 9512 | 
             
                stream: function(stream) {
         | 
| 9232 | 
            -
                  return cache && cacheStream === stream ? cache : cache = transform(clip(cacheStream = stream));
         | 
| 9513 | 
            +
                  return cache && cacheStream === stream ? cache : cache = transform$$1(clip(cacheStream = stream));
         | 
| 9233 9514 | 
             
                },
         | 
| 9234 9515 | 
             
                clipExtent: function(_) {
         | 
| 9235 9516 | 
             
                  return arguments.length ? (clip = _ == null ? (x0 = y0 = x1 = y1 = null, identity$4) : clipExtent(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];
         | 
| 9236 9517 | 
             
                },
         | 
| 9237 9518 | 
             
                scale: function(_) {
         | 
| 9238 | 
            -
                  return arguments.length ? (transform = scaleTranslate((k = +_) * sx, k * sy, tx, ty), reset()) : k;
         | 
| 9519 | 
            +
                  return arguments.length ? (transform$$1 = scaleTranslate((k = +_) * sx, k * sy, tx, ty), reset()) : k;
         | 
| 9239 9520 | 
             
                },
         | 
| 9240 9521 | 
             
                translate: function(_) {
         | 
| 9241 | 
            -
                  return arguments.length ? (transform = scaleTranslate(k * sx, k * sy, tx = +_[0], ty = +_[1]), reset()) : [tx, ty];
         | 
| 9522 | 
            +
                  return arguments.length ? (transform$$1 = scaleTranslate(k * sx, k * sy, tx = +_[0], ty = +_[1]), reset()) : [tx, ty];
         | 
| 9242 9523 | 
             
                },
         | 
| 9243 9524 | 
             
                reflectX: function(_) {
         | 
| 9244 | 
            -
                  return arguments.length ? (transform = scaleTranslate(k * (sx = _ ? -1 : 1), k * sy, tx, ty), reset()) : sx < 0;
         | 
| 9525 | 
            +
                  return arguments.length ? (transform$$1 = scaleTranslate(k * (sx = _ ? -1 : 1), k * sy, tx, ty), reset()) : sx < 0;
         | 
| 9245 9526 | 
             
                },
         | 
| 9246 9527 | 
             
                reflectY: function(_) {
         | 
| 9247 | 
            -
                  return arguments.length ? (transform = scaleTranslate(k * sx, k * (sy = _ ? -1 : 1), tx, ty), reset()) : sy < 0;
         | 
| 9528 | 
            +
                  return arguments.length ? (transform$$1 = scaleTranslate(k * sx, k * (sy = _ ? -1 : 1), tx, ty), reset()) : sy < 0;
         | 
| 9248 9529 | 
             
                },
         | 
| 9249 9530 | 
             
                fitExtent: function(extent, object) {
         | 
| 9250 9531 | 
             
                  return fitExtent(projection, extent, object);
         | 
| @@ -9392,6 +9673,19 @@ var cluster = function() { | |
| 9392 9673 | 
             
              return cluster;
         | 
| 9393 9674 | 
             
            };
         | 
| 9394 9675 |  | 
| 9676 | 
            +
            function count(node) {
         | 
| 9677 | 
            +
              var sum = 0,
         | 
| 9678 | 
            +
                  children = node.children,
         | 
| 9679 | 
            +
                  i = children && children.length;
         | 
| 9680 | 
            +
              if (!i) sum = 1;
         | 
| 9681 | 
            +
              else while (--i >= 0) sum += children[i].value;
         | 
| 9682 | 
            +
              node.value = sum;
         | 
| 9683 | 
            +
            }
         | 
| 9684 | 
            +
             | 
| 9685 | 
            +
            var node_count = function() {
         | 
| 9686 | 
            +
              return this.eachAfter(count);
         | 
| 9687 | 
            +
            };
         | 
| 9688 | 
            +
             | 
| 9395 9689 | 
             
            var node_each = function(callback) {
         | 
| 9396 9690 | 
             
              var node = this, current, next = [node], children, i, n;
         | 
| 9397 9691 | 
             
              do {
         | 
| @@ -9570,6 +9864,7 @@ function Node(data) { | |
| 9570 9864 |  | 
| 9571 9865 | 
             
            Node.prototype = hierarchy.prototype = {
         | 
| 9572 9866 | 
             
              constructor: Node,
         | 
| 9867 | 
            +
              count: node_count,
         | 
| 9573 9868 | 
             
              each: node_each,
         | 
| 9574 9869 | 
             
              eachAfter: node_eachAfter,
         | 
| 9575 9870 | 
             
              eachBefore: node_eachBefore,
         | 
| @@ -9583,83 +9878,92 @@ Node.prototype = hierarchy.prototype = { | |
| 9583 9878 | 
             
              copy: node_copy
         | 
| 9584 9879 | 
             
            };
         | 
| 9585 9880 |  | 
| 9586 | 
            -
             | 
| 9587 | 
            -
              this._ = value;
         | 
| 9588 | 
            -
              this.next = null;
         | 
| 9589 | 
            -
            }
         | 
| 9881 | 
            +
            var slice$3 = Array.prototype.slice;
         | 
| 9590 9882 |  | 
| 9591 | 
            -
             | 
| 9592 | 
            -
              var  | 
| 9593 | 
            -
                   | 
| 9594 | 
            -
                   | 
| 9595 | 
            -
                  node = head;
         | 
| 9883 | 
            +
            function shuffle$1(array) {
         | 
| 9884 | 
            +
              var m = array.length,
         | 
| 9885 | 
            +
                  t,
         | 
| 9886 | 
            +
                  i;
         | 
| 9596 9887 |  | 
| 9597 | 
            -
              while ( | 
| 9598 | 
            -
                 | 
| 9599 | 
            -
                 | 
| 9600 | 
            -
                 | 
| 9601 | 
            -
                array[i] =  | 
| 9888 | 
            +
              while (m) {
         | 
| 9889 | 
            +
                i = Math.random() * m-- | 0;
         | 
| 9890 | 
            +
                t = array[m];
         | 
| 9891 | 
            +
                array[m] = array[i];
         | 
| 9892 | 
            +
                array[i] = t;
         | 
| 9602 9893 | 
             
              }
         | 
| 9603 9894 |  | 
| 9604 | 
            -
              return  | 
| 9605 | 
            -
             | 
| 9606 | 
            -
                tail: node
         | 
| 9607 | 
            -
              };
         | 
| 9608 | 
            -
            };
         | 
| 9895 | 
            +
              return array;
         | 
| 9896 | 
            +
            }
         | 
| 9609 9897 |  | 
| 9610 9898 | 
             
            var enclose = function(circles) {
         | 
| 9611 | 
            -
               | 
| 9899 | 
            +
              var i = 0, n = (circles = shuffle$1(slice$3.call(circles))).length, B = [], p, e;
         | 
| 9900 | 
            +
             | 
| 9901 | 
            +
              while (i < n) {
         | 
| 9902 | 
            +
                p = circles[i];
         | 
| 9903 | 
            +
                if (e && enclosesWeak(e, p)) ++i;
         | 
| 9904 | 
            +
                else e = encloseBasis(B = extendBasis(B, p)), i = 0;
         | 
| 9905 | 
            +
              }
         | 
| 9906 | 
            +
             | 
| 9907 | 
            +
              return e;
         | 
| 9612 9908 | 
             
            };
         | 
| 9613 9909 |  | 
| 9614 | 
            -
            function  | 
| 9615 | 
            -
              var  | 
| 9616 | 
            -
                  dy = b.y - a.y,
         | 
| 9617 | 
            -
                  dr = a.r - b.r;
         | 
| 9618 | 
            -
              return dr * dr + 1e-6 > dx * dx + dy * dy;
         | 
| 9619 | 
            -
            }
         | 
| 9910 | 
            +
            function extendBasis(B, p) {
         | 
| 9911 | 
            +
              var i, j;
         | 
| 9620 9912 |  | 
| 9621 | 
            -
             | 
| 9622 | 
            -
            function encloseN(L, B) {
         | 
| 9623 | 
            -
              var circle,
         | 
| 9624 | 
            -
                  l0 = null,
         | 
| 9625 | 
            -
                  l1 = L.head,
         | 
| 9626 | 
            -
                  l2,
         | 
| 9627 | 
            -
                  p1;
         | 
| 9913 | 
            +
              if (enclosesWeakAll(p, B)) return [p];
         | 
| 9628 9914 |  | 
| 9629 | 
            -
               | 
| 9630 | 
            -
             | 
| 9631 | 
            -
                 | 
| 9632 | 
            -
             | 
| 9915 | 
            +
              // If we get here then B must have at least one element.
         | 
| 9916 | 
            +
              for (i = 0; i < B.length; ++i) {
         | 
| 9917 | 
            +
                if (enclosesNot(p, B[i])
         | 
| 9918 | 
            +
                    && enclosesWeakAll(encloseBasis2(B[i], p), B)) {
         | 
| 9919 | 
            +
                  return [B[i], p];
         | 
| 9920 | 
            +
                }
         | 
| 9633 9921 | 
             
              }
         | 
| 9634 9922 |  | 
| 9635 | 
            -
               | 
| 9636 | 
            -
             | 
| 9637 | 
            -
                 | 
| 9923 | 
            +
              // If we get here then B must have at least two elements.
         | 
| 9924 | 
            +
              for (i = 0; i < B.length - 1; ++i) {
         | 
| 9925 | 
            +
                for (j = i + 1; j < B.length; ++j) {
         | 
| 9926 | 
            +
                  if (enclosesNot(encloseBasis2(B[i], B[j]), p)
         | 
| 9927 | 
            +
                      && enclosesNot(encloseBasis2(B[i], p), B[j])
         | 
| 9928 | 
            +
                      && enclosesNot(encloseBasis2(B[j], p), B[i])
         | 
| 9929 | 
            +
                      && enclosesWeakAll(encloseBasis3(B[i], B[j], p), B)) {
         | 
| 9930 | 
            +
                    return [B[i], B[j], p];
         | 
| 9931 | 
            +
                  }
         | 
| 9932 | 
            +
                }
         | 
| 9933 | 
            +
              }
         | 
| 9638 9934 |  | 
| 9639 | 
            -
             | 
| 9640 | 
            -
             | 
| 9641 | 
            -
             | 
| 9935 | 
            +
              // If we get here then something is very wrong.
         | 
| 9936 | 
            +
              throw new Error;
         | 
| 9937 | 
            +
            }
         | 
| 9642 9938 |  | 
| 9643 | 
            -
             | 
| 9644 | 
            -
             | 
| 9645 | 
            -
             | 
| 9939 | 
            +
            function enclosesNot(a, b) {
         | 
| 9940 | 
            +
              var dr = a.r - b.r, dx = b.x - a.x, dy = b.y - a.y;
         | 
| 9941 | 
            +
              return dr < 0 || dr * dr < dx * dx + dy * dy;
         | 
| 9942 | 
            +
            }
         | 
| 9646 9943 |  | 
| 9647 | 
            -
             | 
| 9648 | 
            -
             | 
| 9649 | 
            -
             | 
| 9650 | 
            -
             | 
| 9944 | 
            +
            function enclosesWeak(a, b) {
         | 
| 9945 | 
            +
              var dr = a.r - b.r + 1e-6, dx = b.x - a.x, dy = b.y - a.y;
         | 
| 9946 | 
            +
              return dr > 0 && dr * dr > dx * dx + dy * dy;
         | 
| 9947 | 
            +
            }
         | 
| 9651 9948 |  | 
| 9652 | 
            -
             | 
| 9653 | 
            -
             | 
| 9949 | 
            +
            function enclosesWeakAll(a, B) {
         | 
| 9950 | 
            +
              for (var i = 0; i < B.length; ++i) {
         | 
| 9951 | 
            +
                if (!enclosesWeak(a, B[i])) {
         | 
| 9952 | 
            +
                  return false;
         | 
| 9654 9953 | 
             
                }
         | 
| 9655 | 
            -
                l1 = l2;
         | 
| 9656 9954 | 
             
              }
         | 
| 9955 | 
            +
              return true;
         | 
| 9956 | 
            +
            }
         | 
| 9657 9957 |  | 
| 9658 | 
            -
             | 
| 9659 | 
            -
               | 
| 9958 | 
            +
            function encloseBasis(B) {
         | 
| 9959 | 
            +
              switch (B.length) {
         | 
| 9960 | 
            +
                case 1: return encloseBasis1(B[0]);
         | 
| 9961 | 
            +
                case 2: return encloseBasis2(B[0], B[1]);
         | 
| 9962 | 
            +
                case 3: return encloseBasis3(B[0], B[1], B[2]);
         | 
| 9963 | 
            +
              }
         | 
| 9660 9964 | 
             
            }
         | 
| 9661 9965 |  | 
| 9662 | 
            -
            function  | 
| 9966 | 
            +
            function encloseBasis1(a) {
         | 
| 9663 9967 | 
             
              return {
         | 
| 9664 9968 | 
             
                x: a.x,
         | 
| 9665 9969 | 
             
                y: a.y,
         | 
| @@ -9667,7 +9971,7 @@ function enclose1(a) { | |
| 9667 9971 | 
             
              };
         | 
| 9668 9972 | 
             
            }
         | 
| 9669 9973 |  | 
| 9670 | 
            -
            function  | 
| 9974 | 
            +
            function encloseBasis2(a, b) {
         | 
| 9671 9975 | 
             
              var x1 = a.x, y1 = a.y, r1 = a.r,
         | 
| 9672 9976 | 
             
                  x2 = b.x, y2 = b.y, r2 = b.r,
         | 
| 9673 9977 | 
             
                  x21 = x2 - x1, y21 = y2 - y1, r21 = r2 - r1,
         | 
| @@ -9679,30 +9983,31 @@ function enclose2(a, b) { | |
| 9679 9983 | 
             
              };
         | 
| 9680 9984 | 
             
            }
         | 
| 9681 9985 |  | 
| 9682 | 
            -
            function  | 
| 9986 | 
            +
            function encloseBasis3(a, b, c) {
         | 
| 9683 9987 | 
             
              var x1 = a.x, y1 = a.y, r1 = a.r,
         | 
| 9684 9988 | 
             
                  x2 = b.x, y2 = b.y, r2 = b.r,
         | 
| 9685 9989 | 
             
                  x3 = c.x, y3 = c.y, r3 = c.r,
         | 
| 9686 | 
            -
                  a2 =  | 
| 9687 | 
            -
                   | 
| 9688 | 
            -
                   | 
| 9689 | 
            -
                   | 
| 9690 | 
            -
                   | 
| 9691 | 
            -
                   | 
| 9692 | 
            -
                   | 
| 9693 | 
            -
                   | 
| 9990 | 
            +
                  a2 = x1 - x2,
         | 
| 9991 | 
            +
                  a3 = x1 - x3,
         | 
| 9992 | 
            +
                  b2 = y1 - y2,
         | 
| 9993 | 
            +
                  b3 = y1 - y3,
         | 
| 9994 | 
            +
                  c2 = r2 - r1,
         | 
| 9995 | 
            +
                  c3 = r3 - r1,
         | 
| 9996 | 
            +
                  d1 = x1 * x1 + y1 * y1 - r1 * r1,
         | 
| 9997 | 
            +
                  d2 = d1 - x2 * x2 - y2 * y2 + r2 * r2,
         | 
| 9998 | 
            +
                  d3 = d1 - x3 * x3 - y3 * y3 + r3 * r3,
         | 
| 9694 9999 | 
             
                  ab = a3 * b2 - a2 * b3,
         | 
| 9695 | 
            -
                  xa = (b2 * d3 - b3 * d2) / ab - x1,
         | 
| 10000 | 
            +
                  xa = (b2 * d3 - b3 * d2) / (ab * 2) - x1,
         | 
| 9696 10001 | 
             
                  xb = (b3 * c2 - b2 * c3) / ab,
         | 
| 9697 | 
            -
                  ya = (a3 * d2 - a2 * d3) / ab - y1,
         | 
| 10002 | 
            +
                  ya = (a3 * d2 - a2 * d3) / (ab * 2) - y1,
         | 
| 9698 10003 | 
             
                  yb = (a2 * c3 - a3 * c2) / ab,
         | 
| 9699 10004 | 
             
                  A = xb * xb + yb * yb - 1,
         | 
| 9700 | 
            -
                  B = 2 * (xa * xb + ya * yb | 
| 10005 | 
            +
                  B = 2 * (r1 + xa * xb + ya * yb),
         | 
| 9701 10006 | 
             
                  C = xa * xa + ya * ya - r1 * r1,
         | 
| 9702 | 
            -
                  r = ( | 
| 10007 | 
            +
                  r = -(A ? (B + Math.sqrt(B * B - 4 * A * C)) / (2 * A) : C / B);
         | 
| 9703 10008 | 
             
              return {
         | 
| 9704 | 
            -
                x: xa + xb * r | 
| 9705 | 
            -
                y: ya + yb * r | 
| 10009 | 
            +
                x: x1 + xa + xb * r,
         | 
| 10010 | 
            +
                y: y1 + ya + yb * r,
         | 
| 9706 10011 | 
             
                r: r
         | 
| 9707 10012 | 
             
              };
         | 
| 9708 10013 | 
             
            }
         | 
| @@ -9730,12 +10035,15 @@ function intersects(a, b) { | |
| 9730 10035 | 
             
              var dx = b.x - a.x,
         | 
| 9731 10036 | 
             
                  dy = b.y - a.y,
         | 
| 9732 10037 | 
             
                  dr = a.r + b.r;
         | 
| 9733 | 
            -
              return dr * dr > dx * dx + dy * dy;
         | 
| 10038 | 
            +
              return dr * dr - 1e-6 > dx * dx + dy * dy;
         | 
| 9734 10039 | 
             
            }
         | 
| 9735 10040 |  | 
| 9736 | 
            -
            function  | 
| 9737 | 
            -
              var  | 
| 9738 | 
            -
                   | 
| 10041 | 
            +
            function score(node) {
         | 
| 10042 | 
            +
              var a = node._,
         | 
| 10043 | 
            +
                  b = node.next._,
         | 
| 10044 | 
            +
                  ab = a.r + b.r,
         | 
| 10045 | 
            +
                  dx = (a.x * b.r + b.x * a.r) / ab,
         | 
| 10046 | 
            +
                  dy = (a.y * b.r + b.y * a.r) / ab;
         | 
| 9739 10047 | 
             
              return dx * dx + dy * dy;
         | 
| 9740 10048 | 
             
            }
         | 
| 9741 10049 |  | 
| @@ -9748,7 +10056,7 @@ function Node$1(circle) { | |
| 9748 10056 | 
             
            function packEnclose(circles) {
         | 
| 9749 10057 | 
             
              if (!(n = circles.length)) return 0;
         | 
| 9750 10058 |  | 
| 9751 | 
            -
              var a, b, c, n;
         | 
| 10059 | 
            +
              var a, b, c, n, aa, ca, i, j, k, sj, sk;
         | 
| 9752 10060 |  | 
| 9753 10061 | 
             
              // Place the first circle.
         | 
| 9754 10062 | 
             
              a = circles[0], a.x = 0, a.y = 0;
         | 
| @@ -9761,15 +10069,6 @@ function packEnclose(circles) { | |
| 9761 10069 | 
             
              // Place the third circle.
         | 
| 9762 10070 | 
             
              place(b, a, c = circles[2]);
         | 
| 9763 10071 |  | 
| 9764 | 
            -
              // Initialize the weighted centroid.
         | 
| 9765 | 
            -
              var aa = a.r * a.r,
         | 
| 9766 | 
            -
                  ba = b.r * b.r,
         | 
| 9767 | 
            -
                  ca = c.r * c.r,
         | 
| 9768 | 
            -
                  oa = aa + ba + ca,
         | 
| 9769 | 
            -
                  ox = aa * a.x + ba * b.x + ca * c.x,
         | 
| 9770 | 
            -
                  oy = aa * a.y + ba * b.y + ca * c.y,
         | 
| 9771 | 
            -
                  cx, cy, i, j, k, sj, sk;
         | 
| 9772 | 
            -
             | 
| 9773 10072 | 
             
              // Initialize the front-chain using the first three circles a, b and c.
         | 
| 9774 10073 | 
             
              a = new Node$1(a), b = new Node$1(b), c = new Node$1(c);
         | 
| 9775 10074 | 
             
              a.next = c.previous = b;
         | 
| @@ -9780,48 +10079,33 @@ function packEnclose(circles) { | |
| 9780 10079 | 
             
              pack: for (i = 3; i < n; ++i) {
         | 
| 9781 10080 | 
             
                place(a._, b._, c = circles[i]), c = new Node$1(c);
         | 
| 9782 10081 |  | 
| 9783 | 
            -
                // If there are only three elements in the front-chain…
         | 
| 9784 | 
            -
                if ((k = a.previous) === (j = b.next)) {
         | 
| 9785 | 
            -
                  // If the new circle intersects the third circle,
         | 
| 9786 | 
            -
                  // rotate the front chain to try the next position.
         | 
| 9787 | 
            -
                  if (intersects(j._, c._)) {
         | 
| 9788 | 
            -
                    a = b, b = j, --i;
         | 
| 9789 | 
            -
                    continue pack;
         | 
| 9790 | 
            -
                  }
         | 
| 9791 | 
            -
                }
         | 
| 9792 | 
            -
             | 
| 9793 10082 | 
             
                // Find the closest intersecting circle on the front-chain, if any.
         | 
| 9794 | 
            -
                 | 
| 9795 | 
            -
             | 
| 9796 | 
            -
             | 
| 9797 | 
            -
             | 
| 9798 | 
            -
             | 
| 9799 | 
            -
             | 
| 9800 | 
            -
             | 
| 9801 | 
            -
                       | 
| 9802 | 
            -
                      j = j.next, sj += j._.r;
         | 
| 9803 | 
            -
                    } else {
         | 
| 9804 | 
            -
                      if (intersects(k._, c._)) {
         | 
| 9805 | 
            -
                        a = k, a.next = b, b.previous = a, --i;
         | 
| 9806 | 
            -
                        continue pack;
         | 
| 9807 | 
            -
                      }
         | 
| 9808 | 
            -
                      k = k.previous, sk += k._.r;
         | 
| 10083 | 
            +
                // “Closeness” is determined by linear distance along the front-chain.
         | 
| 10084 | 
            +
                // “Ahead” or “behind” is likewise determined by linear distance.
         | 
| 10085 | 
            +
                j = b.next, k = a.previous, sj = b._.r, sk = a._.r;
         | 
| 10086 | 
            +
                do {
         | 
| 10087 | 
            +
                  if (sj <= sk) {
         | 
| 10088 | 
            +
                    if (intersects(j._, c._)) {
         | 
| 10089 | 
            +
                      b = j, a.next = b, b.previous = a, --i;
         | 
| 10090 | 
            +
                      continue pack;
         | 
| 9809 10091 | 
             
                    }
         | 
| 9810 | 
            -
             | 
| 9811 | 
            -
             | 
| 10092 | 
            +
                    sj += j._.r, j = j.next;
         | 
| 10093 | 
            +
                  } else {
         | 
| 10094 | 
            +
                    if (intersects(k._, c._)) {
         | 
| 10095 | 
            +
                      a = k, a.next = b, b.previous = a, --i;
         | 
| 10096 | 
            +
                      continue pack;
         | 
| 10097 | 
            +
                    }
         | 
| 10098 | 
            +
                    sk += k._.r, k = k.previous;
         | 
| 10099 | 
            +
                  }
         | 
| 10100 | 
            +
                } while (j !== k.next);
         | 
| 9812 10101 |  | 
| 9813 10102 | 
             
                // Success! Insert the new circle c between a and b.
         | 
| 9814 10103 | 
             
                c.previous = a, c.next = b, a.next = b.previous = b = c;
         | 
| 9815 10104 |  | 
| 9816 | 
            -
                //  | 
| 9817 | 
            -
                 | 
| 9818 | 
            -
                ox += ca * c._.x;
         | 
| 9819 | 
            -
                oy += ca * c._.y;
         | 
| 9820 | 
            -
             | 
| 9821 | 
            -
                // Compute the new closest circle a to centroid.
         | 
| 9822 | 
            -
                aa = distance2(a._, cx = ox / oa, cy = oy / oa);
         | 
| 10105 | 
            +
                // Compute the new closest circle pair to the centroid.
         | 
| 10106 | 
            +
                aa = score(a);
         | 
| 9823 10107 | 
             
                while ((c = c.next) !== b) {
         | 
| 9824 | 
            -
                  if ((ca =  | 
| 10108 | 
            +
                  if ((ca = score(c)) < aa) {
         | 
| 9825 10109 | 
             
                    a = c, aa = ca;
         | 
| 9826 10110 | 
             
                  }
         | 
| 9827 10111 | 
             
                }
         | 
| @@ -10378,7 +10662,7 @@ function squarifyRatio(ratio, parent, x0, y0, x1, y1) { | |
| 10378 10662 | 
             
              return rows;
         | 
| 10379 10663 | 
             
            }
         | 
| 10380 10664 |  | 
| 10381 | 
            -
            var squarify = ( | 
| 10665 | 
            +
            var squarify = (function custom(ratio) {
         | 
| 10382 10666 |  | 
| 10383 10667 | 
             
              function squarify(parent, x0, y0, x1, y1) {
         | 
| 10384 10668 | 
             
                squarifyRatio(ratio, parent, x0, y0, x1, y1);
         | 
| @@ -10389,7 +10673,7 @@ var squarify = ((function custom(ratio) { | |
| 10389 10673 | 
             
              };
         | 
| 10390 10674 |  | 
| 10391 10675 | 
             
              return squarify;
         | 
| 10392 | 
            -
            }) | 
| 10676 | 
            +
            })(phi);
         | 
| 10393 10677 |  | 
| 10394 10678 | 
             
            var index$3 = function() {
         | 
| 10395 10679 | 
             
              var tile = squarify,
         | 
| @@ -10511,17 +10795,19 @@ var binary = function(parent, x0, y0, x1, y1) { | |
| 10511 10795 | 
             
                  else hi = mid;
         | 
| 10512 10796 | 
             
                }
         | 
| 10513 10797 |  | 
| 10798 | 
            +
                if ((valueTarget - sums[k - 1]) < (sums[k] - valueTarget) && i + 1 < k) --k;
         | 
| 10799 | 
            +
             | 
| 10514 10800 | 
             
                var valueLeft = sums[k] - valueOffset,
         | 
| 10515 10801 | 
             
                    valueRight = value - valueLeft;
         | 
| 10516 10802 |  | 
| 10517 | 
            -
                if (( | 
| 10518 | 
            -
                  var yk = (y0 * valueRight + y1 * valueLeft) / value;
         | 
| 10519 | 
            -
                  partition(i, k, valueLeft, x0, y0, x1, yk);
         | 
| 10520 | 
            -
                  partition(k, j, valueRight, x0, yk, x1, y1);
         | 
| 10521 | 
            -
                } else {
         | 
| 10803 | 
            +
                if ((x1 - x0) > (y1 - y0)) {
         | 
| 10522 10804 | 
             
                  var xk = (x0 * valueRight + x1 * valueLeft) / value;
         | 
| 10523 10805 | 
             
                  partition(i, k, valueLeft, x0, y0, xk, y1);
         | 
| 10524 10806 | 
             
                  partition(k, j, valueRight, xk, y0, x1, y1);
         | 
| 10807 | 
            +
                } else {
         | 
| 10808 | 
            +
                  var yk = (y0 * valueRight + y1 * valueLeft) / value;
         | 
| 10809 | 
            +
                  partition(i, k, valueLeft, x0, y0, x1, yk);
         | 
| 10810 | 
            +
                  partition(k, j, valueRight, x0, yk, x1, y1);
         | 
| 10525 10811 | 
             
                }
         | 
| 10526 10812 | 
             
              }
         | 
| 10527 10813 | 
             
            };
         | 
| @@ -10530,7 +10816,7 @@ var sliceDice = function(parent, x0, y0, x1, y1) { | |
| 10530 10816 | 
             
              (parent.depth & 1 ? treemapSlice : treemapDice)(parent, x0, y0, x1, y1);
         | 
| 10531 10817 | 
             
            };
         | 
| 10532 10818 |  | 
| 10533 | 
            -
            var resquarify = ( | 
| 10819 | 
            +
            var resquarify = (function custom(ratio) {
         | 
| 10534 10820 |  | 
| 10535 10821 | 
             
              function resquarify(parent, x0, y0, x1, y1) {
         | 
| 10536 10822 | 
             
                if ((rows = parent._squarify) && (rows.ratio === ratio)) {
         | 
| @@ -10561,7 +10847,7 @@ var resquarify = ((function custom(ratio) { | |
| 10561 10847 | 
             
              };
         | 
| 10562 10848 |  | 
| 10563 10849 | 
             
              return resquarify;
         | 
| 10564 | 
            -
            }) | 
| 10850 | 
            +
            })(phi);
         | 
| 10565 10851 |  | 
| 10566 10852 | 
             
            var area$1 = function(polygon) {
         | 
| 10567 10853 | 
             
              var i = -1,
         | 
| @@ -10604,7 +10890,7 @@ var centroid$1 = function(polygon) { | |
| 10604 10890 | 
             
            // the 3D cross product in a quadrant I Cartesian coordinate system (+x is
         | 
| 10605 10891 | 
             
            // right, +y is up). Returns a positive value if ABC is counter-clockwise,
         | 
| 10606 10892 | 
             
            // negative if clockwise, and zero if the points are collinear.
         | 
| 10607 | 
            -
            var cross = function(a, b, c) {
         | 
| 10893 | 
            +
            var cross$1 = function(a, b, c) {
         | 
| 10608 10894 | 
             
              return (b[0] - a[0]) * (c[1] - a[1]) - (b[1] - a[1]) * (c[0] - a[0]);
         | 
| 10609 10895 | 
             
            };
         | 
| 10610 10896 |  | 
| @@ -10621,7 +10907,7 @@ function computeUpperHullIndexes(points) { | |
| 10621 10907 | 
             
                  size = 2;
         | 
| 10622 10908 |  | 
| 10623 10909 | 
             
              for (var i = 2; i < n; ++i) {
         | 
| 10624 | 
            -
                while (size > 1 && cross(points[indexes[size - 2]], points[indexes[size - 1]], points[i]) <= 0) --size;
         | 
| 10910 | 
            +
                while (size > 1 && cross$1(points[indexes[size - 2]], points[indexes[size - 1]], points[i]) <= 0) --size;
         | 
| 10625 10911 | 
             
                indexes[size++] = i;
         | 
| 10626 10912 | 
             
              }
         | 
| 10627 10913 |  | 
| @@ -10656,7 +10942,7 @@ var hull = function(points) { | |
| 10656 10942 | 
             
              return hull;
         | 
| 10657 10943 | 
             
            };
         | 
| 10658 10944 |  | 
| 10659 | 
            -
            var contains = function(polygon, point) {
         | 
| 10945 | 
            +
            var contains$1 = function(polygon, point) {
         | 
| 10660 10946 | 
             
              var n = polygon.length,
         | 
| 10661 10947 | 
             
                  p = polygon[n - 1],
         | 
| 10662 10948 | 
             
                  x = point[0], y = point[1],
         | 
| @@ -10697,12 +10983,11 @@ var length$2 = function(polygon) { | |
| 10697 10983 | 
             
              return perimeter;
         | 
| 10698 10984 | 
             
            };
         | 
| 10699 10985 |  | 
| 10700 | 
            -
            var slice$ | 
| 10986 | 
            +
            var slice$4 = [].slice;
         | 
| 10701 10987 |  | 
| 10702 10988 | 
             
            var noabort = {};
         | 
| 10703 10989 |  | 
| 10704 10990 | 
             
            function Queue(size) {
         | 
| 10705 | 
            -
              if (!(size >= 1)) throw new Error;
         | 
| 10706 10991 | 
             
              this._size = size;
         | 
| 10707 10992 | 
             
              this._call =
         | 
| 10708 10993 | 
             
              this._error = null;
         | 
| @@ -10717,9 +11002,10 @@ function Queue(size) { | |
| 10717 11002 | 
             
            Queue.prototype = queue.prototype = {
         | 
| 10718 11003 | 
             
              constructor: Queue,
         | 
| 10719 11004 | 
             
              defer: function(callback) {
         | 
| 10720 | 
            -
                if (typeof callback !== "function" | 
| 11005 | 
            +
                if (typeof callback !== "function") throw new Error("invalid callback");
         | 
| 11006 | 
            +
                if (this._call) throw new Error("defer after await");
         | 
| 10721 11007 | 
             
                if (this._error != null) return this;
         | 
| 10722 | 
            -
                var t = slice$ | 
| 11008 | 
            +
                var t = slice$4.call(arguments, 1);
         | 
| 10723 11009 | 
             
                t.push(callback);
         | 
| 10724 11010 | 
             
                ++this._waiting, this._tasks.push(t);
         | 
| 10725 11011 | 
             
                poke$1(this);
         | 
| @@ -10730,13 +11016,15 @@ Queue.prototype = queue.prototype = { | |
| 10730 11016 | 
             
                return this;
         | 
| 10731 11017 | 
             
              },
         | 
| 10732 11018 | 
             
              await: function(callback) {
         | 
| 10733 | 
            -
                if (typeof callback !== "function" | 
| 11019 | 
            +
                if (typeof callback !== "function") throw new Error("invalid callback");
         | 
| 11020 | 
            +
                if (this._call) throw new Error("multiple await");
         | 
| 10734 11021 | 
             
                this._call = function(error, results) { callback.apply(null, [error].concat(results)); };
         | 
| 10735 11022 | 
             
                maybeNotify(this);
         | 
| 10736 11023 | 
             
                return this;
         | 
| 10737 11024 | 
             
              },
         | 
| 10738 11025 | 
             
              awaitAll: function(callback) {
         | 
| 10739 | 
            -
                if (typeof callback !== "function" | 
| 11026 | 
            +
                if (typeof callback !== "function") throw new Error("invalid callback");
         | 
| 11027 | 
            +
                if (this._call) throw new Error("multiple await");
         | 
| 10740 11028 | 
             
                this._call = callback;
         | 
| 10741 11029 | 
             
                maybeNotify(this);
         | 
| 10742 11030 | 
             
                return this;
         | 
| @@ -10812,66 +11100,108 @@ function maybeNotify(q) { | |
| 10812 11100 | 
             
            }
         | 
| 10813 11101 |  | 
| 10814 11102 | 
             
            function queue(concurrency) {
         | 
| 10815 | 
            -
               | 
| 11103 | 
            +
              if (concurrency == null) concurrency = Infinity;
         | 
| 11104 | 
            +
              else if (!((concurrency = +concurrency) >= 1)) throw new Error("invalid concurrency");
         | 
| 11105 | 
            +
              return new Queue(concurrency);
         | 
| 10816 11106 | 
             
            }
         | 
| 10817 11107 |  | 
| 10818 | 
            -
            var  | 
| 10819 | 
            -
               | 
| 10820 | 
            -
              max = max == null ? 1 : +max;
         | 
| 10821 | 
            -
              if (arguments.length === 1) max = min, min = 0;
         | 
| 10822 | 
            -
              else max -= min;
         | 
| 10823 | 
            -
              return function() {
         | 
| 10824 | 
            -
                return Math.random() * max + min;
         | 
| 10825 | 
            -
              };
         | 
| 11108 | 
            +
            var defaultSource$1 = function() {
         | 
| 11109 | 
            +
              return Math.random();
         | 
| 10826 11110 | 
             
            };
         | 
| 10827 11111 |  | 
| 10828 | 
            -
            var  | 
| 10829 | 
            -
               | 
| 10830 | 
            -
             | 
| 10831 | 
            -
             | 
| 10832 | 
            -
             | 
| 10833 | 
            -
                 | 
| 11112 | 
            +
            var uniform = (function sourceRandomUniform(source) {
         | 
| 11113 | 
            +
              function randomUniform(min, max) {
         | 
| 11114 | 
            +
                min = min == null ? 0 : +min;
         | 
| 11115 | 
            +
                max = max == null ? 1 : +max;
         | 
| 11116 | 
            +
                if (arguments.length === 1) max = min, min = 0;
         | 
| 11117 | 
            +
                else max -= min;
         | 
| 11118 | 
            +
                return function() {
         | 
| 11119 | 
            +
                  return source() * max + min;
         | 
| 11120 | 
            +
                };
         | 
| 11121 | 
            +
              }
         | 
| 10834 11122 |  | 
| 10835 | 
            -
             | 
| 10836 | 
            -
                if (x != null) y = x, x = null;
         | 
| 11123 | 
            +
              randomUniform.source = sourceRandomUniform;
         | 
| 10837 11124 |  | 
| 10838 | 
            -
             | 
| 10839 | 
            -
             | 
| 10840 | 
            -
                  x = Math.random() * 2 - 1;
         | 
| 10841 | 
            -
                  y = Math.random() * 2 - 1;
         | 
| 10842 | 
            -
                  r = x * x + y * y;
         | 
| 10843 | 
            -
                } while (!r || r > 1);
         | 
| 11125 | 
            +
              return randomUniform;
         | 
| 11126 | 
            +
            })(defaultSource$1);
         | 
| 10844 11127 |  | 
| 10845 | 
            -
             | 
| 10846 | 
            -
               | 
| 10847 | 
            -
             | 
| 11128 | 
            +
            var normal = (function sourceRandomNormal(source) {
         | 
| 11129 | 
            +
              function randomNormal(mu, sigma) {
         | 
| 11130 | 
            +
                var x, r;
         | 
| 11131 | 
            +
                mu = mu == null ? 0 : +mu;
         | 
| 11132 | 
            +
                sigma = sigma == null ? 1 : +sigma;
         | 
| 11133 | 
            +
                return function() {
         | 
| 11134 | 
            +
                  var y;
         | 
| 10848 11135 |  | 
| 10849 | 
            -
             | 
| 10850 | 
            -
             | 
| 10851 | 
            -
              return function() {
         | 
| 10852 | 
            -
                return Math.exp(randomNormal());
         | 
| 10853 | 
            -
              };
         | 
| 10854 | 
            -
            };
         | 
| 11136 | 
            +
                  // If available, use the second previously-generated uniform random.
         | 
| 11137 | 
            +
                  if (x != null) y = x, x = null;
         | 
| 10855 11138 |  | 
| 10856 | 
            -
             | 
| 10857 | 
            -
             | 
| 10858 | 
            -
             | 
| 10859 | 
            -
             | 
| 10860 | 
            -
             | 
| 10861 | 
            -
            };
         | 
| 11139 | 
            +
                  // Otherwise, generate a new x and y.
         | 
| 11140 | 
            +
                  else do {
         | 
| 11141 | 
            +
                    x = source() * 2 - 1;
         | 
| 11142 | 
            +
                    y = source() * 2 - 1;
         | 
| 11143 | 
            +
                    r = x * x + y * y;
         | 
| 11144 | 
            +
                  } while (!r || r > 1);
         | 
| 10862 11145 |  | 
| 10863 | 
            -
             | 
| 10864 | 
            -
             | 
| 10865 | 
            -
               | 
| 10866 | 
            -
                return randomIrwinHall() / n;
         | 
| 10867 | 
            -
              };
         | 
| 10868 | 
            -
            };
         | 
| 11146 | 
            +
                  return mu + sigma * y * Math.sqrt(-2 * Math.log(r) / r);
         | 
| 11147 | 
            +
                };
         | 
| 11148 | 
            +
              }
         | 
| 10869 11149 |  | 
| 10870 | 
            -
             | 
| 10871 | 
            -
             | 
| 10872 | 
            -
             | 
| 10873 | 
            -
             | 
| 10874 | 
            -
             | 
| 11150 | 
            +
              randomNormal.source = sourceRandomNormal;
         | 
| 11151 | 
            +
             | 
| 11152 | 
            +
              return randomNormal;
         | 
| 11153 | 
            +
            })(defaultSource$1);
         | 
| 11154 | 
            +
             | 
| 11155 | 
            +
            var logNormal = (function sourceRandomLogNormal(source) {
         | 
| 11156 | 
            +
              function randomLogNormal() {
         | 
| 11157 | 
            +
                var randomNormal = normal.source(source).apply(this, arguments);
         | 
| 11158 | 
            +
                return function() {
         | 
| 11159 | 
            +
                  return Math.exp(randomNormal());
         | 
| 11160 | 
            +
                };
         | 
| 11161 | 
            +
              }
         | 
| 11162 | 
            +
             | 
| 11163 | 
            +
              randomLogNormal.source = sourceRandomLogNormal;
         | 
| 11164 | 
            +
             | 
| 11165 | 
            +
              return randomLogNormal;
         | 
| 11166 | 
            +
            })(defaultSource$1);
         | 
| 11167 | 
            +
             | 
| 11168 | 
            +
            var irwinHall = (function sourceRandomIrwinHall(source) {
         | 
| 11169 | 
            +
              function randomIrwinHall(n) {
         | 
| 11170 | 
            +
                return function() {
         | 
| 11171 | 
            +
                  for (var sum = 0, i = 0; i < n; ++i) sum += source();
         | 
| 11172 | 
            +
                  return sum;
         | 
| 11173 | 
            +
                };
         | 
| 11174 | 
            +
              }
         | 
| 11175 | 
            +
             | 
| 11176 | 
            +
              randomIrwinHall.source = sourceRandomIrwinHall;
         | 
| 11177 | 
            +
             | 
| 11178 | 
            +
              return randomIrwinHall;
         | 
| 11179 | 
            +
            })(defaultSource$1);
         | 
| 11180 | 
            +
             | 
| 11181 | 
            +
            var bates = (function sourceRandomBates(source) {
         | 
| 11182 | 
            +
              function randomBates(n) {
         | 
| 11183 | 
            +
                var randomIrwinHall = irwinHall.source(source)(n);
         | 
| 11184 | 
            +
                return function() {
         | 
| 11185 | 
            +
                  return randomIrwinHall() / n;
         | 
| 11186 | 
            +
                };
         | 
| 11187 | 
            +
              }
         | 
| 11188 | 
            +
             | 
| 11189 | 
            +
              randomBates.source = sourceRandomBates;
         | 
| 11190 | 
            +
             | 
| 11191 | 
            +
              return randomBates;
         | 
| 11192 | 
            +
            })(defaultSource$1);
         | 
| 11193 | 
            +
             | 
| 11194 | 
            +
            var exponential$1 = (function sourceRandomExponential(source) {
         | 
| 11195 | 
            +
              function randomExponential(lambda) {
         | 
| 11196 | 
            +
                return function() {
         | 
| 11197 | 
            +
                  return -Math.log(1 - source()) / lambda;
         | 
| 11198 | 
            +
                };
         | 
| 11199 | 
            +
              }
         | 
| 11200 | 
            +
             | 
| 11201 | 
            +
              randomExponential.source = sourceRandomExponential;
         | 
| 11202 | 
            +
             | 
| 11203 | 
            +
              return randomExponential;
         | 
| 11204 | 
            +
            })(defaultSource$1);
         | 
| 10875 11205 |  | 
| 10876 11206 | 
             
            var request = function(url, callback) {
         | 
| 10877 11207 | 
             
              var request,
         | 
| @@ -11074,7 +11404,7 @@ var tsv$1 = dsv$1("text/tab-separated-values", tsvParse); | |
| 11074 11404 | 
             
            var array$2 = Array.prototype;
         | 
| 11075 11405 |  | 
| 11076 11406 | 
             
            var map$3 = array$2.map;
         | 
| 11077 | 
            -
            var slice$ | 
| 11407 | 
            +
            var slice$5 = array$2.slice;
         | 
| 11078 11408 |  | 
| 11079 11409 | 
             
            var implicit = {name: "implicit"};
         | 
| 11080 11410 |  | 
| @@ -11083,7 +11413,7 @@ function ordinal(range) { | |
| 11083 11413 | 
             
                  domain = [],
         | 
| 11084 11414 | 
             
                  unknown = implicit;
         | 
| 11085 11415 |  | 
| 11086 | 
            -
              range = range == null ? [] : slice$ | 
| 11416 | 
            +
              range = range == null ? [] : slice$5.call(range);
         | 
| 11087 11417 |  | 
| 11088 11418 | 
             
              function scale(d) {
         | 
| 11089 11419 | 
             
                var key = d + "", i = index.get(key);
         | 
| @@ -11103,7 +11433,7 @@ function ordinal(range) { | |
| 11103 11433 | 
             
              };
         | 
| 11104 11434 |  | 
| 11105 11435 | 
             
              scale.range = function(_) {
         | 
| 11106 | 
            -
                return arguments.length ? (range = slice$ | 
| 11436 | 
            +
                return arguments.length ? (range = slice$5.call(_), scale) : range.slice();
         | 
| 11107 11437 | 
             
              };
         | 
| 11108 11438 |  | 
| 11109 11439 | 
             
              scale.unknown = function(_) {
         | 
| @@ -11124,7 +11454,7 @@ function band() { | |
| 11124 11454 | 
             
              var scale = ordinal().unknown(undefined),
         | 
| 11125 11455 | 
             
                  domain = scale.domain,
         | 
| 11126 11456 | 
             
                  ordinalRange = scale.range,
         | 
| 11127 | 
            -
                  range | 
| 11457 | 
            +
                  range = [0, 1],
         | 
| 11128 11458 | 
             
                  step,
         | 
| 11129 11459 | 
             
                  bandwidth,
         | 
| 11130 11460 | 
             
                  round = false,
         | 
| @@ -11136,9 +11466,9 @@ function band() { | |
| 11136 11466 |  | 
| 11137 11467 | 
             
              function rescale() {
         | 
| 11138 11468 | 
             
                var n = domain().length,
         | 
| 11139 | 
            -
                    reverse = range | 
| 11140 | 
            -
                    start = range | 
| 11141 | 
            -
                    stop = range | 
| 11469 | 
            +
                    reverse = range[1] < range[0],
         | 
| 11470 | 
            +
                    start = range[reverse - 0],
         | 
| 11471 | 
            +
                    stop = range[1 - reverse];
         | 
| 11142 11472 | 
             
                step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);
         | 
| 11143 11473 | 
             
                if (round) step = Math.floor(step);
         | 
| 11144 11474 | 
             
                start += (stop - start - step * (n - paddingInner)) * align;
         | 
| @@ -11153,11 +11483,11 @@ function band() { | |
| 11153 11483 | 
             
              };
         | 
| 11154 11484 |  | 
| 11155 11485 | 
             
              scale.range = function(_) {
         | 
| 11156 | 
            -
                return arguments.length ? (range | 
| 11486 | 
            +
                return arguments.length ? (range = [+_[0], +_[1]], rescale()) : range.slice();
         | 
| 11157 11487 | 
             
              };
         | 
| 11158 11488 |  | 
| 11159 11489 | 
             
              scale.rangeRound = function(_) {
         | 
| 11160 | 
            -
                return range | 
| 11490 | 
            +
                return range = [+_[0], +_[1]], round = true, rescale();
         | 
| 11161 11491 | 
             
              };
         | 
| 11162 11492 |  | 
| 11163 11493 | 
             
              scale.bandwidth = function() {
         | 
| @@ -11191,7 +11521,7 @@ function band() { | |
| 11191 11521 | 
             
              scale.copy = function() {
         | 
| 11192 11522 | 
             
                return band()
         | 
| 11193 11523 | 
             
                    .domain(domain())
         | 
| 11194 | 
            -
                    .range(range | 
| 11524 | 
            +
                    .range(range)
         | 
| 11195 11525 | 
             
                    .round(round)
         | 
| 11196 11526 | 
             
                    .paddingInner(paddingInner)
         | 
| 11197 11527 | 
             
                    .paddingOuter(paddingOuter)
         | 
| @@ -11225,7 +11555,7 @@ var constant$9 = function(x) { | |
| 11225 11555 | 
             
              };
         | 
| 11226 11556 | 
             
            };
         | 
| 11227 11557 |  | 
| 11228 | 
            -
            var number$ | 
| 11558 | 
            +
            var number$2 = function(x) {
         | 
| 11229 11559 | 
             
              return +x;
         | 
| 11230 11560 | 
             
            };
         | 
| 11231 11561 |  | 
| @@ -11244,22 +11574,22 @@ function deinterpolateClamp(deinterpolate) { | |
| 11244 11574 | 
             
              };
         | 
| 11245 11575 | 
             
            }
         | 
| 11246 11576 |  | 
| 11247 | 
            -
            function reinterpolateClamp(reinterpolate) {
         | 
| 11577 | 
            +
            function reinterpolateClamp(reinterpolate$$1) {
         | 
| 11248 11578 | 
             
              return function(a, b) {
         | 
| 11249 | 
            -
                var r = reinterpolate(a = +a, b = +b);
         | 
| 11579 | 
            +
                var r = reinterpolate$$1(a = +a, b = +b);
         | 
| 11250 11580 | 
             
                return function(t) { return t <= 0 ? a : t >= 1 ? b : r(t); };
         | 
| 11251 11581 | 
             
              };
         | 
| 11252 11582 | 
             
            }
         | 
| 11253 11583 |  | 
| 11254 | 
            -
            function bimap(domain, range | 
| 11255 | 
            -
              var d0 = domain[0], d1 = domain[1], r0 = range | 
| 11256 | 
            -
              if (d1 < d0) d0 = deinterpolate(d1, d0), r0 = reinterpolate(r1, r0);
         | 
| 11257 | 
            -
              else d0 = deinterpolate(d0, d1), r0 = reinterpolate(r0, r1);
         | 
| 11584 | 
            +
            function bimap(domain, range, deinterpolate, reinterpolate$$1) {
         | 
| 11585 | 
            +
              var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];
         | 
| 11586 | 
            +
              if (d1 < d0) d0 = deinterpolate(d1, d0), r0 = reinterpolate$$1(r1, r0);
         | 
| 11587 | 
            +
              else d0 = deinterpolate(d0, d1), r0 = reinterpolate$$1(r0, r1);
         | 
| 11258 11588 | 
             
              return function(x) { return r0(d0(x)); };
         | 
| 11259 11589 | 
             
            }
         | 
| 11260 11590 |  | 
| 11261 | 
            -
            function polymap(domain, range | 
| 11262 | 
            -
              var j = Math.min(domain.length, range | 
| 11591 | 
            +
            function polymap(domain, range, deinterpolate, reinterpolate$$1) {
         | 
| 11592 | 
            +
              var j = Math.min(domain.length, range.length) - 1,
         | 
| 11263 11593 | 
             
                  d = new Array(j),
         | 
| 11264 11594 | 
             
                  r = new Array(j),
         | 
| 11265 11595 | 
             
                  i = -1;
         | 
| @@ -11267,12 +11597,12 @@ function polymap(domain, range$$1, deinterpolate, reinterpolate) { | |
| 11267 11597 | 
             
              // Reverse descending domains.
         | 
| 11268 11598 | 
             
              if (domain[j] < domain[0]) {
         | 
| 11269 11599 | 
             
                domain = domain.slice().reverse();
         | 
| 11270 | 
            -
                range | 
| 11600 | 
            +
                range = range.slice().reverse();
         | 
| 11271 11601 | 
             
              }
         | 
| 11272 11602 |  | 
| 11273 11603 | 
             
              while (++i < j) {
         | 
| 11274 11604 | 
             
                d[i] = deinterpolate(domain[i], domain[i + 1]);
         | 
| 11275 | 
            -
                r[i] = reinterpolate(range | 
| 11605 | 
            +
                r[i] = reinterpolate$$1(range[i], range[i + 1]);
         | 
| 11276 11606 | 
             
              }
         | 
| 11277 11607 |  | 
| 11278 11608 | 
             
              return function(x) {
         | 
| @@ -11291,39 +11621,39 @@ function copy(source, target) { | |
| 11291 11621 |  | 
| 11292 11622 | 
             
            // deinterpolate(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].
         | 
| 11293 11623 | 
             
            // reinterpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding domain value x in [a,b].
         | 
| 11294 | 
            -
            function continuous(deinterpolate, reinterpolate) {
         | 
| 11624 | 
            +
            function continuous(deinterpolate, reinterpolate$$1) {
         | 
| 11295 11625 | 
             
              var domain = unit,
         | 
| 11296 | 
            -
                  range | 
| 11297 | 
            -
                  interpolate | 
| 11626 | 
            +
                  range = unit,
         | 
| 11627 | 
            +
                  interpolate = interpolateValue,
         | 
| 11298 11628 | 
             
                  clamp = false,
         | 
| 11299 11629 | 
             
                  piecewise,
         | 
| 11300 11630 | 
             
                  output,
         | 
| 11301 11631 | 
             
                  input;
         | 
| 11302 11632 |  | 
| 11303 11633 | 
             
              function rescale() {
         | 
| 11304 | 
            -
                piecewise = Math.min(domain.length, range | 
| 11634 | 
            +
                piecewise = Math.min(domain.length, range.length) > 2 ? polymap : bimap;
         | 
| 11305 11635 | 
             
                output = input = null;
         | 
| 11306 11636 | 
             
                return scale;
         | 
| 11307 11637 | 
             
              }
         | 
| 11308 11638 |  | 
| 11309 11639 | 
             
              function scale(x) {
         | 
| 11310 | 
            -
                return (output || (output = piecewise(domain, range | 
| 11640 | 
            +
                return (output || (output = piecewise(domain, range, clamp ? deinterpolateClamp(deinterpolate) : deinterpolate, interpolate)))(+x);
         | 
| 11311 11641 | 
             
              }
         | 
| 11312 11642 |  | 
| 11313 11643 | 
             
              scale.invert = function(y) {
         | 
| 11314 | 
            -
                return (input || (input = piecewise(range | 
| 11644 | 
            +
                return (input || (input = piecewise(range, domain, deinterpolateLinear, clamp ? reinterpolateClamp(reinterpolate$$1) : reinterpolate$$1)))(+y);
         | 
| 11315 11645 | 
             
              };
         | 
| 11316 11646 |  | 
| 11317 11647 | 
             
              scale.domain = function(_) {
         | 
| 11318 | 
            -
                return arguments.length ? (domain = map$3.call(_, number$ | 
| 11648 | 
            +
                return arguments.length ? (domain = map$3.call(_, number$2), rescale()) : domain.slice();
         | 
| 11319 11649 | 
             
              };
         | 
| 11320 11650 |  | 
| 11321 11651 | 
             
              scale.range = function(_) {
         | 
| 11322 | 
            -
                return arguments.length ? (range | 
| 11652 | 
            +
                return arguments.length ? (range = slice$5.call(_), rescale()) : range.slice();
         | 
| 11323 11653 | 
             
              };
         | 
| 11324 11654 |  | 
| 11325 11655 | 
             
              scale.rangeRound = function(_) {
         | 
| 11326 | 
            -
                return range | 
| 11656 | 
            +
                return range = slice$5.call(_), interpolate = interpolateRound, rescale();
         | 
| 11327 11657 | 
             
              };
         | 
| 11328 11658 |  | 
| 11329 11659 | 
             
              scale.clamp = function(_) {
         | 
| @@ -11331,7 +11661,7 @@ function continuous(deinterpolate, reinterpolate) { | |
| 11331 11661 | 
             
              };
         | 
| 11332 11662 |  | 
| 11333 11663 | 
             
              scale.interpolate = function(_) {
         | 
| 11334 | 
            -
                return arguments.length ? (interpolate | 
| 11664 | 
            +
                return arguments.length ? (interpolate = _, rescale()) : interpolate;
         | 
| 11335 11665 | 
             
              };
         | 
| 11336 11666 |  | 
| 11337 11667 | 
             
              return rescale();
         | 
| @@ -11379,17 +11709,39 @@ function linearish(scale) { | |
| 11379 11709 | 
             
              };
         | 
| 11380 11710 |  | 
| 11381 11711 | 
             
              scale.nice = function(count) {
         | 
| 11712 | 
            +
                if (count == null) count = 10;
         | 
| 11713 | 
            +
             | 
| 11382 11714 | 
             
                var d = domain(),
         | 
| 11383 | 
            -
                     | 
| 11384 | 
            -
                     | 
| 11385 | 
            -
                    start = d[ | 
| 11386 | 
            -
                    stop = d[ | 
| 11387 | 
            -
                    step | 
| 11388 | 
            -
             | 
| 11389 | 
            -
                if ( | 
| 11390 | 
            -
                  step =  | 
| 11391 | 
            -
                   | 
| 11392 | 
            -
             | 
| 11715 | 
            +
                    i0 = 0,
         | 
| 11716 | 
            +
                    i1 = d.length - 1,
         | 
| 11717 | 
            +
                    start = d[i0],
         | 
| 11718 | 
            +
                    stop = d[i1],
         | 
| 11719 | 
            +
                    step;
         | 
| 11720 | 
            +
             | 
| 11721 | 
            +
                if (stop < start) {
         | 
| 11722 | 
            +
                  step = start, start = stop, stop = step;
         | 
| 11723 | 
            +
                  step = i0, i0 = i1, i1 = step;
         | 
| 11724 | 
            +
                }
         | 
| 11725 | 
            +
             | 
| 11726 | 
            +
                step = tickIncrement(start, stop, count);
         | 
| 11727 | 
            +
             | 
| 11728 | 
            +
                if (step > 0) {
         | 
| 11729 | 
            +
                  start = Math.floor(start / step) * step;
         | 
| 11730 | 
            +
                  stop = Math.ceil(stop / step) * step;
         | 
| 11731 | 
            +
                  step = tickIncrement(start, stop, count);
         | 
| 11732 | 
            +
                } else if (step < 0) {
         | 
| 11733 | 
            +
                  start = Math.ceil(start * step) / step;
         | 
| 11734 | 
            +
                  stop = Math.floor(stop * step) / step;
         | 
| 11735 | 
            +
                  step = tickIncrement(start, stop, count);
         | 
| 11736 | 
            +
                }
         | 
| 11737 | 
            +
             | 
| 11738 | 
            +
                if (step > 0) {
         | 
| 11739 | 
            +
                  d[i0] = Math.floor(start / step) * step;
         | 
| 11740 | 
            +
                  d[i1] = Math.ceil(stop / step) * step;
         | 
| 11741 | 
            +
                  domain(d);
         | 
| 11742 | 
            +
                } else if (step < 0) {
         | 
| 11743 | 
            +
                  d[i0] = Math.ceil(start * step) / step;
         | 
| 11744 | 
            +
                  d[i1] = Math.floor(stop * step) / step;
         | 
| 11393 11745 | 
             
                  domain(d);
         | 
| 11394 11746 | 
             
                }
         | 
| 11395 11747 |  | 
| @@ -11419,7 +11771,7 @@ function identity$6() { | |
| 11419 11771 | 
             
              scale.invert = scale;
         | 
| 11420 11772 |  | 
| 11421 11773 | 
             
              scale.domain = scale.range = function(_) {
         | 
| 11422 | 
            -
                return arguments.length ? (domain = map$3.call(_, number$ | 
| 11774 | 
            +
                return arguments.length ? (domain = map$3.call(_, number$2), scale) : domain.slice();
         | 
| 11423 11775 | 
             
              };
         | 
| 11424 11776 |  | 
| 11425 11777 | 
             
              scale.copy = function() {
         | 
| @@ -11606,24 +11958,24 @@ function sqrt$1() { | |
| 11606 11958 | 
             
              return pow$1().exponent(0.5);
         | 
| 11607 11959 | 
             
            }
         | 
| 11608 11960 |  | 
| 11609 | 
            -
            function quantile | 
| 11961 | 
            +
            function quantile() {
         | 
| 11610 11962 | 
             
              var domain = [],
         | 
| 11611 | 
            -
                  range | 
| 11963 | 
            +
                  range = [],
         | 
| 11612 11964 | 
             
                  thresholds = [];
         | 
| 11613 11965 |  | 
| 11614 11966 | 
             
              function rescale() {
         | 
| 11615 | 
            -
                var i = 0, n = Math.max(1, range | 
| 11967 | 
            +
                var i = 0, n = Math.max(1, range.length);
         | 
| 11616 11968 | 
             
                thresholds = new Array(n - 1);
         | 
| 11617 11969 | 
             
                while (++i < n) thresholds[i - 1] = threshold(domain, i / n);
         | 
| 11618 11970 | 
             
                return scale;
         | 
| 11619 11971 | 
             
              }
         | 
| 11620 11972 |  | 
| 11621 11973 | 
             
              function scale(x) {
         | 
| 11622 | 
            -
                if (!isNaN(x = +x)) return range | 
| 11974 | 
            +
                if (!isNaN(x = +x)) return range[bisectRight(thresholds, x)];
         | 
| 11623 11975 | 
             
              }
         | 
| 11624 11976 |  | 
| 11625 11977 | 
             
              scale.invertExtent = function(y) {
         | 
| 11626 | 
            -
                var i = range | 
| 11978 | 
            +
                var i = range.indexOf(y);
         | 
| 11627 11979 | 
             
                return i < 0 ? [NaN, NaN] : [
         | 
| 11628 11980 | 
             
                  i > 0 ? thresholds[i - 1] : domain[0],
         | 
| 11629 11981 | 
             
                  i < thresholds.length ? thresholds[i] : domain[domain.length - 1]
         | 
| @@ -11639,7 +11991,7 @@ function quantile$$1() { | |
| 11639 11991 | 
             
              };
         | 
| 11640 11992 |  | 
| 11641 11993 | 
             
              scale.range = function(_) {
         | 
| 11642 | 
            -
                return arguments.length ? (range | 
| 11994 | 
            +
                return arguments.length ? (range = slice$5.call(_), rescale()) : range.slice();
         | 
| 11643 11995 | 
             
              };
         | 
| 11644 11996 |  | 
| 11645 11997 | 
             
              scale.quantiles = function() {
         | 
| @@ -11647,9 +11999,9 @@ function quantile$$1() { | |
| 11647 11999 | 
             
              };
         | 
| 11648 12000 |  | 
| 11649 12001 | 
             
              scale.copy = function() {
         | 
| 11650 | 
            -
                return quantile | 
| 12002 | 
            +
                return quantile()
         | 
| 11651 12003 | 
             
                    .domain(domain)
         | 
| 11652 | 
            -
                    .range(range | 
| 12004 | 
            +
                    .range(range);
         | 
| 11653 12005 | 
             
              };
         | 
| 11654 12006 |  | 
| 11655 12007 | 
             
              return scale;
         | 
| @@ -11660,10 +12012,10 @@ function quantize$1() { | |
| 11660 12012 | 
             
                  x1 = 1,
         | 
| 11661 12013 | 
             
                  n = 1,
         | 
| 11662 12014 | 
             
                  domain = [0.5],
         | 
| 11663 | 
            -
                  range | 
| 12015 | 
            +
                  range = [0, 1];
         | 
| 11664 12016 |  | 
| 11665 12017 | 
             
              function scale(x) {
         | 
| 11666 | 
            -
                if (x <= x) return range | 
| 12018 | 
            +
                if (x <= x) return range[bisectRight(domain, x, 0, n)];
         | 
| 11667 12019 | 
             
              }
         | 
| 11668 12020 |  | 
| 11669 12021 | 
             
              function rescale() {
         | 
| @@ -11678,11 +12030,11 @@ function quantize$1() { | |
| 11678 12030 | 
             
              };
         | 
| 11679 12031 |  | 
| 11680 12032 | 
             
              scale.range = function(_) {
         | 
| 11681 | 
            -
                return arguments.length ? (n = (range | 
| 12033 | 
            +
                return arguments.length ? (n = (range = slice$5.call(_)).length - 1, rescale()) : range.slice();
         | 
| 11682 12034 | 
             
              };
         | 
| 11683 12035 |  | 
| 11684 12036 | 
             
              scale.invertExtent = function(y) {
         | 
| 11685 | 
            -
                var i = range | 
| 12037 | 
            +
                var i = range.indexOf(y);
         | 
| 11686 12038 | 
             
                return i < 0 ? [NaN, NaN]
         | 
| 11687 12039 | 
             
                    : i < 1 ? [x0, domain[0]]
         | 
| 11688 12040 | 
             
                    : i >= n ? [domain[n - 1], x1]
         | 
| @@ -11692,7 +12044,7 @@ function quantize$1() { | |
| 11692 12044 | 
             
              scale.copy = function() {
         | 
| 11693 12045 | 
             
                return quantize$1()
         | 
| 11694 12046 | 
             
                    .domain([x0, x1])
         | 
| 11695 | 
            -
                    .range(range | 
| 12047 | 
            +
                    .range(range);
         | 
| 11696 12048 | 
             
              };
         | 
| 11697 12049 |  | 
| 11698 12050 | 
             
              return linearish(scale);
         | 
| @@ -11700,30 +12052,30 @@ function quantize$1() { | |
| 11700 12052 |  | 
| 11701 12053 | 
             
            function threshold$1() {
         | 
| 11702 12054 | 
             
              var domain = [0.5],
         | 
| 11703 | 
            -
                  range | 
| 12055 | 
            +
                  range = [0, 1],
         | 
| 11704 12056 | 
             
                  n = 1;
         | 
| 11705 12057 |  | 
| 11706 12058 | 
             
              function scale(x) {
         | 
| 11707 | 
            -
                if (x <= x) return range | 
| 12059 | 
            +
                if (x <= x) return range[bisectRight(domain, x, 0, n)];
         | 
| 11708 12060 | 
             
              }
         | 
| 11709 12061 |  | 
| 11710 12062 | 
             
              scale.domain = function(_) {
         | 
| 11711 | 
            -
                return arguments.length ? (domain = slice$ | 
| 12063 | 
            +
                return arguments.length ? (domain = slice$5.call(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();
         | 
| 11712 12064 | 
             
              };
         | 
| 11713 12065 |  | 
| 11714 12066 | 
             
              scale.range = function(_) {
         | 
| 11715 | 
            -
                return arguments.length ? (range | 
| 12067 | 
            +
                return arguments.length ? (range = slice$5.call(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();
         | 
| 11716 12068 | 
             
              };
         | 
| 11717 12069 |  | 
| 11718 12070 | 
             
              scale.invertExtent = function(y) {
         | 
| 11719 | 
            -
                var i = range | 
| 12071 | 
            +
                var i = range.indexOf(y);
         | 
| 11720 12072 | 
             
                return [domain[i - 1], domain[i]];
         | 
| 11721 12073 | 
             
              };
         | 
| 11722 12074 |  | 
| 11723 12075 | 
             
              scale.copy = function() {
         | 
| 11724 12076 | 
             
                return threshold$1()
         | 
| 11725 12077 | 
             
                    .domain(domain)
         | 
| 11726 | 
            -
                    .range(range | 
| 12078 | 
            +
                    .range(range);
         | 
| 11727 12079 | 
             
              };
         | 
| 11728 12080 |  | 
| 11729 12081 | 
             
              return scale;
         | 
| @@ -11767,7 +12119,13 @@ function newInterval(floori, offseti, count, field) { | |
| 11767 12119 | 
             
                return newInterval(function(date) {
         | 
| 11768 12120 | 
             
                  if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);
         | 
| 11769 12121 | 
             
                }, function(date, step) {
         | 
| 11770 | 
            -
                  if (date >= date)  | 
| 12122 | 
            +
                  if (date >= date) {
         | 
| 12123 | 
            +
                    if (step < 0) while (++step <= 0) {
         | 
| 12124 | 
            +
                      while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty
         | 
| 12125 | 
            +
                    } else while (--step >= 0) {
         | 
| 12126 | 
            +
                      while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty
         | 
| 12127 | 
            +
                    }
         | 
| 12128 | 
            +
                  }
         | 
| 11771 12129 | 
             
                });
         | 
| 11772 12130 | 
             
              };
         | 
| 11773 12131 |  | 
| @@ -12620,7 +12978,7 @@ function date$1(t) { | |
| 12620 12978 | 
             
              return new Date(t);
         | 
| 12621 12979 | 
             
            }
         | 
| 12622 12980 |  | 
| 12623 | 
            -
            function number$ | 
| 12981 | 
            +
            function number$3(t) {
         | 
| 12624 12982 | 
             
              return t instanceof Date ? +t : +new Date(+t);
         | 
| 12625 12983 | 
             
            }
         | 
| 12626 12984 |  | 
| @@ -12659,39 +13017,39 @@ function calendar(year$$1, month$$1, week, day$$1, hour$$1, minute$$1, second$$1 | |
| 12659 13017 | 
             
                [  year$$1,  1,      durationYear  ]
         | 
| 12660 13018 | 
             
              ];
         | 
| 12661 13019 |  | 
| 12662 | 
            -
              function tickFormat(date) {
         | 
| 12663 | 
            -
                return (second$$1(date) < date ? formatMillisecond
         | 
| 12664 | 
            -
                    : minute$$1(date) < date ? formatSecond
         | 
| 12665 | 
            -
                    : hour$$1(date) < date ? formatMinute
         | 
| 12666 | 
            -
                    : day$$1(date) < date ? formatHour
         | 
| 12667 | 
            -
                    : month$$1(date) < date ? (week(date) < date ? formatDay : formatWeek)
         | 
| 12668 | 
            -
                    : year$$1(date) < date ? formatMonth
         | 
| 12669 | 
            -
                    : formatYear)(date);
         | 
| 13020 | 
            +
              function tickFormat(date$$1) {
         | 
| 13021 | 
            +
                return (second$$1(date$$1) < date$$1 ? formatMillisecond
         | 
| 13022 | 
            +
                    : minute$$1(date$$1) < date$$1 ? formatSecond
         | 
| 13023 | 
            +
                    : hour$$1(date$$1) < date$$1 ? formatMinute
         | 
| 13024 | 
            +
                    : day$$1(date$$1) < date$$1 ? formatHour
         | 
| 13025 | 
            +
                    : month$$1(date$$1) < date$$1 ? (week(date$$1) < date$$1 ? formatDay : formatWeek)
         | 
| 13026 | 
            +
                    : year$$1(date$$1) < date$$1 ? formatMonth
         | 
| 13027 | 
            +
                    : formatYear)(date$$1);
         | 
| 12670 13028 | 
             
              }
         | 
| 12671 13029 |  | 
| 12672 | 
            -
              function tickInterval(interval, start, stop, step) {
         | 
| 12673 | 
            -
                if (interval == null) interval = 10;
         | 
| 13030 | 
            +
              function tickInterval(interval$$1, start, stop, step) {
         | 
| 13031 | 
            +
                if (interval$$1 == null) interval$$1 = 10;
         | 
| 12674 13032 |  | 
| 12675 13033 | 
             
                // If a desired tick count is specified, pick a reasonable tick interval
         | 
| 12676 13034 | 
             
                // based on the extent of the domain and a rough estimate of tick size.
         | 
| 12677 13035 | 
             
                // Otherwise, assume interval is already a time interval and use it.
         | 
| 12678 | 
            -
                if (typeof interval === "number") {
         | 
| 12679 | 
            -
                  var target = Math.abs(stop - start) / interval,
         | 
| 13036 | 
            +
                if (typeof interval$$1 === "number") {
         | 
| 13037 | 
            +
                  var target = Math.abs(stop - start) / interval$$1,
         | 
| 12680 13038 | 
             
                      i = bisector(function(i) { return i[2]; }).right(tickIntervals, target);
         | 
| 12681 13039 | 
             
                  if (i === tickIntervals.length) {
         | 
| 12682 | 
            -
                    step = tickStep(start / durationYear, stop / durationYear, interval);
         | 
| 12683 | 
            -
                    interval = year$$1;
         | 
| 13040 | 
            +
                    step = tickStep(start / durationYear, stop / durationYear, interval$$1);
         | 
| 13041 | 
            +
                    interval$$1 = year$$1;
         | 
| 12684 13042 | 
             
                  } else if (i) {
         | 
| 12685 13043 | 
             
                    i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];
         | 
| 12686 13044 | 
             
                    step = i[1];
         | 
| 12687 | 
            -
                    interval = i[0];
         | 
| 13045 | 
            +
                    interval$$1 = i[0];
         | 
| 12688 13046 | 
             
                  } else {
         | 
| 12689 | 
            -
                    step = tickStep(start, stop, interval);
         | 
| 12690 | 
            -
                    interval = millisecond$$1;
         | 
| 13047 | 
            +
                    step = tickStep(start, stop, interval$$1);
         | 
| 13048 | 
            +
                    interval$$1 = millisecond$$1;
         | 
| 12691 13049 | 
             
                  }
         | 
| 12692 13050 | 
             
                }
         | 
| 12693 13051 |  | 
| 12694 | 
            -
                return step == null ? interval : interval.every(step);
         | 
| 13052 | 
            +
                return step == null ? interval$$1 : interval$$1.every(step);
         | 
| 12695 13053 | 
             
              }
         | 
| 12696 13054 |  | 
| 12697 13055 | 
             
              scale.invert = function(y) {
         | 
| @@ -12699,17 +13057,17 @@ function calendar(year$$1, month$$1, week, day$$1, hour$$1, minute$$1, second$$1 | |
| 12699 13057 | 
             
              };
         | 
| 12700 13058 |  | 
| 12701 13059 | 
             
              scale.domain = function(_) {
         | 
| 12702 | 
            -
                return arguments.length ? domain(map$3.call(_, number$ | 
| 13060 | 
            +
                return arguments.length ? domain(map$3.call(_, number$3)) : domain().map(date$1);
         | 
| 12703 13061 | 
             
              };
         | 
| 12704 13062 |  | 
| 12705 | 
            -
              scale.ticks = function(interval, step) {
         | 
| 13063 | 
            +
              scale.ticks = function(interval$$1, step) {
         | 
| 12706 13064 | 
             
                var d = domain(),
         | 
| 12707 13065 | 
             
                    t0 = d[0],
         | 
| 12708 13066 | 
             
                    t1 = d[d.length - 1],
         | 
| 12709 13067 | 
             
                    r = t1 < t0,
         | 
| 12710 13068 | 
             
                    t;
         | 
| 12711 13069 | 
             
                if (r) t = t0, t0 = t1, t1 = t;
         | 
| 12712 | 
            -
                t = tickInterval(interval, t0, t1, step);
         | 
| 13070 | 
            +
                t = tickInterval(interval$$1, t0, t1, step);
         | 
| 12713 13071 | 
             
                t = t ? t.range(t0, t1 + 1) : []; // inclusive stop
         | 
| 12714 13072 | 
             
                return r ? t.reverse() : t;
         | 
| 12715 13073 | 
             
              };
         | 
| @@ -12718,10 +13076,10 @@ function calendar(year$$1, month$$1, week, day$$1, hour$$1, minute$$1, second$$1 | |
| 12718 13076 | 
             
                return specifier == null ? tickFormat : format(specifier);
         | 
| 12719 13077 | 
             
              };
         | 
| 12720 13078 |  | 
| 12721 | 
            -
              scale.nice = function(interval, step) {
         | 
| 13079 | 
            +
              scale.nice = function(interval$$1, step) {
         | 
| 12722 13080 | 
             
                var d = domain();
         | 
| 12723 | 
            -
                return (interval = tickInterval(interval, d[0], d[d.length - 1], step))
         | 
| 12724 | 
            -
                    ? domain(nice(d, interval))
         | 
| 13081 | 
            +
                return (interval$$1 = tickInterval(interval$$1, d[0], d[d.length - 1], step))
         | 
| 13082 | 
            +
                    ? domain(nice(d, interval$$1))
         | 
| 12725 13083 | 
             
                    : scale;
         | 
| 12726 13084 | 
             
              };
         | 
| 12727 13085 |  | 
| @@ -12821,11 +13179,27 @@ var constant$10 = function(x) { | |
| 12821 13179 | 
             
              };
         | 
| 12822 13180 | 
             
            };
         | 
| 12823 13181 |  | 
| 13182 | 
            +
            var abs$1 = Math.abs;
         | 
| 13183 | 
            +
            var atan2$1 = Math.atan2;
         | 
| 13184 | 
            +
            var cos$2 = Math.cos;
         | 
| 13185 | 
            +
            var max$2 = Math.max;
         | 
| 13186 | 
            +
            var min$1 = Math.min;
         | 
| 13187 | 
            +
            var sin$2 = Math.sin;
         | 
| 13188 | 
            +
            var sqrt$2 = Math.sqrt;
         | 
| 13189 | 
            +
             | 
| 12824 13190 | 
             
            var epsilon$3 = 1e-12;
         | 
| 12825 13191 | 
             
            var pi$4 = Math.PI;
         | 
| 12826 13192 | 
             
            var halfPi$3 = pi$4 / 2;
         | 
| 12827 13193 | 
             
            var tau$4 = 2 * pi$4;
         | 
| 12828 13194 |  | 
| 13195 | 
            +
            function acos$1(x) {
         | 
| 13196 | 
            +
              return x > 1 ? 0 : x < -1 ? pi$4 : Math.acos(x);
         | 
| 13197 | 
            +
            }
         | 
| 13198 | 
            +
             | 
| 13199 | 
            +
            function asin$1(x) {
         | 
| 13200 | 
            +
              return x >= 1 ? halfPi$3 : x <= -1 ? -halfPi$3 : Math.asin(x);
         | 
| 13201 | 
            +
            }
         | 
| 13202 | 
            +
             | 
| 12829 13203 | 
             
            function arcInnerRadius(d) {
         | 
| 12830 13204 | 
             
              return d.innerRadius;
         | 
| 12831 13205 | 
             
            }
         | 
| @@ -12846,10 +13220,6 @@ function arcPadAngle(d) { | |
| 12846 13220 | 
             
              return d && d.padAngle; // Note: optional!
         | 
| 12847 13221 | 
             
            }
         | 
| 12848 13222 |  | 
| 12849 | 
            -
            function asin$1(x) {
         | 
| 12850 | 
            -
              return x >= 1 ? halfPi$3 : x <= -1 ? -halfPi$3 : Math.asin(x);
         | 
| 12851 | 
            -
            }
         | 
| 12852 | 
            -
             | 
| 12853 13223 | 
             
            function intersect(x0, y0, x1, y1, x2, y2, x3, y3) {
         | 
| 12854 13224 | 
             
              var x10 = x1 - x0, y10 = y1 - y0,
         | 
| 12855 13225 | 
             
                  x32 = x3 - x2, y32 = y3 - y2,
         | 
| @@ -12862,7 +13232,7 @@ function intersect(x0, y0, x1, y1, x2, y2, x3, y3) { | |
| 12862 13232 | 
             
            function cornerTangents(x0, y0, x1, y1, r1, rc, cw) {
         | 
| 12863 13233 | 
             
              var x01 = x0 - x1,
         | 
| 12864 13234 | 
             
                  y01 = y0 - y1,
         | 
| 12865 | 
            -
                  lo = (cw ? rc : -rc) /  | 
| 13235 | 
            +
                  lo = (cw ? rc : -rc) / sqrt$2(x01 * x01 + y01 * y01),
         | 
| 12866 13236 | 
             
                  ox = lo * y01,
         | 
| 12867 13237 | 
             
                  oy = -lo * x01,
         | 
| 12868 13238 | 
             
                  x11 = x0 + ox,
         | 
| @@ -12876,7 +13246,7 @@ function cornerTangents(x0, y0, x1, y1, r1, rc, cw) { | |
| 12876 13246 | 
             
                  d2 = dx * dx + dy * dy,
         | 
| 12877 13247 | 
             
                  r = r1 - rc,
         | 
| 12878 13248 | 
             
                  D = x11 * y10 - x10 * y11,
         | 
| 12879 | 
            -
                  d = (dy < 0 ? -1 : 1) *  | 
| 13249 | 
            +
                  d = (dy < 0 ? -1 : 1) * sqrt$2(max$2(0, r * r * d2 - D * D)),
         | 
| 12880 13250 | 
             
                  cx0 = (D * dy - dx * d) / d2,
         | 
| 12881 13251 | 
             
                  cy0 = (-D * dx - dy * d) / d2,
         | 
| 12882 13252 | 
             
                  cx1 = (D * dy + dx * d) / d2,
         | 
| @@ -12917,7 +13287,7 @@ var arc = function() { | |
| 12917 13287 | 
             
                    r1 = +outerRadius.apply(this, arguments),
         | 
| 12918 13288 | 
             
                    a0 = startAngle.apply(this, arguments) - halfPi$3,
         | 
| 12919 13289 | 
             
                    a1 = endAngle.apply(this, arguments) - halfPi$3,
         | 
| 12920 | 
            -
                    da =  | 
| 13290 | 
            +
                    da = abs$1(a1 - a0),
         | 
| 12921 13291 | 
             
                    cw = a1 > a0;
         | 
| 12922 13292 |  | 
| 12923 13293 | 
             
                if (!context) context = buffer = path();
         | 
| @@ -12930,10 +13300,10 @@ var arc = function() { | |
| 12930 13300 |  | 
| 12931 13301 | 
             
                // Or is it a circle or annulus?
         | 
| 12932 13302 | 
             
                else if (da > tau$4 - epsilon$3) {
         | 
| 12933 | 
            -
                  context.moveTo(r1 *  | 
| 13303 | 
            +
                  context.moveTo(r1 * cos$2(a0), r1 * sin$2(a0));
         | 
| 12934 13304 | 
             
                  context.arc(0, 0, r1, a0, a1, !cw);
         | 
| 12935 13305 | 
             
                  if (r0 > epsilon$3) {
         | 
| 12936 | 
            -
                    context.moveTo(r0 *  | 
| 13306 | 
            +
                    context.moveTo(r0 * cos$2(a1), r0 * sin$2(a1));
         | 
| 12937 13307 | 
             
                    context.arc(0, 0, r0, a1, a0, cw);
         | 
| 12938 13308 | 
             
                  }
         | 
| 12939 13309 | 
             
                }
         | 
| @@ -12947,8 +13317,8 @@ var arc = function() { | |
| 12947 13317 | 
             
                      da0 = da,
         | 
| 12948 13318 | 
             
                      da1 = da,
         | 
| 12949 13319 | 
             
                      ap = padAngle.apply(this, arguments) / 2,
         | 
| 12950 | 
            -
                      rp = (ap > epsilon$3) && (padRadius ? +padRadius.apply(this, arguments) :  | 
| 12951 | 
            -
                      rc =  | 
| 13320 | 
            +
                      rp = (ap > epsilon$3) && (padRadius ? +padRadius.apply(this, arguments) : sqrt$2(r0 * r0 + r1 * r1)),
         | 
| 13321 | 
            +
                      rc = min$1(abs$1(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),
         | 
| 12952 13322 | 
             
                      rc0 = rc,
         | 
| 12953 13323 | 
             
                      rc1 = rc,
         | 
| 12954 13324 | 
             
                      t0,
         | 
| @@ -12956,25 +13326,25 @@ var arc = function() { | |
| 12956 13326 |  | 
| 12957 13327 | 
             
                  // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.
         | 
| 12958 13328 | 
             
                  if (rp > epsilon$3) {
         | 
| 12959 | 
            -
                    var p0 = asin$1(rp / r0 *  | 
| 12960 | 
            -
                        p1 = asin$1(rp / r1 *  | 
| 13329 | 
            +
                    var p0 = asin$1(rp / r0 * sin$2(ap)),
         | 
| 13330 | 
            +
                        p1 = asin$1(rp / r1 * sin$2(ap));
         | 
| 12961 13331 | 
             
                    if ((da0 -= p0 * 2) > epsilon$3) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;
         | 
| 12962 13332 | 
             
                    else da0 = 0, a00 = a10 = (a0 + a1) / 2;
         | 
| 12963 13333 | 
             
                    if ((da1 -= p1 * 2) > epsilon$3) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;
         | 
| 12964 13334 | 
             
                    else da1 = 0, a01 = a11 = (a0 + a1) / 2;
         | 
| 12965 13335 | 
             
                  }
         | 
| 12966 13336 |  | 
| 12967 | 
            -
                  var x01 = r1 *  | 
| 12968 | 
            -
                      y01 = r1 *  | 
| 12969 | 
            -
                      x10 = r0 *  | 
| 12970 | 
            -
                      y10 = r0 *  | 
| 13337 | 
            +
                  var x01 = r1 * cos$2(a01),
         | 
| 13338 | 
            +
                      y01 = r1 * sin$2(a01),
         | 
| 13339 | 
            +
                      x10 = r0 * cos$2(a10),
         | 
| 13340 | 
            +
                      y10 = r0 * sin$2(a10);
         | 
| 12971 13341 |  | 
| 12972 13342 | 
             
                  // Apply rounded corners?
         | 
| 12973 13343 | 
             
                  if (rc > epsilon$3) {
         | 
| 12974 | 
            -
                    var x11 = r1 *  | 
| 12975 | 
            -
                        y11 = r1 *  | 
| 12976 | 
            -
                        x00 = r0 *  | 
| 12977 | 
            -
                        y00 = r0 *  | 
| 13344 | 
            +
                    var x11 = r1 * cos$2(a11),
         | 
| 13345 | 
            +
                        y11 = r1 * sin$2(a11),
         | 
| 13346 | 
            +
                        x00 = r0 * cos$2(a00),
         | 
| 13347 | 
            +
                        y00 = r0 * sin$2(a00);
         | 
| 12978 13348 |  | 
| 12979 13349 | 
             
                    // Restrict the corner radius according to the sector angle.
         | 
| 12980 13350 | 
             
                    if (da < pi$4) {
         | 
| @@ -12983,10 +13353,10 @@ var arc = function() { | |
| 12983 13353 | 
             
                          ay = y01 - oc[1],
         | 
| 12984 13354 | 
             
                          bx = x11 - oc[0],
         | 
| 12985 13355 | 
             
                          by = y11 - oc[1],
         | 
| 12986 | 
            -
                          kc = 1 /  | 
| 12987 | 
            -
                          lc =  | 
| 12988 | 
            -
                      rc0 =  | 
| 12989 | 
            -
                      rc1 =  | 
| 13356 | 
            +
                          kc = 1 / sin$2(acos$1((ax * bx + ay * by) / (sqrt$2(ax * ax + ay * ay) * sqrt$2(bx * bx + by * by))) / 2),
         | 
| 13357 | 
            +
                          lc = sqrt$2(oc[0] * oc[0] + oc[1] * oc[1]);
         | 
| 13358 | 
            +
                      rc0 = min$1(rc, (r0 - lc) / (kc - 1));
         | 
| 13359 | 
            +
                      rc1 = min$1(rc, (r1 - lc) / (kc + 1));
         | 
| 12990 13360 | 
             
                    }
         | 
| 12991 13361 | 
             
                  }
         | 
| 12992 13362 |  | 
| @@ -13001,13 +13371,13 @@ var arc = function() { | |
| 13001 13371 | 
             
                    context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);
         | 
| 13002 13372 |  | 
| 13003 13373 | 
             
                    // Have the corners merged?
         | 
| 13004 | 
            -
                    if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1,  | 
| 13374 | 
            +
                    if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2$1(t0.y01, t0.x01), atan2$1(t1.y01, t1.x01), !cw);
         | 
| 13005 13375 |  | 
| 13006 13376 | 
             
                    // Otherwise, draw the two corners and the ring.
         | 
| 13007 13377 | 
             
                    else {
         | 
| 13008 | 
            -
                      context.arc(t0.cx, t0.cy, rc1,  | 
| 13009 | 
            -
                      context.arc(0, 0, r1,  | 
| 13010 | 
            -
                      context.arc(t1.cx, t1.cy, rc1,  | 
| 13378 | 
            +
                      context.arc(t0.cx, t0.cy, rc1, atan2$1(t0.y01, t0.x01), atan2$1(t0.y11, t0.x11), !cw);
         | 
| 13379 | 
            +
                      context.arc(0, 0, r1, atan2$1(t0.cy + t0.y11, t0.cx + t0.x11), atan2$1(t1.cy + t1.y11, t1.cx + t1.x11), !cw);
         | 
| 13380 | 
            +
                      context.arc(t1.cx, t1.cy, rc1, atan2$1(t1.y11, t1.x11), atan2$1(t1.y01, t1.x01), !cw);
         | 
| 13011 13381 | 
             
                    }
         | 
| 13012 13382 | 
             
                  }
         | 
| 13013 13383 |  | 
| @@ -13026,13 +13396,13 @@ var arc = function() { | |
| 13026 13396 | 
             
                    context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);
         | 
| 13027 13397 |  | 
| 13028 13398 | 
             
                    // Have the corners merged?
         | 
| 13029 | 
            -
                    if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0,  | 
| 13399 | 
            +
                    if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2$1(t0.y01, t0.x01), atan2$1(t1.y01, t1.x01), !cw);
         | 
| 13030 13400 |  | 
| 13031 13401 | 
             
                    // Otherwise, draw the two corners and the ring.
         | 
| 13032 13402 | 
             
                    else {
         | 
| 13033 | 
            -
                      context.arc(t0.cx, t0.cy, rc0,  | 
| 13034 | 
            -
                      context.arc(0, 0, r0,  | 
| 13035 | 
            -
                      context.arc(t1.cx, t1.cy, rc0,  | 
| 13403 | 
            +
                      context.arc(t0.cx, t0.cy, rc0, atan2$1(t0.y01, t0.x01), atan2$1(t0.y11, t0.x11), !cw);
         | 
| 13404 | 
            +
                      context.arc(0, 0, r0, atan2$1(t0.cy + t0.y11, t0.cx + t0.x11), atan2$1(t1.cy + t1.y11, t1.cx + t1.x11), cw);
         | 
| 13405 | 
            +
                      context.arc(t1.cx, t1.cy, rc0, atan2$1(t1.y11, t1.x11), atan2$1(t1.y01, t1.x01), !cw);
         | 
| 13036 13406 | 
             
                    }
         | 
| 13037 13407 | 
             
                  }
         | 
| 13038 13408 |  | 
| @@ -13048,7 +13418,7 @@ var arc = function() { | |
| 13048 13418 | 
             
              arc.centroid = function() {
         | 
| 13049 13419 | 
             
                var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,
         | 
| 13050 13420 | 
             
                    a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi$4 / 2;
         | 
| 13051 | 
            -
                return [ | 
| 13421 | 
            +
                return [cos$2(a) * r, sin$2(a) * r];
         | 
| 13052 13422 | 
             
              };
         | 
| 13053 13423 |  | 
| 13054 13424 | 
             
              arc.innerRadius = function(_) {
         | 
| @@ -13127,8 +13497,8 @@ function y$3(p) { | |
| 13127 13497 | 
             
            }
         | 
| 13128 13498 |  | 
| 13129 13499 | 
             
            var line = function() {
         | 
| 13130 | 
            -
              var x | 
| 13131 | 
            -
                  y | 
| 13500 | 
            +
              var x = x$3,
         | 
| 13501 | 
            +
                  y = y$3,
         | 
| 13132 13502 | 
             
                  defined = constant$10(true),
         | 
| 13133 13503 | 
             
                  context = null,
         | 
| 13134 13504 | 
             
                  curve = curveLinear,
         | 
| @@ -13148,18 +13518,18 @@ var line = function() { | |
| 13148 13518 | 
             
                    if (defined0 = !defined0) output.lineStart();
         | 
| 13149 13519 | 
             
                    else output.lineEnd();
         | 
| 13150 13520 | 
             
                  }
         | 
| 13151 | 
            -
                  if (defined0) output.point(+x | 
| 13521 | 
            +
                  if (defined0) output.point(+x(d, i, data), +y(d, i, data));
         | 
| 13152 13522 | 
             
                }
         | 
| 13153 13523 |  | 
| 13154 13524 | 
             
                if (buffer) return output = null, buffer + "" || null;
         | 
| 13155 13525 | 
             
              }
         | 
| 13156 13526 |  | 
| 13157 13527 | 
             
              line.x = function(_) {
         | 
| 13158 | 
            -
                return arguments.length ? (x | 
| 13528 | 
            +
                return arguments.length ? (x = typeof _ === "function" ? _ : constant$10(+_), line) : x;
         | 
| 13159 13529 | 
             
              };
         | 
| 13160 13530 |  | 
| 13161 13531 | 
             
              line.y = function(_) {
         | 
| 13162 | 
            -
                return arguments.length ? (y | 
| 13532 | 
            +
                return arguments.length ? (y = typeof _ === "function" ? _ : constant$10(+_), line) : y;
         | 
| 13163 13533 | 
             
              };
         | 
| 13164 13534 |  | 
| 13165 13535 | 
             
              line.defined = function(_) {
         | 
| @@ -13399,7 +13769,7 @@ function curveRadial(curve) { | |
| 13399 13769 | 
             
              return radial;
         | 
| 13400 13770 | 
             
            }
         | 
| 13401 13771 |  | 
| 13402 | 
            -
            function  | 
| 13772 | 
            +
            function lineRadial(l) {
         | 
| 13403 13773 | 
             
              var c = l.curve;
         | 
| 13404 13774 |  | 
| 13405 13775 | 
             
              l.angle = l.x, delete l.x;
         | 
| @@ -13412,11 +13782,11 @@ function radialLine(l) { | |
| 13412 13782 | 
             
              return l;
         | 
| 13413 13783 | 
             
            }
         | 
| 13414 13784 |  | 
| 13415 | 
            -
            var  | 
| 13416 | 
            -
              return  | 
| 13785 | 
            +
            var lineRadial$1 = function() {
         | 
| 13786 | 
            +
              return lineRadial(line().curve(curveRadialLinear));
         | 
| 13417 13787 | 
             
            };
         | 
| 13418 13788 |  | 
| 13419 | 
            -
            var  | 
| 13789 | 
            +
            var areaRadial = function() {
         | 
| 13420 13790 | 
             
              var a = area$2().curve(curveRadialLinear),
         | 
| 13421 13791 | 
             
                  c = a.curve,
         | 
| 13422 13792 | 
             
                  x0 = a.lineX0,
         | 
| @@ -13430,10 +13800,10 @@ var radialArea = function() { | |
| 13430 13800 | 
             
              a.radius = a.y, delete a.y;
         | 
| 13431 13801 | 
             
              a.innerRadius = a.y0, delete a.y0;
         | 
| 13432 13802 | 
             
              a.outerRadius = a.y1, delete a.y1;
         | 
| 13433 | 
            -
              a.lineStartAngle = function() { return  | 
| 13434 | 
            -
              a.lineEndAngle = function() { return  | 
| 13435 | 
            -
              a.lineInnerRadius = function() { return  | 
| 13436 | 
            -
              a.lineOuterRadius = function() { return  | 
| 13803 | 
            +
              a.lineStartAngle = function() { return lineRadial(x0()); }, delete a.lineX0;
         | 
| 13804 | 
            +
              a.lineEndAngle = function() { return lineRadial(x1()); }, delete a.lineX1;
         | 
| 13805 | 
            +
              a.lineInnerRadius = function() { return lineRadial(y0()); }, delete a.lineY0;
         | 
| 13806 | 
            +
              a.lineOuterRadius = function() { return lineRadial(y1()); }, delete a.lineY1;
         | 
| 13437 13807 |  | 
| 13438 13808 | 
             
              a.curve = function(_) {
         | 
| 13439 13809 | 
             
                return arguments.length ? c(curveRadial(_)) : c()._curve;
         | 
| @@ -13442,6 +13812,91 @@ var radialArea = function() { | |
| 13442 13812 | 
             
              return a;
         | 
| 13443 13813 | 
             
            };
         | 
| 13444 13814 |  | 
| 13815 | 
            +
            var pointRadial = function(x, y) {
         | 
| 13816 | 
            +
              return [(y = +y) * Math.cos(x -= Math.PI / 2), y * Math.sin(x)];
         | 
| 13817 | 
            +
            };
         | 
| 13818 | 
            +
             | 
| 13819 | 
            +
            var slice$6 = Array.prototype.slice;
         | 
| 13820 | 
            +
             | 
| 13821 | 
            +
            function linkSource(d) {
         | 
| 13822 | 
            +
              return d.source;
         | 
| 13823 | 
            +
            }
         | 
| 13824 | 
            +
             | 
| 13825 | 
            +
            function linkTarget(d) {
         | 
| 13826 | 
            +
              return d.target;
         | 
| 13827 | 
            +
            }
         | 
| 13828 | 
            +
             | 
| 13829 | 
            +
            function link$2(curve) {
         | 
| 13830 | 
            +
              var source = linkSource,
         | 
| 13831 | 
            +
                  target = linkTarget,
         | 
| 13832 | 
            +
                  x = x$3,
         | 
| 13833 | 
            +
                  y = y$3,
         | 
| 13834 | 
            +
                  context = null;
         | 
| 13835 | 
            +
             | 
| 13836 | 
            +
              function link() {
         | 
| 13837 | 
            +
                var buffer, argv = slice$6.call(arguments), s = source.apply(this, argv), t = target.apply(this, argv);
         | 
| 13838 | 
            +
                if (!context) context = buffer = path();
         | 
| 13839 | 
            +
                curve(context, +x.apply(this, (argv[0] = s, argv)), +y.apply(this, argv), +x.apply(this, (argv[0] = t, argv)), +y.apply(this, argv));
         | 
| 13840 | 
            +
                if (buffer) return context = null, buffer + "" || null;
         | 
| 13841 | 
            +
              }
         | 
| 13842 | 
            +
             | 
| 13843 | 
            +
              link.source = function(_) {
         | 
| 13844 | 
            +
                return arguments.length ? (source = _, link) : source;
         | 
| 13845 | 
            +
              };
         | 
| 13846 | 
            +
             | 
| 13847 | 
            +
              link.target = function(_) {
         | 
| 13848 | 
            +
                return arguments.length ? (target = _, link) : target;
         | 
| 13849 | 
            +
              };
         | 
| 13850 | 
            +
             | 
| 13851 | 
            +
              link.x = function(_) {
         | 
| 13852 | 
            +
                return arguments.length ? (x = typeof _ === "function" ? _ : constant$10(+_), link) : x;
         | 
| 13853 | 
            +
              };
         | 
| 13854 | 
            +
             | 
| 13855 | 
            +
              link.y = function(_) {
         | 
| 13856 | 
            +
                return arguments.length ? (y = typeof _ === "function" ? _ : constant$10(+_), link) : y;
         | 
| 13857 | 
            +
              };
         | 
| 13858 | 
            +
             | 
| 13859 | 
            +
              link.context = function(_) {
         | 
| 13860 | 
            +
                return arguments.length ? ((context = _ == null ? null : _), link) : context;
         | 
| 13861 | 
            +
              };
         | 
| 13862 | 
            +
             | 
| 13863 | 
            +
              return link;
         | 
| 13864 | 
            +
            }
         | 
| 13865 | 
            +
             | 
| 13866 | 
            +
            function curveHorizontal(context, x0, y0, x1, y1) {
         | 
| 13867 | 
            +
              context.moveTo(x0, y0);
         | 
| 13868 | 
            +
              context.bezierCurveTo(x0 = (x0 + x1) / 2, y0, x0, y1, x1, y1);
         | 
| 13869 | 
            +
            }
         | 
| 13870 | 
            +
             | 
| 13871 | 
            +
            function curveVertical(context, x0, y0, x1, y1) {
         | 
| 13872 | 
            +
              context.moveTo(x0, y0);
         | 
| 13873 | 
            +
              context.bezierCurveTo(x0, y0 = (y0 + y1) / 2, x1, y0, x1, y1);
         | 
| 13874 | 
            +
            }
         | 
| 13875 | 
            +
             | 
| 13876 | 
            +
            function curveRadial$1(context, x0, y0, x1, y1) {
         | 
| 13877 | 
            +
              var p0 = pointRadial(x0, y0),
         | 
| 13878 | 
            +
                  p1 = pointRadial(x0, y0 = (y0 + y1) / 2),
         | 
| 13879 | 
            +
                  p2 = pointRadial(x1, y0),
         | 
| 13880 | 
            +
                  p3 = pointRadial(x1, y1);
         | 
| 13881 | 
            +
              context.moveTo(p0[0], p0[1]);
         | 
| 13882 | 
            +
              context.bezierCurveTo(p1[0], p1[1], p2[0], p2[1], p3[0], p3[1]);
         | 
| 13883 | 
            +
            }
         | 
| 13884 | 
            +
             | 
| 13885 | 
            +
            function linkHorizontal() {
         | 
| 13886 | 
            +
              return link$2(curveHorizontal);
         | 
| 13887 | 
            +
            }
         | 
| 13888 | 
            +
             | 
| 13889 | 
            +
            function linkVertical() {
         | 
| 13890 | 
            +
              return link$2(curveVertical);
         | 
| 13891 | 
            +
            }
         | 
| 13892 | 
            +
             | 
| 13893 | 
            +
            function linkRadial() {
         | 
| 13894 | 
            +
              var l = link$2(curveRadial$1);
         | 
| 13895 | 
            +
              l.angle = l.x, delete l.x;
         | 
| 13896 | 
            +
              l.radius = l.y, delete l.y;
         | 
| 13897 | 
            +
              return l;
         | 
| 13898 | 
            +
            }
         | 
| 13899 | 
            +
             | 
| 13445 13900 | 
             
            var circle$2 = {
         | 
| 13446 13901 | 
             
              draw: function(context, size) {
         | 
| 13447 13902 | 
             
                var r = Math.sqrt(size / pi$4);
         | 
| @@ -13450,7 +13905,7 @@ var circle$2 = { | |
| 13450 13905 | 
             
              }
         | 
| 13451 13906 | 
             
            };
         | 
| 13452 13907 |  | 
| 13453 | 
            -
            var cross$ | 
| 13908 | 
            +
            var cross$2 = {
         | 
| 13454 13909 | 
             
              draw: function(context, size) {
         | 
| 13455 13910 | 
             
                var r = Math.sqrt(size / 5) / 2;
         | 
| 13456 13911 | 
             
                context.moveTo(-3 * r, -r);
         | 
| @@ -13556,7 +14011,7 @@ var wye = { | |
| 13556 14011 |  | 
| 13557 14012 | 
             
            var symbols = [
         | 
| 13558 14013 | 
             
              circle$2,
         | 
| 13559 | 
            -
              cross$ | 
| 14014 | 
            +
              cross$2,
         | 
| 13560 14015 | 
             
              diamond,
         | 
| 13561 14016 | 
             
              square,
         | 
| 13562 14017 | 
             
              star,
         | 
| @@ -13775,7 +14230,7 @@ Bundle.prototype = { | |
| 13775 14230 | 
             
              }
         | 
| 13776 14231 | 
             
            };
         | 
| 13777 14232 |  | 
| 13778 | 
            -
            var bundle = ( | 
| 14233 | 
            +
            var bundle = (function custom(beta) {
         | 
| 13779 14234 |  | 
| 13780 14235 | 
             
              function bundle(context) {
         | 
| 13781 14236 | 
             
                return beta === 1 ? new Basis(context) : new Bundle(context, beta);
         | 
| @@ -13786,7 +14241,7 @@ var bundle = ((function custom(beta) { | |
| 13786 14241 | 
             
              };
         | 
| 13787 14242 |  | 
| 13788 14243 | 
             
              return bundle;
         | 
| 13789 | 
            -
            }) | 
| 14244 | 
            +
            })(0.85);
         | 
| 13790 14245 |  | 
| 13791 14246 | 
             
            function point$3(that, x, y) {
         | 
| 13792 14247 | 
             
              that._context.bezierCurveTo(
         | 
| @@ -13837,7 +14292,7 @@ Cardinal.prototype = { | |
| 13837 14292 | 
             
              }
         | 
| 13838 14293 | 
             
            };
         | 
| 13839 14294 |  | 
| 13840 | 
            -
            var cardinal = ( | 
| 14295 | 
            +
            var cardinal = (function custom(tension) {
         | 
| 13841 14296 |  | 
| 13842 14297 | 
             
              function cardinal(context) {
         | 
| 13843 14298 | 
             
                return new Cardinal(context, tension);
         | 
| @@ -13848,7 +14303,7 @@ var cardinal = ((function custom(tension) { | |
| 13848 14303 | 
             
              };
         | 
| 13849 14304 |  | 
| 13850 14305 | 
             
              return cardinal;
         | 
| 13851 | 
            -
            }) | 
| 14306 | 
            +
            })(0);
         | 
| 13852 14307 |  | 
| 13853 14308 | 
             
            function CardinalClosed(context, tension) {
         | 
| 13854 14309 | 
             
              this._context = context;
         | 
| @@ -13896,18 +14351,18 @@ CardinalClosed.prototype = { | |
| 13896 14351 | 
             
              }
         | 
| 13897 14352 | 
             
            };
         | 
| 13898 14353 |  | 
| 13899 | 
            -
            var cardinalClosed = ( | 
| 14354 | 
            +
            var cardinalClosed = (function custom(tension) {
         | 
| 13900 14355 |  | 
| 13901 | 
            -
              function cardinal(context) {
         | 
| 14356 | 
            +
              function cardinal$$1(context) {
         | 
| 13902 14357 | 
             
                return new CardinalClosed(context, tension);
         | 
| 13903 14358 | 
             
              }
         | 
| 13904 14359 |  | 
| 13905 | 
            -
              cardinal.tension = function(tension) {
         | 
| 14360 | 
            +
              cardinal$$1.tension = function(tension) {
         | 
| 13906 14361 | 
             
                return custom(+tension);
         | 
| 13907 14362 | 
             
              };
         | 
| 13908 14363 |  | 
| 13909 | 
            -
              return cardinal;
         | 
| 13910 | 
            -
            }) | 
| 14364 | 
            +
              return cardinal$$1;
         | 
| 14365 | 
            +
            })(0);
         | 
| 13911 14366 |  | 
| 13912 14367 | 
             
            function CardinalOpen(context, tension) {
         | 
| 13913 14368 | 
             
              this._context = context;
         | 
| @@ -13944,18 +14399,18 @@ CardinalOpen.prototype = { | |
| 13944 14399 | 
             
              }
         | 
| 13945 14400 | 
             
            };
         | 
| 13946 14401 |  | 
| 13947 | 
            -
            var cardinalOpen = ( | 
| 14402 | 
            +
            var cardinalOpen = (function custom(tension) {
         | 
| 13948 14403 |  | 
| 13949 | 
            -
              function cardinal(context) {
         | 
| 14404 | 
            +
              function cardinal$$1(context) {
         | 
| 13950 14405 | 
             
                return new CardinalOpen(context, tension);
         | 
| 13951 14406 | 
             
              }
         | 
| 13952 14407 |  | 
| 13953 | 
            -
              cardinal.tension = function(tension) {
         | 
| 14408 | 
            +
              cardinal$$1.tension = function(tension) {
         | 
| 13954 14409 | 
             
                return custom(+tension);
         | 
| 13955 14410 | 
             
              };
         | 
| 13956 14411 |  | 
| 13957 | 
            -
              return cardinal;
         | 
| 13958 | 
            -
            }) | 
| 14412 | 
            +
              return cardinal$$1;
         | 
| 14413 | 
            +
            })(0);
         | 
| 13959 14414 |  | 
| 13960 14415 | 
             
            function point$4(that, x, y) {
         | 
| 13961 14416 | 
             
              var x1 = that._x1,
         | 
| @@ -14030,7 +14485,7 @@ CatmullRom.prototype = { | |
| 14030 14485 | 
             
              }
         | 
| 14031 14486 | 
             
            };
         | 
| 14032 14487 |  | 
| 14033 | 
            -
            var catmullRom = ( | 
| 14488 | 
            +
            var catmullRom = (function custom(alpha) {
         | 
| 14034 14489 |  | 
| 14035 14490 | 
             
              function catmullRom(context) {
         | 
| 14036 14491 | 
             
                return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);
         | 
| @@ -14041,7 +14496,7 @@ var catmullRom = ((function custom(alpha) { | |
| 14041 14496 | 
             
              };
         | 
| 14042 14497 |  | 
| 14043 14498 | 
             
              return catmullRom;
         | 
| 14044 | 
            -
            }) | 
| 14499 | 
            +
            })(0.5);
         | 
| 14045 14500 |  | 
| 14046 14501 | 
             
            function CatmullRomClosed(context, alpha) {
         | 
| 14047 14502 | 
             
              this._context = context;
         | 
| @@ -14101,18 +14556,18 @@ CatmullRomClosed.prototype = { | |
| 14101 14556 | 
             
              }
         | 
| 14102 14557 | 
             
            };
         | 
| 14103 14558 |  | 
| 14104 | 
            -
            var catmullRomClosed = ( | 
| 14559 | 
            +
            var catmullRomClosed = (function custom(alpha) {
         | 
| 14105 14560 |  | 
| 14106 | 
            -
              function catmullRom(context) {
         | 
| 14561 | 
            +
              function catmullRom$$1(context) {
         | 
| 14107 14562 | 
             
                return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0);
         | 
| 14108 14563 | 
             
              }
         | 
| 14109 14564 |  | 
| 14110 | 
            -
              catmullRom.alpha = function(alpha) {
         | 
| 14565 | 
            +
              catmullRom$$1.alpha = function(alpha) {
         | 
| 14111 14566 | 
             
                return custom(+alpha);
         | 
| 14112 14567 | 
             
              };
         | 
| 14113 14568 |  | 
| 14114 | 
            -
              return catmullRom;
         | 
| 14115 | 
            -
            }) | 
| 14569 | 
            +
              return catmullRom$$1;
         | 
| 14570 | 
            +
            })(0.5);
         | 
| 14116 14571 |  | 
| 14117 14572 | 
             
            function CatmullRomOpen(context, alpha) {
         | 
| 14118 14573 | 
             
              this._context = context;
         | 
| @@ -14161,18 +14616,18 @@ CatmullRomOpen.prototype = { | |
| 14161 14616 | 
             
              }
         | 
| 14162 14617 | 
             
            };
         | 
| 14163 14618 |  | 
| 14164 | 
            -
            var catmullRomOpen = ( | 
| 14619 | 
            +
            var catmullRomOpen = (function custom(alpha) {
         | 
| 14165 14620 |  | 
| 14166 | 
            -
              function catmullRom(context) {
         | 
| 14621 | 
            +
              function catmullRom$$1(context) {
         | 
| 14167 14622 | 
             
                return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0);
         | 
| 14168 14623 | 
             
              }
         | 
| 14169 14624 |  | 
| 14170 | 
            -
              catmullRom.alpha = function(alpha) {
         | 
| 14625 | 
            +
              catmullRom$$1.alpha = function(alpha) {
         | 
| 14171 14626 | 
             
                return custom(+alpha);
         | 
| 14172 14627 | 
             
              };
         | 
| 14173 14628 |  | 
| 14174 | 
            -
              return catmullRom;
         | 
| 14175 | 
            -
            }) | 
| 14629 | 
            +
              return catmullRom$$1;
         | 
| 14630 | 
            +
            })(0.5);
         | 
| 14176 14631 |  | 
| 14177 14632 | 
             
            function LinearClosed(context) {
         | 
| 14178 14633 | 
             
              this._context = context;
         | 
| @@ -14423,13 +14878,11 @@ function stepAfter(context) { | |
| 14423 14878 | 
             
              return new Step(context, 1);
         | 
| 14424 14879 | 
             
            }
         | 
| 14425 14880 |  | 
| 14426 | 
            -
            var slice$5 = Array.prototype.slice;
         | 
| 14427 | 
            -
             | 
| 14428 14881 | 
             
            var none$1 = function(series, order) {
         | 
| 14429 14882 | 
             
              if (!((n = series.length) > 1)) return;
         | 
| 14430 | 
            -
              for (var i = 1, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) {
         | 
| 14883 | 
            +
              for (var i = 1, j, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) {
         | 
| 14431 14884 | 
             
                s0 = s1, s1 = series[order[i]];
         | 
| 14432 | 
            -
                for ( | 
| 14885 | 
            +
                for (j = 0; j < m; ++j) {
         | 
| 14433 14886 | 
             
                  s1[j][1] += s1[j][0] = isNaN(s0[j][1]) ? s0[j][0] : s0[j][1];
         | 
| 14434 14887 | 
             
                }
         | 
| 14435 14888 | 
             
              }
         | 
| @@ -14476,7 +14929,7 @@ var stack = function() { | |
| 14476 14929 | 
             
              }
         | 
| 14477 14930 |  | 
| 14478 14931 | 
             
              stack.keys = function(_) {
         | 
| 14479 | 
            -
                return arguments.length ? (keys = typeof _ === "function" ? _ : constant$10(slice$ | 
| 14932 | 
            +
                return arguments.length ? (keys = typeof _ === "function" ? _ : constant$10(slice$6.call(_)), stack) : keys;
         | 
| 14480 14933 | 
             
              };
         | 
| 14481 14934 |  | 
| 14482 14935 | 
             
              stack.value = function(_) {
         | 
| @@ -14484,7 +14937,7 @@ var stack = function() { | |
| 14484 14937 | 
             
              };
         | 
| 14485 14938 |  | 
| 14486 14939 | 
             
              stack.order = function(_) {
         | 
| 14487 | 
            -
                return arguments.length ? (order = _ == null ? none$2 : typeof _ === "function" ? _ : constant$10(slice$ | 
| 14940 | 
            +
                return arguments.length ? (order = _ == null ? none$2 : typeof _ === "function" ? _ : constant$10(slice$6.call(_)), stack) : order;
         | 
| 14488 14941 | 
             
              };
         | 
| 14489 14942 |  | 
| 14490 14943 | 
             
              stack.offset = function(_) {
         | 
| @@ -14503,6 +14956,21 @@ var expand = function(series, order) { | |
| 14503 14956 | 
             
              none$1(series, order);
         | 
| 14504 14957 | 
             
            };
         | 
| 14505 14958 |  | 
| 14959 | 
            +
            var diverging = function(series, order) {
         | 
| 14960 | 
            +
              if (!((n = series.length) > 1)) return;
         | 
| 14961 | 
            +
              for (var i, j = 0, d, dy, yp, yn, n, m = series[order[0]].length; j < m; ++j) {
         | 
| 14962 | 
            +
                for (yp = yn = 0, i = 0; i < n; ++i) {
         | 
| 14963 | 
            +
                  if ((dy = (d = series[order[i]][j])[1] - d[0]) >= 0) {
         | 
| 14964 | 
            +
                    d[0] = yp, d[1] = yp += dy;
         | 
| 14965 | 
            +
                  } else if (dy < 0) {
         | 
| 14966 | 
            +
                    d[1] = yn, d[0] = yn += dy;
         | 
| 14967 | 
            +
                  } else {
         | 
| 14968 | 
            +
                    d[0] = yp;
         | 
| 14969 | 
            +
                  }
         | 
| 14970 | 
            +
                }
         | 
| 14971 | 
            +
              }
         | 
| 14972 | 
            +
            };
         | 
| 14973 | 
            +
             | 
| 14506 14974 | 
             
            var silhouette = function(series, order) {
         | 
| 14507 14975 | 
             
              if (!((n = series.length) > 0)) return;
         | 
| 14508 14976 | 
             
              for (var j = 0, s0 = series[order[0]], n, m = s0.length; j < m; ++j) {
         | 
| @@ -15522,13 +15990,13 @@ Diagram.prototype = { | |
| 15522 15990 | 
             
            };
         | 
| 15523 15991 |  | 
| 15524 15992 | 
             
            var voronoi = function() {
         | 
| 15525 | 
            -
              var x | 
| 15526 | 
            -
                  y | 
| 15993 | 
            +
              var x = x$4,
         | 
| 15994 | 
            +
                  y = y$4,
         | 
| 15527 15995 | 
             
                  extent = null;
         | 
| 15528 15996 |  | 
| 15529 15997 | 
             
              function voronoi(data) {
         | 
| 15530 15998 | 
             
                return new Diagram(data.map(function(d, i) {
         | 
| 15531 | 
            -
                  var s = [Math.round(x | 
| 15999 | 
            +
                  var s = [Math.round(x(d, i, data) / epsilon$4) * epsilon$4, Math.round(y(d, i, data) / epsilon$4) * epsilon$4];
         | 
| 15532 16000 | 
             
                  s.index = i;
         | 
| 15533 16001 | 
             
                  s.data = d;
         | 
| 15534 16002 | 
             
                  return s;
         | 
| @@ -15548,11 +16016,11 @@ var voronoi = function() { | |
| 15548 16016 | 
             
              };
         | 
| 15549 16017 |  | 
| 15550 16018 | 
             
              voronoi.x = function(_) {
         | 
| 15551 | 
            -
                return arguments.length ? (x | 
| 16019 | 
            +
                return arguments.length ? (x = typeof _ === "function" ? _ : constant$11(+_), voronoi) : x;
         | 
| 15552 16020 | 
             
              };
         | 
| 15553 16021 |  | 
| 15554 16022 | 
             
              voronoi.y = function(_) {
         | 
| 15555 | 
            -
                return arguments.length ? (y | 
| 16023 | 
            +
                return arguments.length ? (y = typeof _ === "function" ? _ : constant$11(+_), voronoi) : y;
         | 
| 15556 16024 | 
             
              };
         | 
| 15557 16025 |  | 
| 15558 16026 | 
             
              voronoi.extent = function(_) {
         | 
| @@ -15660,9 +16128,18 @@ function defaultTransform() { | |
| 15660 16128 | 
             
              return this.__zoom || identity$8;
         | 
| 15661 16129 | 
             
            }
         | 
| 15662 16130 |  | 
| 16131 | 
            +
            function defaultWheelDelta() {
         | 
| 16132 | 
            +
              return -exports.event.deltaY * (exports.event.deltaMode ? 120 : 1) / 500;
         | 
| 16133 | 
            +
            }
         | 
| 16134 | 
            +
             | 
| 16135 | 
            +
            function touchable$1() {
         | 
| 16136 | 
            +
              return "ontouchstart" in this;
         | 
| 16137 | 
            +
            }
         | 
| 16138 | 
            +
             | 
| 15663 16139 | 
             
            var zoom = function() {
         | 
| 15664 16140 | 
             
              var filter = defaultFilter$2,
         | 
| 15665 16141 | 
             
                  extent = defaultExtent$1,
         | 
| 16142 | 
            +
                  wheelDelta = defaultWheelDelta,
         | 
| 15666 16143 | 
             
                  k0 = 0,
         | 
| 15667 16144 | 
             
                  k1 = Infinity,
         | 
| 15668 16145 | 
             
                  x0 = -k1,
         | 
| @@ -15670,36 +16147,39 @@ var zoom = function() { | |
| 15670 16147 | 
             
                  y0 = x0,
         | 
| 15671 16148 | 
             
                  y1 = x1,
         | 
| 15672 16149 | 
             
                  duration = 250,
         | 
| 15673 | 
            -
                  interpolate | 
| 16150 | 
            +
                  interpolate = interpolateZoom,
         | 
| 15674 16151 | 
             
                  gestures = [],
         | 
| 15675 16152 | 
             
                  listeners = dispatch("start", "zoom", "end"),
         | 
| 15676 16153 | 
             
                  touchstarting,
         | 
| 15677 16154 | 
             
                  touchending,
         | 
| 15678 16155 | 
             
                  touchDelay = 500,
         | 
| 15679 | 
            -
                  wheelDelay = 150 | 
| 16156 | 
            +
                  wheelDelay = 150,
         | 
| 16157 | 
            +
                  clickDistance2 = 0;
         | 
| 15680 16158 |  | 
| 15681 16159 | 
             
              function zoom(selection$$1) {
         | 
| 15682 16160 | 
             
                selection$$1
         | 
| 16161 | 
            +
                    .property("__zoom", defaultTransform)
         | 
| 15683 16162 | 
             
                    .on("wheel.zoom", wheeled)
         | 
| 15684 16163 | 
             
                    .on("mousedown.zoom", mousedowned)
         | 
| 15685 16164 | 
             
                    .on("dblclick.zoom", dblclicked)
         | 
| 16165 | 
            +
                  .filter(touchable$1)
         | 
| 15686 16166 | 
             
                    .on("touchstart.zoom", touchstarted)
         | 
| 15687 16167 | 
             
                    .on("touchmove.zoom", touchmoved)
         | 
| 15688 16168 | 
             
                    .on("touchend.zoom touchcancel.zoom", touchended)
         | 
| 15689 | 
            -
                    .style("- | 
| 15690 | 
            -
                    . | 
| 16169 | 
            +
                    .style("touch-action", "none")
         | 
| 16170 | 
            +
                    .style("-webkit-tap-highlight-color", "rgba(0,0,0,0)");
         | 
| 15691 16171 | 
             
              }
         | 
| 15692 16172 |  | 
| 15693 | 
            -
              zoom.transform = function(collection, transform) {
         | 
| 16173 | 
            +
              zoom.transform = function(collection, transform$$1) {
         | 
| 15694 16174 | 
             
                var selection$$1 = collection.selection ? collection.selection() : collection;
         | 
| 15695 16175 | 
             
                selection$$1.property("__zoom", defaultTransform);
         | 
| 15696 16176 | 
             
                if (collection !== selection$$1) {
         | 
| 15697 | 
            -
                  schedule(collection, transform);
         | 
| 16177 | 
            +
                  schedule(collection, transform$$1);
         | 
| 15698 16178 | 
             
                } else {
         | 
| 15699 16179 | 
             
                  selection$$1.interrupt().each(function() {
         | 
| 15700 16180 | 
             
                    gesture(this, arguments)
         | 
| 15701 16181 | 
             
                        .start()
         | 
| 15702 | 
            -
                        .zoom(null, typeof transform === "function" ? transform.apply(this, arguments) : transform)
         | 
| 16182 | 
            +
                        .zoom(null, typeof transform$$1 === "function" ? transform$$1.apply(this, arguments) : transform$$1)
         | 
| 15703 16183 | 
             
                        .end();
         | 
| 15704 16184 | 
             
                  });
         | 
| 15705 16185 | 
             
                }
         | 
| @@ -15733,22 +16213,34 @@ var zoom = function() { | |
| 15733 16213 | 
             
                });
         | 
| 15734 16214 | 
             
              };
         | 
| 15735 16215 |  | 
| 15736 | 
            -
              function | 
| 16216 | 
            +
              zoom.translateTo = function(selection$$1, x, y) {
         | 
| 16217 | 
            +
                zoom.transform(selection$$1, function() {
         | 
| 16218 | 
            +
                  var e = extent.apply(this, arguments),
         | 
| 16219 | 
            +
                      t = this.__zoom,
         | 
| 16220 | 
            +
                      p = centroid(e);
         | 
| 16221 | 
            +
                  return constrain(identity$8.translate(p[0], p[1]).scale(t.k).translate(
         | 
| 16222 | 
            +
                    typeof x === "function" ? -x.apply(this, arguments) : -x,
         | 
| 16223 | 
            +
                    typeof y === "function" ? -y.apply(this, arguments) : -y
         | 
| 16224 | 
            +
                  ), e);
         | 
| 16225 | 
            +
                });
         | 
| 16226 | 
            +
              };
         | 
| 16227 | 
            +
             | 
| 16228 | 
            +
              function scale(transform$$1, k) {
         | 
| 15737 16229 | 
             
                k = Math.max(k0, Math.min(k1, k));
         | 
| 15738 | 
            -
                return k === transform.k ? transform : new Transform(k, transform.x, transform.y);
         | 
| 16230 | 
            +
                return k === transform$$1.k ? transform$$1 : new Transform(k, transform$$1.x, transform$$1.y);
         | 
| 15739 16231 | 
             
              }
         | 
| 15740 16232 |  | 
| 15741 | 
            -
              function translate(transform, p0, p1) {
         | 
| 15742 | 
            -
                var x = p0[0] - p1[0] * transform.k, y = p0[1] - p1[1] * transform.k;
         | 
| 15743 | 
            -
                return x === transform.x && y === transform.y ? transform : new Transform(transform.k, x, y);
         | 
| 16233 | 
            +
              function translate(transform$$1, p0, p1) {
         | 
| 16234 | 
            +
                var x = p0[0] - p1[0] * transform$$1.k, y = p0[1] - p1[1] * transform$$1.k;
         | 
| 16235 | 
            +
                return x === transform$$1.x && y === transform$$1.y ? transform$$1 : new Transform(transform$$1.k, x, y);
         | 
| 15744 16236 | 
             
              }
         | 
| 15745 16237 |  | 
| 15746 | 
            -
              function constrain(transform, extent) {
         | 
| 15747 | 
            -
                var dx0 = transform.invertX(extent[0][0]) - x0,
         | 
| 15748 | 
            -
                    dx1 = transform.invertX(extent[1][0]) - x1,
         | 
| 15749 | 
            -
                    dy0 = transform.invertY(extent[0][1]) - y0,
         | 
| 15750 | 
            -
                    dy1 = transform.invertY(extent[1][1]) - y1;
         | 
| 15751 | 
            -
                return transform.translate(
         | 
| 16238 | 
            +
              function constrain(transform$$1, extent) {
         | 
| 16239 | 
            +
                var dx0 = transform$$1.invertX(extent[0][0]) - x0,
         | 
| 16240 | 
            +
                    dx1 = transform$$1.invertX(extent[1][0]) - x1,
         | 
| 16241 | 
            +
                    dy0 = transform$$1.invertY(extent[0][1]) - y0,
         | 
| 16242 | 
            +
                    dy1 = transform$$1.invertY(extent[1][1]) - y1;
         | 
| 16243 | 
            +
                return transform$$1.translate(
         | 
| 15752 16244 | 
             
                  dx1 > dx0 ? (dx0 + dx1) / 2 : Math.min(0, dx0) || Math.max(0, dx1),
         | 
| 15753 16245 | 
             
                  dy1 > dy0 ? (dy0 + dy1) / 2 : Math.min(0, dy0) || Math.max(0, dy1)
         | 
| 15754 16246 | 
             
                );
         | 
| @@ -15758,7 +16250,7 @@ var zoom = function() { | |
| 15758 16250 | 
             
                return [(+extent[0][0] + +extent[1][0]) / 2, (+extent[0][1] + +extent[1][1]) / 2];
         | 
| 15759 16251 | 
             
              }
         | 
| 15760 16252 |  | 
| 15761 | 
            -
              function schedule(transition$$1, transform, center) {
         | 
| 16253 | 
            +
              function schedule(transition$$1, transform$$1, center) {
         | 
| 15762 16254 | 
             
                transition$$1
         | 
| 15763 16255 | 
             
                    .on("start.zoom", function() { gesture(this, arguments).start(); })
         | 
| 15764 16256 | 
             
                    .on("interrupt.zoom end.zoom", function() { gesture(this, arguments).end(); })
         | 
| @@ -15770,8 +16262,8 @@ var zoom = function() { | |
| 15770 16262 | 
             
                          p = center || centroid(e),
         | 
| 15771 16263 | 
             
                          w = Math.max(e[1][0] - e[0][0], e[1][1] - e[0][1]),
         | 
| 15772 16264 | 
             
                          a = that.__zoom,
         | 
| 15773 | 
            -
                          b = typeof transform === "function" ? transform.apply(that, args) : transform,
         | 
| 15774 | 
            -
                          i = interpolate | 
| 16265 | 
            +
                          b = typeof transform$$1 === "function" ? transform$$1.apply(that, args) : transform$$1,
         | 
| 16266 | 
            +
                          i = interpolate(a.invert(p).concat(w / a.k), b.invert(p).concat(w / b.k));
         | 
| 15775 16267 | 
             
                      return function(t) {
         | 
| 15776 16268 | 
             
                        if (t === 1) t = b; // Avoid rounding error on end.
         | 
| 15777 16269 | 
             
                        else { var l = i(t), k = w / l[2]; t = new Transform(k, p[0] - l[0] * k, p[1] - l[1] * k); }
         | 
| @@ -15805,11 +16297,11 @@ var zoom = function() { | |
| 15805 16297 | 
             
                  }
         | 
| 15806 16298 | 
             
                  return this;
         | 
| 15807 16299 | 
             
                },
         | 
| 15808 | 
            -
                zoom: function(key, transform) {
         | 
| 15809 | 
            -
                  if (this.mouse && key !== "mouse") this.mouse[1] = transform.invert(this.mouse[0]);
         | 
| 15810 | 
            -
                  if (this.touch0 && key !== "touch") this.touch0[1] = transform.invert(this.touch0[0]);
         | 
| 15811 | 
            -
                  if (this.touch1 && key !== "touch") this.touch1[1] = transform.invert(this.touch1[0]);
         | 
| 15812 | 
            -
                  this.that.__zoom = transform;
         | 
| 16300 | 
            +
                zoom: function(key, transform$$1) {
         | 
| 16301 | 
            +
                  if (this.mouse && key !== "mouse") this.mouse[1] = transform$$1.invert(this.mouse[0]);
         | 
| 16302 | 
            +
                  if (this.touch0 && key !== "touch") this.touch0[1] = transform$$1.invert(this.touch0[0]);
         | 
| 16303 | 
            +
                  if (this.touch1 && key !== "touch") this.touch1[1] = transform$$1.invert(this.touch1[0]);
         | 
| 16304 | 
            +
                  this.that.__zoom = transform$$1;
         | 
| 15813 16305 | 
             
                  this.emit("zoom");
         | 
| 15814 16306 | 
             
                  return this;
         | 
| 15815 16307 | 
             
                },
         | 
| @@ -15830,7 +16322,7 @@ var zoom = function() { | |
| 15830 16322 | 
             
                if (!filter.apply(this, arguments)) return;
         | 
| 15831 16323 | 
             
                var g = gesture(this, arguments),
         | 
| 15832 16324 | 
             
                    t = this.__zoom,
         | 
| 15833 | 
            -
                    k = Math.max(k0, Math.min(k1, t.k * Math.pow(2,  | 
| 16325 | 
            +
                    k = Math.max(k0, Math.min(k1, t.k * Math.pow(2, wheelDelta.apply(this, arguments)))),
         | 
| 15834 16326 | 
             
                    p = mouse(this);
         | 
| 15835 16327 |  | 
| 15836 16328 | 
             
                // If the mouse is in the same location as before, reuse it.
         | 
| @@ -15866,7 +16358,9 @@ var zoom = function() { | |
| 15866 16358 | 
             
                if (touchending || !filter.apply(this, arguments)) return;
         | 
| 15867 16359 | 
             
                var g = gesture(this, arguments),
         | 
| 15868 16360 | 
             
                    v = select(exports.event.view).on("mousemove.zoom", mousemoved, true).on("mouseup.zoom", mouseupped, true),
         | 
| 15869 | 
            -
                    p = mouse(this) | 
| 16361 | 
            +
                    p = mouse(this),
         | 
| 16362 | 
            +
                    x0 = exports.event.clientX,
         | 
| 16363 | 
            +
                    y0 = exports.event.clientY;
         | 
| 15870 16364 |  | 
| 15871 16365 | 
             
                dragDisable(exports.event.view);
         | 
| 15872 16366 | 
             
                nopropagation$2();
         | 
| @@ -15876,7 +16370,10 @@ var zoom = function() { | |
| 15876 16370 |  | 
| 15877 16371 | 
             
                function mousemoved() {
         | 
| 15878 16372 | 
             
                  noevent$2();
         | 
| 15879 | 
            -
                  g.moved  | 
| 16373 | 
            +
                  if (!g.moved) {
         | 
| 16374 | 
            +
                    var dx = exports.event.clientX - x0, dy = exports.event.clientY - y0;
         | 
| 16375 | 
            +
                    g.moved = dx * dx + dy * dy > clickDistance2;
         | 
| 16376 | 
            +
                  }
         | 
| 15880 16377 | 
             
                  g.zoom("mouse", constrain(translate(g.that.__zoom, g.mouse[0] = mouse(g.that), g.mouse[1]), g.extent));
         | 
| 15881 16378 | 
             
                }
         | 
| 15882 16379 |  | 
| @@ -15975,9 +16472,14 @@ var zoom = function() { | |
| 15975 16472 | 
             
                  else if (g.touch1 && g.touch1[2] === t.identifier) delete g.touch1;
         | 
| 15976 16473 | 
             
                }
         | 
| 15977 16474 | 
             
                if (g.touch1 && !g.touch0) g.touch0 = g.touch1, delete g.touch1;
         | 
| 15978 | 
            -
                if ( | 
| 16475 | 
            +
                if (g.touch0) g.touch0[1] = this.__zoom.invert(g.touch0[0]);
         | 
| 16476 | 
            +
                else g.end();
         | 
| 15979 16477 | 
             
              }
         | 
| 15980 16478 |  | 
| 16479 | 
            +
              zoom.wheelDelta = function(_) {
         | 
| 16480 | 
            +
                return arguments.length ? (wheelDelta = typeof _ === "function" ? _ : constant$12(+_), zoom) : wheelDelta;
         | 
| 16481 | 
            +
              };
         | 
| 16482 | 
            +
             | 
| 15981 16483 | 
             
              zoom.filter = function(_) {
         | 
| 15982 16484 | 
             
                return arguments.length ? (filter = typeof _ === "function" ? _ : constant$12(!!_), zoom) : filter;
         | 
| 15983 16485 | 
             
              };
         | 
| @@ -15999,7 +16501,7 @@ var zoom = function() { | |
| 15999 16501 | 
             
              };
         | 
| 16000 16502 |  | 
| 16001 16503 | 
             
              zoom.interpolate = function(_) {
         | 
| 16002 | 
            -
                return arguments.length ? (interpolate | 
| 16504 | 
            +
                return arguments.length ? (interpolate = _, zoom) : interpolate;
         | 
| 16003 16505 | 
             
              };
         | 
| 16004 16506 |  | 
| 16005 16507 | 
             
              zoom.on = function() {
         | 
| @@ -16007,6 +16509,10 @@ var zoom = function() { | |
| 16007 16509 | 
             
                return value === listeners ? zoom : value;
         | 
| 16008 16510 | 
             
              };
         | 
| 16009 16511 |  | 
| 16512 | 
            +
              zoom.clickDistance = function(_) {
         | 
| 16513 | 
            +
                return arguments.length ? (clickDistance2 = (_ = +_) * _, zoom) : Math.sqrt(clickDistance2);
         | 
| 16514 | 
            +
              };
         | 
| 16515 | 
            +
             | 
| 16010 16516 | 
             
              return zoom;
         | 
| 16011 16517 | 
             
            };
         | 
| 16012 16518 |  | 
| @@ -16016,6 +16522,7 @@ exports.bisectRight = bisectRight; | |
| 16016 16522 | 
             
            exports.bisectLeft = bisectLeft;
         | 
| 16017 16523 | 
             
            exports.ascending = ascending;
         | 
| 16018 16524 | 
             
            exports.bisector = bisector;
         | 
| 16525 | 
            +
            exports.cross = cross;
         | 
| 16019 16526 | 
             
            exports.descending = descending;
         | 
| 16020 16527 | 
             
            exports.deviation = deviation;
         | 
| 16021 16528 | 
             
            exports.extent = extent;
         | 
| @@ -16036,6 +16543,7 @@ exports.scan = scan; | |
| 16036 16543 | 
             
            exports.shuffle = shuffle;
         | 
| 16037 16544 | 
             
            exports.sum = sum;
         | 
| 16038 16545 | 
             
            exports.ticks = ticks;
         | 
| 16546 | 
            +
            exports.tickIncrement = tickIncrement;
         | 
| 16039 16547 | 
             
            exports.tickStep = tickStep;
         | 
| 16040 16548 | 
             
            exports.transpose = transpose;
         | 
| 16041 16549 | 
             
            exports.variance = variance;
         | 
| @@ -16130,6 +16638,7 @@ exports.geoBounds = bounds; | |
| 16130 16638 | 
             
            exports.geoCentroid = centroid;
         | 
| 16131 16639 | 
             
            exports.geoCircle = circle;
         | 
| 16132 16640 | 
             
            exports.geoClipExtent = extent$1;
         | 
| 16641 | 
            +
            exports.geoContains = contains;
         | 
| 16133 16642 | 
             
            exports.geoDistance = distance;
         | 
| 16134 16643 | 
             
            exports.geoGraticule = graticule;
         | 
| 16135 16644 | 
             
            exports.geoGraticule10 = graticule10;
         | 
| @@ -16208,7 +16717,7 @@ exports.path = path; | |
| 16208 16717 | 
             
            exports.polygonArea = area$1;
         | 
| 16209 16718 | 
             
            exports.polygonCentroid = centroid$1;
         | 
| 16210 16719 | 
             
            exports.polygonHull = hull;
         | 
| 16211 | 
            -
            exports.polygonContains = contains;
         | 
| 16720 | 
            +
            exports.polygonContains = contains$1;
         | 
| 16212 16721 | 
             
            exports.polygonLength = length$2;
         | 
| 16213 16722 | 
             
            exports.quadtree = quadtree;
         | 
| 16214 16723 | 
             
            exports.queue = queue;
         | 
| @@ -16234,7 +16743,7 @@ exports.scaleOrdinal = ordinal; | |
| 16234 16743 | 
             
            exports.scaleImplicit = implicit;
         | 
| 16235 16744 | 
             
            exports.scalePow = pow$1;
         | 
| 16236 16745 | 
             
            exports.scaleSqrt = sqrt$1;
         | 
| 16237 | 
            -
            exports.scaleQuantile = quantile | 
| 16746 | 
            +
            exports.scaleQuantile = quantile;
         | 
| 16238 16747 | 
             
            exports.scaleQuantize = quantize$1;
         | 
| 16239 16748 | 
             
            exports.scaleThreshold = threshold$1;
         | 
| 16240 16749 | 
             
            exports.scaleTime = time;
         | 
| @@ -16263,20 +16772,27 @@ exports.selectAll = selectAll; | |
| 16263 16772 | 
             
            exports.selection = selection;
         | 
| 16264 16773 | 
             
            exports.selector = selector;
         | 
| 16265 16774 | 
             
            exports.selectorAll = selectorAll;
         | 
| 16775 | 
            +
            exports.style = styleValue;
         | 
| 16266 16776 | 
             
            exports.touch = touch;
         | 
| 16267 16777 | 
             
            exports.touches = touches;
         | 
| 16268 | 
            -
            exports.window =  | 
| 16778 | 
            +
            exports.window = defaultView;
         | 
| 16269 16779 | 
             
            exports.customEvent = customEvent;
         | 
| 16270 16780 | 
             
            exports.arc = arc;
         | 
| 16271 16781 | 
             
            exports.area = area$2;
         | 
| 16272 16782 | 
             
            exports.line = line;
         | 
| 16273 16783 | 
             
            exports.pie = pie;
         | 
| 16274 | 
            -
            exports. | 
| 16275 | 
            -
            exports. | 
| 16784 | 
            +
            exports.areaRadial = areaRadial;
         | 
| 16785 | 
            +
            exports.radialArea = areaRadial;
         | 
| 16786 | 
            +
            exports.lineRadial = lineRadial$1;
         | 
| 16787 | 
            +
            exports.radialLine = lineRadial$1;
         | 
| 16788 | 
            +
            exports.pointRadial = pointRadial;
         | 
| 16789 | 
            +
            exports.linkHorizontal = linkHorizontal;
         | 
| 16790 | 
            +
            exports.linkVertical = linkVertical;
         | 
| 16791 | 
            +
            exports.linkRadial = linkRadial;
         | 
| 16276 16792 | 
             
            exports.symbol = symbol;
         | 
| 16277 16793 | 
             
            exports.symbols = symbols;
         | 
| 16278 16794 | 
             
            exports.symbolCircle = circle$2;
         | 
| 16279 | 
            -
            exports.symbolCross = cross$ | 
| 16795 | 
            +
            exports.symbolCross = cross$2;
         | 
| 16280 16796 | 
             
            exports.symbolDiamond = diamond;
         | 
| 16281 16797 | 
             
            exports.symbolSquare = square;
         | 
| 16282 16798 | 
             
            exports.symbolStar = star;
         | 
| @@ -16302,6 +16818,7 @@ exports.curveStepAfter = stepAfter; | |
| 16302 16818 | 
             
            exports.curveStepBefore = stepBefore;
         | 
| 16303 16819 | 
             
            exports.stack = stack;
         | 
| 16304 16820 | 
             
            exports.stackOffsetExpand = expand;
         | 
| 16821 | 
            +
            exports.stackOffsetDiverging = diverging;
         | 
| 16305 16822 | 
             
            exports.stackOffsetNone = none$1;
         | 
| 16306 16823 | 
             
            exports.stackOffsetSilhouette = silhouette;
         | 
| 16307 16824 | 
             
            exports.stackOffsetWiggle = wiggle;
         |