{"version":3,"sources":["webpack:///./node_modules/d3-interpolate/src/basis.js","webpack:///./node_modules/d3-interpolate/src/color.js","webpack:///./node_modules/d3-interpolate/src/rgb.js","webpack:///./node_modules/d3-interpolate/src/basisClosed.js","webpack:///./node_modules/d3-interpolate/src/number.js","webpack:///./node_modules/d3-interpolate/src/numberArray.js","webpack:///./node_modules/d3-interpolate/src/array.js","webpack:///./node_modules/d3-interpolate/src/date.js","webpack:///./node_modules/d3-interpolate/src/object.js","webpack:///./node_modules/d3-interpolate/src/value.js","webpack:///./node_modules/d3-color/src/define.js","webpack:///./node_modules/d3-color/src/color.js","webpack:///./node_modules/intersection-observer/intersection-observer.js","webpack:///./node_modules/d3-collection/src/map.js","webpack:///./node_modules/d3-collection/src/set.js","webpack:///./node_modules/d3-collection/src/entries.js","webpack:///./node_modules/d3-interpolate/src/string.js","webpack:///./node_modules/d3-array/src/ascending.js","webpack:///./node_modules/d3-array/src/bisector.js","webpack:///./node_modules/d3-array/src/bisect.js","webpack:///./node_modules/d3-array/src/cross.js","webpack:///./node_modules/d3-array/src/number.js","webpack:///./node_modules/d3-array/src/extent.js","webpack:///./node_modules/d3-array/src/array.js","webpack:///./node_modules/d3-array/src/range.js","webpack:///./node_modules/d3-array/src/ticks.js","webpack:///./node_modules/d3-array/src/threshold/sturges.js","webpack:///./node_modules/d3-array/src/quantile.js","webpack:///./node_modules/d3-array/src/max.js","webpack:///./node_modules/d3-array/src/merge.js","webpack:///./node_modules/d3-interpolate/src/constant.js","webpack:///./node_modules/d3-scale/src/init.js","webpack:///./node_modules/d3-scale/src/array.js","webpack:///./node_modules/d3-interpolate/src/round.js","webpack:///./node_modules/d3-scale/src/number.js","webpack:///./node_modules/d3-scale/src/continuous.js","webpack:///./node_modules/d3-scale/src/constant.js","webpack:///./node_modules/d3-format/src/formatSpecifier.js","webpack:///./node_modules/d3-format/src/formatDecimal.js","webpack:///./node_modules/d3-format/src/exponent.js","webpack:///./node_modules/d3-format/src/formatPrefixAuto.js","webpack:///./node_modules/d3-format/src/defaultLocale.js","webpack:///./node_modules/d3-format/src/formatRounded.js","webpack:///./node_modules/d3-format/src/formatTypes.js","webpack:///./node_modules/d3-format/src/identity.js","webpack:///./node_modules/d3-format/src/locale.js","webpack:///./node_modules/d3-format/src/formatGroup.js","webpack:///./node_modules/d3-format/src/formatNumerals.js","webpack:///./node_modules/d3-format/src/formatTrim.js","webpack:///./node_modules/d3-format/src/precisionRound.js","webpack:///./node_modules/d3-scale/src/tickFormat.js","webpack:///./node_modules/d3-format/src/precisionPrefix.js","webpack:///./node_modules/d3-format/src/precisionFixed.js","webpack:///./node_modules/d3-scale/src/linear.js","webpack:///./node_modules/d3-time/src/interval.js","webpack:///./node_modules/d3-time/src/year.js","webpack:///./node_modules/d3-time/src/month.js","webpack:///./node_modules/d3-time/src/week.js","webpack:///./node_modules/d3-time/src/duration.js","webpack:///./node_modules/d3-time/src/day.js","webpack:///./node_modules/d3-time/src/hour.js","webpack:///./node_modules/d3-time/src/minute.js","webpack:///./node_modules/d3-time/src/second.js","webpack:///./node_modules/d3-time/src/millisecond.js","webpack:///./node_modules/d3-time/src/utcWeek.js","webpack:///./node_modules/d3-time/src/utcDay.js","webpack:///./node_modules/d3-time/src/utcYear.js","webpack:///./node_modules/d3-time-format/src/locale.js","webpack:///./node_modules/d3-time-format/src/defaultLocale.js","webpack:///./node_modules/d3-scale/src/time.js","webpack:///./node_modules/d3-time/src/utcMonth.js","webpack:///./node_modules/d3-time/src/utcHour.js","webpack:///./node_modules/d3-time/src/utcMinute.js"],"names":["basis","t1","v0","v1","v2","v3","t2","t3","linear","a","d","t","gamma","y","nogamma","b","Math","pow","exponential","constant","isNaN","rgbGamma","color","rgb","start","end","r","colorRgb","g","opacity","rgbSpline","spline","colors","i","n","length","Array","values","floor","min","c","slice","isNumberArray","x","ArrayBuffer","isView","DataView","genericArray","nb","na","value","Date","setTime","k","number","string","date","numberArray","isArray","valueOf","toString","object","constructor","factory","prototype","extend","parent","definition","Object","create","key","Color","reI","reN","reP","reHex","reRgbInteger","RegExp","reRgbPercent","reRgbaInteger","reRgbaPercent","reHslPercent","reHslaPercent","named","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","color_formatHex","this","formatHex","color_formatRgb","formatRgb","format","m","l","trim","toLowerCase","exec","parseInt","rgbn","Rgb","rgba","hsla","hasOwnProperty","NaN","rgbConvert","o","arguments","rgb_formatHex","hex","rgb_formatRgb","max","round","h","s","Hsl","hslConvert","hsl2rgb","m1","m2","define","copy","channels","assign","displayable","formatHsl","brighter","darker","window","document","IntersectionObserverEntry","defineProperty","get","intersectionRatio","registry","IntersectionObserver","THROTTLE_TIMEOUT","POLL_INTERVAL","USE_MUTATION_OBSERVER","observe","target","_observationTargets","some","item","element","nodeType","Error","_registerInstance","push","entry","_monitorIntersections","_checkForIntersections","unobserve","filter","_unmonitorIntersections","_unregisterInstance","disconnect","takeRecords","records","_queuedEntries","_initThresholds","opt_threshold","threshold","sort","_parseRootMargin","opt_rootMargin","margins","split","map","margin","parts","parseFloat","unit","_monitoringIntersections","_monitoringInterval","setInterval","addEvent","_domObserver","MutationObserver","attributes","childList","characterData","subtree","clearInterval","removeEvent","rootIsInDom","_rootIsInDom","rootRect","_getRootRect","top","bottom","left","right","width","height","forEach","targetRect","getBoundingClientRect","rootContainsTarget","_rootContainsTarget","oldEntry","intersectionRect","_computeTargetAndRootIntersection","newEntry","time","performance","now","boundingClientRect","rootBounds","_hasCrossedThreshold","isIntersecting","_callback","getComputedStyle","display","rect1","rect2","getParentNode","atRoot","parentRect","parentComputedStyle","root","body","documentElement","overflow","html","clientWidth","clientHeight","_expandRectByRootMargin","rect","_rootMarginValues","newRect","oldRatio","newRatio","thresholds","containsDeep","indexOf","index","splice","targetArea","intersectionArea","Number","toFixed","callback","opt_options","fn","timeout","timer","options","bind","setTimeout","rootMargin","join","node","event","opt_useCapture","addEventListener","attachEvent","removeEventListener","detatchEvent","el","err","child","parentNode","host","Map","f","each","set","has","remove","property","clear","keys","entries","size","empty","Set","proto","add","reA","reB","source","am","bm","bs","bi","lastIndex","q","one","zero","compare","ascending","lo","hi","mid","ascendingBisect","bisector","bisectRight","valueof","array","stop","step","ceil","range","e10","sqrt","e5","e2","count","reverse","ticks","tickIncrement","isFinite","power","log","LN10","error","tickStep","step0","abs","step1","LN2","p","i0","value0","arrays","merged","j","initRange","domain","identity","normalize","clamper","bimap","interpolate","d0","d1","r0","r1","polymap","bisect","clamp","unknown","transformer","transform","untransform","piecewise","output","input","interpolateValue","rescale","scale","invert","interpolateNumber","_","call","rangeRound","interpolateRound","u","continuous","re","formatSpecifier","specifier","match","FormatSpecifier","fill","align","sign","symbol","comma","precision","type","undefined","formatDecimalParts","toExponential","coefficient","prefixExponent","locale","formatPrefix","exponent","toLocaleString","replace","toPrecision","formatRounded","toUpperCase","prefixes","grouping","thousands","group","substring","currencyPrefix","currency","currencySuffix","decimal","numerals","formatNumerals","String","percent","minus","nan","newFormat","formatTypes","prefix","test","suffix","formatType","maybeSuffix","valuePrefix","valueSuffix","valueNegative","out","i1","formatTrim","charCodeAt","Infinity","padding","e","formatLocale","precisionPrefix","precisionRound","precisionFixed","linearish","tickFormat","nice","apply","t0","newInterval","floori","offseti","field","interval","offset","previous","every","year","setMonth","setHours","setFullYear","getFullYear","month","setDate","getMonth","weekday","getDate","getDay","getTimezoneOffset","sunday","monday","tuesday","wednesday","thursday","friday","saturday","day","hour","getMilliseconds","getSeconds","getMinutes","getHours","minute","second","getUTCSeconds","millisecond","utcWeekday","setUTCDate","getUTCDate","getUTCDay","setUTCHours","utcSunday","utcMonday","utcTuesday","utcWednesday","utcThursday","utcFriday","utcSaturday","utcDay","utcYear","setUTCMonth","setUTCFullYear","getUTCFullYear","localDate","H","M","S","L","utcDate","UTC","newDate","pads","numberRe","percentRe","requoteRe","pad","requote","formatRe","names","formatLookup","parseWeekdayNumberSunday","w","parseWeekdayNumberMonday","parseWeekNumberSunday","U","parseWeekNumberISO","V","parseWeekNumberMonday","W","parseFullYear","parseYear","parseZone","Z","parseQuarter","parseMonthNumber","parseDayOfMonth","parseDayOfYear","parseHour24","parseMinutes","parseSeconds","parseMilliseconds","parseMicroseconds","parseLiteralPercent","parseUnixTimestamp","Q","parseUnixTimestampSeconds","formatDayOfMonth","formatHour24","formatHour12","formatDayOfYear","timeDay","timeYear","formatMilliseconds","formatMicroseconds","formatMonthNumber","formatMinutes","formatSeconds","formatWeekdayNumberMonday","formatWeekNumberSunday","timeSunday","dISO","timeThursday","formatWeekNumberISO","formatWeekdayNumberSunday","formatWeekNumberMonday","timeMonday","formatYear","formatYearISO","formatFullYear","formatFullYearISO","formatZone","z","formatUTCDayOfMonth","formatUTCHour24","getUTCHours","formatUTCHour12","formatUTCDayOfYear","formatUTCMilliseconds","getUTCMilliseconds","formatUTCMicroseconds","formatUTCMonthNumber","getUTCMonth","formatUTCMinutes","getUTCMinutes","formatUTCSeconds","formatUTCWeekdayNumberMonday","dow","formatUTCWeekNumberSunday","UTCdISO","formatUTCWeekNumberISO","formatUTCWeekdayNumberSunday","formatUTCWeekNumberMonday","formatUTCYear","formatUTCYearISO","formatUTCFullYear","formatUTCFullYearISO","formatUTCZone","formatLiteralPercent","formatUnixTimestamp","formatUnixTimestampSeconds","locale_dateTime","dateTime","locale_date","locale_time","locale_periods","periods","locale_weekdays","days","locale_shortWeekdays","shortDays","locale_months","months","locale_shortMonths","shortMonths","periodRe","periodLookup","weekdayRe","weekdayLookup","shortWeekdayRe","shortWeekdayLookup","monthRe","monthLookup","shortMonthRe","shortMonthLookup","formats","utcFormats","parses","parseSpecifier","charAt","newParse","week","parse","X","utcFormat","utcParse","defaultLocale","utcMonth","utcHour","setUTCMinutes","utcMinute","setUTCSeconds"],"mappings":"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","file":"1.05739c36db.mjs","sourcesContent":["export function basis(t1, v0, v1, v2, v3) {\n  var t2 = t1 * t1, t3 = t2 * t1;\n  return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n      + (4 - 6 * t2 + 3 * t3) * v1\n      + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n      + t3 * v3) / 6;\n}\n\nexport default function(values) {\n  var n = values.length - 1;\n  return function(t) {\n    var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n        v1 = values[i],\n        v2 = values[i + 1],\n        v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n        v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n    return basis((t - i / n) * n, v0, v1, v2, v3);\n  };\n}\n","import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n  return function(t) {\n    return a + t * d;\n  };\n}\n\nfunction exponential(a, b, y) {\n  return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n    return Math.pow(a + t * b, y);\n  };\n}\n\nexport function hue(a, b) {\n  var d = b - a;\n  return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n  return (y = +y) === 1 ? nogamma : function(a, b) {\n    return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n  };\n}\n\nexport default function nogamma(a, b) {\n  var d = b - a;\n  return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n  var color = gamma(y);\n\n  function rgb(start, end) {\n    var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n        g = color(start.g, end.g),\n        b = color(start.b, end.b),\n        opacity = nogamma(start.opacity, end.opacity);\n    return function(t) {\n      start.r = r(t);\n      start.g = g(t);\n      start.b = b(t);\n      start.opacity = opacity(t);\n      return start + \"\";\n    };\n  }\n\n  rgb.gamma = rgbGamma;\n\n  return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n  return function(colors) {\n    var n = colors.length,\n        r = new Array(n),\n        g = new Array(n),\n        b = new Array(n),\n        i, color;\n    for (i = 0; i < n; ++i) {\n      color = colorRgb(colors[i]);\n      r[i] = color.r || 0;\n      g[i] = color.g || 0;\n      b[i] = color.b || 0;\n    }\n    r = spline(r);\n    g = spline(g);\n    b = spline(b);\n    color.opacity = 1;\n    return function(t) {\n      color.r = r(t);\n      color.g = g(t);\n      color.b = b(t);\n      return color + \"\";\n    };\n  };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","import {basis} from \"./basis.js\";\n\nexport default function(values) {\n  var n = values.length;\n  return function(t) {\n    var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n        v0 = values[(i + n - 1) % n],\n        v1 = values[i % n],\n        v2 = values[(i + 1) % n],\n        v3 = values[(i + 2) % n];\n    return basis((t - i / n) * n, v0, v1, v2, v3);\n  };\n}\n","export default function(a, b) {\n  return a = +a, b = +b, function(t) {\n    return a * (1 - t) + b * t;\n  };\n}\n","export default function(a, b) {\n  if (!b) b = [];\n  var n = a ? Math.min(b.length, a.length) : 0,\n      c = b.slice(),\n      i;\n  return function(t) {\n    for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n    return c;\n  };\n}\n\nexport function isNumberArray(x) {\n  return ArrayBuffer.isView(x) && !(x instanceof DataView);\n}\n","import value from \"./value.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n  return (isNumberArray(b) ? numberArray : genericArray)(a, b);\n}\n\nexport function genericArray(a, b) {\n  var nb = b ? b.length : 0,\n      na = a ? Math.min(nb, a.length) : 0,\n      x = new Array(na),\n      c = new Array(nb),\n      i;\n\n  for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n  for (; i < nb; ++i) c[i] = b[i];\n\n  return function(t) {\n    for (i = 0; i < na; ++i) c[i] = x[i](t);\n    return c;\n  };\n}\n","export default function(a, b) {\n  var d = new Date;\n  return a = +a, b = +b, function(t) {\n    return d.setTime(a * (1 - t) + b * t), d;\n  };\n}\n","import value from \"./value.js\";\n\nexport default function(a, b) {\n  var i = {},\n      c = {},\n      k;\n\n  if (a === null || typeof a !== \"object\") a = {};\n  if (b === null || typeof b !== \"object\") b = {};\n\n  for (k in b) {\n    if (k in a) {\n      i[k] = value(a[k], b[k]);\n    } else {\n      c[k] = b[k];\n    }\n  }\n\n  return function(t) {\n    for (k in i) c[k] = i[k](t);\n    return c;\n  };\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb.js\";\nimport {genericArray} from \"./array.js\";\nimport date from \"./date.js\";\nimport number from \"./number.js\";\nimport object from \"./object.js\";\nimport string from \"./string.js\";\nimport constant from \"./constant.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n  var t = typeof b, c;\n  return b == null || t === \"boolean\" ? constant(b)\n      : (t === \"number\" ? number\n      : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n      : b instanceof color ? rgb\n      : b instanceof Date ? date\n      : isNumberArray(b) ? numberArray\n      : Array.isArray(b) ? genericArray\n      : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n      : number)(a, b);\n}\n","export default function(constructor, factory, prototype) {\n  constructor.prototype = factory.prototype = prototype;\n  prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n  var prototype = Object.create(parent.prototype);\n  for (var key in definition) prototype[key] = definition[key];\n  return prototype;\n}\n","import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n    reN = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n    reP = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n    reHex = /^#([0-9a-f]{3,8})$/,\n    reRgbInteger = new RegExp(\"^rgb\\\\(\" + [reI, reI, reI] + \"\\\\)$\"),\n    reRgbPercent = new RegExp(\"^rgb\\\\(\" + [reP, reP, reP] + \"\\\\)$\"),\n    reRgbaInteger = new RegExp(\"^rgba\\\\(\" + [reI, reI, reI, reN] + \"\\\\)$\"),\n    reRgbaPercent = new RegExp(\"^rgba\\\\(\" + [reP, reP, reP, reN] + \"\\\\)$\"),\n    reHslPercent = new RegExp(\"^hsl\\\\(\" + [reN, reP, reP] + \"\\\\)$\"),\n    reHslaPercent = new RegExp(\"^hsla\\\\(\" + [reN, reP, reP, reN] + \"\\\\)$\");\n\nvar named = {\n  aliceblue: 0xf0f8ff,\n  antiquewhite: 0xfaebd7,\n  aqua: 0x00ffff,\n  aquamarine: 0x7fffd4,\n  azure: 0xf0ffff,\n  beige: 0xf5f5dc,\n  bisque: 0xffe4c4,\n  black: 0x000000,\n  blanchedalmond: 0xffebcd,\n  blue: 0x0000ff,\n  blueviolet: 0x8a2be2,\n  brown: 0xa52a2a,\n  burlywood: 0xdeb887,\n  cadetblue: 0x5f9ea0,\n  chartreuse: 0x7fff00,\n  chocolate: 0xd2691e,\n  coral: 0xff7f50,\n  cornflowerblue: 0x6495ed,\n  cornsilk: 0xfff8dc,\n  crimson: 0xdc143c,\n  cyan: 0x00ffff,\n  darkblue: 0x00008b,\n  darkcyan: 0x008b8b,\n  darkgoldenrod: 0xb8860b,\n  darkgray: 0xa9a9a9,\n  darkgreen: 0x006400,\n  darkgrey: 0xa9a9a9,\n  darkkhaki: 0xbdb76b,\n  darkmagenta: 0x8b008b,\n  darkolivegreen: 0x556b2f,\n  darkorange: 0xff8c00,\n  darkorchid: 0x9932cc,\n  darkred: 0x8b0000,\n  darksalmon: 0xe9967a,\n  darkseagreen: 0x8fbc8f,\n  darkslateblue: 0x483d8b,\n  darkslategray: 0x2f4f4f,\n  darkslategrey: 0x2f4f4f,\n  darkturquoise: 0x00ced1,\n  darkviolet: 0x9400d3,\n  deeppink: 0xff1493,\n  deepskyblue: 0x00bfff,\n  dimgray: 0x696969,\n  dimgrey: 0x696969,\n  dodgerblue: 0x1e90ff,\n  firebrick: 0xb22222,\n  floralwhite: 0xfffaf0,\n  forestgreen: 0x228b22,\n  fuchsia: 0xff00ff,\n  gainsboro: 0xdcdcdc,\n  ghostwhite: 0xf8f8ff,\n  gold: 0xffd700,\n  goldenrod: 0xdaa520,\n  gray: 0x808080,\n  green: 0x008000,\n  greenyellow: 0xadff2f,\n  grey: 0x808080,\n  honeydew: 0xf0fff0,\n  hotpink: 0xff69b4,\n  indianred: 0xcd5c5c,\n  indigo: 0x4b0082,\n  ivory: 0xfffff0,\n  khaki: 0xf0e68c,\n  lavender: 0xe6e6fa,\n  lavenderblush: 0xfff0f5,\n  lawngreen: 0x7cfc00,\n  lemonchiffon: 0xfffacd,\n  lightblue: 0xadd8e6,\n  lightcoral: 0xf08080,\n  lightcyan: 0xe0ffff,\n  lightgoldenrodyellow: 0xfafad2,\n  lightgray: 0xd3d3d3,\n  lightgreen: 0x90ee90,\n  lightgrey: 0xd3d3d3,\n  lightpink: 0xffb6c1,\n  lightsalmon: 0xffa07a,\n  lightseagreen: 0x20b2aa,\n  lightskyblue: 0x87cefa,\n  lightslategray: 0x778899,\n  lightslategrey: 0x778899,\n  lightsteelblue: 0xb0c4de,\n  lightyellow: 0xffffe0,\n  lime: 0x00ff00,\n  limegreen: 0x32cd32,\n  linen: 0xfaf0e6,\n  magenta: 0xff00ff,\n  maroon: 0x800000,\n  mediumaquamarine: 0x66cdaa,\n  mediumblue: 0x0000cd,\n  mediumorchid: 0xba55d3,\n  mediumpurple: 0x9370db,\n  mediumseagreen: 0x3cb371,\n  mediumslateblue: 0x7b68ee,\n  mediumspringgreen: 0x00fa9a,\n  mediumturquoise: 0x48d1cc,\n  mediumvioletred: 0xc71585,\n  midnightblue: 0x191970,\n  mintcream: 0xf5fffa,\n  mistyrose: 0xffe4e1,\n  moccasin: 0xffe4b5,\n  navajowhite: 0xffdead,\n  navy: 0x000080,\n  oldlace: 0xfdf5e6,\n  olive: 0x808000,\n  olivedrab: 0x6b8e23,\n  orange: 0xffa500,\n  orangered: 0xff4500,\n  orchid: 0xda70d6,\n  palegoldenrod: 0xeee8aa,\n  palegreen: 0x98fb98,\n  paleturquoise: 0xafeeee,\n  palevioletred: 0xdb7093,\n  papayawhip: 0xffefd5,\n  peachpuff: 0xffdab9,\n  peru: 0xcd853f,\n  pink: 0xffc0cb,\n  plum: 0xdda0dd,\n  powderblue: 0xb0e0e6,\n  purple: 0x800080,\n  rebeccapurple: 0x663399,\n  red: 0xff0000,\n  rosybrown: 0xbc8f8f,\n  royalblue: 0x4169e1,\n  saddlebrown: 0x8b4513,\n  salmon: 0xfa8072,\n  sandybrown: 0xf4a460,\n  seagreen: 0x2e8b57,\n  seashell: 0xfff5ee,\n  sienna: 0xa0522d,\n  silver: 0xc0c0c0,\n  skyblue: 0x87ceeb,\n  slateblue: 0x6a5acd,\n  slategray: 0x708090,\n  slategrey: 0x708090,\n  snow: 0xfffafa,\n  springgreen: 0x00ff7f,\n  steelblue: 0x4682b4,\n  tan: 0xd2b48c,\n  teal: 0x008080,\n  thistle: 0xd8bfd8,\n  tomato: 0xff6347,\n  turquoise: 0x40e0d0,\n  violet: 0xee82ee,\n  wheat: 0xf5deb3,\n  white: 0xffffff,\n  whitesmoke: 0xf5f5f5,\n  yellow: 0xffff00,\n  yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n  copy: function(channels) {\n    return Object.assign(new this.constructor, this, channels);\n  },\n  displayable: function() {\n    return this.rgb().displayable();\n  },\n  hex: color_formatHex, // Deprecated! Use color.formatHex.\n  formatHex: color_formatHex,\n  formatHsl: color_formatHsl,\n  formatRgb: color_formatRgb,\n  toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n  return this.rgb().formatHex();\n}\n\nfunction color_formatHsl() {\n  return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n  return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n  var m, l;\n  format = (format + \"\").trim().toLowerCase();\n  return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n      : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n      : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n      : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n      : null) // invalid hex\n      : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n      : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n      : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n      : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n      : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n      : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n      : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n      : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n      : null;\n}\n\nfunction rgbn(n) {\n  return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n  if (a <= 0) r = g = b = NaN;\n  return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n  if (!(o instanceof Color)) o = color(o);\n  if (!o) return new Rgb;\n  o = o.rgb();\n  return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n  return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n  this.r = +r;\n  this.g = +g;\n  this.b = +b;\n  this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n  brighter: function(k) {\n    k = k == null ? brighter : Math.pow(brighter, k);\n    return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n  },\n  darker: function(k) {\n    k = k == null ? darker : Math.pow(darker, k);\n    return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n  },\n  rgb: function() {\n    return this;\n  },\n  displayable: function() {\n    return (-0.5 <= this.r && this.r < 255.5)\n        && (-0.5 <= this.g && this.g < 255.5)\n        && (-0.5 <= this.b && this.b < 255.5)\n        && (0 <= this.opacity && this.opacity <= 1);\n  },\n  hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n  formatHex: rgb_formatHex,\n  formatRgb: rgb_formatRgb,\n  toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n  return \"#\" + hex(this.r) + hex(this.g) + hex(this.b);\n}\n\nfunction rgb_formatRgb() {\n  var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n  return (a === 1 ? \"rgb(\" : \"rgba(\")\n      + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + \", \"\n      + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + \", \"\n      + Math.max(0, Math.min(255, Math.round(this.b) || 0))\n      + (a === 1 ? \")\" : \", \" + a + \")\");\n}\n\nfunction hex(value) {\n  value = Math.max(0, Math.min(255, Math.round(value) || 0));\n  return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n  if (a <= 0) h = s = l = NaN;\n  else if (l <= 0 || l >= 1) h = s = NaN;\n  else if (s <= 0) h = NaN;\n  return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n  if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n  if (!(o instanceof Color)) o = color(o);\n  if (!o) return new Hsl;\n  if (o instanceof Hsl) return o;\n  o = o.rgb();\n  var r = o.r / 255,\n      g = o.g / 255,\n      b = o.b / 255,\n      min = Math.min(r, g, b),\n      max = Math.max(r, g, b),\n      h = NaN,\n      s = max - min,\n      l = (max + min) / 2;\n  if (s) {\n    if (r === max) h = (g - b) / s + (g < b) * 6;\n    else if (g === max) h = (b - r) / s + 2;\n    else h = (r - g) / s + 4;\n    s /= l < 0.5 ? max + min : 2 - max - min;\n    h *= 60;\n  } else {\n    s = l > 0 && l < 1 ? 0 : h;\n  }\n  return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n  return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n  this.h = +h;\n  this.s = +s;\n  this.l = +l;\n  this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n  brighter: function(k) {\n    k = k == null ? brighter : Math.pow(brighter, k);\n    return new Hsl(this.h, this.s, this.l * k, this.opacity);\n  },\n  darker: function(k) {\n    k = k == null ? darker : Math.pow(darker, k);\n    return new Hsl(this.h, this.s, this.l * k, this.opacity);\n  },\n  rgb: function() {\n    var h = this.h % 360 + (this.h < 0) * 360,\n        s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n        l = this.l,\n        m2 = l + (l < 0.5 ? l : 1 - l) * s,\n        m1 = 2 * l - m2;\n    return new Rgb(\n      hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n      hsl2rgb(h, m1, m2),\n      hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n      this.opacity\n    );\n  },\n  displayable: function() {\n    return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n        && (0 <= this.l && this.l <= 1)\n        && (0 <= this.opacity && this.opacity <= 1);\n  },\n  formatHsl: function() {\n    var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n    return (a === 1 ? \"hsl(\" : \"hsla(\")\n        + (this.h || 0) + \", \"\n        + (this.s || 0) * 100 + \"%, \"\n        + (this.l || 0) * 100 + \"%\"\n        + (a === 1 ? \")\" : \", \" + a + \")\");\n  }\n}));\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n  return (h < 60 ? m1 + (m2 - m1) * h / 60\n      : h < 180 ? m2\n      : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n      : m1) * 255;\n}\n","/**\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE.\n *\n *  https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n *\n */\n\n(function(window, document) {\n'use strict';\n\n\n// Exits early if all IntersectionObserver and IntersectionObserverEntry\n// features are natively supported.\nif ('IntersectionObserver' in window &&\n    'IntersectionObserverEntry' in window &&\n    'intersectionRatio' in window.IntersectionObserverEntry.prototype) {\n\n  // Minimal polyfill for Edge 15's lack of `isIntersecting`\n  // See: https://github.com/w3c/IntersectionObserver/issues/211\n  if (!('isIntersecting' in window.IntersectionObserverEntry.prototype)) {\n    Object.defineProperty(window.IntersectionObserverEntry.prototype,\n      'isIntersecting', {\n      get: function () {\n        return this.intersectionRatio > 0;\n      }\n    });\n  }\n  return;\n}\n\n\n/**\n * An IntersectionObserver registry. This registry exists to hold a strong\n * reference to IntersectionObserver instances currently observing a target\n * element. Without this registry, instances without another reference may be\n * garbage collected.\n */\nvar registry = [];\n\n\n/**\n * Creates the global IntersectionObserverEntry constructor.\n * https://w3c.github.io/IntersectionObserver/#intersection-observer-entry\n * @param {Object} entry A dictionary of instance properties.\n * @constructor\n */\nfunction IntersectionObserverEntry(entry) {\n  this.time = entry.time;\n  this.target = entry.target;\n  this.rootBounds = entry.rootBounds;\n  this.boundingClientRect = entry.boundingClientRect;\n  this.intersectionRect = entry.intersectionRect || getEmptyRect();\n  this.isIntersecting = !!entry.intersectionRect;\n\n  // Calculates the intersection ratio.\n  var targetRect = this.boundingClientRect;\n  var targetArea = targetRect.width * targetRect.height;\n  var intersectionRect = this.intersectionRect;\n  var intersectionArea = intersectionRect.width * intersectionRect.height;\n\n  // Sets intersection ratio.\n  if (targetArea) {\n    // Round the intersection ratio to avoid floating point math issues:\n    // https://github.com/w3c/IntersectionObserver/issues/324\n    this.intersectionRatio = Number((intersectionArea / targetArea).toFixed(4));\n  } else {\n    // If area is zero and is intersecting, sets to 1, otherwise to 0\n    this.intersectionRatio = this.isIntersecting ? 1 : 0;\n  }\n}\n\n\n/**\n * Creates the global IntersectionObserver constructor.\n * https://w3c.github.io/IntersectionObserver/#intersection-observer-interface\n * @param {Function} callback The function to be invoked after intersection\n *     changes have queued. The function is not invoked if the queue has\n *     been emptied by calling the `takeRecords` method.\n * @param {Object=} opt_options Optional configuration options.\n * @constructor\n */\nfunction IntersectionObserver(callback, opt_options) {\n\n  var options = opt_options || {};\n\n  if (typeof callback != 'function') {\n    throw new Error('callback must be a function');\n  }\n\n  if (options.root && options.root.nodeType != 1) {\n    throw new Error('root must be an Element');\n  }\n\n  // Binds and throttles `this._checkForIntersections`.\n  this._checkForIntersections = throttle(\n      this._checkForIntersections.bind(this), this.THROTTLE_TIMEOUT);\n\n  // Private properties.\n  this._callback = callback;\n  this._observationTargets = [];\n  this._queuedEntries = [];\n  this._rootMarginValues = this._parseRootMargin(options.rootMargin);\n\n  // Public properties.\n  this.thresholds = this._initThresholds(options.threshold);\n  this.root = options.root || null;\n  this.rootMargin = this._rootMarginValues.map(function(margin) {\n    return margin.value + margin.unit;\n  }).join(' ');\n}\n\n\n/**\n * The minimum interval within which the document will be checked for\n * intersection changes.\n */\nIntersectionObserver.prototype.THROTTLE_TIMEOUT = 100;\n\n\n/**\n * The frequency in which the polyfill polls for intersection changes.\n * this can be updated on a per instance basis and must be set prior to\n * calling `observe` on the first target.\n */\nIntersectionObserver.prototype.POLL_INTERVAL = null;\n\n/**\n * Use a mutation observer on the root element\n * to detect intersection changes.\n */\nIntersectionObserver.prototype.USE_MUTATION_OBSERVER = true;\n\n\n/**\n * Starts observing a target element for intersection changes based on\n * the thresholds values.\n * @param {Element} target The DOM element to observe.\n */\nIntersectionObserver.prototype.observe = function(target) {\n  var isTargetAlreadyObserved = this._observationTargets.some(function(item) {\n    return item.element == target;\n  });\n\n  if (isTargetAlreadyObserved) {\n    return;\n  }\n\n  if (!(target && target.nodeType == 1)) {\n    throw new Error('target must be an Element');\n  }\n\n  this._registerInstance();\n  this._observationTargets.push({element: target, entry: null});\n  this._monitorIntersections();\n  this._checkForIntersections();\n};\n\n\n/**\n * Stops observing a target element for intersection changes.\n * @param {Element} target The DOM element to observe.\n */\nIntersectionObserver.prototype.unobserve = function(target) {\n  this._observationTargets =\n      this._observationTargets.filter(function(item) {\n\n    return item.element != target;\n  });\n  if (!this._observationTargets.length) {\n    this._unmonitorIntersections();\n    this._unregisterInstance();\n  }\n};\n\n\n/**\n * Stops observing all target elements for intersection changes.\n */\nIntersectionObserver.prototype.disconnect = function() {\n  this._observationTargets = [];\n  this._unmonitorIntersections();\n  this._unregisterInstance();\n};\n\n\n/**\n * Returns any queue entries that have not yet been reported to the\n * callback and clears the queue. This can be used in conjunction with the\n * callback to obtain the absolute most up-to-date intersection information.\n * @return {Array} The currently queued entries.\n */\nIntersectionObserver.prototype.takeRecords = function() {\n  var records = this._queuedEntries.slice();\n  this._queuedEntries = [];\n  return records;\n};\n\n\n/**\n * Accepts the threshold value from the user configuration object and\n * returns a sorted array of unique threshold values. If a value is not\n * between 0 and 1 and error is thrown.\n * @private\n * @param {Array|number=} opt_threshold An optional threshold value or\n *     a list of threshold values, defaulting to [0].\n * @return {Array} A sorted list of unique and valid threshold values.\n */\nIntersectionObserver.prototype._initThresholds = function(opt_threshold) {\n  var threshold = opt_threshold || [0];\n  if (!Array.isArray(threshold)) threshold = [threshold];\n\n  return threshold.sort().filter(function(t, i, a) {\n    if (typeof t != 'number' || isNaN(t) || t < 0 || t > 1) {\n      throw new Error('threshold must be a number between 0 and 1 inclusively');\n    }\n    return t !== a[i - 1];\n  });\n};\n\n\n/**\n * Accepts the rootMargin value from the user configuration object\n * and returns an array of the four margin values as an object containing\n * the value and unit properties. If any of the values are not properly\n * formatted or use a unit other than px or %, and error is thrown.\n * @private\n * @param {string=} opt_rootMargin An optional rootMargin value,\n *     defaulting to '0px'.\n * @return {Array<Object>} An array of margin objects with the keys\n *     value and unit.\n */\nIntersectionObserver.prototype._parseRootMargin = function(opt_rootMargin) {\n  var marginString = opt_rootMargin || '0px';\n  var margins = marginString.split(/\\s+/).map(function(margin) {\n    var parts = /^(-?\\d*\\.?\\d+)(px|%)$/.exec(margin);\n    if (!parts) {\n      throw new Error('rootMargin must be specified in pixels or percent');\n    }\n    return {value: parseFloat(parts[1]), unit: parts[2]};\n  });\n\n  // Handles shorthand.\n  margins[1] = margins[1] || margins[0];\n  margins[2] = margins[2] || margins[0];\n  margins[3] = margins[3] || margins[1];\n\n  return margins;\n};\n\n\n/**\n * Starts polling for intersection changes if the polling is not already\n * happening, and if the page's visibility state is visible.\n * @private\n */\nIntersectionObserver.prototype._monitorIntersections = function() {\n  if (!this._monitoringIntersections) {\n    this._monitoringIntersections = true;\n\n    // If a poll interval is set, use polling instead of listening to\n    // resize and scroll events or DOM mutations.\n    if (this.POLL_INTERVAL) {\n      this._monitoringInterval = setInterval(\n          this._checkForIntersections, this.POLL_INTERVAL);\n    }\n    else {\n      addEvent(window, 'resize', this._checkForIntersections, true);\n      addEvent(document, 'scroll', this._checkForIntersections, true);\n\n      if (this.USE_MUTATION_OBSERVER && 'MutationObserver' in window) {\n        this._domObserver = new MutationObserver(this._checkForIntersections);\n        this._domObserver.observe(document, {\n          attributes: true,\n          childList: true,\n          characterData: true,\n          subtree: true\n        });\n      }\n    }\n  }\n};\n\n\n/**\n * Stops polling for intersection changes.\n * @private\n */\nIntersectionObserver.prototype._unmonitorIntersections = function() {\n  if (this._monitoringIntersections) {\n    this._monitoringIntersections = false;\n\n    clearInterval(this._monitoringInterval);\n    this._monitoringInterval = null;\n\n    removeEvent(window, 'resize', this._checkForIntersections, true);\n    removeEvent(document, 'scroll', this._checkForIntersections, true);\n\n    if (this._domObserver) {\n      this._domObserver.disconnect();\n      this._domObserver = null;\n    }\n  }\n};\n\n\n/**\n * Scans each observation target for intersection changes and adds them\n * to the internal entries queue. If new entries are found, it\n * schedules the callback to be invoked.\n * @private\n */\nIntersectionObserver.prototype._checkForIntersections = function() {\n  var rootIsInDom = this._rootIsInDom();\n  var rootRect = rootIsInDom ? this._getRootRect() : getEmptyRect();\n\n  this._observationTargets.forEach(function(item) {\n    var target = item.element;\n    var targetRect = getBoundingClientRect(target);\n    var rootContainsTarget = this._rootContainsTarget(target);\n    var oldEntry = item.entry;\n    var intersectionRect = rootIsInDom && rootContainsTarget &&\n        this._computeTargetAndRootIntersection(target, rootRect);\n\n    var newEntry = item.entry = new IntersectionObserverEntry({\n      time: now(),\n      target: target,\n      boundingClientRect: targetRect,\n      rootBounds: rootRect,\n      intersectionRect: intersectionRect\n    });\n\n    if (!oldEntry) {\n      this._queuedEntries.push(newEntry);\n    } else if (rootIsInDom && rootContainsTarget) {\n      // If the new entry intersection ratio has crossed any of the\n      // thresholds, add a new entry.\n      if (this._hasCrossedThreshold(oldEntry, newEntry)) {\n        this._queuedEntries.push(newEntry);\n      }\n    } else {\n      // If the root is not in the DOM or target is not contained within\n      // root but the previous entry for this target had an intersection,\n      // add a new record indicating removal.\n      if (oldEntry && oldEntry.isIntersecting) {\n        this._queuedEntries.push(newEntry);\n      }\n    }\n  }, this);\n\n  if (this._queuedEntries.length) {\n    this._callback(this.takeRecords(), this);\n  }\n};\n\n\n/**\n * Accepts a target and root rect computes the intersection between then\n * following the algorithm in the spec.\n * TODO(philipwalton): at this time clip-path is not considered.\n * https://w3c.github.io/IntersectionObserver/#calculate-intersection-rect-algo\n * @param {Element} target The target DOM element\n * @param {Object} rootRect The bounding rect of the root after being\n *     expanded by the rootMargin value.\n * @return {?Object} The final intersection rect object or undefined if no\n *     intersection is found.\n * @private\n */\nIntersectionObserver.prototype._computeTargetAndRootIntersection =\n    function(target, rootRect) {\n\n  // If the element isn't displayed, an intersection can't happen.\n  if (window.getComputedStyle(target).display == 'none') return;\n\n  var targetRect = getBoundingClientRect(target);\n  var intersectionRect = targetRect;\n  var parent = getParentNode(target);\n  var atRoot = false;\n\n  while (!atRoot) {\n    var parentRect = null;\n    var parentComputedStyle = parent.nodeType == 1 ?\n        window.getComputedStyle(parent) : {};\n\n    // If the parent isn't displayed, an intersection can't happen.\n    if (parentComputedStyle.display == 'none') return;\n\n    if (parent == this.root || parent == document) {\n      atRoot = true;\n      parentRect = rootRect;\n    } else {\n      // If the element has a non-visible overflow, and it's not the <body>\n      // or <html> element, update the intersection rect.\n      // Note: <body> and <html> cannot be clipped to a rect that's not also\n      // the document rect, so no need to compute a new intersection.\n      if (parent != document.body &&\n          parent != document.documentElement &&\n          parentComputedStyle.overflow != 'visible') {\n        parentRect = getBoundingClientRect(parent);\n      }\n    }\n\n    // If either of the above conditionals set a new parentRect,\n    // calculate new intersection data.\n    if (parentRect) {\n      intersectionRect = computeRectIntersection(parentRect, intersectionRect);\n\n      if (!intersectionRect) break;\n    }\n    parent = getParentNode(parent);\n  }\n  return intersectionRect;\n};\n\n\n/**\n * Returns the root rect after being expanded by the rootMargin value.\n * @return {Object} The expanded root rect.\n * @private\n */\nIntersectionObserver.prototype._getRootRect = function() {\n  var rootRect;\n  if (this.root) {\n    rootRect = getBoundingClientRect(this.root);\n  } else {\n    // Use <html>/<body> instead of window since scroll bars affect size.\n    var html = document.documentElement;\n    var body = document.body;\n    rootRect = {\n      top: 0,\n      left: 0,\n      right: html.clientWidth || body.clientWidth,\n      width: html.clientWidth || body.clientWidth,\n      bottom: html.clientHeight || body.clientHeight,\n      height: html.clientHeight || body.clientHeight\n    };\n  }\n  return this._expandRectByRootMargin(rootRect);\n};\n\n\n/**\n * Accepts a rect and expands it by the rootMargin value.\n * @param {Object} rect The rect object to expand.\n * @return {Object} The expanded rect.\n * @private\n */\nIntersectionObserver.prototype._expandRectByRootMargin = function(rect) {\n  var margins = this._rootMarginValues.map(function(margin, i) {\n    return margin.unit == 'px' ? margin.value :\n        margin.value * (i % 2 ? rect.width : rect.height) / 100;\n  });\n  var newRect = {\n    top: rect.top - margins[0],\n    right: rect.right + margins[1],\n    bottom: rect.bottom + margins[2],\n    left: rect.left - margins[3]\n  };\n  newRect.width = newRect.right - newRect.left;\n  newRect.height = newRect.bottom - newRect.top;\n\n  return newRect;\n};\n\n\n/**\n * Accepts an old and new entry and returns true if at least one of the\n * threshold values has been crossed.\n * @param {?IntersectionObserverEntry} oldEntry The previous entry for a\n *    particular target element or null if no previous entry exists.\n * @param {IntersectionObserverEntry} newEntry The current entry for a\n *    particular target element.\n * @return {boolean} Returns true if a any threshold has been crossed.\n * @private\n */\nIntersectionObserver.prototype._hasCrossedThreshold =\n    function(oldEntry, newEntry) {\n\n  // To make comparing easier, an entry that has a ratio of 0\n  // but does not actually intersect is given a value of -1\n  var oldRatio = oldEntry && oldEntry.isIntersecting ?\n      oldEntry.intersectionRatio || 0 : -1;\n  var newRatio = newEntry.isIntersecting ?\n      newEntry.intersectionRatio || 0 : -1;\n\n  // Ignore unchanged ratios\n  if (oldRatio === newRatio) return;\n\n  for (var i = 0; i < this.thresholds.length; i++) {\n    var threshold = this.thresholds[i];\n\n    // Return true if an entry matches a threshold or if the new ratio\n    // and the old ratio are on the opposite sides of a threshold.\n    if (threshold == oldRatio || threshold == newRatio ||\n        threshold < oldRatio !== threshold < newRatio) {\n      return true;\n    }\n  }\n};\n\n\n/**\n * Returns whether or not the root element is an element and is in the DOM.\n * @return {boolean} True if the root element is an element and is in the DOM.\n * @private\n */\nIntersectionObserver.prototype._rootIsInDom = function() {\n  return !this.root || containsDeep(document, this.root);\n};\n\n\n/**\n * Returns whether or not the target element is a child of root.\n * @param {Element} target The target element to check.\n * @return {boolean} True if the target element is a child of root.\n * @private\n */\nIntersectionObserver.prototype._rootContainsTarget = function(target) {\n  return containsDeep(this.root || document, target);\n};\n\n\n/**\n * Adds the instance to the global IntersectionObserver registry if it isn't\n * already present.\n * @private\n */\nIntersectionObserver.prototype._registerInstance = function() {\n  if (registry.indexOf(this) < 0) {\n    registry.push(this);\n  }\n};\n\n\n/**\n * Removes the instance from the global IntersectionObserver registry.\n * @private\n */\nIntersectionObserver.prototype._unregisterInstance = function() {\n  var index = registry.indexOf(this);\n  if (index != -1) registry.splice(index, 1);\n};\n\n\n/**\n * Returns the result of the performance.now() method or null in browsers\n * that don't support the API.\n * @return {number} The elapsed time since the page was requested.\n */\nfunction now() {\n  return window.performance && performance.now && performance.now();\n}\n\n\n/**\n * Throttles a function and delays its execution, so it's only called at most\n * once within a given time period.\n * @param {Function} fn The function to throttle.\n * @param {number} timeout The amount of time that must pass before the\n *     function can be called again.\n * @return {Function} The throttled function.\n */\nfunction throttle(fn, timeout) {\n  var timer = null;\n  return function () {\n    if (!timer) {\n      timer = setTimeout(function() {\n        fn();\n        timer = null;\n      }, timeout);\n    }\n  };\n}\n\n\n/**\n * Adds an event handler to a DOM node ensuring cross-browser compatibility.\n * @param {Node} node The DOM node to add the event handler to.\n * @param {string} event The event name.\n * @param {Function} fn The event handler to add.\n * @param {boolean} opt_useCapture Optionally adds the even to the capture\n *     phase. Note: this only works in modern browsers.\n */\nfunction addEvent(node, event, fn, opt_useCapture) {\n  if (typeof node.addEventListener == 'function') {\n    node.addEventListener(event, fn, opt_useCapture || false);\n  }\n  else if (typeof node.attachEvent == 'function') {\n    node.attachEvent('on' + event, fn);\n  }\n}\n\n\n/**\n * Removes a previously added event handler from a DOM node.\n * @param {Node} node The DOM node to remove the event handler from.\n * @param {string} event The event name.\n * @param {Function} fn The event handler to remove.\n * @param {boolean} opt_useCapture If the event handler was added with this\n *     flag set to true, it should be set to true here in order to remove it.\n */\nfunction removeEvent(node, event, fn, opt_useCapture) {\n  if (typeof node.removeEventListener == 'function') {\n    node.removeEventListener(event, fn, opt_useCapture || false);\n  }\n  else if (typeof node.detatchEvent == 'function') {\n    node.detatchEvent('on' + event, fn);\n  }\n}\n\n\n/**\n * Returns the intersection between two rect objects.\n * @param {Object} rect1 The first rect.\n * @param {Object} rect2 The second rect.\n * @return {?Object} The intersection rect or undefined if no intersection\n *     is found.\n */\nfunction computeRectIntersection(rect1, rect2) {\n  var top = Math.max(rect1.top, rect2.top);\n  var bottom = Math.min(rect1.bottom, rect2.bottom);\n  var left = Math.max(rect1.left, rect2.left);\n  var right = Math.min(rect1.right, rect2.right);\n  var width = right - left;\n  var height = bottom - top;\n\n  return (width >= 0 && height >= 0) && {\n    top: top,\n    bottom: bottom,\n    left: left,\n    right: right,\n    width: width,\n    height: height\n  };\n}\n\n\n/**\n * Shims the native getBoundingClientRect for compatibility with older IE.\n * @param {Element} el The element whose bounding rect to get.\n * @return {Object} The (possibly shimmed) rect of the element.\n */\nfunction getBoundingClientRect(el) {\n  var rect;\n\n  try {\n    rect = el.getBoundingClientRect();\n  } catch (err) {\n    // Ignore Windows 7 IE11 \"Unspecified error\"\n    // https://github.com/w3c/IntersectionObserver/pull/205\n  }\n\n  if (!rect) return getEmptyRect();\n\n  // Older IE\n  if (!(rect.width && rect.height)) {\n    rect = {\n      top: rect.top,\n      right: rect.right,\n      bottom: rect.bottom,\n      left: rect.left,\n      width: rect.right - rect.left,\n      height: rect.bottom - rect.top\n    };\n  }\n  return rect;\n}\n\n\n/**\n * Returns an empty rect object. An empty rect is returned when an element\n * is not in the DOM.\n * @return {Object} The empty rect.\n */\nfunction getEmptyRect() {\n  return {\n    top: 0,\n    bottom: 0,\n    left: 0,\n    right: 0,\n    width: 0,\n    height: 0\n  };\n}\n\n/**\n * Checks to see if a parent element contains a child element (including inside\n * shadow DOM).\n * @param {Node} parent The parent element.\n * @param {Node} child The child element.\n * @return {boolean} True if the parent node contains the child node.\n */\nfunction containsDeep(parent, child) {\n  var node = child;\n  while (node) {\n    if (node == parent) return true;\n\n    node = getParentNode(node);\n  }\n  return false;\n}\n\n\n/**\n * Gets the parent node of an element or its host element if the parent node\n * is a shadow root.\n * @param {Node} node The node whose parent to get.\n * @return {Node|null} The parent node or null if no parent exists.\n */\nfunction getParentNode(node) {\n  var parent = node.parentNode;\n\n  if (parent && parent.nodeType == 11 && parent.host) {\n    // If the parent is a shadow root, return the host element.\n    return parent.host;\n  }\n  return parent;\n}\n\n\n// Exposes the constructors globally.\nwindow.IntersectionObserver = IntersectionObserver;\nwindow.IntersectionObserverEntry = IntersectionObserverEntry;\n\n}(window, document));\n","export var prefix = \"$\";\n\nfunction Map() {}\n\nMap.prototype = map.prototype = {\n  constructor: Map,\n  has: function(key) {\n    return (prefix + key) in this;\n  },\n  get: function(key) {\n    return this[prefix + key];\n  },\n  set: function(key, value) {\n    this[prefix + key] = value;\n    return this;\n  },\n  remove: function(key) {\n    var property = prefix + key;\n    return property in this && delete this[property];\n  },\n  clear: function() {\n    for (var property in this) if (property[0] === prefix) delete this[property];\n  },\n  keys: function() {\n    var keys = [];\n    for (var property in this) if (property[0] === prefix) keys.push(property.slice(1));\n    return keys;\n  },\n  values: function() {\n    var values = [];\n    for (var property in this) if (property[0] === prefix) values.push(this[property]);\n    return values;\n  },\n  entries: function() {\n    var entries = [];\n    for (var property in this) if (property[0] === prefix) entries.push({key: property.slice(1), value: this[property]});\n    return entries;\n  },\n  size: function() {\n    var size = 0;\n    for (var property in this) if (property[0] === prefix) ++size;\n    return size;\n  },\n  empty: function() {\n    for (var property in this) if (property[0] === prefix) return false;\n    return true;\n  },\n  each: function(f) {\n    for (var property in this) if (property[0] === prefix) f(this[property], property.slice(1), this);\n  }\n};\n\nfunction map(object, f) {\n  var map = new Map;\n\n  // Copy constructor.\n  if (object instanceof Map) object.each(function(value, key) { map.set(key, value); });\n\n  // Index array by numeric index or specified key function.\n  else if (Array.isArray(object)) {\n    var i = -1,\n        n = object.length,\n        o;\n\n    if (f == null) while (++i < n) map.set(i, object[i]);\n    else while (++i < n) map.set(f(o = object[i], i, object), o);\n  }\n\n  // Convert object to map.\n  else if (object) for (var key in object) map.set(key, object[key]);\n\n  return map;\n}\n\nexport default map;\n","import {default as map, prefix} from \"./map\";\n\nfunction Set() {}\n\nvar proto = map.prototype;\n\nSet.prototype = set.prototype = {\n  constructor: Set,\n  has: proto.has,\n  add: function(value) {\n    value += \"\";\n    this[prefix + value] = value;\n    return this;\n  },\n  remove: proto.remove,\n  clear: proto.clear,\n  values: proto.keys,\n  size: proto.size,\n  empty: proto.empty,\n  each: proto.each\n};\n\nfunction set(object, f) {\n  var set = new Set;\n\n  // Copy constructor.\n  if (object instanceof Set) object.each(function(value) { set.add(value); });\n\n  // Otherwise, assume it’s an array.\n  else if (object) {\n    var i = -1, n = object.length;\n    if (f == null) while (++i < n) set.add(object[i]);\n    else while (++i < n) set.add(f(object[i], i, object));\n  }\n\n  return set;\n}\n\nexport default set;\n","export default function(map) {\n  var entries = [];\n  for (var key in map) entries.push({key: key, value: map[key]});\n  return entries;\n}\n","import number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n    reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n  return function() {\n    return b;\n  };\n}\n\nfunction one(b) {\n  return function(t) {\n    return b(t) + \"\";\n  };\n}\n\nexport default function(a, b) {\n  var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n      am, // current match in a\n      bm, // current match in b\n      bs, // string preceding current number in b, if any\n      i = -1, // index in s\n      s = [], // string constants and placeholders\n      q = []; // number interpolators\n\n  // Coerce inputs to strings.\n  a = a + \"\", b = b + \"\";\n\n  // Interpolate pairs of numbers in a & b.\n  while ((am = reA.exec(a))\n      && (bm = reB.exec(b))) {\n    if ((bs = bm.index) > bi) { // a string precedes the next number in b\n      bs = b.slice(bi, bs);\n      if (s[i]) s[i] += bs; // coalesce with previous string\n      else s[++i] = bs;\n    }\n    if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n      if (s[i]) s[i] += bm; // coalesce with previous string\n      else s[++i] = bm;\n    } else { // interpolate non-matching numbers\n      s[++i] = null;\n      q.push({i: i, x: number(am, bm)});\n    }\n    bi = reB.lastIndex;\n  }\n\n  // Add remains of b.\n  if (bi < b.length) {\n    bs = b.slice(bi);\n    if (s[i]) s[i] += bs; // coalesce with previous string\n    else s[++i] = bs;\n  }\n\n  // Special optimization for only a single match.\n  // Otherwise, interpolate each of the numbers and rejoin the string.\n  return s.length < 2 ? (q[0]\n      ? one(q[0].x)\n      : zero(b))\n      : (b = q.length, function(t) {\n          for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n          return s.join(\"\");\n        });\n}\n","export default function(a, b) {\n  return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending\";\n\nexport default function(compare) {\n  if (compare.length === 1) compare = ascendingComparator(compare);\n  return {\n    left: function(a, x, lo, hi) {\n      if (lo == null) lo = 0;\n      if (hi == null) hi = a.length;\n      while (lo < hi) {\n        var mid = lo + hi >>> 1;\n        if (compare(a[mid], x) < 0) lo = mid + 1;\n        else hi = mid;\n      }\n      return lo;\n    },\n    right: function(a, x, lo, hi) {\n      if (lo == null) lo = 0;\n      if (hi == null) hi = a.length;\n      while (lo < hi) {\n        var mid = lo + hi >>> 1;\n        if (compare(a[mid], x) > 0) hi = mid;\n        else lo = mid + 1;\n      }\n      return lo;\n    }\n  };\n}\n\nfunction ascendingComparator(f) {\n  return function(d, x) {\n    return ascending(f(d), x);\n  };\n}\n","import ascending from \"./ascending\";\nimport bisector from \"./bisector\";\n\nvar ascendingBisect = bisector(ascending);\nexport var bisectRight = ascendingBisect.right;\nexport var bisectLeft = ascendingBisect.left;\nexport default bisectRight;\n","import {pair} from \"./pairs\";\n\nexport default function(values0, values1, reduce) {\n  var n0 = values0.length,\n      n1 = values1.length,\n      values = new Array(n0 * n1),\n      i0,\n      i1,\n      i,\n      value0;\n\n  if (reduce == null) reduce = pair;\n\n  for (i0 = i = 0; i0 < n0; ++i0) {\n    for (value0 = values0[i0], i1 = 0; i1 < n1; ++i1, ++i) {\n      values[i] = reduce(value0, values1[i1]);\n    }\n  }\n\n  return values;\n}\n","export default function(x) {\n  return x === null ? NaN : +x;\n}\n","export default function(values, valueof) {\n  var n = values.length,\n      i = -1,\n      value,\n      min,\n      max;\n\n  if (valueof == null) {\n    while (++i < n) { // Find the first comparable value.\n      if ((value = values[i]) != null && value >= value) {\n        min = max = value;\n        while (++i < n) { // Compare the remaining values.\n          if ((value = values[i]) != null) {\n            if (min > value) min = value;\n            if (max < value) max = value;\n          }\n        }\n      }\n    }\n  }\n\n  else {\n    while (++i < n) { // Find the first comparable value.\n      if ((value = valueof(values[i], i, values)) != null && value >= value) {\n        min = max = value;\n        while (++i < n) { // Compare the remaining values.\n          if ((value = valueof(values[i], i, values)) != null) {\n            if (min > value) min = value;\n            if (max < value) max = value;\n          }\n        }\n      }\n    }\n  }\n\n  return [min, max];\n}\n","var array = Array.prototype;\n\nexport var slice = array.slice;\nexport var map = array.map;\n","export default function(start, stop, step) {\n  start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n  var i = -1,\n      n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n      range = new Array(n);\n\n  while (++i < n) {\n    range[i] = start + i * step;\n  }\n\n  return range;\n}\n","var e10 = Math.sqrt(50),\n    e5 = Math.sqrt(10),\n    e2 = Math.sqrt(2);\n\nexport default function(start, stop, count) {\n  var reverse,\n      i = -1,\n      n,\n      ticks,\n      step;\n\n  stop = +stop, start = +start, count = +count;\n  if (start === stop && count > 0) return [start];\n  if (reverse = stop < start) n = start, start = stop, stop = n;\n  if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n\n  if (step > 0) {\n    start = Math.ceil(start / step);\n    stop = Math.floor(stop / step);\n    ticks = new Array(n = Math.ceil(stop - start + 1));\n    while (++i < n) ticks[i] = (start + i) * step;\n  } else {\n    start = Math.floor(start * step);\n    stop = Math.ceil(stop * step);\n    ticks = new Array(n = Math.ceil(start - stop + 1));\n    while (++i < n) ticks[i] = (start - i) / step;\n  }\n\n  if (reverse) ticks.reverse();\n\n  return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n  var step = (stop - start) / Math.max(0, count),\n      power = Math.floor(Math.log(step) / Math.LN10),\n      error = step / Math.pow(10, power);\n  return power >= 0\n      ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)\n      : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n}\n\nexport function tickStep(start, stop, count) {\n  var step0 = Math.abs(stop - start) / Math.max(0, count),\n      step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n      error = step0 / step1;\n  if (error >= e10) step1 *= 10;\n  else if (error >= e5) step1 *= 5;\n  else if (error >= e2) step1 *= 2;\n  return stop < start ? -step1 : step1;\n}\n","export default function(values) {\n  return Math.ceil(Math.log(values.length) / Math.LN2) + 1;\n}\n","import number from \"./number\";\n\nexport default function(values, p, valueof) {\n  if (valueof == null) valueof = number;\n  if (!(n = values.length)) return;\n  if ((p = +p) <= 0 || n < 2) return +valueof(values[0], 0, values);\n  if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n  var n,\n      i = (n - 1) * p,\n      i0 = Math.floor(i),\n      value0 = +valueof(values[i0], i0, values),\n      value1 = +valueof(values[i0 + 1], i0 + 1, values);\n  return value0 + (value1 - value0) * (i - i0);\n}\n","export default function(values, valueof) {\n  var n = values.length,\n      i = -1,\n      value,\n      max;\n\n  if (valueof == null) {\n    while (++i < n) { // Find the first comparable value.\n      if ((value = values[i]) != null && value >= value) {\n        max = value;\n        while (++i < n) { // Compare the remaining values.\n          if ((value = values[i]) != null && value > max) {\n            max = value;\n          }\n        }\n      }\n    }\n  }\n\n  else {\n    while (++i < n) { // Find the first comparable value.\n      if ((value = valueof(values[i], i, values)) != null && value >= value) {\n        max = value;\n        while (++i < n) { // Compare the remaining values.\n          if ((value = valueof(values[i], i, values)) != null && value > max) {\n            max = value;\n          }\n        }\n      }\n    }\n  }\n\n  return max;\n}\n","export default function(arrays) {\n  var n = arrays.length,\n      m,\n      i = -1,\n      j = 0,\n      merged,\n      array;\n\n  while (++i < n) j += arrays[i].length;\n  merged = new Array(j);\n\n  while (--n >= 0) {\n    array = arrays[n];\n    m = array.length;\n    while (--m >= 0) {\n      merged[--j] = array[m];\n    }\n  }\n\n  return merged;\n}\n","export default function(x) {\n  return function() {\n    return x;\n  };\n}\n","export function initRange(domain, range) {\n  switch (arguments.length) {\n    case 0: break;\n    case 1: this.range(domain); break;\n    default: this.range(range).domain(domain); break;\n  }\n  return this;\n}\n\nexport function initInterpolator(domain, interpolator) {\n  switch (arguments.length) {\n    case 0: break;\n    case 1: this.interpolator(domain); break;\n    default: this.interpolator(interpolator).domain(domain); break;\n  }\n  return this;\n}\n","var array = Array.prototype;\n\nexport var map = array.map;\nexport var slice = array.slice;\n","export default function(a, b) {\n  return a = +a, b = +b, function(t) {\n    return Math.round(a * (1 - t) + b * t);\n  };\n}\n","export default function(x) {\n  return +x;\n}\n","import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateNumber, interpolateRound} from \"d3-interpolate\";\nimport {map, slice} from \"./array\";\nimport constant from \"./constant\";\nimport number from \"./number\";\n\nvar unit = [0, 1];\n\nexport function identity(x) {\n  return x;\n}\n\nfunction normalize(a, b) {\n  return (b -= (a = +a))\n      ? function(x) { return (x - a) / b; }\n      : constant(isNaN(b) ? NaN : 0.5);\n}\n\nfunction clamper(domain) {\n  var a = domain[0], b = domain[domain.length - 1], t;\n  if (a > b) t = a, a = b, b = t;\n  return function(x) { return Math.max(a, Math.min(b, x)); };\n}\n\n// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].\nfunction bimap(domain, range, interpolate) {\n  var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n  if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0);\n  else d0 = normalize(d0, d1), r0 = interpolate(r0, r1);\n  return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, interpolate) {\n  var j = Math.min(domain.length, range.length) - 1,\n      d = new Array(j),\n      r = new Array(j),\n      i = -1;\n\n  // Reverse descending domains.\n  if (domain[j] < domain[0]) {\n    domain = domain.slice().reverse();\n    range = range.slice().reverse();\n  }\n\n  while (++i < j) {\n    d[i] = normalize(domain[i], domain[i + 1]);\n    r[i] = interpolate(range[i], range[i + 1]);\n  }\n\n  return function(x) {\n    var i = bisect(domain, x, 1, j) - 1;\n    return r[i](d[i](x));\n  };\n}\n\nexport function copy(source, target) {\n  return target\n      .domain(source.domain())\n      .range(source.range())\n      .interpolate(source.interpolate())\n      .clamp(source.clamp())\n      .unknown(source.unknown());\n}\n\nexport function transformer() {\n  var domain = unit,\n      range = unit,\n      interpolate = interpolateValue,\n      transform,\n      untransform,\n      unknown,\n      clamp = identity,\n      piecewise,\n      output,\n      input;\n\n  function rescale() {\n    piecewise = Math.min(domain.length, range.length) > 2 ? polymap : bimap;\n    output = input = null;\n    return scale;\n  }\n\n  function scale(x) {\n    return isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x)));\n  }\n\n  scale.invert = function(y) {\n    return clamp(untransform((input || (input = piecewise(range, domain.map(transform), interpolateNumber)))(y)));\n  };\n\n  scale.domain = function(_) {\n    return arguments.length ? (domain = map.call(_, number), clamp === identity || (clamp = clamper(domain)), rescale()) : domain.slice();\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (range = slice.call(_), rescale()) : range.slice();\n  };\n\n  scale.rangeRound = function(_) {\n    return range = slice.call(_), interpolate = interpolateRound, rescale();\n  };\n\n  scale.clamp = function(_) {\n    return arguments.length ? (clamp = _ ? clamper(domain) : identity, scale) : clamp !== identity;\n  };\n\n  scale.interpolate = function(_) {\n    return arguments.length ? (interpolate = _, rescale()) : interpolate;\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  return function(t, u) {\n    transform = t, untransform = u;\n    return rescale();\n  };\n}\n\nexport default function continuous(transform, untransform) {\n  return transformer()(transform, untransform);\n}\n","export default function(x) {\n  return function() {\n    return x;\n  };\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n  if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n  var match;\n  return new FormatSpecifier({\n    fill: match[1],\n    align: match[2],\n    sign: match[3],\n    symbol: match[4],\n    zero: match[5],\n    width: match[6],\n    comma: match[7],\n    precision: match[8] && match[8].slice(1),\n    trim: match[9],\n    type: match[10]\n  });\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nexport function FormatSpecifier(specifier) {\n  this.fill = specifier.fill === undefined ? \" \" : specifier.fill + \"\";\n  this.align = specifier.align === undefined ? \">\" : specifier.align + \"\";\n  this.sign = specifier.sign === undefined ? \"-\" : specifier.sign + \"\";\n  this.symbol = specifier.symbol === undefined ? \"\" : specifier.symbol + \"\";\n  this.zero = !!specifier.zero;\n  this.width = specifier.width === undefined ? undefined : +specifier.width;\n  this.comma = !!specifier.comma;\n  this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n  this.trim = !!specifier.trim;\n  this.type = specifier.type === undefined ? \"\" : specifier.type + \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n  return this.fill\n      + this.align\n      + this.sign\n      + this.symbol\n      + (this.zero ? \"0\" : \"\")\n      + (this.width === undefined ? \"\" : Math.max(1, this.width | 0))\n      + (this.comma ? \",\" : \"\")\n      + (this.precision === undefined ? \"\" : \".\" + Math.max(0, this.precision | 0))\n      + (this.trim ? \"~\" : \"\")\n      + this.type;\n};\n","export default function(x) {\n  return Math.abs(x = Math.round(x)) >= 1e21\n      ? x.toLocaleString(\"en\").replace(/,/g, \"\")\n      : x.toString(10);\n}\n\n// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimalParts(1.23) returns [\"123\", 0].\nexport function formatDecimalParts(x, p) {\n  if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n  var i, coefficient = x.slice(0, i);\n\n  // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n  // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n  return [\n    coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n    +x.slice(i + 1)\n  ];\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x) {\n  return x = formatDecimalParts(Math.abs(x)), x ? x[1] : NaN;\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n  var d = formatDecimalParts(x, p);\n  if (!d) return x + \"\";\n  var coefficient = d[0],\n      exponent = d[1],\n      i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n      n = coefficient.length;\n  return i === n ? coefficient\n      : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n      : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n      : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimalParts(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n  decimal: \".\",\n  thousands: \",\",\n  grouping: [3],\n  currency: [\"$\", \"\"],\n  minus: \"-\"\n});\n\nexport default function defaultLocale(definition) {\n  locale = formatLocale(definition);\n  format = locale.format;\n  formatPrefix = locale.formatPrefix;\n  return locale;\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x, p) {\n  var d = formatDecimalParts(x, p);\n  if (!d) return x + \"\";\n  var coefficient = d[0],\n      exponent = d[1];\n  return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n      : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n      : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n","import formatDecimal from \"./formatDecimal.js\";\nimport formatPrefixAuto from \"./formatPrefixAuto.js\";\nimport formatRounded from \"./formatRounded.js\";\n\nexport default {\n  \"%\": function(x, p) { return (x * 100).toFixed(p); },\n  \"b\": function(x) { return Math.round(x).toString(2); },\n  \"c\": function(x) { return x + \"\"; },\n  \"d\": formatDecimal,\n  \"e\": function(x, p) { return x.toExponential(p); },\n  \"f\": function(x, p) { return x.toFixed(p); },\n  \"g\": function(x, p) { return x.toPrecision(p); },\n  \"o\": function(x) { return Math.round(x).toString(8); },\n  \"p\": function(x, p) { return formatRounded(x * 100, p); },\n  \"r\": formatRounded,\n  \"s\": formatPrefixAuto,\n  \"X\": function(x) { return Math.round(x).toString(16).toUpperCase(); },\n  \"x\": function(x) { return Math.round(x).toString(16); }\n};\n","export default function(x) {\n  return x;\n}\n","import exponent from \"./exponent.js\";\nimport formatGroup from \"./formatGroup.js\";\nimport formatNumerals from \"./formatNumerals.js\";\nimport formatSpecifier from \"./formatSpecifier.js\";\nimport formatTrim from \"./formatTrim.js\";\nimport formatTypes from \"./formatTypes.js\";\nimport {prefixExponent} from \"./formatPrefixAuto.js\";\nimport identity from \"./identity.js\";\n\nvar map = Array.prototype.map,\n    prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n  var group = locale.grouping === undefined || locale.thousands === undefined ? identity : formatGroup(map.call(locale.grouping, Number), locale.thousands + \"\"),\n      currencyPrefix = locale.currency === undefined ? \"\" : locale.currency[0] + \"\",\n      currencySuffix = locale.currency === undefined ? \"\" : locale.currency[1] + \"\",\n      decimal = locale.decimal === undefined ? \".\" : locale.decimal + \"\",\n      numerals = locale.numerals === undefined ? identity : formatNumerals(map.call(locale.numerals, String)),\n      percent = locale.percent === undefined ? \"%\" : locale.percent + \"\",\n      minus = locale.minus === undefined ? \"-\" : locale.minus + \"\",\n      nan = locale.nan === undefined ? \"NaN\" : locale.nan + \"\";\n\n  function newFormat(specifier) {\n    specifier = formatSpecifier(specifier);\n\n    var fill = specifier.fill,\n        align = specifier.align,\n        sign = specifier.sign,\n        symbol = specifier.symbol,\n        zero = specifier.zero,\n        width = specifier.width,\n        comma = specifier.comma,\n        precision = specifier.precision,\n        trim = specifier.trim,\n        type = specifier.type;\n\n    // The \"n\" type is an alias for \",g\".\n    if (type === \"n\") comma = true, type = \"g\";\n\n    // The \"\" type, and any invalid type, is an alias for \".12~g\".\n    else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = \"g\";\n\n    // If zero fill is specified, padding goes after sign and before digits.\n    if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n    // Compute the prefix and suffix.\n    // For SI-prefix, the suffix is lazily computed.\n    var prefix = symbol === \"$\" ? currencyPrefix : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n        suffix = symbol === \"$\" ? currencySuffix : /[%p]/.test(type) ? percent : \"\";\n\n    // What format function should we use?\n    // Is this an integer type?\n    // Can this type generate exponential notation?\n    var formatType = formatTypes[type],\n        maybeSuffix = /[defgprs%]/.test(type);\n\n    // Set the default precision if not specified,\n    // or clamp the specified precision to the supported range.\n    // For significant precision, it must be in [1, 21].\n    // For fixed precision, it must be in [0, 20].\n    precision = precision === undefined ? 6\n        : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n        : Math.max(0, Math.min(20, precision));\n\n    function format(value) {\n      var valuePrefix = prefix,\n          valueSuffix = suffix,\n          i, n, c;\n\n      if (type === \"c\") {\n        valueSuffix = formatType(value) + valueSuffix;\n        value = \"\";\n      } else {\n        value = +value;\n\n        // Determine the sign. -0 is not less than 0, but 1 / -0 is!\n        var valueNegative = value < 0 || 1 / value < 0;\n\n        // Perform the initial formatting.\n        value = isNaN(value) ? nan : formatType(Math.abs(value), precision);\n\n        // Trim insignificant zeros.\n        if (trim) value = formatTrim(value);\n\n        // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.\n        if (valueNegative && +value === 0 && sign !== \"+\") valueNegative = false;\n\n        // Compute the prefix and suffix.\n        valuePrefix = (valueNegative ? (sign === \"(\" ? sign : minus) : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n        valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n        // Break the formatted value into the integer “value” part that can be\n        // grouped, and fractional or exponential “suffix” part that is not.\n        if (maybeSuffix) {\n          i = -1, n = value.length;\n          while (++i < n) {\n            if (c = value.charCodeAt(i), 48 > c || c > 57) {\n              valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n              value = value.slice(0, i);\n              break;\n            }\n          }\n        }\n      }\n\n      // If the fill character is not \"0\", grouping is applied before padding.\n      if (comma && !zero) value = group(value, Infinity);\n\n      // Compute the padding.\n      var length = valuePrefix.length + value.length + valueSuffix.length,\n          padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n      // If the fill character is \"0\", grouping is applied after padding.\n      if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n      // Reconstruct the final output based on the desired alignment.\n      switch (align) {\n        case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n        case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n        case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n        default: value = padding + valuePrefix + value + valueSuffix; break;\n      }\n\n      return numerals(value);\n    }\n\n    format.toString = function() {\n      return specifier + \"\";\n    };\n\n    return format;\n  }\n\n  function formatPrefix(specifier, value) {\n    var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n        e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n        k = Math.pow(10, -e),\n        prefix = prefixes[8 + e / 3];\n    return function(value) {\n      return f(k * value) + prefix;\n    };\n  }\n\n  return {\n    format: newFormat,\n    formatPrefix: formatPrefix\n  };\n}\n","export default function(grouping, thousands) {\n  return function(value, width) {\n    var i = value.length,\n        t = [],\n        j = 0,\n        g = grouping[0],\n        length = 0;\n\n    while (i > 0 && g > 0) {\n      if (length + g + 1 > width) g = Math.max(1, width - length);\n      t.push(value.substring(i -= g, i + g));\n      if ((length += g + 1) > width) break;\n      g = grouping[j = (j + 1) % grouping.length];\n    }\n\n    return t.reverse().join(thousands);\n  };\n}\n","export default function(numerals) {\n  return function(value) {\n    return value.replace(/[0-9]/g, function(i) {\n      return numerals[+i];\n    });\n  };\n}\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n  out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n    switch (s[i]) {\n      case \".\": i0 = i1 = i; break;\n      case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n      default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;\n    }\n  }\n  return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, max) {\n  step = Math.abs(step), max = Math.abs(max) - step;\n  return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n","import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function(start, stop, count, specifier) {\n  var step = tickStep(start, stop, count),\n      precision;\n  specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n  switch (specifier.type) {\n    case \"s\": {\n      var value = Math.max(Math.abs(start), Math.abs(stop));\n      if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n      return formatPrefix(specifier, value);\n    }\n    case \"\":\n    case \"e\":\n    case \"g\":\n    case \"p\":\n    case \"r\": {\n      if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n      break;\n    }\n    case \"f\":\n    case \"%\": {\n      if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n      break;\n    }\n  }\n  return format(specifier);\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, value) {\n  return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step) {\n  return Math.max(0, -exponent(Math.abs(step)));\n}\n","import {ticks, tickIncrement} from \"d3-array\";\nimport continuous, {copy, identity} from \"./continuous\";\nimport {initRange} from \"./init\";\nimport tickFormat from \"./tickFormat\";\n\nexport function linearish(scale) {\n  var domain = scale.domain;\n\n  scale.ticks = function(count) {\n    var d = domain();\n    return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n  };\n\n  scale.tickFormat = function(count, specifier) {\n    var d = domain();\n    return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);\n  };\n\n  scale.nice = function(count) {\n    if (count == null) count = 10;\n\n    var d = domain(),\n        i0 = 0,\n        i1 = d.length - 1,\n        start = d[i0],\n        stop = d[i1],\n        step;\n\n    if (stop < start) {\n      step = start, start = stop, stop = step;\n      step = i0, i0 = i1, i1 = step;\n    }\n\n    step = tickIncrement(start, stop, count);\n\n    if (step > 0) {\n      start = Math.floor(start / step) * step;\n      stop = Math.ceil(stop / step) * step;\n      step = tickIncrement(start, stop, count);\n    } else if (step < 0) {\n      start = Math.ceil(start * step) / step;\n      stop = Math.floor(stop * step) / step;\n      step = tickIncrement(start, stop, count);\n    }\n\n    if (step > 0) {\n      d[i0] = Math.floor(start / step) * step;\n      d[i1] = Math.ceil(stop / step) * step;\n      domain(d);\n    } else if (step < 0) {\n      d[i0] = Math.ceil(start * step) / step;\n      d[i1] = Math.floor(stop * step) / step;\n      domain(d);\n    }\n\n    return scale;\n  };\n\n  return scale;\n}\n\nexport default function linear() {\n  var scale = continuous(identity, identity);\n\n  scale.copy = function() {\n    return copy(scale, linear());\n  };\n\n  initRange.apply(scale, arguments);\n\n  return linearish(scale);\n}\n","var t0 = new Date,\n    t1 = new Date;\n\nexport default function newInterval(floori, offseti, count, field) {\n\n  function interval(date) {\n    return floori(date = arguments.length === 0 ? new Date : new Date(+date)), date;\n  }\n\n  interval.floor = function(date) {\n    return floori(date = new Date(+date)), date;\n  };\n\n  interval.ceil = function(date) {\n    return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n  };\n\n  interval.round = function(date) {\n    var d0 = interval(date),\n        d1 = interval.ceil(date);\n    return date - d0 < d1 - date ? d0 : d1;\n  };\n\n  interval.offset = function(date, step) {\n    return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n  };\n\n  interval.range = function(start, stop, step) {\n    var range = [], previous;\n    start = interval.ceil(start);\n    step = step == null ? 1 : Math.floor(step);\n    if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n    do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n    while (previous < start && start < stop);\n    return range;\n  };\n\n  interval.filter = function(test) {\n    return newInterval(function(date) {\n      if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n    }, function(date, step) {\n      if (date >= date) {\n        if (step < 0) while (++step <= 0) {\n          while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n        } else while (--step >= 0) {\n          while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n        }\n      }\n    });\n  };\n\n  if (count) {\n    interval.count = function(start, end) {\n      t0.setTime(+start), t1.setTime(+end);\n      floori(t0), floori(t1);\n      return Math.floor(count(t0, t1));\n    };\n\n    interval.every = function(step) {\n      step = Math.floor(step);\n      return !isFinite(step) || !(step > 0) ? null\n          : !(step > 1) ? interval\n          : interval.filter(field\n              ? function(d) { return field(d) % step === 0; }\n              : function(d) { return interval.count(0, d) % step === 0; });\n    };\n  }\n\n  return interval;\n}\n","import interval from \"./interval.js\";\n\nvar year = interval(function(date) {\n  date.setMonth(0, 1);\n  date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n  date.setFullYear(date.getFullYear() + step);\n}, function(start, end) {\n  return end.getFullYear() - start.getFullYear();\n}, function(date) {\n  return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\nyear.every = function(k) {\n  return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n    date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n    date.setMonth(0, 1);\n    date.setHours(0, 0, 0, 0);\n  }, function(date, step) {\n    date.setFullYear(date.getFullYear() + step * k);\n  });\n};\n\nexport default year;\nexport var years = year.range;\n","import interval from \"./interval.js\";\n\nvar month = interval(function(date) {\n  date.setDate(1);\n  date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n  date.setMonth(date.getMonth() + step);\n}, function(start, end) {\n  return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n}, function(date) {\n  return date.getMonth();\n});\n\nexport default month;\nexport var months = month.range;\n","import interval from \"./interval.js\";\nimport {durationMinute, durationWeek} from \"./duration.js\";\n\nfunction weekday(i) {\n  return interval(function(date) {\n    date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n    date.setHours(0, 0, 0, 0);\n  }, function(date, step) {\n    date.setDate(date.getDate() + step * 7);\n  }, function(start, end) {\n    return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n  });\n}\n\nexport var sunday = weekday(0);\nexport var monday = weekday(1);\nexport var tuesday = weekday(2);\nexport var wednesday = weekday(3);\nexport var thursday = weekday(4);\nexport var friday = weekday(5);\nexport var saturday = weekday(6);\n\nexport var sundays = sunday.range;\nexport var mondays = monday.range;\nexport var tuesdays = tuesday.range;\nexport var wednesdays = wednesday.range;\nexport var thursdays = thursday.range;\nexport var fridays = friday.range;\nexport var saturdays = saturday.range;\n","export var durationSecond = 1e3;\nexport var durationMinute = 6e4;\nexport var durationHour = 36e5;\nexport var durationDay = 864e5;\nexport var durationWeek = 6048e5;\n","import interval from \"./interval.js\";\nimport {durationDay, durationMinute} from \"./duration.js\";\n\nvar day = interval(function(date) {\n  date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n  date.setDate(date.getDate() + step);\n}, function(start, end) {\n  return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay;\n}, function(date) {\n  return date.getDate() - 1;\n});\n\nexport default day;\nexport var days = day.range;\n","import interval from \"./interval.js\";\nimport {durationHour, durationMinute, durationSecond} from \"./duration.js\";\n\nvar hour = interval(function(date) {\n  date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);\n}, function(date, step) {\n  date.setTime(+date + step * durationHour);\n}, function(start, end) {\n  return (end - start) / durationHour;\n}, function(date) {\n  return date.getHours();\n});\n\nexport default hour;\nexport var hours = hour.range;\n","import interval from \"./interval.js\";\nimport {durationMinute, durationSecond} from \"./duration.js\";\n\nvar minute = interval(function(date) {\n  date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);\n}, function(date, step) {\n  date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n  return (end - start) / durationMinute;\n}, function(date) {\n  return date.getMinutes();\n});\n\nexport default minute;\nexport var minutes = minute.range;\n","import interval from \"./interval.js\";\nimport {durationSecond} from \"./duration.js\";\n\nvar second = interval(function(date) {\n  date.setTime(date - date.getMilliseconds());\n}, function(date, step) {\n  date.setTime(+date + step * durationSecond);\n}, function(start, end) {\n  return (end - start) / durationSecond;\n}, function(date) {\n  return date.getUTCSeconds();\n});\n\nexport default second;\nexport var seconds = second.range;\n","import interval from \"./interval.js\";\n\nvar millisecond = interval(function() {\n  // noop\n}, function(date, step) {\n  date.setTime(+date + step);\n}, function(start, end) {\n  return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = function(k) {\n  k = Math.floor(k);\n  if (!isFinite(k) || !(k > 0)) return null;\n  if (!(k > 1)) return millisecond;\n  return interval(function(date) {\n    date.setTime(Math.floor(date / k) * k);\n  }, function(date, step) {\n    date.setTime(+date + step * k);\n  }, function(start, end) {\n    return (end - start) / k;\n  });\n};\n\nexport default millisecond;\nexport var milliseconds = millisecond.range;\n","import interval from \"./interval.js\";\nimport {durationWeek} from \"./duration.js\";\n\nfunction utcWeekday(i) {\n  return interval(function(date) {\n    date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n    date.setUTCHours(0, 0, 0, 0);\n  }, function(date, step) {\n    date.setUTCDate(date.getUTCDate() + step * 7);\n  }, function(start, end) {\n    return (end - start) / durationWeek;\n  });\n}\n\nexport var utcSunday = utcWeekday(0);\nexport var utcMonday = utcWeekday(1);\nexport var utcTuesday = utcWeekday(2);\nexport var utcWednesday = utcWeekday(3);\nexport var utcThursday = utcWeekday(4);\nexport var utcFriday = utcWeekday(5);\nexport var utcSaturday = utcWeekday(6);\n\nexport var utcSundays = utcSunday.range;\nexport var utcMondays = utcMonday.range;\nexport var utcTuesdays = utcTuesday.range;\nexport var utcWednesdays = utcWednesday.range;\nexport var utcThursdays = utcThursday.range;\nexport var utcFridays = utcFriday.range;\nexport var utcSaturdays = utcSaturday.range;\n","import interval from \"./interval.js\";\nimport {durationDay} from \"./duration.js\";\n\nvar utcDay = interval(function(date) {\n  date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n  date.setUTCDate(date.getUTCDate() + step);\n}, function(start, end) {\n  return (end - start) / durationDay;\n}, function(date) {\n  return date.getUTCDate() - 1;\n});\n\nexport default utcDay;\nexport var utcDays = utcDay.range;\n","import interval from \"./interval.js\";\n\nvar utcYear = interval(function(date) {\n  date.setUTCMonth(0, 1);\n  date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n  date.setUTCFullYear(date.getUTCFullYear() + step);\n}, function(start, end) {\n  return end.getUTCFullYear() - start.getUTCFullYear();\n}, function(date) {\n  return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = function(k) {\n  return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n    date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n    date.setUTCMonth(0, 1);\n    date.setUTCHours(0, 0, 0, 0);\n  }, function(date, step) {\n    date.setUTCFullYear(date.getUTCFullYear() + step * k);\n  });\n};\n\nexport default utcYear;\nexport var utcYears = utcYear.range;\n","import {\n  timeDay,\n  timeSunday,\n  timeMonday,\n  timeThursday,\n  timeYear,\n  utcDay,\n  utcSunday,\n  utcMonday,\n  utcThursday,\n  utcYear\n} from \"d3-time\";\n\nfunction localDate(d) {\n  if (0 <= d.y && d.y < 100) {\n    var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n    date.setFullYear(d.y);\n    return date;\n  }\n  return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n}\n\nfunction utcDate(d) {\n  if (0 <= d.y && d.y < 100) {\n    var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n    date.setUTCFullYear(d.y);\n    return date;\n  }\n  return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n}\n\nfunction newDate(y, m, d) {\n  return {y: y, m: m, d: d, H: 0, M: 0, S: 0, L: 0};\n}\n\nexport default function formatLocale(locale) {\n  var locale_dateTime = locale.dateTime,\n      locale_date = locale.date,\n      locale_time = locale.time,\n      locale_periods = locale.periods,\n      locale_weekdays = locale.days,\n      locale_shortWeekdays = locale.shortDays,\n      locale_months = locale.months,\n      locale_shortMonths = locale.shortMonths;\n\n  var periodRe = formatRe(locale_periods),\n      periodLookup = formatLookup(locale_periods),\n      weekdayRe = formatRe(locale_weekdays),\n      weekdayLookup = formatLookup(locale_weekdays),\n      shortWeekdayRe = formatRe(locale_shortWeekdays),\n      shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n      monthRe = formatRe(locale_months),\n      monthLookup = formatLookup(locale_months),\n      shortMonthRe = formatRe(locale_shortMonths),\n      shortMonthLookup = formatLookup(locale_shortMonths);\n\n  var formats = {\n    \"a\": formatShortWeekday,\n    \"A\": formatWeekday,\n    \"b\": formatShortMonth,\n    \"B\": formatMonth,\n    \"c\": null,\n    \"d\": formatDayOfMonth,\n    \"e\": formatDayOfMonth,\n    \"f\": formatMicroseconds,\n    \"g\": formatYearISO,\n    \"G\": formatFullYearISO,\n    \"H\": formatHour24,\n    \"I\": formatHour12,\n    \"j\": formatDayOfYear,\n    \"L\": formatMilliseconds,\n    \"m\": formatMonthNumber,\n    \"M\": formatMinutes,\n    \"p\": formatPeriod,\n    \"q\": formatQuarter,\n    \"Q\": formatUnixTimestamp,\n    \"s\": formatUnixTimestampSeconds,\n    \"S\": formatSeconds,\n    \"u\": formatWeekdayNumberMonday,\n    \"U\": formatWeekNumberSunday,\n    \"V\": formatWeekNumberISO,\n    \"w\": formatWeekdayNumberSunday,\n    \"W\": formatWeekNumberMonday,\n    \"x\": null,\n    \"X\": null,\n    \"y\": formatYear,\n    \"Y\": formatFullYear,\n    \"Z\": formatZone,\n    \"%\": formatLiteralPercent\n  };\n\n  var utcFormats = {\n    \"a\": formatUTCShortWeekday,\n    \"A\": formatUTCWeekday,\n    \"b\": formatUTCShortMonth,\n    \"B\": formatUTCMonth,\n    \"c\": null,\n    \"d\": formatUTCDayOfMonth,\n    \"e\": formatUTCDayOfMonth,\n    \"f\": formatUTCMicroseconds,\n    \"g\": formatUTCYearISO,\n    \"G\": formatUTCFullYearISO,\n    \"H\": formatUTCHour24,\n    \"I\": formatUTCHour12,\n    \"j\": formatUTCDayOfYear,\n    \"L\": formatUTCMilliseconds,\n    \"m\": formatUTCMonthNumber,\n    \"M\": formatUTCMinutes,\n    \"p\": formatUTCPeriod,\n    \"q\": formatUTCQuarter,\n    \"Q\": formatUnixTimestamp,\n    \"s\": formatUnixTimestampSeconds,\n    \"S\": formatUTCSeconds,\n    \"u\": formatUTCWeekdayNumberMonday,\n    \"U\": formatUTCWeekNumberSunday,\n    \"V\": formatUTCWeekNumberISO,\n    \"w\": formatUTCWeekdayNumberSunday,\n    \"W\": formatUTCWeekNumberMonday,\n    \"x\": null,\n    \"X\": null,\n    \"y\": formatUTCYear,\n    \"Y\": formatUTCFullYear,\n    \"Z\": formatUTCZone,\n    \"%\": formatLiteralPercent\n  };\n\n  var parses = {\n    \"a\": parseShortWeekday,\n    \"A\": parseWeekday,\n    \"b\": parseShortMonth,\n    \"B\": parseMonth,\n    \"c\": parseLocaleDateTime,\n    \"d\": parseDayOfMonth,\n    \"e\": parseDayOfMonth,\n    \"f\": parseMicroseconds,\n    \"g\": parseYear,\n    \"G\": parseFullYear,\n    \"H\": parseHour24,\n    \"I\": parseHour24,\n    \"j\": parseDayOfYear,\n    \"L\": parseMilliseconds,\n    \"m\": parseMonthNumber,\n    \"M\": parseMinutes,\n    \"p\": parsePeriod,\n    \"q\": parseQuarter,\n    \"Q\": parseUnixTimestamp,\n    \"s\": parseUnixTimestampSeconds,\n    \"S\": parseSeconds,\n    \"u\": parseWeekdayNumberMonday,\n    \"U\": parseWeekNumberSunday,\n    \"V\": parseWeekNumberISO,\n    \"w\": parseWeekdayNumberSunday,\n    \"W\": parseWeekNumberMonday,\n    \"x\": parseLocaleDate,\n    \"X\": parseLocaleTime,\n    \"y\": parseYear,\n    \"Y\": parseFullYear,\n    \"Z\": parseZone,\n    \"%\": parseLiteralPercent\n  };\n\n  // These recursive directive definitions must be deferred.\n  formats.x = newFormat(locale_date, formats);\n  formats.X = newFormat(locale_time, formats);\n  formats.c = newFormat(locale_dateTime, formats);\n  utcFormats.x = newFormat(locale_date, utcFormats);\n  utcFormats.X = newFormat(locale_time, utcFormats);\n  utcFormats.c = newFormat(locale_dateTime, utcFormats);\n\n  function newFormat(specifier, formats) {\n    return function(date) {\n      var string = [],\n          i = -1,\n          j = 0,\n          n = specifier.length,\n          c,\n          pad,\n          format;\n\n      if (!(date instanceof Date)) date = new Date(+date);\n\n      while (++i < n) {\n        if (specifier.charCodeAt(i) === 37) {\n          string.push(specifier.slice(j, i));\n          if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);\n          else pad = c === \"e\" ? \" \" : \"0\";\n          if (format = formats[c]) c = format(date, pad);\n          string.push(c);\n          j = i + 1;\n        }\n      }\n\n      string.push(specifier.slice(j, i));\n      return string.join(\"\");\n    };\n  }\n\n  function newParse(specifier, Z) {\n    return function(string) {\n      var d = newDate(1900, undefined, 1),\n          i = parseSpecifier(d, specifier, string += \"\", 0),\n          week, day;\n      if (i != string.length) return null;\n\n      // If a UNIX timestamp is specified, return it.\n      if (\"Q\" in d) return new Date(d.Q);\n      if (\"s\" in d) return new Date(d.s * 1000 + (\"L\" in d ? d.L : 0));\n\n      // If this is utcParse, never use the local timezone.\n      if (Z && !(\"Z\" in d)) d.Z = 0;\n\n      // The am-pm flag is 0 for AM, and 1 for PM.\n      if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n\n      // If the month was not specified, inherit from the quarter.\n      if (d.m === undefined) d.m = \"q\" in d ? d.q : 0;\n\n      // Convert day-of-week and week-of-year to day-of-year.\n      if (\"V\" in d) {\n        if (d.V < 1 || d.V > 53) return null;\n        if (!(\"w\" in d)) d.w = 1;\n        if (\"Z\" in d) {\n          week = utcDate(newDate(d.y, 0, 1)), day = week.getUTCDay();\n          week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday(week);\n          week = utcDay.offset(week, (d.V - 1) * 7);\n          d.y = week.getUTCFullYear();\n          d.m = week.getUTCMonth();\n          d.d = week.getUTCDate() + (d.w + 6) % 7;\n        } else {\n          week = localDate(newDate(d.y, 0, 1)), day = week.getDay();\n          week = day > 4 || day === 0 ? timeMonday.ceil(week) : timeMonday(week);\n          week = timeDay.offset(week, (d.V - 1) * 7);\n          d.y = week.getFullYear();\n          d.m = week.getMonth();\n          d.d = week.getDate() + (d.w + 6) % 7;\n        }\n      } else if (\"W\" in d || \"U\" in d) {\n        if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n        day = \"Z\" in d ? utcDate(newDate(d.y, 0, 1)).getUTCDay() : localDate(newDate(d.y, 0, 1)).getDay();\n        d.m = 0;\n        d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n      }\n\n      // If a time zone is specified, all fields are interpreted as UTC and then\n      // offset according to the specified time zone.\n      if (\"Z\" in d) {\n        d.H += d.Z / 100 | 0;\n        d.M += d.Z % 100;\n        return utcDate(d);\n      }\n\n      // Otherwise, all fields are in local time.\n      return localDate(d);\n    };\n  }\n\n  function parseSpecifier(d, specifier, string, j) {\n    var i = 0,\n        n = specifier.length,\n        m = string.length,\n        c,\n        parse;\n\n    while (i < n) {\n      if (j >= m) return -1;\n      c = specifier.charCodeAt(i++);\n      if (c === 37) {\n        c = specifier.charAt(i++);\n        parse = parses[c in pads ? specifier.charAt(i++) : c];\n        if (!parse || ((j = parse(d, string, j)) < 0)) return -1;\n      } else if (c != string.charCodeAt(j++)) {\n        return -1;\n      }\n    }\n\n    return j;\n  }\n\n  function parsePeriod(d, string, i) {\n    var n = periodRe.exec(string.slice(i));\n    return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n  }\n\n  function parseShortWeekday(d, string, i) {\n    var n = shortWeekdayRe.exec(string.slice(i));\n    return n ? (d.w = shortWeekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n  }\n\n  function parseWeekday(d, string, i) {\n    var n = weekdayRe.exec(string.slice(i));\n    return n ? (d.w = weekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n  }\n\n  function parseShortMonth(d, string, i) {\n    var n = shortMonthRe.exec(string.slice(i));\n    return n ? (d.m = shortMonthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n  }\n\n  function parseMonth(d, string, i) {\n    var n = monthRe.exec(string.slice(i));\n    return n ? (d.m = monthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n  }\n\n  function parseLocaleDateTime(d, string, i) {\n    return parseSpecifier(d, locale_dateTime, string, i);\n  }\n\n  function parseLocaleDate(d, string, i) {\n    return parseSpecifier(d, locale_date, string, i);\n  }\n\n  function parseLocaleTime(d, string, i) {\n    return parseSpecifier(d, locale_time, string, i);\n  }\n\n  function formatShortWeekday(d) {\n    return locale_shortWeekdays[d.getDay()];\n  }\n\n  function formatWeekday(d) {\n    return locale_weekdays[d.getDay()];\n  }\n\n  function formatShortMonth(d) {\n    return locale_shortMonths[d.getMonth()];\n  }\n\n  function formatMonth(d) {\n    return locale_months[d.getMonth()];\n  }\n\n  function formatPeriod(d) {\n    return locale_periods[+(d.getHours() >= 12)];\n  }\n\n  function formatQuarter(d) {\n    return 1 + ~~(d.getMonth() / 3);\n  }\n\n  function formatUTCShortWeekday(d) {\n    return locale_shortWeekdays[d.getUTCDay()];\n  }\n\n  function formatUTCWeekday(d) {\n    return locale_weekdays[d.getUTCDay()];\n  }\n\n  function formatUTCShortMonth(d) {\n    return locale_shortMonths[d.getUTCMonth()];\n  }\n\n  function formatUTCMonth(d) {\n    return locale_months[d.getUTCMonth()];\n  }\n\n  function formatUTCPeriod(d) {\n    return locale_periods[+(d.getUTCHours() >= 12)];\n  }\n\n  function formatUTCQuarter(d) {\n    return 1 + ~~(d.getUTCMonth() / 3);\n  }\n\n  return {\n    format: function(specifier) {\n      var f = newFormat(specifier += \"\", formats);\n      f.toString = function() { return specifier; };\n      return f;\n    },\n    parse: function(specifier) {\n      var p = newParse(specifier += \"\", false);\n      p.toString = function() { return specifier; };\n      return p;\n    },\n    utcFormat: function(specifier) {\n      var f = newFormat(specifier += \"\", utcFormats);\n      f.toString = function() { return specifier; };\n      return f;\n    },\n    utcParse: function(specifier) {\n      var p = newParse(specifier += \"\", true);\n      p.toString = function() { return specifier; };\n      return p;\n    }\n  };\n}\n\nvar pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"},\n    numberRe = /^\\s*\\d+/, // note: ignores next directive\n    percentRe = /^%/,\n    requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\nfunction pad(value, fill, width) {\n  var sign = value < 0 ? \"-\" : \"\",\n      string = (sign ? -value : value) + \"\",\n      length = string.length;\n  return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n}\n\nfunction requote(s) {\n  return s.replace(requoteRe, \"\\\\$&\");\n}\n\nfunction formatRe(names) {\n  return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n}\n\nfunction formatLookup(names) {\n  var map = {}, i = -1, n = names.length;\n  while (++i < n) map[names[i].toLowerCase()] = i;\n  return map;\n}\n\nfunction parseWeekdayNumberSunday(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 1));\n  return n ? (d.w = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekdayNumberMonday(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 1));\n  return n ? (d.u = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberSunday(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.U = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberISO(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.V = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberMonday(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.W = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseFullYear(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 4));\n  return n ? (d.y = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseYear(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n}\n\nfunction parseZone(d, string, i) {\n  var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n  return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n}\n\nfunction parseQuarter(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 1));\n  return n ? (d.q = n[0] * 3 - 3, i + n[0].length) : -1;\n}\n\nfunction parseMonthNumber(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n}\n\nfunction parseDayOfMonth(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseDayOfYear(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 3));\n  return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseHour24(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.H = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMinutes(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.M = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseSeconds(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.S = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMilliseconds(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 3));\n  return n ? (d.L = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMicroseconds(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 6));\n  return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n}\n\nfunction parseLiteralPercent(d, string, i) {\n  var n = percentRe.exec(string.slice(i, i + 1));\n  return n ? i + n[0].length : -1;\n}\n\nfunction parseUnixTimestamp(d, string, i) {\n  var n = numberRe.exec(string.slice(i));\n  return n ? (d.Q = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseUnixTimestampSeconds(d, string, i) {\n  var n = numberRe.exec(string.slice(i));\n  return n ? (d.s = +n[0], i + n[0].length) : -1;\n}\n\nfunction formatDayOfMonth(d, p) {\n  return pad(d.getDate(), p, 2);\n}\n\nfunction formatHour24(d, p) {\n  return pad(d.getHours(), p, 2);\n}\n\nfunction formatHour12(d, p) {\n  return pad(d.getHours() % 12 || 12, p, 2);\n}\n\nfunction formatDayOfYear(d, p) {\n  return pad(1 + timeDay.count(timeYear(d), d), p, 3);\n}\n\nfunction formatMilliseconds(d, p) {\n  return pad(d.getMilliseconds(), p, 3);\n}\n\nfunction formatMicroseconds(d, p) {\n  return formatMilliseconds(d, p) + \"000\";\n}\n\nfunction formatMonthNumber(d, p) {\n  return pad(d.getMonth() + 1, p, 2);\n}\n\nfunction formatMinutes(d, p) {\n  return pad(d.getMinutes(), p, 2);\n}\n\nfunction formatSeconds(d, p) {\n  return pad(d.getSeconds(), p, 2);\n}\n\nfunction formatWeekdayNumberMonday(d) {\n  var day = d.getDay();\n  return day === 0 ? 7 : day;\n}\n\nfunction formatWeekNumberSunday(d, p) {\n  return pad(timeSunday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction dISO(d) {\n  var day = d.getDay();\n  return (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n}\n\nfunction formatWeekNumberISO(d, p) {\n  d = dISO(d);\n  return pad(timeThursday.count(timeYear(d), d) + (timeYear(d).getDay() === 4), p, 2);\n}\n\nfunction formatWeekdayNumberSunday(d) {\n  return d.getDay();\n}\n\nfunction formatWeekNumberMonday(d, p) {\n  return pad(timeMonday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction formatYear(d, p) {\n  return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatYearISO(d, p) {\n  d = dISO(d);\n  return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatFullYear(d, p) {\n  return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatFullYearISO(d, p) {\n  var day = d.getDay();\n  d = (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n  return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatZone(d) {\n  var z = d.getTimezoneOffset();\n  return (z > 0 ? \"-\" : (z *= -1, \"+\"))\n      + pad(z / 60 | 0, \"0\", 2)\n      + pad(z % 60, \"0\", 2);\n}\n\nfunction formatUTCDayOfMonth(d, p) {\n  return pad(d.getUTCDate(), p, 2);\n}\n\nfunction formatUTCHour24(d, p) {\n  return pad(d.getUTCHours(), p, 2);\n}\n\nfunction formatUTCHour12(d, p) {\n  return pad(d.getUTCHours() % 12 || 12, p, 2);\n}\n\nfunction formatUTCDayOfYear(d, p) {\n  return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n}\n\nfunction formatUTCMilliseconds(d, p) {\n  return pad(d.getUTCMilliseconds(), p, 3);\n}\n\nfunction formatUTCMicroseconds(d, p) {\n  return formatUTCMilliseconds(d, p) + \"000\";\n}\n\nfunction formatUTCMonthNumber(d, p) {\n  return pad(d.getUTCMonth() + 1, p, 2);\n}\n\nfunction formatUTCMinutes(d, p) {\n  return pad(d.getUTCMinutes(), p, 2);\n}\n\nfunction formatUTCSeconds(d, p) {\n  return pad(d.getUTCSeconds(), p, 2);\n}\n\nfunction formatUTCWeekdayNumberMonday(d) {\n  var dow = d.getUTCDay();\n  return dow === 0 ? 7 : dow;\n}\n\nfunction formatUTCWeekNumberSunday(d, p) {\n  return pad(utcSunday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction UTCdISO(d) {\n  var day = d.getUTCDay();\n  return (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n}\n\nfunction formatUTCWeekNumberISO(d, p) {\n  d = UTCdISO(d);\n  return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);\n}\n\nfunction formatUTCWeekdayNumberSunday(d) {\n  return d.getUTCDay();\n}\n\nfunction formatUTCWeekNumberMonday(d, p) {\n  return pad(utcMonday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction formatUTCYear(d, p) {\n  return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCYearISO(d, p) {\n  d = UTCdISO(d);\n  return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCFullYear(d, p) {\n  return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCFullYearISO(d, p) {\n  var day = d.getUTCDay();\n  d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n  return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCZone() {\n  return \"+0000\";\n}\n\nfunction formatLiteralPercent() {\n  return \"%\";\n}\n\nfunction formatUnixTimestamp(d) {\n  return +d;\n}\n\nfunction formatUnixTimestampSeconds(d) {\n  return Math.floor(+d / 1000);\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var timeFormat;\nexport var timeParse;\nexport var utcFormat;\nexport var utcParse;\n\ndefaultLocale({\n  dateTime: \"%x, %X\",\n  date: \"%-m/%-d/%Y\",\n  time: \"%-I:%M:%S %p\",\n  periods: [\"AM\", \"PM\"],\n  days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n  shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n  months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n  shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n});\n\nexport default function defaultLocale(definition) {\n  locale = formatLocale(definition);\n  timeFormat = locale.format;\n  timeParse = locale.parse;\n  utcFormat = locale.utcFormat;\n  utcParse = locale.utcParse;\n  return locale;\n}\n","import {bisector, tickStep} from \"d3-array\";\nimport {timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeMillisecond} from \"d3-time\";\nimport {timeFormat} from \"d3-time-format\";\nimport {map} from \"./array\";\nimport continuous, {copy, identity} from \"./continuous\";\nimport {initRange} from \"./init\";\nimport nice from \"./nice\";\n\nvar durationSecond = 1000,\n    durationMinute = durationSecond * 60,\n    durationHour = durationMinute * 60,\n    durationDay = durationHour * 24,\n    durationWeek = durationDay * 7,\n    durationMonth = durationDay * 30,\n    durationYear = durationDay * 365;\n\nfunction date(t) {\n  return new Date(t);\n}\n\nfunction number(t) {\n  return t instanceof Date ? +t : +new Date(+t);\n}\n\nexport function calendar(year, month, week, day, hour, minute, second, millisecond, format) {\n  var scale = continuous(identity, identity),\n      invert = scale.invert,\n      domain = scale.domain;\n\n  var formatMillisecond = format(\".%L\"),\n      formatSecond = format(\":%S\"),\n      formatMinute = format(\"%I:%M\"),\n      formatHour = format(\"%I %p\"),\n      formatDay = format(\"%a %d\"),\n      formatWeek = format(\"%b %d\"),\n      formatMonth = format(\"%B\"),\n      formatYear = format(\"%Y\");\n\n  var tickIntervals = [\n    [second,  1,      durationSecond],\n    [second,  5,  5 * durationSecond],\n    [second, 15, 15 * durationSecond],\n    [second, 30, 30 * durationSecond],\n    [minute,  1,      durationMinute],\n    [minute,  5,  5 * durationMinute],\n    [minute, 15, 15 * durationMinute],\n    [minute, 30, 30 * durationMinute],\n    [  hour,  1,      durationHour  ],\n    [  hour,  3,  3 * durationHour  ],\n    [  hour,  6,  6 * durationHour  ],\n    [  hour, 12, 12 * durationHour  ],\n    [   day,  1,      durationDay   ],\n    [   day,  2,  2 * durationDay   ],\n    [  week,  1,      durationWeek  ],\n    [ month,  1,      durationMonth ],\n    [ month,  3,  3 * durationMonth ],\n    [  year,  1,      durationYear  ]\n  ];\n\n  function tickFormat(date) {\n    return (second(date) < date ? formatMillisecond\n        : minute(date) < date ? formatSecond\n        : hour(date) < date ? formatMinute\n        : day(date) < date ? formatHour\n        : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\n        : year(date) < date ? formatMonth\n        : formatYear)(date);\n  }\n\n  function tickInterval(interval, start, stop, step) {\n    if (interval == null) interval = 10;\n\n    // If a desired tick count is specified, pick a reasonable tick interval\n    // based on the extent of the domain and a rough estimate of tick size.\n    // Otherwise, assume interval is already a time interval and use it.\n    if (typeof interval === \"number\") {\n      var target = Math.abs(stop - start) / interval,\n          i = bisector(function(i) { return i[2]; }).right(tickIntervals, target);\n      if (i === tickIntervals.length) {\n        step = tickStep(start / durationYear, stop / durationYear, interval);\n        interval = year;\n      } else if (i) {\n        i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n        step = i[1];\n        interval = i[0];\n      } else {\n        step = Math.max(tickStep(start, stop, interval), 1);\n        interval = millisecond;\n      }\n    }\n\n    return step == null ? interval : interval.every(step);\n  }\n\n  scale.invert = function(y) {\n    return new Date(invert(y));\n  };\n\n  scale.domain = function(_) {\n    return arguments.length ? domain(map.call(_, number)) : domain().map(date);\n  };\n\n  scale.ticks = function(interval, step) {\n    var d = domain(),\n        t0 = d[0],\n        t1 = d[d.length - 1],\n        r = t1 < t0,\n        t;\n    if (r) t = t0, t0 = t1, t1 = t;\n    t = tickInterval(interval, t0, t1, step);\n    t = t ? t.range(t0, t1 + 1) : []; // inclusive stop\n    return r ? t.reverse() : t;\n  };\n\n  scale.tickFormat = function(count, specifier) {\n    return specifier == null ? tickFormat : format(specifier);\n  };\n\n  scale.nice = function(interval, step) {\n    var d = domain();\n    return (interval = tickInterval(interval, d[0], d[d.length - 1], step))\n        ? domain(nice(d, interval))\n        : scale;\n  };\n\n  scale.copy = function() {\n    return copy(scale, calendar(year, month, week, day, hour, minute, second, millisecond, format));\n  };\n\n  return scale;\n}\n\nexport default function() {\n  return initRange.apply(calendar(timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeMillisecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]), arguments);\n}\n","import interval from \"./interval.js\";\n\nvar utcMonth = interval(function(date) {\n  date.setUTCDate(1);\n  date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n  date.setUTCMonth(date.getUTCMonth() + step);\n}, function(start, end) {\n  return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n}, function(date) {\n  return date.getUTCMonth();\n});\n\nexport default utcMonth;\nexport var utcMonths = utcMonth.range;\n","import interval from \"./interval.js\";\nimport {durationHour} from \"./duration.js\";\n\nvar utcHour = interval(function(date) {\n  date.setUTCMinutes(0, 0, 0);\n}, function(date, step) {\n  date.setTime(+date + step * durationHour);\n}, function(start, end) {\n  return (end - start) / durationHour;\n}, function(date) {\n  return date.getUTCHours();\n});\n\nexport default utcHour;\nexport var utcHours = utcHour.range;\n","import interval from \"./interval.js\";\nimport {durationMinute} from \"./duration.js\";\n\nvar utcMinute = interval(function(date) {\n  date.setUTCSeconds(0, 0);\n}, function(date, step) {\n  date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n  return (end - start) / durationMinute;\n}, function(date) {\n  return date.getUTCMinutes();\n});\n\nexport default utcMinute;\nexport var utcMinutes = utcMinute.range;\n"],"sourceRoot":""}