{"version":3,"sources":["webpack:///./node_modules/d3-time/src/utcMinute.js","webpack:///./node_modules/d3-selection/src/selectAll.js","webpack:///./node_modules/d3-format/src/precisionPrefix.js","webpack:///./node_modules/d3-format/src/precisionRound.js","webpack:///./node_modules/d3-format/src/precisionFixed.js","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-selection/src/mouse.js","webpack:///./node_modules/d3-selection/src/namespaces.js","webpack:///./node_modules/d3-interpolate/src/number.js","webpack:///./node_modules/d3-selection/src/selection/sparse.js","webpack:///./node_modules/d3-selection/src/selection/enter.js","webpack:///./node_modules/d3-selection/src/selection/data.js","webpack:///./node_modules/d3-selection/src/selection/sort.js","webpack:///./node_modules/d3-selection/src/selection/call.js","webpack:///./node_modules/d3-selection/src/selection/attr.js","webpack:///./node_modules/d3-selection/src/selection/property.js","webpack:///./node_modules/d3-selection/src/selection/classed.js","webpack:///./node_modules/d3-selection/src/selection/text.js","webpack:///./node_modules/d3-selection/src/selection/html.js","webpack:///./node_modules/d3-selection/src/selection/raise.js","webpack:///./node_modules/d3-selection/src/selection/lower.js","webpack:///./node_modules/d3-selection/src/selection/insert.js","webpack:///./node_modules/d3-selection/src/selection/remove.js","webpack:///./node_modules/d3-selection/src/selection/clone.js","webpack:///./node_modules/d3-selection/src/selection/dispatch.js","webpack:///./node_modules/d3-selection/src/selection/index.js","webpack:///./node_modules/d3-selection/src/selection/select.js","webpack:///./node_modules/d3-selection/src/selection/selectAll.js","webpack:///./node_modules/d3-selection/src/selection/filter.js","webpack:///./node_modules/d3-selection/src/constant.js","webpack:///./node_modules/d3-selection/src/selection/exit.js","webpack:///./node_modules/d3-selection/src/selection/join.js","webpack:///./node_modules/d3-selection/src/selection/merge.js","webpack:///./node_modules/d3-selection/src/selection/order.js","webpack:///./node_modules/d3-selection/src/selection/nodes.js","webpack:///./node_modules/d3-selection/src/selection/node.js","webpack:///./node_modules/d3-selection/src/selection/size.js","webpack:///./node_modules/d3-selection/src/selection/empty.js","webpack:///./node_modules/d3-selection/src/selection/each.js","webpack:///./node_modules/d3-selection/src/selection/append.js","webpack:///./node_modules/d3-selection/src/selection/datum.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-selection/src/point.js","webpack:///./node_modules/d3-time/src/utcHour.js","webpack:///./node_modules/d3-selection/src/select.js","webpack:///./node_modules/d3-selection/src/selection/on.js","webpack:///./node_modules/d3-format/src/formatSpecifier.js","webpack:///./node_modules/d3-selection/src/matcher.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-color/src/define.js","webpack:///./node_modules/d3-color/src/color.js","webpack:///./node_modules/d3-time/src/duration.js","webpack:///./node_modules/d3-time/src/millisecond.js","webpack:///./node_modules/d3-time/src/interval.js","webpack:///./node_modules/d3-time/src/utcWeek.js","webpack:///./node_modules/d3-time/src/minute.js","webpack:///./node_modules/d3-selection/src/selection/style.js","webpack:///./node_modules/d3-selection/src/selectorAll.js","webpack:///./node_modules/d3-axis/src/array.js","webpack:///./node_modules/d3-axis/src/identity.js","webpack:///./node_modules/d3-axis/src/axis.js","webpack:///./node_modules/d3-selection/src/sourceEvent.js","webpack:///./node_modules/d3-time-format/src/locale.js","webpack:///./node_modules/d3-time-format/src/defaultLocale.js","webpack:///./node_modules/d3-selection/src/creator.js","webpack:///./node_modules/d3-time/src/utcMonth.js","webpack:///./node_modules/d3/dist/package.js","webpack:///./node_modules/d3-brush/src/brush.js","webpack:///./node_modules/d3-chord/src/math.js","webpack:///./node_modules/d3-chord/src/array.js","webpack:///./node_modules/d3-chord/src/chord.js","webpack:///./node_modules/d3-path/src/path.js","webpack:///./node_modules/d3-contour/src/array.js","webpack:///./node_modules/d3-quadtree/src/add.js","webpack:///./node_modules/d3-quadtree/src/cover.js","webpack:///./node_modules/d3-quadtree/src/quad.js","webpack:///./node_modules/d3-quadtree/src/x.js","webpack:///./node_modules/d3-quadtree/src/y.js","webpack:///./node_modules/d3-quadtree/src/quadtree.js","webpack:///./node_modules/d3-quadtree/src/data.js","webpack:///./node_modules/d3-quadtree/src/extent.js","webpack:///./node_modules/d3-quadtree/src/find.js","webpack:///./node_modules/d3-quadtree/src/remove.js","webpack:///./node_modules/d3-quadtree/src/root.js","webpack:///./node_modules/d3-quadtree/src/size.js","webpack:///./node_modules/d3-quadtree/src/visit.js","webpack:///./node_modules/d3-quadtree/src/visitAfter.js","webpack:///./node_modules/d3-force/src/simulation.js","webpack:///./node_modules/d3-random/src/defaultSource.js","webpack:///./node_modules/d3-random/src/normal.js","webpack:///./node_modules/d3-random/src/uniform.js","webpack:///./node_modules/d3-random/src/irwinHall.js","webpack:///./node_modules/d3-random/src/logNormal.js","webpack:///./node_modules/d3-random/src/bates.js","webpack:///./node_modules/d3-random/src/exponential.js","webpack:///./node_modules/d3-shape/src/array.js","webpack:///./node_modules/d3-shape/src/constant.js","webpack:///./node_modules/d3-shape/src/offset/none.js","webpack:///./node_modules/d3-shape/src/order/none.js","webpack:///./node_modules/d3-shape/src/stack.js","webpack:///./node_modules/d3-voronoi/src/RedBlackTree.js","webpack:///./node_modules/d3-voronoi/src/Edge.js","webpack:///./node_modules/d3-voronoi/src/Cell.js","webpack:///./node_modules/d3-voronoi/src/Circle.js","webpack:///./node_modules/d3-voronoi/src/Beach.js","webpack:///./node_modules/d3-voronoi/src/Diagram.js","webpack:///./node_modules/d3-interpolate/src/zoom.js","webpack:///./node_modules/d3-zoom/src/transform.js","webpack:///./node_modules/d3-interpolate/src/round.js","webpack:///./node_modules/intersection-observer/intersection-observer.js","webpack:///./node_modules/d3-time/src/second.js","webpack:///./node_modules/d3-selection/src/touch.js","webpack:///./node_modules/d3-selection/src/selector.js","webpack:///./node_modules/d3-selection/src/namespace.js","webpack:///./node_modules/d3-time/src/utcDay.js","webpack:///./node_modules/d3-collection/src/map.js","webpack:///./node_modules/d3-collection/src/set.js","webpack:///./node_modules/d3-time/src/utcYear.js","webpack:///./node_modules/d3-time/src/day.js","webpack:///./node_modules/d3-timer/src/timer.js","webpack:///./node_modules/d3-interpolate/src/string.js","webpack:///./node_modules/d3-time/src/month.js","webpack:///./node_modules/d3-time/src/year.js","webpack:///./node_modules/d3-selection/src/window.js","webpack:///./node_modules/d3-format/src/exponent.js","webpack:///./node_modules/d3-format/src/formatDecimal.js","webpack:///./node_modules/d3-time/src/hour.js","webpack:///./node_modules/d3-timer/src/timeout.js","webpack:///./node_modules/d3-transition/src/transition/schedule.js","webpack:///./node_modules/d3-transition/src/interrupt.js","webpack:///./node_modules/d3-interpolate/src/transform/parse.js","webpack:///./node_modules/d3-interpolate/src/transform/decompose.js","webpack:///./node_modules/d3-interpolate/src/transform/index.js","webpack:///./node_modules/d3-transition/src/transition/tween.js","webpack:///./node_modules/d3-transition/src/transition/interpolate.js","webpack:///./node_modules/d3-transition/src/transition/attr.js","webpack:///./node_modules/d3-transition/src/transition/attrTween.js","webpack:///./node_modules/d3-transition/src/transition/delay.js","webpack:///./node_modules/d3-transition/src/transition/duration.js","webpack:///./node_modules/d3-transition/src/transition/ease.js","webpack:///./node_modules/d3-transition/src/transition/on.js","webpack:///./node_modules/d3-transition/src/transition/remove.js","webpack:///./node_modules/d3-transition/src/transition/selection.js","webpack:///./node_modules/d3-transition/src/transition/style.js","webpack:///./node_modules/d3-transition/src/transition/styleTween.js","webpack:///./node_modules/d3-transition/src/transition/textTween.js","webpack:///./node_modules/d3-transition/src/transition/index.js","webpack:///./node_modules/d3-transition/src/transition/select.js","webpack:///./node_modules/d3-transition/src/transition/selectAll.js","webpack:///./node_modules/d3-transition/src/transition/filter.js","webpack:///./node_modules/d3-transition/src/transition/merge.js","webpack:///./node_modules/d3-transition/src/transition/transition.js","webpack:///./node_modules/d3-transition/src/transition/text.js","webpack:///./node_modules/d3-transition/src/transition/end.js","webpack:///./node_modules/d3-transition/src/selection/transition.js","webpack:///./node_modules/d3-ease/src/cubic.js","webpack:///./node_modules/d3-transition/src/selection/index.js","webpack:///./node_modules/d3-transition/src/selection/interrupt.js","webpack:///./node_modules/d3-time/src/week.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/sum.js","webpack:///./node_modules/d3-dispatch/src/dispatch.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-scale/src/ordinal.js","webpack:///./node_modules/d3-scale/src/band.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-scale/src/linear.js","webpack:///./node_modules/d3-scale/src/tickFormat.js"],"names":["utcMinute","interval","date","setUTCSeconds","step","setTime","durationMinute","start","end","getUTCMinutes","range","selector","Selection","document","querySelectorAll","documentElement","root","value","Math","max","min","floor","exponent","abs","basis","t1","v0","v1","v2","v3","t2","t3","linear","a","d","t","gamma","y","nogamma","b","pow","exponential","constant","isNaN","rgbGamma","color","rgb","r","colorRgb","g","opacity","rgbSpline","spline","colors","i","n","length","Array","values","node","event","sourceEvent","changedTouches","point","xhtml","svg","xlink","xml","xmlns","update","EnterNode","parent","datum","this","ownerDocument","namespaceURI","_next","_parent","__data__","prototype","constructor","appendChild","child","insertBefore","next","querySelector","bindIndex","group","enter","exit","data","groupLength","dataLength","bindKey","key","keyValue","nodeByKeyValue","keyValues","call","ascending","NaN","attrRemove","name","removeAttribute","attrRemoveNS","fullname","removeAttributeNS","space","local","attrConstant","setAttribute","attrConstantNS","setAttributeNS","attrFunction","v","apply","arguments","attrFunctionNS","propertyRemove","propertyConstant","propertyFunction","classArray","string","trim","split","classList","ClassList","_node","_names","getAttribute","classedAdd","names","list","add","classedRemove","remove","classedTrue","classedFalse","classedFunction","indexOf","push","join","splice","contains","textRemove","textContent","textConstant","textFunction","htmlRemove","innerHTML","htmlConstant","htmlFunction","raise","nextSibling","parentNode","lower","previousSibling","firstChild","constantNull","removeChild","selection_cloneShallow","clone","cloneNode","selection_cloneDeep","dispatchEvent","type","params","window","defaultView","CustomEvent","createEvent","initEvent","bubbles","cancelable","detail","dispatchConstant","dispatchFunction","groups","parents","_groups","_parents","selection","select","m","subgroups","j","subnode","subgroup","selectAll","selectorAll","filter","match","matcher","size","each","x","bind","enterGroup","updateGroup","previous","i0","i1","_enter","_exit","map","sparse","onenter","onupdate","onexit","append","merge","order","groups0","groups1","m0","m1","merges","group0","group1","compareDocumentPosition","sort","compare","compareNode","sortgroups","sortgroup","callback","nodes","empty","attr","namespace","getAttributeNS","style","selection_style","property","classed","text","html","create","creator","insert","before","deep","on","selection_on","dispatch","c","slice","isNumberArray","ArrayBuffer","isView","DataView","genericArray","nb","na","Date","k","number","numberArray","isArray","valueOf","toString","object","ownerSVGElement","createSVGPoint","clientX","clientY","matrixTransform","getScreenCTM","inverse","rect","getBoundingClientRect","left","clientLeft","top","clientTop","utcHour","setUTCMinutes","durationHour","getUTCHours","filterEvents","mouseenter","mouseleave","filterContextListener","listener","index","contextListener","related","relatedTarget","event1","event0","parseTypenames","typenames","onRemove","typename","__on","o","removeEventListener","capture","onAdd","wrap","hasOwnProperty","addEventListener","customEvent","that","args","re","formatSpecifier","specifier","exec","Error","FormatSpecifier","fill","align","sign","symbol","zero","width","comma","precision","undefined","matches","prefixExponent","locale","format","formatPrefix","p","formatDecimalParts","coefficient","toFixed","round","formatDecimal","toExponential","toPrecision","formatRounded","toUpperCase","prefixes","grouping","thousands","identity","Number","substring","reverse","currencyPrefix","currency","currencySuffix","decimal","numerals","replace","formatNumerals","String","percent","minus","nan","newFormat","formatTypes","prefix","test","toLowerCase","suffix","formatType","maybeSuffix","valuePrefix","valueSuffix","valueNegative","s","out","formatTrim","charCodeAt","Infinity","padding","f","e","formatLocale","factory","extend","definition","Object","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","formatHex","color_formatRgb","formatRgb","l","parseInt","rgbn","Rgb","rgba","hsla","rgbConvert","rgb_formatHex","hex","rgb_formatRgb","h","Hsl","hslConvert","hsl2rgb","m2","define","copy","channels","assign","displayable","formatHsl","brighter","darker","durationSecond","durationDay","durationWeek","millisecond","every","isFinite","t0","newInterval","floori","offseti","count","field","ceil","d0","d1","offset","stop","utcWeekday","setUTCDate","getUTCDate","getUTCDay","setUTCHours","utcSunday","utcMonday","utcTuesday","utcWednesday","utcThursday","utcFriday","utcSaturday","minute","getMilliseconds","getSeconds","getMinutes","styleRemove","removeProperty","styleConstant","priority","setProperty","styleFunction","styleValue","getPropertyValue","getComputedStyle","translateX","translateY","scale","center","bandwidth","entering","__axis","axis","orient","tickArguments","tickValues","tickFormat","tickSizeInner","tickSizeOuter","tickPadding","transform","context","ticks","domain","spacing","range0","range1","position","path","tick","tickExit","tickEnter","line","transition","_","tickSize","axisBottom","axisLeft","source","current","localDate","H","M","S","L","setFullYear","utcDate","UTC","setUTCFullYear","newDate","timeFormat","utcFormat","pads","numberRe","percentRe","requoteRe","pad","requote","formatRe","formatLookup","parseWeekdayNumberSunday","w","parseWeekdayNumberMonday","u","parseWeekNumberSunday","U","parseWeekNumberISO","V","parseWeekNumberMonday","W","parseFullYear","parseYear","parseZone","Z","parseQuarter","q","parseMonthNumber","parseDayOfMonth","parseDayOfYear","parseHour24","parseMinutes","parseSeconds","parseMilliseconds","parseMicroseconds","parseLiteralPercent","parseUnixTimestamp","Q","parseUnixTimestampSeconds","formatDayOfMonth","getDate","formatHour24","getHours","formatHour12","formatDayOfYear","timeDay","timeYear","formatMilliseconds","formatMicroseconds","formatMonthNumber","getMonth","formatMinutes","formatSeconds","formatWeekdayNumberMonday","day","getDay","formatWeekNumberSunday","timeSunday","dISO","timeThursday","formatWeekNumberISO","formatWeekdayNumberSunday","formatWeekNumberMonday","timeMonday","formatYear","getFullYear","formatYearISO","formatFullYear","formatFullYearISO","formatZone","z","getTimezoneOffset","formatUTCDayOfMonth","formatUTCHour24","formatUTCHour12","formatUTCDayOfYear","utcDay","utcYear","formatUTCMilliseconds","getUTCMilliseconds","formatUTCMicroseconds","formatUTCMonthNumber","getUTCMonth","formatUTCMinutes","formatUTCSeconds","getUTCSeconds","formatUTCWeekdayNumberMonday","dow","formatUTCWeekNumberSunday","UTCdISO","formatUTCWeekNumberISO","formatUTCWeekdayNumberSunday","formatUTCWeekNumberMonday","formatUTCYear","getUTCFullYear","formatUTCYearISO","formatUTCFullYear","formatUTCFullYearISO","formatUTCZone","formatLiteralPercent","formatUnixTimestamp","formatUnixTimestampSeconds","locale_dateTime","dateTime","locale_date","locale_time","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","utcParse","creatorInherit","uri","createElement","createElementNS","creatorFixed","utcMonth","setUTCMonth","number1","number2","cos","sin","PI","pi","tau","tauEpsilon","Path","_x0","_y0","_x1","_y1","moveTo","closePath","lineTo","quadraticCurveTo","x1","y1","bezierCurveTo","x2","y2","arcTo","x0","y0","x21","y21","x01","y01","l01_2","x20","y20","l21_2","l20_2","l21","sqrt","l01","acos","t01","t21","arc","a0","a1","ccw","dx","dy","cw","da","tree","xm","ym","xp","yp","right","bottom","_root","leaf","_x","_y","defaultX","defaultY","quadtree","Quadtree","addAll","leaf_copy","treeProto","target","pop","cover","xz","yz","visit","extent","find","radius","x3","y3","quads","Quad","d2","retainer","removeAll","visitAfter","random","sourceRandomUniform","randomUniform","defaultSource","sourceRandomNormal","randomNormal","mu","sigma","log","sourceRandomLogNormal","randomLogNormal","normal","exp","sourceRandomIrwinHall","randomIrwinHall","sum","sourceRandomBates","randomBates","irwinHall","sourceRandomExponential","randomExponential","lambda","series","s0","s1","stackValue","keys","orderNone","offsetNone","stack","oz","kz","sz","sij","ki","si","RedBlackTree","RedBlackNode","C","R","P","N","RedBlackRotateLeft","RedBlackRotateRight","RedBlackFirst","after","grandpa","uncle","sibling","createEdge","edge","edges","setEdgeEnd","cells","halfedges","createBorderEdge","vertex","clipEdge","ax","ay","connectEdge","fm","fb","lx","ly","rx","ry","fx","fy","cellHalfedgeAngle","cell","site","va","vb","atan2","cellHalfedgeStart","cellHalfedgeEnd","firstCircle","circlePool","Circle","cy","attachCircle","lArc","rArc","lSite","cSite","rSite","bx","by","cx","epsilon2","ha","hc","circle","circles","detachCircle","beachPool","Beach","createBeach","beach","detachBeach","beaches","removeBeach","disappearing","epsilon","unshift","iArc","nArcs","addBeach","dxl","dxr","directrix","leftBreakPoint","rightBreakPoint","createCell","newArc","hb","rfocx","rfocy","pby2","lfocx","lfocy","plby2","hl","aby2","lexicographic","Diagram","sites","array","sortCellHalfedges","clipEdges","iCell","iHalfedge","nHalfedges","startX","startY","endX","endY","nCells","dc","v00","v01","v11","v10","clipCells","polygons","polygon","triangles","forEach","e1","links","_found","vx","vy","SQRT2","Transform","translate","applyX","applyY","invert","location","invertX","invertY","rescaleX","rescaleY","IntersectionObserverEntry","defineProperty","get","intersectionRatio","registry","IntersectionObserver","THROTTLE_TIMEOUT","POLL_INTERVAL","USE_MUTATION_OBSERVER","observe","_observationTargets","some","item","element","nodeType","_registerInstance","entry","_monitorIntersections","_checkForIntersections","unobserve","_unmonitorIntersections","_unregisterInstance","disconnect","takeRecords","records","_queuedEntries","_initThresholds","opt_threshold","threshold","_parseRootMargin","opt_rootMargin","margins","margin","parts","parseFloat","unit","_monitoringIntersections","_monitoringInterval","setInterval","addEvent","_domObserver","MutationObserver","attributes","childList","characterData","subtree","clearInterval","removeEvent","rootIsInDom","_rootIsInDom","rootRect","_getRootRect","height","targetRect","rootContainsTarget","_rootContainsTarget","oldEntry","intersectionRect","_computeTargetAndRootIntersection","newEntry","performance","now","boundingClientRect","rootBounds","_hasCrossedThreshold","isIntersecting","_callback","display","rect1","rect2","getParentNode","atRoot","parentRect","parentComputedStyle","body","overflow","clientWidth","clientHeight","_expandRectByRootMargin","_rootMarginValues","newRect","oldRatio","newRatio","thresholds","containsDeep","targetArea","intersectionArea","opt_options","fn","timeout","timer","options","setTimeout","rootMargin","opt_useCapture","attachEvent","detatchEvent","el","err","host","second","touches","identifier","touch","none","namespaces","Map","set","has","clear","entries","Set","proto","setHours","setDate","taskHead","taskTail","frame","clockLast","clockNow","clockSkew","clock","setFrame","requestAnimationFrame","clearNow","Timer","_call","_time","delay","restart","wake","timerFlush","sleep","nap","poke","clearTimeout","TypeError","reA","reB","am","bm","bs","bi","lastIndex","one","month","setMonth","year","toLocaleString","hour","elapsed","emptyOn","emptyTween","id","timing","schedules","__transition","self","tween","state","duration","ease","init","schedule","cssNode","cssRoot","cssView","svgNode","active","degrees","rotate","skewX","scaleX","scaleY","atan","interpolateTransform","pxComma","pxParen","degParen","xa","ya","xb","yb","interpolateTransformCss","decompose","interpolateTransformSvg","baseVal","consolidate","matrix","tweenRemove","tween0","tween1","tweenFunction","tweenValue","_id","interpolateNumber","interpolateRgb","interpolateString","interpolate","value1","string00","interpolate0","string1","string0","string10","attrInterpolate","attrInterpolateNS","attrTweenNS","_value","attrTween","delayFunction","delayConstant","durationFunction","durationConstant","easeConstant","onFunction","on0","on1","sit","styleInterpolate","styleTween","textInterpolate","textTween","Transition","_name","newId","selection_prototype","children","inherit","id0","id1","styleNull","listener0","styleMaybeRemove","Promise","resolve","reject","cancel","interrupt","defaultTiming","weekday","sunday","monday","tuesday","wednesday","thursday","friday","saturday","lo","hi","mid","ascendingBisect","bisector","bisectRight","valueof","e10","e5","e2","tickIncrement","power","LN10","error","tickStep","step0","step1","LN2","value0","noop","Dispatch","types","concat","T","initRange","implicit","ordinal","unknown","band","ordinalRange","paddingInner","paddingOuter","rescale","sequence","rangeRound","normalize","clamper","bimap","r0","r1","polymap","bisect","clamp","transformer","untransform","piecewise","output","input","interpolateValue","interpolateRound","continuous","linearish","precisionPrefix","precisionRound","precisionFixed","nice"],"mappings":"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","file":"1.d0c43b4507.mjs","sourcesContent":["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","import {Selection, root} from \"./selection/index\";\n\nexport default function(selector) {\n  return typeof selector === \"string\"\n      ? new Selection([document.querySelectorAll(selector)], [document.documentElement])\n      : new Selection([selector == null ? [] : selector], root);\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, max) {\n  step = Math.abs(step), max = Math.abs(max) - step;\n  return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step) {\n  return Math.max(0, -exponent(Math.abs(step)));\n}\n","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","import sourceEvent from \"./sourceEvent\";\nimport point from \"./point\";\n\nexport default function(node) {\n  var event = sourceEvent();\n  if (event.changedTouches) event = event.changedTouches[0];\n  return point(node, event);\n}\n","export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n  svg: \"http://www.w3.org/2000/svg\",\n  xhtml: xhtml,\n  xlink: \"http://www.w3.org/1999/xlink\",\n  xml: \"http://www.w3.org/XML/1998/namespace\",\n  xmlns: \"http://www.w3.org/2000/xmlns/\"\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(update) {\n  return new Array(update.length);\n}\n","import sparse from \"./sparse\";\nimport {Selection} from \"./index\";\n\nexport default function() {\n  return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nexport function EnterNode(parent, datum) {\n  this.ownerDocument = parent.ownerDocument;\n  this.namespaceURI = parent.namespaceURI;\n  this._next = null;\n  this._parent = parent;\n  this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n  constructor: EnterNode,\n  appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n  insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n  querySelector: function(selector) { return this._parent.querySelector(selector); },\n  querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n","import {Selection} from \"./index\";\nimport {EnterNode} from \"./enter\";\nimport constant from \"../constant\";\n\nvar keyPrefix = \"$\"; // Protect against keys like “__proto__”.\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n  var i = 0,\n      node,\n      groupLength = group.length,\n      dataLength = data.length;\n\n  // Put any non-null nodes that fit into update.\n  // Put any null nodes into enter.\n  // Put any remaining data into enter.\n  for (; i < dataLength; ++i) {\n    if (node = group[i]) {\n      node.__data__ = data[i];\n      update[i] = node;\n    } else {\n      enter[i] = new EnterNode(parent, data[i]);\n    }\n  }\n\n  // Put any non-null nodes that don’t fit into exit.\n  for (; i < groupLength; ++i) {\n    if (node = group[i]) {\n      exit[i] = node;\n    }\n  }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n  var i,\n      node,\n      nodeByKeyValue = {},\n      groupLength = group.length,\n      dataLength = data.length,\n      keyValues = new Array(groupLength),\n      keyValue;\n\n  // Compute the key for each node.\n  // If multiple nodes have the same key, the duplicates are added to exit.\n  for (i = 0; i < groupLength; ++i) {\n    if (node = group[i]) {\n      keyValues[i] = keyValue = keyPrefix + key.call(node, node.__data__, i, group);\n      if (keyValue in nodeByKeyValue) {\n        exit[i] = node;\n      } else {\n        nodeByKeyValue[keyValue] = node;\n      }\n    }\n  }\n\n  // Compute the key for each datum.\n  // If there a node associated with this key, join and add it to update.\n  // If there is not (or the key is a duplicate), add it to enter.\n  for (i = 0; i < dataLength; ++i) {\n    keyValue = keyPrefix + key.call(parent, data[i], i, data);\n    if (node = nodeByKeyValue[keyValue]) {\n      update[i] = node;\n      node.__data__ = data[i];\n      nodeByKeyValue[keyValue] = null;\n    } else {\n      enter[i] = new EnterNode(parent, data[i]);\n    }\n  }\n\n  // Add any remaining nodes that were not bound to data to exit.\n  for (i = 0; i < groupLength; ++i) {\n    if ((node = group[i]) && (nodeByKeyValue[keyValues[i]] === node)) {\n      exit[i] = node;\n    }\n  }\n}\n\nexport default function(value, key) {\n  if (!value) {\n    data = new Array(this.size()), j = -1;\n    this.each(function(d) { data[++j] = d; });\n    return data;\n  }\n\n  var bind = key ? bindKey : bindIndex,\n      parents = this._parents,\n      groups = this._groups;\n\n  if (typeof value !== \"function\") value = constant(value);\n\n  for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n    var parent = parents[j],\n        group = groups[j],\n        groupLength = group.length,\n        data = value.call(parent, parent && parent.__data__, j, parents),\n        dataLength = data.length,\n        enterGroup = enter[j] = new Array(dataLength),\n        updateGroup = update[j] = new Array(dataLength),\n        exitGroup = exit[j] = new Array(groupLength);\n\n    bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n    // Now connect the enter nodes to their following update node, such that\n    // appendChild can insert the materialized enter node before this node,\n    // rather than at the end of the parent node.\n    for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n      if (previous = enterGroup[i0]) {\n        if (i0 >= i1) i1 = i0 + 1;\n        while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n        previous._next = next || null;\n      }\n    }\n  }\n\n  update = new Selection(update, parents);\n  update._enter = enter;\n  update._exit = exit;\n  return update;\n}\n","import {Selection} from \"./index\";\n\nexport default function(compare) {\n  if (!compare) compare = ascending;\n\n  function compareNode(a, b) {\n    return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n  }\n\n  for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        sortgroup[i] = node;\n      }\n    }\n    sortgroup.sort(compareNode);\n  }\n\n  return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n  return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","export default function() {\n  var callback = arguments[0];\n  arguments[0] = this;\n  callback.apply(null, arguments);\n  return this;\n}\n","import namespace from \"../namespace\";\n\nfunction attrRemove(name) {\n  return function() {\n    this.removeAttribute(name);\n  };\n}\n\nfunction attrRemoveNS(fullname) {\n  return function() {\n    this.removeAttributeNS(fullname.space, fullname.local);\n  };\n}\n\nfunction attrConstant(name, value) {\n  return function() {\n    this.setAttribute(name, value);\n  };\n}\n\nfunction attrConstantNS(fullname, value) {\n  return function() {\n    this.setAttributeNS(fullname.space, fullname.local, value);\n  };\n}\n\nfunction attrFunction(name, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) this.removeAttribute(name);\n    else this.setAttribute(name, v);\n  };\n}\n\nfunction attrFunctionNS(fullname, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n    else this.setAttributeNS(fullname.space, fullname.local, v);\n  };\n}\n\nexport default function(name, value) {\n  var fullname = namespace(name);\n\n  if (arguments.length < 2) {\n    var node = this.node();\n    return fullname.local\n        ? node.getAttributeNS(fullname.space, fullname.local)\n        : node.getAttribute(fullname);\n  }\n\n  return this.each((value == null\n      ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n      ? (fullname.local ? attrFunctionNS : attrFunction)\n      : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n","function propertyRemove(name) {\n  return function() {\n    delete this[name];\n  };\n}\n\nfunction propertyConstant(name, value) {\n  return function() {\n    this[name] = value;\n  };\n}\n\nfunction propertyFunction(name, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) delete this[name];\n    else this[name] = v;\n  };\n}\n\nexport default function(name, value) {\n  return arguments.length > 1\n      ? this.each((value == null\n          ? propertyRemove : typeof value === \"function\"\n          ? propertyFunction\n          : propertyConstant)(name, value))\n      : this.node()[name];\n}\n","function classArray(string) {\n  return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n  return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n  this._node = node;\n  this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n  add: function(name) {\n    var i = this._names.indexOf(name);\n    if (i < 0) {\n      this._names.push(name);\n      this._node.setAttribute(\"class\", this._names.join(\" \"));\n    }\n  },\n  remove: function(name) {\n    var i = this._names.indexOf(name);\n    if (i >= 0) {\n      this._names.splice(i, 1);\n      this._node.setAttribute(\"class\", this._names.join(\" \"));\n    }\n  },\n  contains: function(name) {\n    return this._names.indexOf(name) >= 0;\n  }\n};\n\nfunction classedAdd(node, names) {\n  var list = classList(node), i = -1, n = names.length;\n  while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n  var list = classList(node), i = -1, n = names.length;\n  while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n  return function() {\n    classedAdd(this, names);\n  };\n}\n\nfunction classedFalse(names) {\n  return function() {\n    classedRemove(this, names);\n  };\n}\n\nfunction classedFunction(names, value) {\n  return function() {\n    (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n  };\n}\n\nexport default function(name, value) {\n  var names = classArray(name + \"\");\n\n  if (arguments.length < 2) {\n    var list = classList(this.node()), i = -1, n = names.length;\n    while (++i < n) if (!list.contains(names[i])) return false;\n    return true;\n  }\n\n  return this.each((typeof value === \"function\"\n      ? classedFunction : value\n      ? classedTrue\n      : classedFalse)(names, value));\n}\n","function textRemove() {\n  this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n  return function() {\n    this.textContent = value;\n  };\n}\n\nfunction textFunction(value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    this.textContent = v == null ? \"\" : v;\n  };\n}\n\nexport default function(value) {\n  return arguments.length\n      ? this.each(value == null\n          ? textRemove : (typeof value === \"function\"\n          ? textFunction\n          : textConstant)(value))\n      : this.node().textContent;\n}\n","function htmlRemove() {\n  this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n  return function() {\n    this.innerHTML = value;\n  };\n}\n\nfunction htmlFunction(value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    this.innerHTML = v == null ? \"\" : v;\n  };\n}\n\nexport default function(value) {\n  return arguments.length\n      ? this.each(value == null\n          ? htmlRemove : (typeof value === \"function\"\n          ? htmlFunction\n          : htmlConstant)(value))\n      : this.node().innerHTML;\n}\n","function raise() {\n  if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n  return this.each(raise);\n}\n","function lower() {\n  if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n  return this.each(lower);\n}\n","import creator from \"../creator\";\nimport selector from \"../selector\";\n\nfunction constantNull() {\n  return null;\n}\n\nexport default function(name, before) {\n  var create = typeof name === \"function\" ? name : creator(name),\n      select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n  return this.select(function() {\n    return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n  });\n}\n","function remove() {\n  var parent = this.parentNode;\n  if (parent) parent.removeChild(this);\n}\n\nexport default function() {\n  return this.each(remove);\n}\n","function selection_cloneShallow() {\n  var clone = this.cloneNode(false), parent = this.parentNode;\n  return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nfunction selection_cloneDeep() {\n  var clone = this.cloneNode(true), parent = this.parentNode;\n  return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nexport default function(deep) {\n  return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n","import defaultView from \"../window\";\n\nfunction dispatchEvent(node, type, params) {\n  var window = defaultView(node),\n      event = window.CustomEvent;\n\n  if (typeof event === \"function\") {\n    event = new event(type, params);\n  } else {\n    event = window.document.createEvent(\"Event\");\n    if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n    else event.initEvent(type, false, false);\n  }\n\n  node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n  return function() {\n    return dispatchEvent(this, type, params);\n  };\n}\n\nfunction dispatchFunction(type, params) {\n  return function() {\n    return dispatchEvent(this, type, params.apply(this, arguments));\n  };\n}\n\nexport default function(type, params) {\n  return this.each((typeof params === \"function\"\n      ? dispatchFunction\n      : dispatchConstant)(type, params));\n}\n","import selection_select from \"./select\";\nimport selection_selectAll from \"./selectAll\";\nimport selection_filter from \"./filter\";\nimport selection_data from \"./data\";\nimport selection_enter from \"./enter\";\nimport selection_exit from \"./exit\";\nimport selection_join from \"./join\";\nimport selection_merge from \"./merge\";\nimport selection_order from \"./order\";\nimport selection_sort from \"./sort\";\nimport selection_call from \"./call\";\nimport selection_nodes from \"./nodes\";\nimport selection_node from \"./node\";\nimport selection_size from \"./size\";\nimport selection_empty from \"./empty\";\nimport selection_each from \"./each\";\nimport selection_attr from \"./attr\";\nimport selection_style from \"./style\";\nimport selection_property from \"./property\";\nimport selection_classed from \"./classed\";\nimport selection_text from \"./text\";\nimport selection_html from \"./html\";\nimport selection_raise from \"./raise\";\nimport selection_lower from \"./lower\";\nimport selection_append from \"./append\";\nimport selection_insert from \"./insert\";\nimport selection_remove from \"./remove\";\nimport selection_clone from \"./clone\";\nimport selection_datum from \"./datum\";\nimport selection_on from \"./on\";\nimport selection_dispatch from \"./dispatch\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n  this._groups = groups;\n  this._parents = parents;\n}\n\nfunction selection() {\n  return new Selection([[document.documentElement]], root);\n}\n\nSelection.prototype = selection.prototype = {\n  constructor: Selection,\n  select: selection_select,\n  selectAll: selection_selectAll,\n  filter: selection_filter,\n  data: selection_data,\n  enter: selection_enter,\n  exit: selection_exit,\n  join: selection_join,\n  merge: selection_merge,\n  order: selection_order,\n  sort: selection_sort,\n  call: selection_call,\n  nodes: selection_nodes,\n  node: selection_node,\n  size: selection_size,\n  empty: selection_empty,\n  each: selection_each,\n  attr: selection_attr,\n  style: selection_style,\n  property: selection_property,\n  classed: selection_classed,\n  text: selection_text,\n  html: selection_html,\n  raise: selection_raise,\n  lower: selection_lower,\n  append: selection_append,\n  insert: selection_insert,\n  remove: selection_remove,\n  clone: selection_clone,\n  datum: selection_datum,\n  on: selection_on,\n  dispatch: selection_dispatch\n};\n\nexport default selection;\n","import {Selection} from \"./index\";\nimport selector from \"../selector\";\n\nexport default function(select) {\n  if (typeof select !== \"function\") select = selector(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n      if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n        if (\"__data__\" in node) subnode.__data__ = node.__data__;\n        subgroup[i] = subnode;\n      }\n    }\n  }\n\n  return new Selection(subgroups, this._parents);\n}\n","import {Selection} from \"./index\";\nimport selectorAll from \"../selectorAll\";\n\nexport default function(select) {\n  if (typeof select !== \"function\") select = selectorAll(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        subgroups.push(select.call(node, node.__data__, i, group));\n        parents.push(node);\n      }\n    }\n  }\n\n  return new Selection(subgroups, parents);\n}\n","import {Selection} from \"./index\";\nimport matcher from \"../matcher\";\n\nexport default function(match) {\n  if (typeof match !== \"function\") match = matcher(match);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n      if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n        subgroup.push(node);\n      }\n    }\n  }\n\n  return new Selection(subgroups, this._parents);\n}\n","export default function(x) {\n  return function() {\n    return x;\n  };\n}\n","import sparse from \"./sparse\";\nimport {Selection} from \"./index\";\n\nexport default function() {\n  return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n","export default function(onenter, onupdate, onexit) {\n  var enter = this.enter(), update = this, exit = this.exit();\n  enter = typeof onenter === \"function\" ? onenter(enter) : enter.append(onenter + \"\");\n  if (onupdate != null) update = onupdate(update);\n  if (onexit == null) exit.remove(); else onexit(exit);\n  return enter && update ? enter.merge(update).order() : update;\n}\n","import {Selection} from \"./index\";\n\nexport default function(selection) {\n\n  for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n    for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n      if (node = group0[i] || group1[i]) {\n        merge[i] = node;\n      }\n    }\n  }\n\n  for (; j < m0; ++j) {\n    merges[j] = groups0[j];\n  }\n\n  return new Selection(merges, this._parents);\n}\n","export default function() {\n\n  for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n    for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n      if (node = group[i]) {\n        if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\n        next = node;\n      }\n    }\n  }\n\n  return this;\n}\n","export default function() {\n  var nodes = new Array(this.size()), i = -1;\n  this.each(function() { nodes[++i] = this; });\n  return nodes;\n}\n","export default function() {\n\n  for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n    for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n      var node = group[i];\n      if (node) return node;\n    }\n  }\n\n  return null;\n}\n","export default function() {\n  var size = 0;\n  this.each(function() { ++size; });\n  return size;\n}\n","export default function() {\n  return !this.node();\n}\n","export default function(callback) {\n\n  for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n    for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n      if (node = group[i]) callback.call(node, node.__data__, i, group);\n    }\n  }\n\n  return this;\n}\n","import creator from \"../creator\";\n\nexport default function(name) {\n  var create = typeof name === \"function\" ? name : creator(name);\n  return this.select(function() {\n    return this.appendChild(create.apply(this, arguments));\n  });\n}\n","export default function(value) {\n  return arguments.length\n      ? this.property(\"__data__\", value)\n      : this.node().__data__;\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(node, event) {\n  var svg = node.ownerSVGElement || node;\n\n  if (svg.createSVGPoint) {\n    var point = svg.createSVGPoint();\n    point.x = event.clientX, point.y = event.clientY;\n    point = point.matrixTransform(node.getScreenCTM().inverse());\n    return [point.x, point.y];\n  }\n\n  var rect = node.getBoundingClientRect();\n  return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n}\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 {Selection, root} from \"./selection/index\";\n\nexport default function(selector) {\n  return typeof selector === \"string\"\n      ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n      : new Selection([[selector]], root);\n}\n","var filterEvents = {};\n\nexport var event = null;\n\nif (typeof document !== \"undefined\") {\n  var element = document.documentElement;\n  if (!(\"onmouseenter\" in element)) {\n    filterEvents = {mouseenter: \"mouseover\", mouseleave: \"mouseout\"};\n  }\n}\n\nfunction filterContextListener(listener, index, group) {\n  listener = contextListener(listener, index, group);\n  return function(event) {\n    var related = event.relatedTarget;\n    if (!related || (related !== this && !(related.compareDocumentPosition(this) & 8))) {\n      listener.call(this, event);\n    }\n  };\n}\n\nfunction contextListener(listener, index, group) {\n  return function(event1) {\n    var event0 = event; // Events can be reentrant (e.g., focus).\n    event = event1;\n    try {\n      listener.call(this, this.__data__, index, group);\n    } finally {\n      event = event0;\n    }\n  };\n}\n\nfunction parseTypenames(typenames) {\n  return typenames.trim().split(/^|\\s+/).map(function(t) {\n    var name = \"\", i = t.indexOf(\".\");\n    if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n    return {type: t, name: name};\n  });\n}\n\nfunction onRemove(typename) {\n  return function() {\n    var on = this.__on;\n    if (!on) return;\n    for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n      if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n        this.removeEventListener(o.type, o.listener, o.capture);\n      } else {\n        on[++i] = o;\n      }\n    }\n    if (++i) on.length = i;\n    else delete this.__on;\n  };\n}\n\nfunction onAdd(typename, value, capture) {\n  var wrap = filterEvents.hasOwnProperty(typename.type) ? filterContextListener : contextListener;\n  return function(d, i, group) {\n    var on = this.__on, o, listener = wrap(value, i, group);\n    if (on) for (var j = 0, m = on.length; j < m; ++j) {\n      if ((o = on[j]).type === typename.type && o.name === typename.name) {\n        this.removeEventListener(o.type, o.listener, o.capture);\n        this.addEventListener(o.type, o.listener = listener, o.capture = capture);\n        o.value = value;\n        return;\n      }\n    }\n    this.addEventListener(typename.type, listener, capture);\n    o = {type: typename.type, name: typename.name, value: value, listener: listener, capture: capture};\n    if (!on) this.__on = [o];\n    else on.push(o);\n  };\n}\n\nexport default function(typename, value, capture) {\n  var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n  if (arguments.length < 2) {\n    var on = this.node().__on;\n    if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n      for (i = 0, o = on[j]; i < n; ++i) {\n        if ((t = typenames[i]).type === o.type && t.name === o.name) {\n          return o.value;\n        }\n      }\n    }\n    return;\n  }\n\n  on = value ? onAdd : onRemove;\n  if (capture == null) capture = false;\n  for (i = 0; i < n; ++i) this.each(on(typenames[i], value, capture));\n  return this;\n}\n\nexport function customEvent(event1, listener, that, args) {\n  var event0 = event;\n  event1.sourceEvent = event;\n  event = event1;\n  try {\n    return listener.apply(that, args);\n  } finally {\n    event = event0;\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(selector) {\n  return function() {\n    return this.matches(selector);\n  };\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","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","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\";\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","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\";\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 {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 defaultView from \"../window\";\n\nfunction styleRemove(name) {\n  return function() {\n    this.style.removeProperty(name);\n  };\n}\n\nfunction styleConstant(name, value, priority) {\n  return function() {\n    this.style.setProperty(name, value, priority);\n  };\n}\n\nfunction styleFunction(name, value, priority) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) this.style.removeProperty(name);\n    else this.style.setProperty(name, v, priority);\n  };\n}\n\nexport default function(name, value, priority) {\n  return arguments.length > 1\n      ? this.each((value == null\n            ? styleRemove : typeof value === \"function\"\n            ? styleFunction\n            : styleConstant)(name, value, priority == null ? \"\" : priority))\n      : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n  return node.style.getPropertyValue(name)\n      || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n","function empty() {\n  return [];\n}\n\nexport default function(selector) {\n  return selector == null ? empty : function() {\n    return this.querySelectorAll(selector);\n  };\n}\n","export var slice = Array.prototype.slice;\n","export default function(x) {\n  return x;\n}\n","import {slice} from \"./array\";\nimport identity from \"./identity\";\n\nvar top = 1,\n    right = 2,\n    bottom = 3,\n    left = 4,\n    epsilon = 1e-6;\n\nfunction translateX(x) {\n  return \"translate(\" + (x + 0.5) + \",0)\";\n}\n\nfunction translateY(y) {\n  return \"translate(0,\" + (y + 0.5) + \")\";\n}\n\nfunction number(scale) {\n  return function(d) {\n    return +scale(d);\n  };\n}\n\nfunction center(scale) {\n  var offset = Math.max(0, scale.bandwidth() - 1) / 2; // Adjust for 0.5px offset.\n  if (scale.round()) offset = Math.round(offset);\n  return function(d) {\n    return +scale(d) + offset;\n  };\n}\n\nfunction entering() {\n  return !this.__axis;\n}\n\nfunction axis(orient, scale) {\n  var tickArguments = [],\n      tickValues = null,\n      tickFormat = null,\n      tickSizeInner = 6,\n      tickSizeOuter = 6,\n      tickPadding = 3,\n      k = orient === top || orient === left ? -1 : 1,\n      x = orient === left || orient === right ? \"x\" : \"y\",\n      transform = orient === top || orient === bottom ? translateX : translateY;\n\n  function axis(context) {\n    var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues,\n        format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity) : tickFormat,\n        spacing = Math.max(tickSizeInner, 0) + tickPadding,\n        range = scale.range(),\n        range0 = +range[0] + 0.5,\n        range1 = +range[range.length - 1] + 0.5,\n        position = (scale.bandwidth ? center : number)(scale.copy()),\n        selection = context.selection ? context.selection() : context,\n        path = selection.selectAll(\".domain\").data([null]),\n        tick = selection.selectAll(\".tick\").data(values, scale).order(),\n        tickExit = tick.exit(),\n        tickEnter = tick.enter().append(\"g\").attr(\"class\", \"tick\"),\n        line = tick.select(\"line\"),\n        text = tick.select(\"text\");\n\n    path = path.merge(path.enter().insert(\"path\", \".tick\")\n        .attr(\"class\", \"domain\")\n        .attr(\"stroke\", \"currentColor\"));\n\n    tick = tick.merge(tickEnter);\n\n    line = line.merge(tickEnter.append(\"line\")\n        .attr(\"stroke\", \"currentColor\")\n        .attr(x + \"2\", k * tickSizeInner));\n\n    text = text.merge(tickEnter.append(\"text\")\n        .attr(\"fill\", \"currentColor\")\n        .attr(x, k * spacing)\n        .attr(\"dy\", orient === top ? \"0em\" : orient === bottom ? \"0.71em\" : \"0.32em\"));\n\n    if (context !== selection) {\n      path = path.transition(context);\n      tick = tick.transition(context);\n      line = line.transition(context);\n      text = text.transition(context);\n\n      tickExit = tickExit.transition(context)\n          .attr(\"opacity\", epsilon)\n          .attr(\"transform\", function(d) { return isFinite(d = position(d)) ? transform(d) : this.getAttribute(\"transform\"); });\n\n      tickEnter\n          .attr(\"opacity\", epsilon)\n          .attr(\"transform\", function(d) { var p = this.parentNode.__axis; return transform(p && isFinite(p = p(d)) ? p : position(d)); });\n    }\n\n    tickExit.remove();\n\n    path\n        .attr(\"d\", orient === left || orient == right\n            ? (tickSizeOuter ? \"M\" + k * tickSizeOuter + \",\" + range0 + \"H0.5V\" + range1 + \"H\" + k * tickSizeOuter : \"M0.5,\" + range0 + \"V\" + range1)\n            : (tickSizeOuter ? \"M\" + range0 + \",\" + k * tickSizeOuter + \"V0.5H\" + range1 + \"V\" + k * tickSizeOuter : \"M\" + range0 + \",0.5H\" + range1));\n\n    tick\n        .attr(\"opacity\", 1)\n        .attr(\"transform\", function(d) { return transform(position(d)); });\n\n    line\n        .attr(x + \"2\", k * tickSizeInner);\n\n    text\n        .attr(x, k * spacing)\n        .text(format);\n\n    selection.filter(entering)\n        .attr(\"fill\", \"none\")\n        .attr(\"font-size\", 10)\n        .attr(\"font-family\", \"sans-serif\")\n        .attr(\"text-anchor\", orient === right ? \"start\" : orient === left ? \"end\" : \"middle\");\n\n    selection\n        .each(function() { this.__axis = position; });\n  }\n\n  axis.scale = function(_) {\n    return arguments.length ? (scale = _, axis) : scale;\n  };\n\n  axis.ticks = function() {\n    return tickArguments = slice.call(arguments), axis;\n  };\n\n  axis.tickArguments = function(_) {\n    return arguments.length ? (tickArguments = _ == null ? [] : slice.call(_), axis) : tickArguments.slice();\n  };\n\n  axis.tickValues = function(_) {\n    return arguments.length ? (tickValues = _ == null ? null : slice.call(_), axis) : tickValues && tickValues.slice();\n  };\n\n  axis.tickFormat = function(_) {\n    return arguments.length ? (tickFormat = _, axis) : tickFormat;\n  };\n\n  axis.tickSize = function(_) {\n    return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner;\n  };\n\n  axis.tickSizeInner = function(_) {\n    return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner;\n  };\n\n  axis.tickSizeOuter = function(_) {\n    return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter;\n  };\n\n  axis.tickPadding = function(_) {\n    return arguments.length ? (tickPadding = +_, axis) : tickPadding;\n  };\n\n  return axis;\n}\n\nexport function axisTop(scale) {\n  return axis(top, scale);\n}\n\nexport function axisRight(scale) {\n  return axis(right, scale);\n}\n\nexport function axisBottom(scale) {\n  return axis(bottom, scale);\n}\n\nexport function axisLeft(scale) {\n  return axis(left, scale);\n}\n","import {event} from \"./selection/on\";\n\nexport default function() {\n  var current = event, source;\n  while (source = current.sourceEvent) current = source;\n  return current;\n}\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 namespace from \"./namespace\";\nimport {xhtml} from \"./namespaces\";\n\nfunction creatorInherit(name) {\n  return function() {\n    var document = this.ownerDocument,\n        uri = this.namespaceURI;\n    return uri === xhtml && document.documentElement.namespaceURI === xhtml\n        ? document.createElement(name)\n        : document.createElementNS(uri, name);\n  };\n}\n\nfunction creatorFixed(fullname) {\n  return function() {\n    return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n  };\n}\n\nexport default function(name) {\n  var fullname = namespace(name);\n  return (fullname.local\n      ? creatorFixed\n      : creatorInherit)(fullname);\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","export var name = \"d3\";\nexport var version = \"5.16.0\";\nexport var description = \"Data-Driven Documents\";\nexport var keywords = [\"dom\",\"visualization\",\"svg\",\"animation\",\"canvas\"];\nexport var homepage = \"https://d3js.org\";\nexport var license = \"BSD-3-Clause\";\nexport var author = {\"name\":\"Mike Bostock\",\"url\":\"https://bost.ocks.org/mike\"};\nexport var main = \"dist/d3.node.js\";\nexport var unpkg = \"dist/d3.min.js\";\nexport var jsdelivr = \"dist/d3.min.js\";\nexport var module = \"index.js\";\nexport var repository = {\"type\":\"git\",\"url\":\"https://github.com/d3/d3.git\"};\nexport var files = [\"dist/**/*.js\",\"index.js\"];\nexport var scripts = {\"pretest\":\"rimraf dist && mkdir dist && json2module package.json > dist/package.js && rollup -c\",\"test\":\"tape 'test/**/*-test.js'\",\"prepublishOnly\":\"yarn test\",\"postpublish\":\"git push && git push --tags && cd ../d3.github.com && git pull && cp ../d3/dist/d3.js d3.v5.js && cp ../d3/dist/d3.min.js d3.v5.min.js && git add d3.v5.js d3.v5.min.js && git commit -m \\\"d3 ${npm_package_version}\\\" && git push && cd - && cd ../d3-bower && git pull && cp ../d3/LICENSE ../d3/README.md ../d3/dist/d3.js ../d3/dist/d3.min.js . && git add -- LICENSE README.md d3.js d3.min.js && git commit -m \\\"${npm_package_version}\\\" && git tag -am \\\"${npm_package_version}\\\" v${npm_package_version} && git push && git push --tags && cd - && zip -j dist/d3.zip -- LICENSE README.md API.md CHANGES.md dist/d3.js dist/d3.min.js\"};\nexport var devDependencies = {\"json2module\":\"0.0\",\"rimraf\":\"2\",\"rollup\":\"1\",\"rollup-plugin-ascii\":\"0.0\",\"rollup-plugin-node-resolve\":\"3\",\"rollup-plugin-terser\":\"5\",\"tape\":\"4\"};\nexport var dependencies = {\"d3-array\":\"1\",\"d3-axis\":\"1\",\"d3-brush\":\"1\",\"d3-chord\":\"1\",\"d3-collection\":\"1\",\"d3-color\":\"1\",\"d3-contour\":\"1\",\"d3-dispatch\":\"1\",\"d3-drag\":\"1\",\"d3-dsv\":\"1\",\"d3-ease\":\"1\",\"d3-fetch\":\"1\",\"d3-force\":\"1\",\"d3-format\":\"1\",\"d3-geo\":\"1\",\"d3-hierarchy\":\"1\",\"d3-interpolate\":\"1\",\"d3-path\":\"1\",\"d3-polygon\":\"1\",\"d3-quadtree\":\"1\",\"d3-random\":\"1\",\"d3-scale\":\"2\",\"d3-scale-chromatic\":\"1\",\"d3-selection\":\"1\",\"d3-shape\":\"1\",\"d3-time\":\"1\",\"d3-time-format\":\"2\",\"d3-timer\":\"1\",\"d3-transition\":\"1\",\"d3-voronoi\":\"1\",\"d3-zoom\":\"1\"};\n","import {dispatch} from \"d3-dispatch\";\nimport {dragDisable, dragEnable} from \"d3-drag\";\nimport {interpolate} from \"d3-interpolate\";\nimport {customEvent, event, touch, mouse, select} from \"d3-selection\";\nimport {interrupt} from \"d3-transition\";\nimport constant from \"./constant.js\";\nimport BrushEvent from \"./event.js\";\nimport noevent, {nopropagation} from \"./noevent.js\";\n\nvar MODE_DRAG = {name: \"drag\"},\n    MODE_SPACE = {name: \"space\"},\n    MODE_HANDLE = {name: \"handle\"},\n    MODE_CENTER = {name: \"center\"};\n\nfunction number1(e) {\n  return [+e[0], +e[1]];\n}\n\nfunction number2(e) {\n  return [number1(e[0]), number1(e[1])];\n}\n\nfunction toucher(identifier) {\n  return function(target) {\n    return touch(target, event.touches, identifier);\n  };\n}\n\nvar X = {\n  name: \"x\",\n  handles: [\"w\", \"e\"].map(type),\n  input: function(x, e) { return x == null ? null : [[+x[0], e[0][1]], [+x[1], e[1][1]]]; },\n  output: function(xy) { return xy && [xy[0][0], xy[1][0]]; }\n};\n\nvar Y = {\n  name: \"y\",\n  handles: [\"n\", \"s\"].map(type),\n  input: function(y, e) { return y == null ? null : [[e[0][0], +y[0]], [e[1][0], +y[1]]]; },\n  output: function(xy) { return xy && [xy[0][1], xy[1][1]]; }\n};\n\nvar XY = {\n  name: \"xy\",\n  handles: [\"n\", \"w\", \"e\", \"s\", \"nw\", \"ne\", \"sw\", \"se\"].map(type),\n  input: function(xy) { return xy == null ? null : number2(xy); },\n  output: function(xy) { return xy; }\n};\n\nvar cursors = {\n  overlay: \"crosshair\",\n  selection: \"move\",\n  n: \"ns-resize\",\n  e: \"ew-resize\",\n  s: \"ns-resize\",\n  w: \"ew-resize\",\n  nw: \"nwse-resize\",\n  ne: \"nesw-resize\",\n  se: \"nwse-resize\",\n  sw: \"nesw-resize\"\n};\n\nvar flipX = {\n  e: \"w\",\n  w: \"e\",\n  nw: \"ne\",\n  ne: \"nw\",\n  se: \"sw\",\n  sw: \"se\"\n};\n\nvar flipY = {\n  n: \"s\",\n  s: \"n\",\n  nw: \"sw\",\n  ne: \"se\",\n  se: \"ne\",\n  sw: \"nw\"\n};\n\nvar signsX = {\n  overlay: +1,\n  selection: +1,\n  n: null,\n  e: +1,\n  s: null,\n  w: -1,\n  nw: -1,\n  ne: +1,\n  se: +1,\n  sw: -1\n};\n\nvar signsY = {\n  overlay: +1,\n  selection: +1,\n  n: -1,\n  e: null,\n  s: +1,\n  w: null,\n  nw: -1,\n  ne: -1,\n  se: +1,\n  sw: +1\n};\n\nfunction type(t) {\n  return {type: t};\n}\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter() {\n  return !event.ctrlKey && !event.button;\n}\n\nfunction defaultExtent() {\n  var svg = this.ownerSVGElement || this;\n  if (svg.hasAttribute(\"viewBox\")) {\n    svg = svg.viewBox.baseVal;\n    return [[svg.x, svg.y], [svg.x + svg.width, svg.y + svg.height]];\n  }\n  return [[0, 0], [svg.width.baseVal.value, svg.height.baseVal.value]];\n}\n\nfunction defaultTouchable() {\n  return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n\n// Like d3.local, but with the name “__brush” rather than auto-generated.\nfunction local(node) {\n  while (!node.__brush) if (!(node = node.parentNode)) return;\n  return node.__brush;\n}\n\nfunction empty(extent) {\n  return extent[0][0] === extent[1][0]\n      || extent[0][1] === extent[1][1];\n}\n\nexport function brushSelection(node) {\n  var state = node.__brush;\n  return state ? state.dim.output(state.selection) : null;\n}\n\nexport function brushX() {\n  return brush(X);\n}\n\nexport function brushY() {\n  return brush(Y);\n}\n\nexport default function() {\n  return brush(XY);\n}\n\nfunction brush(dim) {\n  var extent = defaultExtent,\n      filter = defaultFilter,\n      touchable = defaultTouchable,\n      keys = true,\n      listeners = dispatch(\"start\", \"brush\", \"end\"),\n      handleSize = 6,\n      touchending;\n\n  function brush(group) {\n    var overlay = group\n        .property(\"__brush\", initialize)\n      .selectAll(\".overlay\")\n      .data([type(\"overlay\")]);\n\n    overlay.enter().append(\"rect\")\n        .attr(\"class\", \"overlay\")\n        .attr(\"pointer-events\", \"all\")\n        .attr(\"cursor\", cursors.overlay)\n      .merge(overlay)\n        .each(function() {\n          var extent = local(this).extent;\n          select(this)\n              .attr(\"x\", extent[0][0])\n              .attr(\"y\", extent[0][1])\n              .attr(\"width\", extent[1][0] - extent[0][0])\n              .attr(\"height\", extent[1][1] - extent[0][1]);\n        });\n\n    group.selectAll(\".selection\")\n      .data([type(\"selection\")])\n      .enter().append(\"rect\")\n        .attr(\"class\", \"selection\")\n        .attr(\"cursor\", cursors.selection)\n        .attr(\"fill\", \"#777\")\n        .attr(\"fill-opacity\", 0.3)\n        .attr(\"stroke\", \"#fff\")\n        .attr(\"shape-rendering\", \"crispEdges\");\n\n    var handle = group.selectAll(\".handle\")\n      .data(dim.handles, function(d) { return d.type; });\n\n    handle.exit().remove();\n\n    handle.enter().append(\"rect\")\n        .attr(\"class\", function(d) { return \"handle handle--\" + d.type; })\n        .attr(\"cursor\", function(d) { return cursors[d.type]; });\n\n    group\n        .each(redraw)\n        .attr(\"fill\", \"none\")\n        .attr(\"pointer-events\", \"all\")\n        .on(\"mousedown.brush\", started)\n      .filter(touchable)\n        .on(\"touchstart.brush\", started)\n        .on(\"touchmove.brush\", touchmoved)\n        .on(\"touchend.brush touchcancel.brush\", touchended)\n        .style(\"touch-action\", \"none\")\n        .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n  }\n\n  brush.move = function(group, selection) {\n    if (group.selection) {\n      group\n          .on(\"start.brush\", function() { emitter(this, arguments).beforestart().start(); })\n          .on(\"interrupt.brush end.brush\", function() { emitter(this, arguments).end(); })\n          .tween(\"brush\", function() {\n            var that = this,\n                state = that.__brush,\n                emit = emitter(that, arguments),\n                selection0 = state.selection,\n                selection1 = dim.input(typeof selection === \"function\" ? selection.apply(this, arguments) : selection, state.extent),\n                i = interpolate(selection0, selection1);\n\n            function tween(t) {\n              state.selection = t === 1 && selection1 === null ? null : i(t);\n              redraw.call(that);\n              emit.brush();\n            }\n\n            return selection0 !== null && selection1 !== null ? tween : tween(1);\n          });\n    } else {\n      group\n          .each(function() {\n            var that = this,\n                args = arguments,\n                state = that.__brush,\n                selection1 = dim.input(typeof selection === \"function\" ? selection.apply(that, args) : selection, state.extent),\n                emit = emitter(that, args).beforestart();\n\n            interrupt(that);\n            state.selection = selection1 === null ? null : selection1;\n            redraw.call(that);\n            emit.start().brush().end();\n          });\n    }\n  };\n\n  brush.clear = function(group) {\n    brush.move(group, null);\n  };\n\n  function redraw() {\n    var group = select(this),\n        selection = local(this).selection;\n\n    if (selection) {\n      group.selectAll(\".selection\")\n          .style(\"display\", null)\n          .attr(\"x\", selection[0][0])\n          .attr(\"y\", selection[0][1])\n          .attr(\"width\", selection[1][0] - selection[0][0])\n          .attr(\"height\", selection[1][1] - selection[0][1]);\n\n      group.selectAll(\".handle\")\n          .style(\"display\", null)\n          .attr(\"x\", function(d) { return d.type[d.type.length - 1] === \"e\" ? selection[1][0] - handleSize / 2 : selection[0][0] - handleSize / 2; })\n          .attr(\"y\", function(d) { return d.type[0] === \"s\" ? selection[1][1] - handleSize / 2 : selection[0][1] - handleSize / 2; })\n          .attr(\"width\", function(d) { return d.type === \"n\" || d.type === \"s\" ? selection[1][0] - selection[0][0] + handleSize : handleSize; })\n          .attr(\"height\", function(d) { return d.type === \"e\" || d.type === \"w\" ? selection[1][1] - selection[0][1] + handleSize : handleSize; });\n    }\n\n    else {\n      group.selectAll(\".selection,.handle\")\n          .style(\"display\", \"none\")\n          .attr(\"x\", null)\n          .attr(\"y\", null)\n          .attr(\"width\", null)\n          .attr(\"height\", null);\n    }\n  }\n\n  function emitter(that, args, clean) {\n    var emit = that.__brush.emitter;\n    return emit && (!clean || !emit.clean) ? emit : new Emitter(that, args, clean);\n  }\n\n  function Emitter(that, args, clean) {\n    this.that = that;\n    this.args = args;\n    this.state = that.__brush;\n    this.active = 0;\n    this.clean = clean;\n  }\n\n  Emitter.prototype = {\n    beforestart: function() {\n      if (++this.active === 1) this.state.emitter = this, this.starting = true;\n      return this;\n    },\n    start: function() {\n      if (this.starting) this.starting = false, this.emit(\"start\");\n      else this.emit(\"brush\");\n      return this;\n    },\n    brush: function() {\n      this.emit(\"brush\");\n      return this;\n    },\n    end: function() {\n      if (--this.active === 0) delete this.state.emitter, this.emit(\"end\");\n      return this;\n    },\n    emit: function(type) {\n      customEvent(new BrushEvent(brush, type, dim.output(this.state.selection)), listeners.apply, listeners, [type, this.that, this.args]);\n    }\n  };\n\n  function started() {\n    if (touchending && !event.touches) return;\n    if (!filter.apply(this, arguments)) return;\n\n    var that = this,\n        type = event.target.__data__.type,\n        mode = (keys && event.metaKey ? type = \"overlay\" : type) === \"selection\" ? MODE_DRAG : (keys && event.altKey ? MODE_CENTER : MODE_HANDLE),\n        signX = dim === Y ? null : signsX[type],\n        signY = dim === X ? null : signsY[type],\n        state = local(that),\n        extent = state.extent,\n        selection = state.selection,\n        W = extent[0][0], w0, w1,\n        N = extent[0][1], n0, n1,\n        E = extent[1][0], e0, e1,\n        S = extent[1][1], s0, s1,\n        dx = 0,\n        dy = 0,\n        moving,\n        shifting = signX && signY && keys && event.shiftKey,\n        lockX,\n        lockY,\n        pointer = event.touches ? toucher(event.changedTouches[0].identifier) : mouse,\n        point0 = pointer(that),\n        point = point0,\n        emit = emitter(that, arguments, true).beforestart();\n\n    if (type === \"overlay\") {\n      if (selection) moving = true;\n      state.selection = selection = [\n        [w0 = dim === Y ? W : point0[0], n0 = dim === X ? N : point0[1]],\n        [e0 = dim === Y ? E : w0, s0 = dim === X ? S : n0]\n      ];\n    } else {\n      w0 = selection[0][0];\n      n0 = selection[0][1];\n      e0 = selection[1][0];\n      s0 = selection[1][1];\n    }\n\n    w1 = w0;\n    n1 = n0;\n    e1 = e0;\n    s1 = s0;\n\n    var group = select(that)\n        .attr(\"pointer-events\", \"none\");\n\n    var overlay = group.selectAll(\".overlay\")\n        .attr(\"cursor\", cursors[type]);\n\n    if (event.touches) {\n      emit.moved = moved;\n      emit.ended = ended;\n    } else {\n      var view = select(event.view)\n          .on(\"mousemove.brush\", moved, true)\n          .on(\"mouseup.brush\", ended, true);\n      if (keys) view\n          .on(\"keydown.brush\", keydowned, true)\n          .on(\"keyup.brush\", keyupped, true)\n\n      dragDisable(event.view);\n    }\n\n    nopropagation();\n    interrupt(that);\n    redraw.call(that);\n    emit.start();\n\n    function moved() {\n      var point1 = pointer(that);\n      if (shifting && !lockX && !lockY) {\n        if (Math.abs(point1[0] - point[0]) > Math.abs(point1[1] - point[1])) lockY = true;\n        else lockX = true;\n      }\n      point = point1;\n      moving = true;\n      noevent();\n      move();\n    }\n\n    function move() {\n      var t;\n\n      dx = point[0] - point0[0];\n      dy = point[1] - point0[1];\n\n      switch (mode) {\n        case MODE_SPACE:\n        case MODE_DRAG: {\n          if (signX) dx = Math.max(W - w0, Math.min(E - e0, dx)), w1 = w0 + dx, e1 = e0 + dx;\n          if (signY) dy = Math.max(N - n0, Math.min(S - s0, dy)), n1 = n0 + dy, s1 = s0 + dy;\n          break;\n        }\n        case MODE_HANDLE: {\n          if (signX < 0) dx = Math.max(W - w0, Math.min(E - w0, dx)), w1 = w0 + dx, e1 = e0;\n          else if (signX > 0) dx = Math.max(W - e0, Math.min(E - e0, dx)), w1 = w0, e1 = e0 + dx;\n          if (signY < 0) dy = Math.max(N - n0, Math.min(S - n0, dy)), n1 = n0 + dy, s1 = s0;\n          else if (signY > 0) dy = Math.max(N - s0, Math.min(S - s0, dy)), n1 = n0, s1 = s0 + dy;\n          break;\n        }\n        case MODE_CENTER: {\n          if (signX) w1 = Math.max(W, Math.min(E, w0 - dx * signX)), e1 = Math.max(W, Math.min(E, e0 + dx * signX));\n          if (signY) n1 = Math.max(N, Math.min(S, n0 - dy * signY)), s1 = Math.max(N, Math.min(S, s0 + dy * signY));\n          break;\n        }\n      }\n\n      if (e1 < w1) {\n        signX *= -1;\n        t = w0, w0 = e0, e0 = t;\n        t = w1, w1 = e1, e1 = t;\n        if (type in flipX) overlay.attr(\"cursor\", cursors[type = flipX[type]]);\n      }\n\n      if (s1 < n1) {\n        signY *= -1;\n        t = n0, n0 = s0, s0 = t;\n        t = n1, n1 = s1, s1 = t;\n        if (type in flipY) overlay.attr(\"cursor\", cursors[type = flipY[type]]);\n      }\n\n      if (state.selection) selection = state.selection; // May be set by brush.move!\n      if (lockX) w1 = selection[0][0], e1 = selection[1][0];\n      if (lockY) n1 = selection[0][1], s1 = selection[1][1];\n\n      if (selection[0][0] !== w1\n          || selection[0][1] !== n1\n          || selection[1][0] !== e1\n          || selection[1][1] !== s1) {\n        state.selection = [[w1, n1], [e1, s1]];\n        redraw.call(that);\n        emit.brush();\n      }\n    }\n\n    function ended() {\n      nopropagation();\n      if (event.touches) {\n        if (event.touches.length) return;\n        if (touchending) clearTimeout(touchending);\n        touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n      } else {\n        dragEnable(event.view, moving);\n        view.on(\"keydown.brush keyup.brush mousemove.brush mouseup.brush\", null);\n      }\n      group.attr(\"pointer-events\", \"all\");\n      overlay.attr(\"cursor\", cursors.overlay);\n      if (state.selection) selection = state.selection; // May be set by brush.move (on start)!\n      if (empty(selection)) state.selection = null, redraw.call(that);\n      emit.end();\n    }\n\n    function keydowned() {\n      switch (event.keyCode) {\n        case 16: { // SHIFT\n          shifting = signX && signY;\n          break;\n        }\n        case 18: { // ALT\n          if (mode === MODE_HANDLE) {\n            if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;\n            if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;\n            mode = MODE_CENTER;\n            move();\n          }\n          break;\n        }\n        case 32: { // SPACE; takes priority over ALT\n          if (mode === MODE_HANDLE || mode === MODE_CENTER) {\n            if (signX < 0) e0 = e1 - dx; else if (signX > 0) w0 = w1 - dx;\n            if (signY < 0) s0 = s1 - dy; else if (signY > 0) n0 = n1 - dy;\n            mode = MODE_SPACE;\n            overlay.attr(\"cursor\", cursors.selection);\n            move();\n          }\n          break;\n        }\n        default: return;\n      }\n      noevent();\n    }\n\n    function keyupped() {\n      switch (event.keyCode) {\n        case 16: { // SHIFT\n          if (shifting) {\n            lockX = lockY = shifting = false;\n            move();\n          }\n          break;\n        }\n        case 18: { // ALT\n          if (mode === MODE_CENTER) {\n            if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;\n            if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;\n            mode = MODE_HANDLE;\n            move();\n          }\n          break;\n        }\n        case 32: { // SPACE\n          if (mode === MODE_SPACE) {\n            if (event.altKey) {\n              if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;\n              if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;\n              mode = MODE_CENTER;\n            } else {\n              if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;\n              if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;\n              mode = MODE_HANDLE;\n            }\n            overlay.attr(\"cursor\", cursors[type]);\n            move();\n          }\n          break;\n        }\n        default: return;\n      }\n      noevent();\n    }\n  }\n\n  function touchmoved() {\n    emitter(this, arguments).moved();\n  }\n\n  function touchended() {\n    emitter(this, arguments).ended();\n  }\n\n  function initialize() {\n    var state = this.__brush || {selection: null};\n    state.extent = number2(extent.apply(this, arguments));\n    state.dim = dim;\n    return state;\n  }\n\n  brush.extent = function(_) {\n    return arguments.length ? (extent = typeof _ === \"function\" ? _ : constant(number2(_)), brush) : extent;\n  };\n\n  brush.filter = function(_) {\n    return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), brush) : filter;\n  };\n\n  brush.touchable = function(_) {\n    return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), brush) : touchable;\n  };\n\n  brush.handleSize = function(_) {\n    return arguments.length ? (handleSize = +_, brush) : handleSize;\n  };\n\n  brush.keyModifiers = function(_) {\n    return arguments.length ? (keys = !!_, brush) : keys;\n  };\n\n  brush.on = function() {\n    var value = listeners.on.apply(listeners, arguments);\n    return value === listeners ? brush : value;\n  };\n\n  return brush;\n}\n","export var cos = Math.cos;\nexport var sin = Math.sin;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var tau = pi * 2;\nexport var max = Math.max;\n","export var slice = Array.prototype.slice;\n","import {range} from \"d3-array\";\nimport {max, tau} from \"./math\";\n\nfunction compareValue(compare) {\n  return function(a, b) {\n    return compare(\n      a.source.value + a.target.value,\n      b.source.value + b.target.value\n    );\n  };\n}\n\nexport default function() {\n  var padAngle = 0,\n      sortGroups = null,\n      sortSubgroups = null,\n      sortChords = null;\n\n  function chord(matrix) {\n    var n = matrix.length,\n        groupSums = [],\n        groupIndex = range(n),\n        subgroupIndex = [],\n        chords = [],\n        groups = chords.groups = new Array(n),\n        subgroups = new Array(n * n),\n        k,\n        x,\n        x0,\n        dx,\n        i,\n        j;\n\n    // Compute the sum.\n    k = 0, i = -1; while (++i < n) {\n      x = 0, j = -1; while (++j < n) {\n        x += matrix[i][j];\n      }\n      groupSums.push(x);\n      subgroupIndex.push(range(n));\n      k += x;\n    }\n\n    // Sort groups…\n    if (sortGroups) groupIndex.sort(function(a, b) {\n      return sortGroups(groupSums[a], groupSums[b]);\n    });\n\n    // Sort subgroups…\n    if (sortSubgroups) subgroupIndex.forEach(function(d, i) {\n      d.sort(function(a, b) {\n        return sortSubgroups(matrix[i][a], matrix[i][b]);\n      });\n    });\n\n    // Convert the sum to scaling factor for [0, 2pi].\n    // TODO Allow start and end angle to be specified?\n    // TODO Allow padding to be specified as percentage?\n    k = max(0, tau - padAngle * n) / k;\n    dx = k ? padAngle : tau / n;\n\n    // Compute the start and end angle for each group and subgroup.\n    // Note: Opera has a bug reordering object literal properties!\n    x = 0, i = -1; while (++i < n) {\n      x0 = x, j = -1; while (++j < n) {\n        var di = groupIndex[i],\n            dj = subgroupIndex[di][j],\n            v = matrix[di][dj],\n            a0 = x,\n            a1 = x += v * k;\n        subgroups[dj * n + di] = {\n          index: di,\n          subindex: dj,\n          startAngle: a0,\n          endAngle: a1,\n          value: v\n        };\n      }\n      groups[di] = {\n        index: di,\n        startAngle: x0,\n        endAngle: x,\n        value: groupSums[di]\n      };\n      x += dx;\n    }\n\n    // Generate chords for each (non-empty) subgroup-subgroup link.\n    i = -1; while (++i < n) {\n      j = i - 1; while (++j < n) {\n        var source = subgroups[j * n + i],\n            target = subgroups[i * n + j];\n        if (source.value || target.value) {\n          chords.push(source.value < target.value\n              ? {source: target, target: source}\n              : {source: source, target: target});\n        }\n      }\n    }\n\n    return sortChords ? chords.sort(sortChords) : chords;\n  }\n\n  chord.padAngle = function(_) {\n    return arguments.length ? (padAngle = max(0, _), chord) : padAngle;\n  };\n\n  chord.sortGroups = function(_) {\n    return arguments.length ? (sortGroups = _, chord) : sortGroups;\n  };\n\n  chord.sortSubgroups = function(_) {\n    return arguments.length ? (sortSubgroups = _, chord) : sortSubgroups;\n  };\n\n  chord.sortChords = function(_) {\n    return arguments.length ? (_ == null ? sortChords = null : (sortChords = compareValue(_))._ = _, chord) : sortChords && sortChords._;\n  };\n\n  return chord;\n}\n","var pi = Math.PI,\n    tau = 2 * pi,\n    epsilon = 1e-6,\n    tauEpsilon = tau - epsilon;\n\nfunction Path() {\n  this._x0 = this._y0 = // start of current subpath\n  this._x1 = this._y1 = null; // end of current subpath\n  this._ = \"\";\n}\n\nfunction path() {\n  return new Path;\n}\n\nPath.prototype = path.prototype = {\n  constructor: Path,\n  moveTo: function(x, y) {\n    this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y);\n  },\n  closePath: function() {\n    if (this._x1 !== null) {\n      this._x1 = this._x0, this._y1 = this._y0;\n      this._ += \"Z\";\n    }\n  },\n  lineTo: function(x, y) {\n    this._ += \"L\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n  },\n  quadraticCurveTo: function(x1, y1, x, y) {\n    this._ += \"Q\" + (+x1) + \",\" + (+y1) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n  },\n  bezierCurveTo: function(x1, y1, x2, y2, x, y) {\n    this._ += \"C\" + (+x1) + \",\" + (+y1) + \",\" + (+x2) + \",\" + (+y2) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n  },\n  arcTo: function(x1, y1, x2, y2, r) {\n    x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n    var x0 = this._x1,\n        y0 = this._y1,\n        x21 = x2 - x1,\n        y21 = y2 - y1,\n        x01 = x0 - x1,\n        y01 = y0 - y1,\n        l01_2 = x01 * x01 + y01 * y01;\n\n    // Is the radius negative? Error.\n    if (r < 0) throw new Error(\"negative radius: \" + r);\n\n    // Is this path empty? Move to (x1,y1).\n    if (this._x1 === null) {\n      this._ += \"M\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n    }\n\n    // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n    else if (!(l01_2 > epsilon));\n\n    // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n    // Equivalently, is (x1,y1) coincident with (x2,y2)?\n    // Or, is the radius zero? Line to (x1,y1).\n    else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n      this._ += \"L\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n    }\n\n    // Otherwise, draw an arc!\n    else {\n      var x20 = x2 - x0,\n          y20 = y2 - y0,\n          l21_2 = x21 * x21 + y21 * y21,\n          l20_2 = x20 * x20 + y20 * y20,\n          l21 = Math.sqrt(l21_2),\n          l01 = Math.sqrt(l01_2),\n          l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n          t01 = l / l01,\n          t21 = l / l21;\n\n      // If the start tangent is not coincident with (x0,y0), line to.\n      if (Math.abs(t01 - 1) > epsilon) {\n        this._ += \"L\" + (x1 + t01 * x01) + \",\" + (y1 + t01 * y01);\n      }\n\n      this._ += \"A\" + r + \",\" + r + \",0,0,\" + (+(y01 * x20 > x01 * y20)) + \",\" + (this._x1 = x1 + t21 * x21) + \",\" + (this._y1 = y1 + t21 * y21);\n    }\n  },\n  arc: function(x, y, r, a0, a1, ccw) {\n    x = +x, y = +y, r = +r, ccw = !!ccw;\n    var dx = r * Math.cos(a0),\n        dy = r * Math.sin(a0),\n        x0 = x + dx,\n        y0 = y + dy,\n        cw = 1 ^ ccw,\n        da = ccw ? a0 - a1 : a1 - a0;\n\n    // Is the radius negative? Error.\n    if (r < 0) throw new Error(\"negative radius: \" + r);\n\n    // Is this path empty? Move to (x0,y0).\n    if (this._x1 === null) {\n      this._ += \"M\" + x0 + \",\" + y0;\n    }\n\n    // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n    else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n      this._ += \"L\" + x0 + \",\" + y0;\n    }\n\n    // Is this arc empty? We’re done.\n    if (!r) return;\n\n    // Does the angle go the wrong way? Flip the direction.\n    if (da < 0) da = da % tau + tau;\n\n    // Is this a complete circle? Draw two arcs to complete the circle.\n    if (da > tauEpsilon) {\n      this._ += \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (x - dx) + \",\" + (y - dy) + \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (this._x1 = x0) + \",\" + (this._y1 = y0);\n    }\n\n    // Is this arc non-empty? Draw an arc!\n    else if (da > epsilon) {\n      this._ += \"A\" + r + \",\" + r + \",0,\" + (+(da >= pi)) + \",\" + cw + \",\" + (this._x1 = x + r * Math.cos(a1)) + \",\" + (this._y1 = y + r * Math.sin(a1));\n    }\n  },\n  rect: function(x, y, w, h) {\n    this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y) + \"h\" + (+w) + \"v\" + (+h) + \"h\" + (-w) + \"Z\";\n  },\n  toString: function() {\n    return this._;\n  }\n};\n\nexport default path;\n","var array = Array.prototype;\n\nexport var slice = array.slice;\n","export default function(d) {\n  var x = +this._x.call(null, d),\n      y = +this._y.call(null, d);\n  return add(this.cover(x, y), x, y, d);\n}\n\nfunction add(tree, x, y, d) {\n  if (isNaN(x) || isNaN(y)) return tree; // ignore invalid points\n\n  var parent,\n      node = tree._root,\n      leaf = {data: d},\n      x0 = tree._x0,\n      y0 = tree._y0,\n      x1 = tree._x1,\n      y1 = tree._y1,\n      xm,\n      ym,\n      xp,\n      yp,\n      right,\n      bottom,\n      i,\n      j;\n\n  // If the tree is empty, initialize the root as a leaf.\n  if (!node) return tree._root = leaf, tree;\n\n  // Find the existing leaf for the new point, or add it.\n  while (node.length) {\n    if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n    if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n    if (parent = node, !(node = node[i = bottom << 1 | right])) return parent[i] = leaf, tree;\n  }\n\n  // Is the new point is exactly coincident with the existing point?\n  xp = +tree._x.call(null, node.data);\n  yp = +tree._y.call(null, node.data);\n  if (x === xp && y === yp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree;\n\n  // Otherwise, split the leaf node until the old and new point are separated.\n  do {\n    parent = parent ? parent[i] = new Array(4) : tree._root = new Array(4);\n    if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n    if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n  } while ((i = bottom << 1 | right) === (j = (yp >= ym) << 1 | (xp >= xm)));\n  return parent[j] = node, parent[i] = leaf, tree;\n}\n\nexport function addAll(data) {\n  var d, i, n = data.length,\n      x,\n      y,\n      xz = new Array(n),\n      yz = new Array(n),\n      x0 = Infinity,\n      y0 = Infinity,\n      x1 = -Infinity,\n      y1 = -Infinity;\n\n  // Compute the points and their extent.\n  for (i = 0; i < n; ++i) {\n    if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d))) continue;\n    xz[i] = x;\n    yz[i] = y;\n    if (x < x0) x0 = x;\n    if (x > x1) x1 = x;\n    if (y < y0) y0 = y;\n    if (y > y1) y1 = y;\n  }\n\n  // If there were no (valid) points, abort.\n  if (x0 > x1 || y0 > y1) return this;\n\n  // Expand the tree to cover the new points.\n  this.cover(x0, y0).cover(x1, y1);\n\n  // Add the new points.\n  for (i = 0; i < n; ++i) {\n    add(this, xz[i], yz[i], data[i]);\n  }\n\n  return this;\n}\n","export default function(x, y) {\n  if (isNaN(x = +x) || isNaN(y = +y)) return this; // ignore invalid points\n\n  var x0 = this._x0,\n      y0 = this._y0,\n      x1 = this._x1,\n      y1 = this._y1;\n\n  // If the quadtree has no extent, initialize them.\n  // Integer extent are necessary so that if we later double the extent,\n  // the existing quadrant boundaries don’t change due to floating point error!\n  if (isNaN(x0)) {\n    x1 = (x0 = Math.floor(x)) + 1;\n    y1 = (y0 = Math.floor(y)) + 1;\n  }\n\n  // Otherwise, double repeatedly to cover.\n  else {\n    var z = x1 - x0,\n        node = this._root,\n        parent,\n        i;\n\n    while (x0 > x || x >= x1 || y0 > y || y >= y1) {\n      i = (y < y0) << 1 | (x < x0);\n      parent = new Array(4), parent[i] = node, node = parent, z *= 2;\n      switch (i) {\n        case 0: x1 = x0 + z, y1 = y0 + z; break;\n        case 1: x0 = x1 - z, y1 = y0 + z; break;\n        case 2: x1 = x0 + z, y0 = y1 - z; break;\n        case 3: x0 = x1 - z, y0 = y1 - z; break;\n      }\n    }\n\n    if (this._root && this._root.length) this._root = node;\n  }\n\n  this._x0 = x0;\n  this._y0 = y0;\n  this._x1 = x1;\n  this._y1 = y1;\n  return this;\n}\n","export default function(node, x0, y0, x1, y1) {\n  this.node = node;\n  this.x0 = x0;\n  this.y0 = y0;\n  this.x1 = x1;\n  this.y1 = y1;\n}\n","export function defaultX(d) {\n  return d[0];\n}\n\nexport default function(_) {\n  return arguments.length ? (this._x = _, this) : this._x;\n}\n","export function defaultY(d) {\n  return d[1];\n}\n\nexport default function(_) {\n  return arguments.length ? (this._y = _, this) : this._y;\n}\n","import tree_add, {addAll as tree_addAll} from \"./add.js\";\nimport tree_cover from \"./cover.js\";\nimport tree_data from \"./data.js\";\nimport tree_extent from \"./extent.js\";\nimport tree_find from \"./find.js\";\nimport tree_remove, {removeAll as tree_removeAll} from \"./remove.js\";\nimport tree_root from \"./root.js\";\nimport tree_size from \"./size.js\";\nimport tree_visit from \"./visit.js\";\nimport tree_visitAfter from \"./visitAfter.js\";\nimport tree_x, {defaultX} from \"./x.js\";\nimport tree_y, {defaultY} from \"./y.js\";\n\nexport default function quadtree(nodes, x, y) {\n  var tree = new Quadtree(x == null ? defaultX : x, y == null ? defaultY : y, NaN, NaN, NaN, NaN);\n  return nodes == null ? tree : tree.addAll(nodes);\n}\n\nfunction Quadtree(x, y, x0, y0, x1, y1) {\n  this._x = x;\n  this._y = y;\n  this._x0 = x0;\n  this._y0 = y0;\n  this._x1 = x1;\n  this._y1 = y1;\n  this._root = undefined;\n}\n\nfunction leaf_copy(leaf) {\n  var copy = {data: leaf.data}, next = copy;\n  while (leaf = leaf.next) next = next.next = {data: leaf.data};\n  return copy;\n}\n\nvar treeProto = quadtree.prototype = Quadtree.prototype;\n\ntreeProto.copy = function() {\n  var copy = new Quadtree(this._x, this._y, this._x0, this._y0, this._x1, this._y1),\n      node = this._root,\n      nodes,\n      child;\n\n  if (!node) return copy;\n\n  if (!node.length) return copy._root = leaf_copy(node), copy;\n\n  nodes = [{source: node, target: copy._root = new Array(4)}];\n  while (node = nodes.pop()) {\n    for (var i = 0; i < 4; ++i) {\n      if (child = node.source[i]) {\n        if (child.length) nodes.push({source: child, target: node.target[i] = new Array(4)});\n        else node.target[i] = leaf_copy(child);\n      }\n    }\n  }\n\n  return copy;\n};\n\ntreeProto.add = tree_add;\ntreeProto.addAll = tree_addAll;\ntreeProto.cover = tree_cover;\ntreeProto.data = tree_data;\ntreeProto.extent = tree_extent;\ntreeProto.find = tree_find;\ntreeProto.remove = tree_remove;\ntreeProto.removeAll = tree_removeAll;\ntreeProto.root = tree_root;\ntreeProto.size = tree_size;\ntreeProto.visit = tree_visit;\ntreeProto.visitAfter = tree_visitAfter;\ntreeProto.x = tree_x;\ntreeProto.y = tree_y;\n","export default function() {\n  var data = [];\n  this.visit(function(node) {\n    if (!node.length) do data.push(node.data); while (node = node.next)\n  });\n  return data;\n}\n","export default function(_) {\n  return arguments.length\n      ? this.cover(+_[0][0], +_[0][1]).cover(+_[1][0], +_[1][1])\n      : isNaN(this._x0) ? undefined : [[this._x0, this._y0], [this._x1, this._y1]];\n}\n","import Quad from \"./quad.js\";\n\nexport default function(x, y, radius) {\n  var data,\n      x0 = this._x0,\n      y0 = this._y0,\n      x1,\n      y1,\n      x2,\n      y2,\n      x3 = this._x1,\n      y3 = this._y1,\n      quads = [],\n      node = this._root,\n      q,\n      i;\n\n  if (node) quads.push(new Quad(node, x0, y0, x3, y3));\n  if (radius == null) radius = Infinity;\n  else {\n    x0 = x - radius, y0 = y - radius;\n    x3 = x + radius, y3 = y + radius;\n    radius *= radius;\n  }\n\n  while (q = quads.pop()) {\n\n    // Stop searching if this quadrant can’t contain a closer node.\n    if (!(node = q.node)\n        || (x1 = q.x0) > x3\n        || (y1 = q.y0) > y3\n        || (x2 = q.x1) < x0\n        || (y2 = q.y1) < y0) continue;\n\n    // Bisect the current quadrant.\n    if (node.length) {\n      var xm = (x1 + x2) / 2,\n          ym = (y1 + y2) / 2;\n\n      quads.push(\n        new Quad(node[3], xm, ym, x2, y2),\n        new Quad(node[2], x1, ym, xm, y2),\n        new Quad(node[1], xm, y1, x2, ym),\n        new Quad(node[0], x1, y1, xm, ym)\n      );\n\n      // Visit the closest quadrant first.\n      if (i = (y >= ym) << 1 | (x >= xm)) {\n        q = quads[quads.length - 1];\n        quads[quads.length - 1] = quads[quads.length - 1 - i];\n        quads[quads.length - 1 - i] = q;\n      }\n    }\n\n    // Visit this point. (Visiting coincident points isn’t necessary!)\n    else {\n      var dx = x - +this._x.call(null, node.data),\n          dy = y - +this._y.call(null, node.data),\n          d2 = dx * dx + dy * dy;\n      if (d2 < radius) {\n        var d = Math.sqrt(radius = d2);\n        x0 = x - d, y0 = y - d;\n        x3 = x + d, y3 = y + d;\n        data = node.data;\n      }\n    }\n  }\n\n  return data;\n}\n","export default function(d) {\n  if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d))) return this; // ignore invalid points\n\n  var parent,\n      node = this._root,\n      retainer,\n      previous,\n      next,\n      x0 = this._x0,\n      y0 = this._y0,\n      x1 = this._x1,\n      y1 = this._y1,\n      x,\n      y,\n      xm,\n      ym,\n      right,\n      bottom,\n      i,\n      j;\n\n  // If the tree is empty, initialize the root as a leaf.\n  if (!node) return this;\n\n  // Find the leaf node for the point.\n  // While descending, also retain the deepest parent with a non-removed sibling.\n  if (node.length) while (true) {\n    if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n    if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n    if (!(parent = node, node = node[i = bottom << 1 | right])) return this;\n    if (!node.length) break;\n    if (parent[(i + 1) & 3] || parent[(i + 2) & 3] || parent[(i + 3) & 3]) retainer = parent, j = i;\n  }\n\n  // Find the point to remove.\n  while (node.data !== d) if (!(previous = node, node = node.next)) return this;\n  if (next = node.next) delete node.next;\n\n  // If there are multiple coincident points, remove just the point.\n  if (previous) return (next ? previous.next = next : delete previous.next), this;\n\n  // If this is the root point, remove it.\n  if (!parent) return this._root = next, this;\n\n  // Remove this leaf.\n  next ? parent[i] = next : delete parent[i];\n\n  // If the parent now contains exactly one leaf, collapse superfluous parents.\n  if ((node = parent[0] || parent[1] || parent[2] || parent[3])\n      && node === (parent[3] || parent[2] || parent[1] || parent[0])\n      && !node.length) {\n    if (retainer) retainer[j] = node;\n    else this._root = node;\n  }\n\n  return this;\n}\n\nexport function removeAll(data) {\n  for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]);\n  return this;\n}\n","export default function() {\n  return this._root;\n}\n","export default function() {\n  var size = 0;\n  this.visit(function(node) {\n    if (!node.length) do ++size; while (node = node.next)\n  });\n  return size;\n}\n","import Quad from \"./quad.js\";\n\nexport default function(callback) {\n  var quads = [], q, node = this._root, child, x0, y0, x1, y1;\n  if (node) quads.push(new Quad(node, this._x0, this._y0, this._x1, this._y1));\n  while (q = quads.pop()) {\n    if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1) && node.length) {\n      var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n      if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n      if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n      if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n      if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n    }\n  }\n  return this;\n}\n","import Quad from \"./quad.js\";\n\nexport default function(callback) {\n  var quads = [], next = [], q;\n  if (this._root) quads.push(new Quad(this._root, this._x0, this._y0, this._x1, this._y1));\n  while (q = quads.pop()) {\n    var node = q.node;\n    if (node.length) {\n      var child, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n      if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n      if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n      if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n      if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n    }\n    next.push(q);\n  }\n  while (q = next.pop()) {\n    callback(q.node, q.x0, q.y0, q.x1, q.y1);\n  }\n  return this;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {map} from \"d3-collection\";\nimport {timer} from \"d3-timer\";\n\nexport function x(d) {\n  return d.x;\n}\n\nexport function y(d) {\n  return d.y;\n}\n\nvar initialRadius = 10,\n    initialAngle = Math.PI * (3 - Math.sqrt(5));\n\nexport default function(nodes) {\n  var simulation,\n      alpha = 1,\n      alphaMin = 0.001,\n      alphaDecay = 1 - Math.pow(alphaMin, 1 / 300),\n      alphaTarget = 0,\n      velocityDecay = 0.6,\n      forces = map(),\n      stepper = timer(step),\n      event = dispatch(\"tick\", \"end\");\n\n  if (nodes == null) nodes = [];\n\n  function step() {\n    tick();\n    event.call(\"tick\", simulation);\n    if (alpha < alphaMin) {\n      stepper.stop();\n      event.call(\"end\", simulation);\n    }\n  }\n\n  function tick(iterations) {\n    var i, n = nodes.length, node;\n\n    if (iterations === undefined) iterations = 1;\n\n    for (var k = 0; k < iterations; ++k) {\n      alpha += (alphaTarget - alpha) * alphaDecay;\n\n      forces.each(function (force) {\n        force(alpha);\n      });\n\n      for (i = 0; i < n; ++i) {\n        node = nodes[i];\n        if (node.fx == null) node.x += node.vx *= velocityDecay;\n        else node.x = node.fx, node.vx = 0;\n        if (node.fy == null) node.y += node.vy *= velocityDecay;\n        else node.y = node.fy, node.vy = 0;\n      }\n    }\n\n    return simulation;\n  }\n\n  function initializeNodes() {\n    for (var i = 0, n = nodes.length, node; i < n; ++i) {\n      node = nodes[i], node.index = i;\n      if (node.fx != null) node.x = node.fx;\n      if (node.fy != null) node.y = node.fy;\n      if (isNaN(node.x) || isNaN(node.y)) {\n        var radius = initialRadius * Math.sqrt(i), angle = i * initialAngle;\n        node.x = radius * Math.cos(angle);\n        node.y = radius * Math.sin(angle);\n      }\n      if (isNaN(node.vx) || isNaN(node.vy)) {\n        node.vx = node.vy = 0;\n      }\n    }\n  }\n\n  function initializeForce(force) {\n    if (force.initialize) force.initialize(nodes);\n    return force;\n  }\n\n  initializeNodes();\n\n  return simulation = {\n    tick: tick,\n\n    restart: function() {\n      return stepper.restart(step), simulation;\n    },\n\n    stop: function() {\n      return stepper.stop(), simulation;\n    },\n\n    nodes: function(_) {\n      return arguments.length ? (nodes = _, initializeNodes(), forces.each(initializeForce), simulation) : nodes;\n    },\n\n    alpha: function(_) {\n      return arguments.length ? (alpha = +_, simulation) : alpha;\n    },\n\n    alphaMin: function(_) {\n      return arguments.length ? (alphaMin = +_, simulation) : alphaMin;\n    },\n\n    alphaDecay: function(_) {\n      return arguments.length ? (alphaDecay = +_, simulation) : +alphaDecay;\n    },\n\n    alphaTarget: function(_) {\n      return arguments.length ? (alphaTarget = +_, simulation) : alphaTarget;\n    },\n\n    velocityDecay: function(_) {\n      return arguments.length ? (velocityDecay = 1 - _, simulation) : 1 - velocityDecay;\n    },\n\n    force: function(name, _) {\n      return arguments.length > 1 ? ((_ == null ? forces.remove(name) : forces.set(name, initializeForce(_))), simulation) : forces.get(name);\n    },\n\n    find: function(x, y, radius) {\n      var i = 0,\n          n = nodes.length,\n          dx,\n          dy,\n          d2,\n          node,\n          closest;\n\n      if (radius == null) radius = Infinity;\n      else radius *= radius;\n\n      for (i = 0; i < n; ++i) {\n        node = nodes[i];\n        dx = x - node.x;\n        dy = y - node.y;\n        d2 = dx * dx + dy * dy;\n        if (d2 < radius) closest = node, radius = d2;\n      }\n\n      return closest;\n    },\n\n    on: function(name, _) {\n      return arguments.length > 1 ? (event.on(name, _), simulation) : event.on(name);\n    }\n  };\n}\n","export default function() {\n  return Math.random();\n}\n","import defaultSource from \"./defaultSource\";\n\nexport default (function sourceRandomNormal(source) {\n  function randomNormal(mu, sigma) {\n    var x, r;\n    mu = mu == null ? 0 : +mu;\n    sigma = sigma == null ? 1 : +sigma;\n    return function() {\n      var y;\n\n      // If available, use the second previously-generated uniform random.\n      if (x != null) y = x, x = null;\n\n      // Otherwise, generate a new x and y.\n      else do {\n        x = source() * 2 - 1;\n        y = source() * 2 - 1;\n        r = x * x + y * y;\n      } while (!r || r > 1);\n\n      return mu + sigma * y * Math.sqrt(-2 * Math.log(r) / r);\n    };\n  }\n\n  randomNormal.source = sourceRandomNormal;\n\n  return randomNormal;\n})(defaultSource);\n","import defaultSource from \"./defaultSource\";\n\nexport default (function sourceRandomUniform(source) {\n  function randomUniform(min, max) {\n    min = min == null ? 0 : +min;\n    max = max == null ? 1 : +max;\n    if (arguments.length === 1) max = min, min = 0;\n    else max -= min;\n    return function() {\n      return source() * max + min;\n    };\n  }\n\n  randomUniform.source = sourceRandomUniform;\n\n  return randomUniform;\n})(defaultSource);\n","import defaultSource from \"./defaultSource\";\n\nexport default (function sourceRandomIrwinHall(source) {\n  function randomIrwinHall(n) {\n    return function() {\n      for (var sum = 0, i = 0; i < n; ++i) sum += source();\n      return sum;\n    };\n  }\n\n  randomIrwinHall.source = sourceRandomIrwinHall;\n\n  return randomIrwinHall;\n})(defaultSource);\n","import defaultSource from \"./defaultSource\";\nimport normal from \"./normal\";\n\nexport default (function sourceRandomLogNormal(source) {\n  function randomLogNormal() {\n    var randomNormal = normal.source(source).apply(this, arguments);\n    return function() {\n      return Math.exp(randomNormal());\n    };\n  }\n\n  randomLogNormal.source = sourceRandomLogNormal;\n\n  return randomLogNormal;\n})(defaultSource);\n","import defaultSource from \"./defaultSource\";\nimport irwinHall from \"./irwinHall\";\n\nexport default (function sourceRandomBates(source) {\n  function randomBates(n) {\n    var randomIrwinHall = irwinHall.source(source)(n);\n    return function() {\n      return randomIrwinHall() / n;\n    };\n  }\n\n  randomBates.source = sourceRandomBates;\n\n  return randomBates;\n})(defaultSource);\n","import defaultSource from \"./defaultSource\";\n\nexport default (function sourceRandomExponential(source) {\n  function randomExponential(lambda) {\n    return function() {\n      return -Math.log(1 - source()) / lambda;\n    };\n  }\n\n  randomExponential.source = sourceRandomExponential;\n\n  return randomExponential;\n})(defaultSource);\n","export var slice = Array.prototype.slice;\n","export default function(x) {\n  return function constant() {\n    return x;\n  };\n}\n","export default function(series, order) {\n  if (!((n = series.length) > 1)) return;\n  for (var i = 1, j, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) {\n    s0 = s1, s1 = series[order[i]];\n    for (j = 0; j < m; ++j) {\n      s1[j][1] += s1[j][0] = isNaN(s0[j][1]) ? s0[j][0] : s0[j][1];\n    }\n  }\n}\n","export default function(series) {\n  var n = series.length, o = new Array(n);\n  while (--n >= 0) o[n] = n;\n  return o;\n}\n","import {slice} from \"./array.js\";\nimport constant from \"./constant.js\";\nimport offsetNone from \"./offset/none.js\";\nimport orderNone from \"./order/none.js\";\n\nfunction stackValue(d, key) {\n  return d[key];\n}\n\nexport default function() {\n  var keys = constant([]),\n      order = orderNone,\n      offset = offsetNone,\n      value = stackValue;\n\n  function stack(data) {\n    var kz = keys.apply(this, arguments),\n        i,\n        m = data.length,\n        n = kz.length,\n        sz = new Array(n),\n        oz;\n\n    for (i = 0; i < n; ++i) {\n      for (var ki = kz[i], si = sz[i] = new Array(m), j = 0, sij; j < m; ++j) {\n        si[j] = sij = [0, +value(data[j], ki, j, data)];\n        sij.data = data[j];\n      }\n      si.key = ki;\n    }\n\n    for (i = 0, oz = order(sz); i < n; ++i) {\n      sz[oz[i]].index = i;\n    }\n\n    offset(sz, oz);\n    return sz;\n  }\n\n  stack.keys = function(_) {\n    return arguments.length ? (keys = typeof _ === \"function\" ? _ : constant(slice.call(_)), stack) : keys;\n  };\n\n  stack.value = function(_) {\n    return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), stack) : value;\n  };\n\n  stack.order = function(_) {\n    return arguments.length ? (order = _ == null ? orderNone : typeof _ === \"function\" ? _ : constant(slice.call(_)), stack) : order;\n  };\n\n  stack.offset = function(_) {\n    return arguments.length ? (offset = _ == null ? offsetNone : _, stack) : offset;\n  };\n\n  return stack;\n}\n","function RedBlackTree() {\n  this._ = null; // root node\n}\n\nexport function RedBlackNode(node) {\n  node.U = // parent node\n  node.C = // color - true for red, false for black\n  node.L = // left node\n  node.R = // right node\n  node.P = // previous node\n  node.N = null; // next node\n}\n\nRedBlackTree.prototype = {\n  constructor: RedBlackTree,\n\n  insert: function(after, node) {\n    var parent, grandpa, uncle;\n\n    if (after) {\n      node.P = after;\n      node.N = after.N;\n      if (after.N) after.N.P = node;\n      after.N = node;\n      if (after.R) {\n        after = after.R;\n        while (after.L) after = after.L;\n        after.L = node;\n      } else {\n        after.R = node;\n      }\n      parent = after;\n    } else if (this._) {\n      after = RedBlackFirst(this._);\n      node.P = null;\n      node.N = after;\n      after.P = after.L = node;\n      parent = after;\n    } else {\n      node.P = node.N = null;\n      this._ = node;\n      parent = null;\n    }\n    node.L = node.R = null;\n    node.U = parent;\n    node.C = true;\n\n    after = node;\n    while (parent && parent.C) {\n      grandpa = parent.U;\n      if (parent === grandpa.L) {\n        uncle = grandpa.R;\n        if (uncle && uncle.C) {\n          parent.C = uncle.C = false;\n          grandpa.C = true;\n          after = grandpa;\n        } else {\n          if (after === parent.R) {\n            RedBlackRotateLeft(this, parent);\n            after = parent;\n            parent = after.U;\n          }\n          parent.C = false;\n          grandpa.C = true;\n          RedBlackRotateRight(this, grandpa);\n        }\n      } else {\n        uncle = grandpa.L;\n        if (uncle && uncle.C) {\n          parent.C = uncle.C = false;\n          grandpa.C = true;\n          after = grandpa;\n        } else {\n          if (after === parent.L) {\n            RedBlackRotateRight(this, parent);\n            after = parent;\n            parent = after.U;\n          }\n          parent.C = false;\n          grandpa.C = true;\n          RedBlackRotateLeft(this, grandpa);\n        }\n      }\n      parent = after.U;\n    }\n    this._.C = false;\n  },\n\n  remove: function(node) {\n    if (node.N) node.N.P = node.P;\n    if (node.P) node.P.N = node.N;\n    node.N = node.P = null;\n\n    var parent = node.U,\n        sibling,\n        left = node.L,\n        right = node.R,\n        next,\n        red;\n\n    if (!left) next = right;\n    else if (!right) next = left;\n    else next = RedBlackFirst(right);\n\n    if (parent) {\n      if (parent.L === node) parent.L = next;\n      else parent.R = next;\n    } else {\n      this._ = next;\n    }\n\n    if (left && right) {\n      red = next.C;\n      next.C = node.C;\n      next.L = left;\n      left.U = next;\n      if (next !== right) {\n        parent = next.U;\n        next.U = node.U;\n        node = next.R;\n        parent.L = node;\n        next.R = right;\n        right.U = next;\n      } else {\n        next.U = parent;\n        parent = next;\n        node = next.R;\n      }\n    } else {\n      red = node.C;\n      node = next;\n    }\n\n    if (node) node.U = parent;\n    if (red) return;\n    if (node && node.C) { node.C = false; return; }\n\n    do {\n      if (node === this._) break;\n      if (node === parent.L) {\n        sibling = parent.R;\n        if (sibling.C) {\n          sibling.C = false;\n          parent.C = true;\n          RedBlackRotateLeft(this, parent);\n          sibling = parent.R;\n        }\n        if ((sibling.L && sibling.L.C)\n            || (sibling.R && sibling.R.C)) {\n          if (!sibling.R || !sibling.R.C) {\n            sibling.L.C = false;\n            sibling.C = true;\n            RedBlackRotateRight(this, sibling);\n            sibling = parent.R;\n          }\n          sibling.C = parent.C;\n          parent.C = sibling.R.C = false;\n          RedBlackRotateLeft(this, parent);\n          node = this._;\n          break;\n        }\n      } else {\n        sibling = parent.L;\n        if (sibling.C) {\n          sibling.C = false;\n          parent.C = true;\n          RedBlackRotateRight(this, parent);\n          sibling = parent.L;\n        }\n        if ((sibling.L && sibling.L.C)\n          || (sibling.R && sibling.R.C)) {\n          if (!sibling.L || !sibling.L.C) {\n            sibling.R.C = false;\n            sibling.C = true;\n            RedBlackRotateLeft(this, sibling);\n            sibling = parent.L;\n          }\n          sibling.C = parent.C;\n          parent.C = sibling.L.C = false;\n          RedBlackRotateRight(this, parent);\n          node = this._;\n          break;\n        }\n      }\n      sibling.C = true;\n      node = parent;\n      parent = parent.U;\n    } while (!node.C);\n\n    if (node) node.C = false;\n  }\n};\n\nfunction RedBlackRotateLeft(tree, node) {\n  var p = node,\n      q = node.R,\n      parent = p.U;\n\n  if (parent) {\n    if (parent.L === p) parent.L = q;\n    else parent.R = q;\n  } else {\n    tree._ = q;\n  }\n\n  q.U = parent;\n  p.U = q;\n  p.R = q.L;\n  if (p.R) p.R.U = p;\n  q.L = p;\n}\n\nfunction RedBlackRotateRight(tree, node) {\n  var p = node,\n      q = node.L,\n      parent = p.U;\n\n  if (parent) {\n    if (parent.L === p) parent.L = q;\n    else parent.R = q;\n  } else {\n    tree._ = q;\n  }\n\n  q.U = parent;\n  p.U = q;\n  p.L = q.R;\n  if (p.L) p.L.U = p;\n  q.R = p;\n}\n\nfunction RedBlackFirst(node) {\n  while (node.L) node = node.L;\n  return node;\n}\n\nexport default RedBlackTree;\n","import {cells, edges, epsilon} from \"./Diagram\";\n\nexport function createEdge(left, right, v0, v1) {\n  var edge = [null, null],\n      index = edges.push(edge) - 1;\n  edge.left = left;\n  edge.right = right;\n  if (v0) setEdgeEnd(edge, left, right, v0);\n  if (v1) setEdgeEnd(edge, right, left, v1);\n  cells[left.index].halfedges.push(index);\n  cells[right.index].halfedges.push(index);\n  return edge;\n}\n\nexport function createBorderEdge(left, v0, v1) {\n  var edge = [v0, v1];\n  edge.left = left;\n  return edge;\n}\n\nexport function setEdgeEnd(edge, left, right, vertex) {\n  if (!edge[0] && !edge[1]) {\n    edge[0] = vertex;\n    edge.left = left;\n    edge.right = right;\n  } else if (edge.left === right) {\n    edge[1] = vertex;\n  } else {\n    edge[0] = vertex;\n  }\n}\n\n// Liang–Barsky line clipping.\nfunction clipEdge(edge, x0, y0, x1, y1) {\n  var a = edge[0],\n      b = edge[1],\n      ax = a[0],\n      ay = a[1],\n      bx = b[0],\n      by = b[1],\n      t0 = 0,\n      t1 = 1,\n      dx = bx - ax,\n      dy = by - ay,\n      r;\n\n  r = x0 - ax;\n  if (!dx && r > 0) return;\n  r /= dx;\n  if (dx < 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  } else if (dx > 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  }\n\n  r = x1 - ax;\n  if (!dx && r < 0) return;\n  r /= dx;\n  if (dx < 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  } else if (dx > 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  }\n\n  r = y0 - ay;\n  if (!dy && r > 0) return;\n  r /= dy;\n  if (dy < 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  } else if (dy > 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  }\n\n  r = y1 - ay;\n  if (!dy && r < 0) return;\n  r /= dy;\n  if (dy < 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  } else if (dy > 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  }\n\n  if (!(t0 > 0) && !(t1 < 1)) return true; // TODO Better check?\n\n  if (t0 > 0) edge[0] = [ax + t0 * dx, ay + t0 * dy];\n  if (t1 < 1) edge[1] = [ax + t1 * dx, ay + t1 * dy];\n  return true;\n}\n\nfunction connectEdge(edge, x0, y0, x1, y1) {\n  var v1 = edge[1];\n  if (v1) return true;\n\n  var v0 = edge[0],\n      left = edge.left,\n      right = edge.right,\n      lx = left[0],\n      ly = left[1],\n      rx = right[0],\n      ry = right[1],\n      fx = (lx + rx) / 2,\n      fy = (ly + ry) / 2,\n      fm,\n      fb;\n\n  if (ry === ly) {\n    if (fx < x0 || fx >= x1) return;\n    if (lx > rx) {\n      if (!v0) v0 = [fx, y0];\n      else if (v0[1] >= y1) return;\n      v1 = [fx, y1];\n    } else {\n      if (!v0) v0 = [fx, y1];\n      else if (v0[1] < y0) return;\n      v1 = [fx, y0];\n    }\n  } else {\n    fm = (lx - rx) / (ry - ly);\n    fb = fy - fm * fx;\n    if (fm < -1 || fm > 1) {\n      if (lx > rx) {\n        if (!v0) v0 = [(y0 - fb) / fm, y0];\n        else if (v0[1] >= y1) return;\n        v1 = [(y1 - fb) / fm, y1];\n      } else {\n        if (!v0) v0 = [(y1 - fb) / fm, y1];\n        else if (v0[1] < y0) return;\n        v1 = [(y0 - fb) / fm, y0];\n      }\n    } else {\n      if (ly < ry) {\n        if (!v0) v0 = [x0, fm * x0 + fb];\n        else if (v0[0] >= x1) return;\n        v1 = [x1, fm * x1 + fb];\n      } else {\n        if (!v0) v0 = [x1, fm * x1 + fb];\n        else if (v0[0] < x0) return;\n        v1 = [x0, fm * x0 + fb];\n      }\n    }\n  }\n\n  edge[0] = v0;\n  edge[1] = v1;\n  return true;\n}\n\nexport function clipEdges(x0, y0, x1, y1) {\n  var i = edges.length,\n      edge;\n\n  while (i--) {\n    if (!connectEdge(edge = edges[i], x0, y0, x1, y1)\n        || !clipEdge(edge, x0, y0, x1, y1)\n        || !(Math.abs(edge[0][0] - edge[1][0]) > epsilon\n            || Math.abs(edge[0][1] - edge[1][1]) > epsilon)) {\n      delete edges[i];\n    }\n  }\n}\n","import {createBorderEdge} from \"./Edge\";\nimport {cells, edges, epsilon} from \"./Diagram\";\n\nexport function createCell(site) {\n  return cells[site.index] = {\n    site: site,\n    halfedges: []\n  };\n}\n\nfunction cellHalfedgeAngle(cell, edge) {\n  var site = cell.site,\n      va = edge.left,\n      vb = edge.right;\n  if (site === vb) vb = va, va = site;\n  if (vb) return Math.atan2(vb[1] - va[1], vb[0] - va[0]);\n  if (site === va) va = edge[1], vb = edge[0];\n  else va = edge[0], vb = edge[1];\n  return Math.atan2(va[0] - vb[0], vb[1] - va[1]);\n}\n\nexport function cellHalfedgeStart(cell, edge) {\n  return edge[+(edge.left !== cell.site)];\n}\n\nexport function cellHalfedgeEnd(cell, edge) {\n  return edge[+(edge.left === cell.site)];\n}\n\nexport function sortCellHalfedges() {\n  for (var i = 0, n = cells.length, cell, halfedges, j, m; i < n; ++i) {\n    if ((cell = cells[i]) && (m = (halfedges = cell.halfedges).length)) {\n      var index = new Array(m),\n          array = new Array(m);\n      for (j = 0; j < m; ++j) index[j] = j, array[j] = cellHalfedgeAngle(cell, edges[halfedges[j]]);\n      index.sort(function(i, j) { return array[j] - array[i]; });\n      for (j = 0; j < m; ++j) array[j] = halfedges[index[j]];\n      for (j = 0; j < m; ++j) halfedges[j] = array[j];\n    }\n  }\n}\n\nexport function clipCells(x0, y0, x1, y1) {\n  var nCells = cells.length,\n      iCell,\n      cell,\n      site,\n      iHalfedge,\n      halfedges,\n      nHalfedges,\n      start,\n      startX,\n      startY,\n      end,\n      endX,\n      endY,\n      cover = true;\n\n  for (iCell = 0; iCell < nCells; ++iCell) {\n    if (cell = cells[iCell]) {\n      site = cell.site;\n      halfedges = cell.halfedges;\n      iHalfedge = halfedges.length;\n\n      // Remove any dangling clipped edges.\n      while (iHalfedge--) {\n        if (!edges[halfedges[iHalfedge]]) {\n          halfedges.splice(iHalfedge, 1);\n        }\n      }\n\n      // Insert any border edges as necessary.\n      iHalfedge = 0, nHalfedges = halfedges.length;\n      while (iHalfedge < nHalfedges) {\n        end = cellHalfedgeEnd(cell, edges[halfedges[iHalfedge]]), endX = end[0], endY = end[1];\n        start = cellHalfedgeStart(cell, edges[halfedges[++iHalfedge % nHalfedges]]), startX = start[0], startY = start[1];\n        if (Math.abs(endX - startX) > epsilon || Math.abs(endY - startY) > epsilon) {\n          halfedges.splice(iHalfedge, 0, edges.push(createBorderEdge(site, end,\n              Math.abs(endX - x0) < epsilon && y1 - endY > epsilon ? [x0, Math.abs(startX - x0) < epsilon ? startY : y1]\n              : Math.abs(endY - y1) < epsilon && x1 - endX > epsilon ? [Math.abs(startY - y1) < epsilon ? startX : x1, y1]\n              : Math.abs(endX - x1) < epsilon && endY - y0 > epsilon ? [x1, Math.abs(startX - x1) < epsilon ? startY : y0]\n              : Math.abs(endY - y0) < epsilon && endX - x0 > epsilon ? [Math.abs(startY - y0) < epsilon ? startX : x0, y0]\n              : null)) - 1);\n          ++nHalfedges;\n        }\n      }\n\n      if (nHalfedges) cover = false;\n    }\n  }\n\n  // If there weren’t any edges, have the closest site cover the extent.\n  // It doesn’t matter which corner of the extent we measure!\n  if (cover) {\n    var dx, dy, d2, dc = Infinity;\n\n    for (iCell = 0, cover = null; iCell < nCells; ++iCell) {\n      if (cell = cells[iCell]) {\n        site = cell.site;\n        dx = site[0] - x0;\n        dy = site[1] - y0;\n        d2 = dx * dx + dy * dy;\n        if (d2 < dc) dc = d2, cover = cell;\n      }\n    }\n\n    if (cover) {\n      var v00 = [x0, y0], v01 = [x0, y1], v11 = [x1, y1], v10 = [x1, y0];\n      cover.halfedges.push(\n        edges.push(createBorderEdge(site = cover.site, v00, v01)) - 1,\n        edges.push(createBorderEdge(site, v01, v11)) - 1,\n        edges.push(createBorderEdge(site, v11, v10)) - 1,\n        edges.push(createBorderEdge(site, v10, v00)) - 1\n      );\n    }\n  }\n\n  // Lastly delete any cells with no edges; these were entirely clipped.\n  for (iCell = 0; iCell < nCells; ++iCell) {\n    if (cell = cells[iCell]) {\n      if (!cell.halfedges.length) {\n        delete cells[iCell];\n      }\n    }\n  }\n}\n","import {RedBlackNode} from \"./RedBlackTree\";\nimport {circles, epsilon2} from \"./Diagram\";\n\nvar circlePool = [];\n\nexport var firstCircle;\n\nfunction Circle() {\n  RedBlackNode(this);\n  this.x =\n  this.y =\n  this.arc =\n  this.site =\n  this.cy = null;\n}\n\nexport function attachCircle(arc) {\n  var lArc = arc.P,\n      rArc = arc.N;\n\n  if (!lArc || !rArc) return;\n\n  var lSite = lArc.site,\n      cSite = arc.site,\n      rSite = rArc.site;\n\n  if (lSite === rSite) return;\n\n  var bx = cSite[0],\n      by = cSite[1],\n      ax = lSite[0] - bx,\n      ay = lSite[1] - by,\n      cx = rSite[0] - bx,\n      cy = rSite[1] - by;\n\n  var d = 2 * (ax * cy - ay * cx);\n  if (d >= -epsilon2) return;\n\n  var ha = ax * ax + ay * ay,\n      hc = cx * cx + cy * cy,\n      x = (cy * ha - ay * hc) / d,\n      y = (ax * hc - cx * ha) / d;\n\n  var circle = circlePool.pop() || new Circle;\n  circle.arc = arc;\n  circle.site = cSite;\n  circle.x = x + bx;\n  circle.y = (circle.cy = y + by) + Math.sqrt(x * x + y * y); // y bottom\n\n  arc.circle = circle;\n\n  var before = null,\n      node = circles._;\n\n  while (node) {\n    if (circle.y < node.y || (circle.y === node.y && circle.x <= node.x)) {\n      if (node.L) node = node.L;\n      else { before = node.P; break; }\n    } else {\n      if (node.R) node = node.R;\n      else { before = node; break; }\n    }\n  }\n\n  circles.insert(before, circle);\n  if (!before) firstCircle = circle;\n}\n\nexport function detachCircle(arc) {\n  var circle = arc.circle;\n  if (circle) {\n    if (!circle.P) firstCircle = circle.N;\n    circles.remove(circle);\n    circlePool.push(circle);\n    RedBlackNode(circle);\n    arc.circle = null;\n  }\n}\n","import {RedBlackNode} from \"./RedBlackTree\";\nimport {createCell} from \"./Cell\";\nimport {attachCircle, detachCircle} from \"./Circle\";\nimport {createEdge, setEdgeEnd} from \"./Edge\";\nimport {beaches, epsilon} from \"./Diagram\";\n\nvar beachPool = [];\n\nfunction Beach() {\n  RedBlackNode(this);\n  this.edge =\n  this.site =\n  this.circle = null;\n}\n\nfunction createBeach(site) {\n  var beach = beachPool.pop() || new Beach;\n  beach.site = site;\n  return beach;\n}\n\nfunction detachBeach(beach) {\n  detachCircle(beach);\n  beaches.remove(beach);\n  beachPool.push(beach);\n  RedBlackNode(beach);\n}\n\nexport function removeBeach(beach) {\n  var circle = beach.circle,\n      x = circle.x,\n      y = circle.cy,\n      vertex = [x, y],\n      previous = beach.P,\n      next = beach.N,\n      disappearing = [beach];\n\n  detachBeach(beach);\n\n  var lArc = previous;\n  while (lArc.circle\n      && Math.abs(x - lArc.circle.x) < epsilon\n      && Math.abs(y - lArc.circle.cy) < epsilon) {\n    previous = lArc.P;\n    disappearing.unshift(lArc);\n    detachBeach(lArc);\n    lArc = previous;\n  }\n\n  disappearing.unshift(lArc);\n  detachCircle(lArc);\n\n  var rArc = next;\n  while (rArc.circle\n      && Math.abs(x - rArc.circle.x) < epsilon\n      && Math.abs(y - rArc.circle.cy) < epsilon) {\n    next = rArc.N;\n    disappearing.push(rArc);\n    detachBeach(rArc);\n    rArc = next;\n  }\n\n  disappearing.push(rArc);\n  detachCircle(rArc);\n\n  var nArcs = disappearing.length,\n      iArc;\n  for (iArc = 1; iArc < nArcs; ++iArc) {\n    rArc = disappearing[iArc];\n    lArc = disappearing[iArc - 1];\n    setEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex);\n  }\n\n  lArc = disappearing[0];\n  rArc = disappearing[nArcs - 1];\n  rArc.edge = createEdge(lArc.site, rArc.site, null, vertex);\n\n  attachCircle(lArc);\n  attachCircle(rArc);\n}\n\nexport function addBeach(site) {\n  var x = site[0],\n      directrix = site[1],\n      lArc,\n      rArc,\n      dxl,\n      dxr,\n      node = beaches._;\n\n  while (node) {\n    dxl = leftBreakPoint(node, directrix) - x;\n    if (dxl > epsilon) node = node.L; else {\n      dxr = x - rightBreakPoint(node, directrix);\n      if (dxr > epsilon) {\n        if (!node.R) {\n          lArc = node;\n          break;\n        }\n        node = node.R;\n      } else {\n        if (dxl > -epsilon) {\n          lArc = node.P;\n          rArc = node;\n        } else if (dxr > -epsilon) {\n          lArc = node;\n          rArc = node.N;\n        } else {\n          lArc = rArc = node;\n        }\n        break;\n      }\n    }\n  }\n\n  createCell(site);\n  var newArc = createBeach(site);\n  beaches.insert(lArc, newArc);\n\n  if (!lArc && !rArc) return;\n\n  if (lArc === rArc) {\n    detachCircle(lArc);\n    rArc = createBeach(lArc.site);\n    beaches.insert(newArc, rArc);\n    newArc.edge = rArc.edge = createEdge(lArc.site, newArc.site);\n    attachCircle(lArc);\n    attachCircle(rArc);\n    return;\n  }\n\n  if (!rArc) { // && lArc\n    newArc.edge = createEdge(lArc.site, newArc.site);\n    return;\n  }\n\n  // else lArc !== rArc\n  detachCircle(lArc);\n  detachCircle(rArc);\n\n  var lSite = lArc.site,\n      ax = lSite[0],\n      ay = lSite[1],\n      bx = site[0] - ax,\n      by = site[1] - ay,\n      rSite = rArc.site,\n      cx = rSite[0] - ax,\n      cy = rSite[1] - ay,\n      d = 2 * (bx * cy - by * cx),\n      hb = bx * bx + by * by,\n      hc = cx * cx + cy * cy,\n      vertex = [(cy * hb - by * hc) / d + ax, (bx * hc - cx * hb) / d + ay];\n\n  setEdgeEnd(rArc.edge, lSite, rSite, vertex);\n  newArc.edge = createEdge(lSite, site, null, vertex);\n  rArc.edge = createEdge(site, rSite, null, vertex);\n  attachCircle(lArc);\n  attachCircle(rArc);\n}\n\nfunction leftBreakPoint(arc, directrix) {\n  var site = arc.site,\n      rfocx = site[0],\n      rfocy = site[1],\n      pby2 = rfocy - directrix;\n\n  if (!pby2) return rfocx;\n\n  var lArc = arc.P;\n  if (!lArc) return -Infinity;\n\n  site = lArc.site;\n  var lfocx = site[0],\n      lfocy = site[1],\n      plby2 = lfocy - directrix;\n\n  if (!plby2) return lfocx;\n\n  var hl = lfocx - rfocx,\n      aby2 = 1 / pby2 - 1 / plby2,\n      b = hl / plby2;\n\n  if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx;\n\n  return (rfocx + lfocx) / 2;\n}\n\nfunction rightBreakPoint(arc, directrix) {\n  var rArc = arc.N;\n  if (rArc) return leftBreakPoint(rArc, directrix);\n  var site = arc.site;\n  return site[1] === directrix ? site[0] : Infinity;\n}\n","import {addBeach, removeBeach} from \"./Beach\";\nimport {sortCellHalfedges, cellHalfedgeStart, clipCells} from \"./Cell\";\nimport {firstCircle} from \"./Circle\";\nimport {clipEdges} from \"./Edge\";\nimport RedBlackTree from \"./RedBlackTree\";\n\nexport var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var beaches;\nexport var cells;\nexport var circles;\nexport var edges;\n\nfunction triangleArea(a, b, c) {\n  return (a[0] - c[0]) * (b[1] - a[1]) - (a[0] - b[0]) * (c[1] - a[1]);\n}\n\nfunction lexicographic(a, b) {\n  return b[1] - a[1]\n      || b[0] - a[0];\n}\n\nexport default function Diagram(sites, extent) {\n  var site = sites.sort(lexicographic).pop(),\n      x,\n      y,\n      circle;\n\n  edges = [];\n  cells = new Array(sites.length);\n  beaches = new RedBlackTree;\n  circles = new RedBlackTree;\n\n  while (true) {\n    circle = firstCircle;\n    if (site && (!circle || site[1] < circle.y || (site[1] === circle.y && site[0] < circle.x))) {\n      if (site[0] !== x || site[1] !== y) {\n        addBeach(site);\n        x = site[0], y = site[1];\n      }\n      site = sites.pop();\n    } else if (circle) {\n      removeBeach(circle.arc);\n    } else {\n      break;\n    }\n  }\n\n  sortCellHalfedges();\n\n  if (extent) {\n    var x0 = +extent[0][0],\n        y0 = +extent[0][1],\n        x1 = +extent[1][0],\n        y1 = +extent[1][1];\n    clipEdges(x0, y0, x1, y1);\n    clipCells(x0, y0, x1, y1);\n  }\n\n  this.edges = edges;\n  this.cells = cells;\n\n  beaches =\n  circles =\n  edges =\n  cells = null;\n}\n\nDiagram.prototype = {\n  constructor: Diagram,\n\n  polygons: function() {\n    var edges = this.edges;\n\n    return this.cells.map(function(cell) {\n      var polygon = cell.halfedges.map(function(i) { return cellHalfedgeStart(cell, edges[i]); });\n      polygon.data = cell.site.data;\n      return polygon;\n    });\n  },\n\n  triangles: function() {\n    var triangles = [],\n        edges = this.edges;\n\n    this.cells.forEach(function(cell, i) {\n      if (!(m = (halfedges = cell.halfedges).length)) return;\n      var site = cell.site,\n          halfedges,\n          j = -1,\n          m,\n          s0,\n          e1 = edges[halfedges[m - 1]],\n          s1 = e1.left === site ? e1.right : e1.left;\n\n      while (++j < m) {\n        s0 = s1;\n        e1 = edges[halfedges[j]];\n        s1 = e1.left === site ? e1.right : e1.left;\n        if (s0 && s1 && i < s0.index && i < s1.index && triangleArea(site, s0, s1) < 0) {\n          triangles.push([site.data, s0.data, s1.data]);\n        }\n      }\n    });\n\n    return triangles;\n  },\n\n  links: function() {\n    return this.edges.filter(function(edge) {\n      return edge.right;\n    }).map(function(edge) {\n      return {\n        source: edge.left.data,\n        target: edge.right.data\n      };\n    });\n  },\n\n  find: function(x, y, radius) {\n    var that = this, i0, i1 = that._found || 0, n = that.cells.length, cell;\n\n    // Use the previously-found cell, or start with an arbitrary one.\n    while (!(cell = that.cells[i1])) if (++i1 >= n) return null;\n    var dx = x - cell.site[0], dy = y - cell.site[1], d2 = dx * dx + dy * dy;\n\n    // Traverse the half-edges to find a closer cell, if any.\n    do {\n      cell = that.cells[i0 = i1], i1 = null;\n      cell.halfedges.forEach(function(e) {\n        var edge = that.edges[e], v = edge.left;\n        if ((v === cell.site || !v) && !(v = edge.right)) return;\n        var vx = x - v[0], vy = y - v[1], v2 = vx * vx + vy * vy;\n        if (v2 < d2) d2 = v2, i1 = v.index;\n      });\n    } while (i1 !== null);\n\n    that._found = i0;\n\n    return radius == null || d2 <= radius * radius ? cell.site : null;\n  }\n}\n","var rho = Math.SQRT2,\n    rho2 = 2,\n    rho4 = 4,\n    epsilon2 = 1e-12;\n\nfunction cosh(x) {\n  return ((x = Math.exp(x)) + 1 / x) / 2;\n}\n\nfunction sinh(x) {\n  return ((x = Math.exp(x)) - 1 / x) / 2;\n}\n\nfunction tanh(x) {\n  return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n}\n\n// p0 = [ux0, uy0, w0]\n// p1 = [ux1, uy1, w1]\nexport default function(p0, p1) {\n  var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],\n      ux1 = p1[0], uy1 = p1[1], w1 = p1[2],\n      dx = ux1 - ux0,\n      dy = uy1 - uy0,\n      d2 = dx * dx + dy * dy,\n      i,\n      S;\n\n  // Special case for u0 ≅ u1.\n  if (d2 < epsilon2) {\n    S = Math.log(w1 / w0) / rho;\n    i = function(t) {\n      return [\n        ux0 + t * dx,\n        uy0 + t * dy,\n        w0 * Math.exp(rho * t * S)\n      ];\n    }\n  }\n\n  // General case.\n  else {\n    var d1 = Math.sqrt(d2),\n        b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n        b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n        r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n        r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n    S = (r1 - r0) / rho;\n    i = function(t) {\n      var s = t * S,\n          coshr0 = cosh(r0),\n          u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n      return [\n        ux0 + u * dx,\n        uy0 + u * dy,\n        w0 * coshr0 / cosh(rho * s + r0)\n      ];\n    }\n  }\n\n  i.duration = S * 1000;\n\n  return i;\n}\n","export function Transform(k, x, y) {\n  this.k = k;\n  this.x = x;\n  this.y = y;\n}\n\nTransform.prototype = {\n  constructor: Transform,\n  scale: function(k) {\n    return k === 1 ? this : new Transform(this.k * k, this.x, this.y);\n  },\n  translate: function(x, y) {\n    return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y);\n  },\n  apply: function(point) {\n    return [point[0] * this.k + this.x, point[1] * this.k + this.y];\n  },\n  applyX: function(x) {\n    return x * this.k + this.x;\n  },\n  applyY: function(y) {\n    return y * this.k + this.y;\n  },\n  invert: function(location) {\n    return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k];\n  },\n  invertX: function(x) {\n    return (x - this.x) / this.k;\n  },\n  invertY: function(y) {\n    return (y - this.y) / this.k;\n  },\n  rescaleX: function(x) {\n    return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x));\n  },\n  rescaleY: function(y) {\n    return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y));\n  },\n  toString: function() {\n    return \"translate(\" + this.x + \",\" + this.y + \") scale(\" + this.k + \")\";\n  }\n};\n\nexport var identity = new Transform(1, 0, 0);\n\ntransform.prototype = Transform.prototype;\n\nexport default function transform(node) {\n  while (!node.__zoom) if (!(node = node.parentNode)) return identity;\n  return node.__zoom;\n}\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","/**\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","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 sourceEvent from \"./sourceEvent\";\nimport point from \"./point\";\n\nexport default function(node, touches, identifier) {\n  if (arguments.length < 3) identifier = touches, touches = sourceEvent().changedTouches;\n\n  for (var i = 0, n = touches ? touches.length : 0, touch; i < n; ++i) {\n    if ((touch = touches[i]).identifier === identifier) {\n      return point(node, touch);\n    }\n  }\n\n  return null;\n}\n","function none() {}\n\nexport default function(selector) {\n  return selector == null ? none : function() {\n    return this.querySelector(selector);\n  };\n}\n","import namespaces from \"./namespaces\";\n\nexport default function(name) {\n  var prefix = name += \"\", i = prefix.indexOf(\":\");\n  if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n  return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name;\n}\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","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","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 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","var frame = 0, // is an animation frame pending?\n    timeout = 0, // is a timeout pending?\n    interval = 0, // are any timers active?\n    pokeDelay = 1000, // how frequently we check for clock skew\n    taskHead,\n    taskTail,\n    clockLast = 0,\n    clockNow = 0,\n    clockSkew = 0,\n    clock = typeof performance === \"object\" && performance.now ? performance : Date,\n    setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n  return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n  clockNow = 0;\n}\n\nexport function Timer() {\n  this._call =\n  this._time =\n  this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n  constructor: Timer,\n  restart: function(callback, delay, time) {\n    if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n    time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n    if (!this._next && taskTail !== this) {\n      if (taskTail) taskTail._next = this;\n      else taskHead = this;\n      taskTail = this;\n    }\n    this._call = callback;\n    this._time = time;\n    sleep();\n  },\n  stop: function() {\n    if (this._call) {\n      this._call = null;\n      this._time = Infinity;\n      sleep();\n    }\n  }\n};\n\nexport function timer(callback, delay, time) {\n  var t = new Timer;\n  t.restart(callback, delay, time);\n  return t;\n}\n\nexport function timerFlush() {\n  now(); // Get the current time, if not already set.\n  ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n  var t = taskHead, e;\n  while (t) {\n    if ((e = clockNow - t._time) >= 0) t._call.call(null, e);\n    t = t._next;\n  }\n  --frame;\n}\n\nfunction wake() {\n  clockNow = (clockLast = clock.now()) + clockSkew;\n  frame = timeout = 0;\n  try {\n    timerFlush();\n  } finally {\n    frame = 0;\n    nap();\n    clockNow = 0;\n  }\n}\n\nfunction poke() {\n  var now = clock.now(), delay = now - clockLast;\n  if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n  var t0, t1 = taskHead, t2, time = Infinity;\n  while (t1) {\n    if (t1._call) {\n      if (time > t1._time) time = t1._time;\n      t0 = t1, t1 = t1._next;\n    } else {\n      t2 = t1._next, t1._next = null;\n      t1 = t0 ? t0._next = t2 : taskHead = t2;\n    }\n  }\n  taskTail = t0;\n  sleep(time);\n}\n\nfunction sleep(time) {\n  if (frame) return; // Soonest alarm already set, or will be.\n  if (timeout) timeout = clearTimeout(timeout);\n  var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n  if (delay > 24) {\n    if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n    if (interval) interval = clearInterval(interval);\n  } else {\n    if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n    frame = 1, setFrame(wake);\n  }\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","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\";\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","export default function(node) {\n  return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n      || (node.document && node) // node is a Window\n      || node.defaultView; // node is a Document\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","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 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 {Timer} from \"./timer.js\";\n\nexport default function(callback, delay, time) {\n  var t = new Timer;\n  delay = delay == null ? 0 : +delay;\n  t.restart(function(elapsed) {\n    t.stop();\n    callback(elapsed + delay);\n  }, delay, time);\n  return t;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer, timeout} from \"d3-timer\";\n\nvar emptyOn = dispatch(\"start\", \"end\", \"cancel\", \"interrupt\");\nvar emptyTween = [];\n\nexport var CREATED = 0;\nexport var SCHEDULED = 1;\nexport var STARTING = 2;\nexport var STARTED = 3;\nexport var RUNNING = 4;\nexport var ENDING = 5;\nexport var ENDED = 6;\n\nexport default function(node, name, id, index, group, timing) {\n  var schedules = node.__transition;\n  if (!schedules) node.__transition = {};\n  else if (id in schedules) return;\n  create(node, id, {\n    name: name,\n    index: index, // For context during callback.\n    group: group, // For context during callback.\n    on: emptyOn,\n    tween: emptyTween,\n    time: timing.time,\n    delay: timing.delay,\n    duration: timing.duration,\n    ease: timing.ease,\n    timer: null,\n    state: CREATED\n  });\n}\n\nexport function init(node, id) {\n  var schedule = get(node, id);\n  if (schedule.state > CREATED) throw new Error(\"too late; already scheduled\");\n  return schedule;\n}\n\nexport function set(node, id) {\n  var schedule = get(node, id);\n  if (schedule.state > STARTED) throw new Error(\"too late; already running\");\n  return schedule;\n}\n\nexport function get(node, id) {\n  var schedule = node.__transition;\n  if (!schedule || !(schedule = schedule[id])) throw new Error(\"transition not found\");\n  return schedule;\n}\n\nfunction create(node, id, self) {\n  var schedules = node.__transition,\n      tween;\n\n  // Initialize the self timer when the transition is created.\n  // Note the actual delay is not known until the first callback!\n  schedules[id] = self;\n  self.timer = timer(schedule, 0, self.time);\n\n  function schedule(elapsed) {\n    self.state = SCHEDULED;\n    self.timer.restart(start, self.delay, self.time);\n\n    // If the elapsed delay is less than our first sleep, start immediately.\n    if (self.delay <= elapsed) start(elapsed - self.delay);\n  }\n\n  function start(elapsed) {\n    var i, j, n, o;\n\n    // If the state is not SCHEDULED, then we previously errored on start.\n    if (self.state !== SCHEDULED) return stop();\n\n    for (i in schedules) {\n      o = schedules[i];\n      if (o.name !== self.name) continue;\n\n      // While this element already has a starting transition during this frame,\n      // defer starting an interrupting transition until that transition has a\n      // chance to tick (and possibly end); see d3/d3-transition#54!\n      if (o.state === STARTED) return timeout(start);\n\n      // Interrupt the active transition, if any.\n      if (o.state === RUNNING) {\n        o.state = ENDED;\n        o.timer.stop();\n        o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n        delete schedules[i];\n      }\n\n      // Cancel any pre-empted transitions.\n      else if (+i < id) {\n        o.state = ENDED;\n        o.timer.stop();\n        o.on.call(\"cancel\", node, node.__data__, o.index, o.group);\n        delete schedules[i];\n      }\n    }\n\n    // Defer the first tick to end of the current frame; see d3/d3#1576.\n    // Note the transition may be canceled after start and before the first tick!\n    // Note this must be scheduled before the start event; see d3/d3-transition#16!\n    // Assuming this is successful, subsequent callbacks go straight to tick.\n    timeout(function() {\n      if (self.state === STARTED) {\n        self.state = RUNNING;\n        self.timer.restart(tick, self.delay, self.time);\n        tick(elapsed);\n      }\n    });\n\n    // Dispatch the start event.\n    // Note this must be done before the tween are initialized.\n    self.state = STARTING;\n    self.on.call(\"start\", node, node.__data__, self.index, self.group);\n    if (self.state !== STARTING) return; // interrupted\n    self.state = STARTED;\n\n    // Initialize the tween, deleting null tween.\n    tween = new Array(n = self.tween.length);\n    for (i = 0, j = -1; i < n; ++i) {\n      if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n        tween[++j] = o;\n      }\n    }\n    tween.length = j + 1;\n  }\n\n  function tick(elapsed) {\n    var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n        i = -1,\n        n = tween.length;\n\n    while (++i < n) {\n      tween[i].call(node, t);\n    }\n\n    // Dispatch the end event.\n    if (self.state === ENDING) {\n      self.on.call(\"end\", node, node.__data__, self.index, self.group);\n      stop();\n    }\n  }\n\n  function stop() {\n    self.state = ENDED;\n    self.timer.stop();\n    delete schedules[id];\n    for (var i in schedules) return; // eslint-disable-line no-unused-vars\n    delete node.__transition;\n  }\n}\n","import {STARTING, ENDING, ENDED} from \"./transition/schedule.js\";\n\nexport default function(node, name) {\n  var schedules = node.__transition,\n      schedule,\n      active,\n      empty = true,\n      i;\n\n  if (!schedules) return;\n\n  name = name == null ? null : name + \"\";\n\n  for (i in schedules) {\n    if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\n    active = schedule.state > STARTING && schedule.state < ENDING;\n    schedule.state = ENDED;\n    schedule.timer.stop();\n    schedule.on.call(active ? \"interrupt\" : \"cancel\", node, node.__data__, schedule.index, schedule.group);\n    delete schedules[i];\n  }\n\n  if (empty) delete node.__transition;\n}\n","import decompose, {identity} from \"./decompose.js\";\n\nvar cssNode,\n    cssRoot,\n    cssView,\n    svgNode;\n\nexport function parseCss(value) {\n  if (value === \"none\") return identity;\n  if (!cssNode) cssNode = document.createElement(\"DIV\"), cssRoot = document.documentElement, cssView = document.defaultView;\n  cssNode.style.transform = value;\n  value = cssView.getComputedStyle(cssRoot.appendChild(cssNode), null).getPropertyValue(\"transform\");\n  cssRoot.removeChild(cssNode);\n  value = value.slice(7, -1).split(\",\");\n  return decompose(+value[0], +value[1], +value[2], +value[3], +value[4], +value[5]);\n}\n\nexport function parseSvg(value) {\n  if (value == null) return identity;\n  if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n  svgNode.setAttribute(\"transform\", value);\n  if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n  value = value.matrix;\n  return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n","var degrees = 180 / Math.PI;\n\nexport var identity = {\n  translateX: 0,\n  translateY: 0,\n  rotate: 0,\n  skewX: 0,\n  scaleX: 1,\n  scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n  var scaleX, scaleY, skewX;\n  if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n  if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n  if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n  if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n  return {\n    translateX: e,\n    translateY: f,\n    rotate: Math.atan2(b, a) * degrees,\n    skewX: Math.atan(skewX) * degrees,\n    scaleX: scaleX,\n    scaleY: scaleY\n  };\n}\n","import number from \"../number.js\";\nimport {parseCss, parseSvg} from \"./parse.js\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n  function pop(s) {\n    return s.length ? s.pop() + \" \" : \"\";\n  }\n\n  function translate(xa, ya, xb, yb, s, q) {\n    if (xa !== xb || ya !== yb) {\n      var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n      q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n    } else if (xb || yb) {\n      s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n    }\n  }\n\n  function rotate(a, b, s, q) {\n    if (a !== b) {\n      if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n      q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n    } else if (b) {\n      s.push(pop(s) + \"rotate(\" + b + degParen);\n    }\n  }\n\n  function skewX(a, b, s, q) {\n    if (a !== b) {\n      q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n    } else if (b) {\n      s.push(pop(s) + \"skewX(\" + b + degParen);\n    }\n  }\n\n  function scale(xa, ya, xb, yb, s, q) {\n    if (xa !== xb || ya !== yb) {\n      var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n      q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n    } else if (xb !== 1 || yb !== 1) {\n      s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n    }\n  }\n\n  return function(a, b) {\n    var s = [], // string constants and placeholders\n        q = []; // number interpolators\n    a = parse(a), b = parse(b);\n    translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n    rotate(a.rotate, b.rotate, s, q);\n    skewX(a.skewX, b.skewX, s, q);\n    scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n    a = b = null; // gc\n    return function(t) {\n      var i = -1, n = q.length, o;\n      while (++i < n) s[(o = q[i]).i] = o.x(t);\n      return s.join(\"\");\n    };\n  };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n","import {get, set} from \"./schedule.js\";\n\nfunction tweenRemove(id, name) {\n  var tween0, tween1;\n  return function() {\n    var schedule = set(this, id),\n        tween = schedule.tween;\n\n    // If this node shared tween with the previous node,\n    // just assign the updated shared tween and we’re done!\n    // Otherwise, copy-on-write.\n    if (tween !== tween0) {\n      tween1 = tween0 = tween;\n      for (var i = 0, n = tween1.length; i < n; ++i) {\n        if (tween1[i].name === name) {\n          tween1 = tween1.slice();\n          tween1.splice(i, 1);\n          break;\n        }\n      }\n    }\n\n    schedule.tween = tween1;\n  };\n}\n\nfunction tweenFunction(id, name, value) {\n  var tween0, tween1;\n  if (typeof value !== \"function\") throw new Error;\n  return function() {\n    var schedule = set(this, id),\n        tween = schedule.tween;\n\n    // If this node shared tween with the previous node,\n    // just assign the updated shared tween and we’re done!\n    // Otherwise, copy-on-write.\n    if (tween !== tween0) {\n      tween1 = (tween0 = tween).slice();\n      for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n        if (tween1[i].name === name) {\n          tween1[i] = t;\n          break;\n        }\n      }\n      if (i === n) tween1.push(t);\n    }\n\n    schedule.tween = tween1;\n  };\n}\n\nexport default function(name, value) {\n  var id = this._id;\n\n  name += \"\";\n\n  if (arguments.length < 2) {\n    var tween = get(this.node(), id).tween;\n    for (var i = 0, n = tween.length, t; i < n; ++i) {\n      if ((t = tween[i]).name === name) {\n        return t.value;\n      }\n    }\n    return null;\n  }\n\n  return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\n\nexport function tweenValue(transition, name, value) {\n  var id = transition._id;\n\n  transition.each(function() {\n    var schedule = set(this, id);\n    (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n  });\n\n  return function(node) {\n    return get(node, id).value[name];\n  };\n}\n","import {color} from \"d3-color\";\nimport {interpolateNumber, interpolateRgb, interpolateString} from \"d3-interpolate\";\n\nexport default function(a, b) {\n  var c;\n  return (typeof b === \"number\" ? interpolateNumber\n      : b instanceof color ? interpolateRgb\n      : (c = color(b)) ? (b = c, interpolateRgb)\n      : interpolateString)(a, b);\n}\n","import {interpolateTransformSvg as interpolateTransform} from \"d3-interpolate\";\nimport {namespace} from \"d3-selection\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction attrRemove(name) {\n  return function() {\n    this.removeAttribute(name);\n  };\n}\n\nfunction attrRemoveNS(fullname) {\n  return function() {\n    this.removeAttributeNS(fullname.space, fullname.local);\n  };\n}\n\nfunction attrConstant(name, interpolate, value1) {\n  var string00,\n      string1 = value1 + \"\",\n      interpolate0;\n  return function() {\n    var string0 = this.getAttribute(name);\n    return string0 === string1 ? null\n        : string0 === string00 ? interpolate0\n        : interpolate0 = interpolate(string00 = string0, value1);\n  };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n  var string00,\n      string1 = value1 + \"\",\n      interpolate0;\n  return function() {\n    var string0 = this.getAttributeNS(fullname.space, fullname.local);\n    return string0 === string1 ? null\n        : string0 === string00 ? interpolate0\n        : interpolate0 = interpolate(string00 = string0, value1);\n  };\n}\n\nfunction attrFunction(name, interpolate, value) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0, value1 = value(this), string1;\n    if (value1 == null) return void this.removeAttribute(name);\n    string0 = this.getAttribute(name);\n    string1 = value1 + \"\";\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n  };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0, value1 = value(this), string1;\n    if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n    string0 = this.getAttributeNS(fullname.space, fullname.local);\n    string1 = value1 + \"\";\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n  };\n}\n\nexport default function(name, value) {\n  var fullname = namespace(name), i = fullname === \"transform\" ? interpolateTransform : interpolate;\n  return this.attrTween(name, typeof value === \"function\"\n      ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, tweenValue(this, \"attr.\" + name, value))\n      : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname)\n      : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value));\n}\n","import {namespace} from \"d3-selection\";\n\nfunction attrInterpolate(name, i) {\n  return function(t) {\n    this.setAttribute(name, i.call(this, t));\n  };\n}\n\nfunction attrInterpolateNS(fullname, i) {\n  return function(t) {\n    this.setAttributeNS(fullname.space, fullname.local, i.call(this, t));\n  };\n}\n\nfunction attrTweenNS(fullname, value) {\n  var t0, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i);\n    return t0;\n  }\n  tween._value = value;\n  return tween;\n}\n\nfunction attrTween(name, value) {\n  var t0, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i);\n    return t0;\n  }\n  tween._value = value;\n  return tween;\n}\n\nexport default function(name, value) {\n  var key = \"attr.\" + name;\n  if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n  if (value == null) return this.tween(key, null);\n  if (typeof value !== \"function\") throw new Error;\n  var fullname = namespace(name);\n  return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n","import {get, init} from \"./schedule.js\";\n\nfunction delayFunction(id, value) {\n  return function() {\n    init(this, id).delay = +value.apply(this, arguments);\n  };\n}\n\nfunction delayConstant(id, value) {\n  return value = +value, function() {\n    init(this, id).delay = value;\n  };\n}\n\nexport default function(value) {\n  var id = this._id;\n\n  return arguments.length\n      ? this.each((typeof value === \"function\"\n          ? delayFunction\n          : delayConstant)(id, value))\n      : get(this.node(), id).delay;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction durationFunction(id, value) {\n  return function() {\n    set(this, id).duration = +value.apply(this, arguments);\n  };\n}\n\nfunction durationConstant(id, value) {\n  return value = +value, function() {\n    set(this, id).duration = value;\n  };\n}\n\nexport default function(value) {\n  var id = this._id;\n\n  return arguments.length\n      ? this.each((typeof value === \"function\"\n          ? durationFunction\n          : durationConstant)(id, value))\n      : get(this.node(), id).duration;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction easeConstant(id, value) {\n  if (typeof value !== \"function\") throw new Error;\n  return function() {\n    set(this, id).ease = value;\n  };\n}\n\nexport default function(value) {\n  var id = this._id;\n\n  return arguments.length\n      ? this.each(easeConstant(id, value))\n      : get(this.node(), id).ease;\n}\n","import {get, set, init} from \"./schedule.js\";\n\nfunction start(name) {\n  return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n    var i = t.indexOf(\".\");\n    if (i >= 0) t = t.slice(0, i);\n    return !t || t === \"start\";\n  });\n}\n\nfunction onFunction(id, name, listener) {\n  var on0, on1, sit = start(name) ? init : set;\n  return function() {\n    var schedule = sit(this, id),\n        on = schedule.on;\n\n    // If this node shared a dispatch with the previous node,\n    // just assign the updated shared dispatch and we’re done!\n    // Otherwise, copy-on-write.\n    if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n    schedule.on = on1;\n  };\n}\n\nexport default function(name, listener) {\n  var id = this._id;\n\n  return arguments.length < 2\n      ? get(this.node(), id).on.on(name)\n      : this.each(onFunction(id, name, listener));\n}\n","function removeFunction(id) {\n  return function() {\n    var parent = this.parentNode;\n    for (var i in this.__transition) if (+i !== id) return;\n    if (parent) parent.removeChild(this);\n  };\n}\n\nexport default function() {\n  return this.on(\"end.remove\", removeFunction(this._id));\n}\n","import {selection} from \"d3-selection\";\n\nvar Selection = selection.prototype.constructor;\n\nexport default function() {\n  return new Selection(this._groups, this._parents);\n}\n","import {interpolateTransformCss as interpolateTransform} from \"d3-interpolate\";\nimport {style} from \"d3-selection\";\nimport {set} from \"./schedule.js\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction styleNull(name, interpolate) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0 = style(this, name),\n        string1 = (this.style.removeProperty(name), style(this, name));\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : interpolate0 = interpolate(string00 = string0, string10 = string1);\n  };\n}\n\nfunction styleRemove(name) {\n  return function() {\n    this.style.removeProperty(name);\n  };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n  var string00,\n      string1 = value1 + \"\",\n      interpolate0;\n  return function() {\n    var string0 = style(this, name);\n    return string0 === string1 ? null\n        : string0 === string00 ? interpolate0\n        : interpolate0 = interpolate(string00 = string0, value1);\n  };\n}\n\nfunction styleFunction(name, interpolate, value) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0 = style(this, name),\n        value1 = value(this),\n        string1 = value1 + \"\";\n    if (value1 == null) string1 = value1 = (this.style.removeProperty(name), style(this, name));\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n  };\n}\n\nfunction styleMaybeRemove(id, name) {\n  var on0, on1, listener0, key = \"style.\" + name, event = \"end.\" + key, remove;\n  return function() {\n    var schedule = set(this, id),\n        on = schedule.on,\n        listener = schedule.value[key] == null ? remove || (remove = styleRemove(name)) : undefined;\n\n    // If this node shared a dispatch with the previous node,\n    // just assign the updated shared dispatch and we’re done!\n    // Otherwise, copy-on-write.\n    if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener);\n\n    schedule.on = on1;\n  };\n}\n\nexport default function(name, value, priority) {\n  var i = (name += \"\") === \"transform\" ? interpolateTransform : interpolate;\n  return value == null ? this\n      .styleTween(name, styleNull(name, i))\n      .on(\"end.style.\" + name, styleRemove(name))\n    : typeof value === \"function\" ? this\n      .styleTween(name, styleFunction(name, i, tweenValue(this, \"style.\" + name, value)))\n      .each(styleMaybeRemove(this._id, name))\n    : this\n      .styleTween(name, styleConstant(name, i, value), priority)\n      .on(\"end.style.\" + name, null);\n}\n","function styleInterpolate(name, i, priority) {\n  return function(t) {\n    this.style.setProperty(name, i.call(this, t), priority);\n  };\n}\n\nfunction styleTween(name, value, priority) {\n  var t, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority);\n    return t;\n  }\n  tween._value = value;\n  return tween;\n}\n\nexport default function(name, value, priority) {\n  var key = \"style.\" + (name += \"\");\n  if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n  if (value == null) return this.tween(key, null);\n  if (typeof value !== \"function\") throw new Error;\n  return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n}\n","function textInterpolate(i) {\n  return function(t) {\n    this.textContent = i.call(this, t);\n  };\n}\n\nfunction textTween(value) {\n  var t0, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t0 = (i0 = i) && textInterpolate(i);\n    return t0;\n  }\n  tween._value = value;\n  return tween;\n}\n\nexport default function(value) {\n  var key = \"text\";\n  if (arguments.length < 1) return (key = this.tween(key)) && key._value;\n  if (value == null) return this.tween(key, null);\n  if (typeof value !== \"function\") throw new Error;\n  return this.tween(key, textTween(value));\n}\n","import {selection} from \"d3-selection\";\nimport transition_attr from \"./attr.js\";\nimport transition_attrTween from \"./attrTween.js\";\nimport transition_delay from \"./delay.js\";\nimport transition_duration from \"./duration.js\";\nimport transition_ease from \"./ease.js\";\nimport transition_filter from \"./filter.js\";\nimport transition_merge from \"./merge.js\";\nimport transition_on from \"./on.js\";\nimport transition_remove from \"./remove.js\";\nimport transition_select from \"./select.js\";\nimport transition_selectAll from \"./selectAll.js\";\nimport transition_selection from \"./selection.js\";\nimport transition_style from \"./style.js\";\nimport transition_styleTween from \"./styleTween.js\";\nimport transition_text from \"./text.js\";\nimport transition_textTween from \"./textTween.js\";\nimport transition_transition from \"./transition.js\";\nimport transition_tween from \"./tween.js\";\nimport transition_end from \"./end.js\";\n\nvar id = 0;\n\nexport function Transition(groups, parents, name, id) {\n  this._groups = groups;\n  this._parents = parents;\n  this._name = name;\n  this._id = id;\n}\n\nexport default function transition(name) {\n  return selection().transition(name);\n}\n\nexport function newId() {\n  return ++id;\n}\n\nvar selection_prototype = selection.prototype;\n\nTransition.prototype = transition.prototype = {\n  constructor: Transition,\n  select: transition_select,\n  selectAll: transition_selectAll,\n  filter: transition_filter,\n  merge: transition_merge,\n  selection: transition_selection,\n  transition: transition_transition,\n  call: selection_prototype.call,\n  nodes: selection_prototype.nodes,\n  node: selection_prototype.node,\n  size: selection_prototype.size,\n  empty: selection_prototype.empty,\n  each: selection_prototype.each,\n  on: transition_on,\n  attr: transition_attr,\n  attrTween: transition_attrTween,\n  style: transition_style,\n  styleTween: transition_styleTween,\n  text: transition_text,\n  textTween: transition_textTween,\n  remove: transition_remove,\n  tween: transition_tween,\n  delay: transition_delay,\n  duration: transition_duration,\n  ease: transition_ease,\n  end: transition_end\n};\n","import {selector} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n  var name = this._name,\n      id = this._id;\n\n  if (typeof select !== \"function\") select = selector(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n      if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n        if (\"__data__\" in node) subnode.__data__ = node.__data__;\n        subgroup[i] = subnode;\n        schedule(subgroup[i], name, id, i, subgroup, get(node, id));\n      }\n    }\n  }\n\n  return new Transition(subgroups, this._parents, name, id);\n}\n","import {selectorAll} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n  var name = this._name,\n      id = this._id;\n\n  if (typeof select !== \"function\") select = selectorAll(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        for (var children = select.call(node, node.__data__, i, group), child, inherit = get(node, id), k = 0, l = children.length; k < l; ++k) {\n          if (child = children[k]) {\n            schedule(child, name, id, k, children, inherit);\n          }\n        }\n        subgroups.push(children);\n        parents.push(node);\n      }\n    }\n  }\n\n  return new Transition(subgroups, parents, name, id);\n}\n","import {matcher} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\n\nexport default function(match) {\n  if (typeof match !== \"function\") match = matcher(match);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n      if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n        subgroup.push(node);\n      }\n    }\n  }\n\n  return new Transition(subgroups, this._parents, this._name, this._id);\n}\n","import {Transition} from \"./index.js\";\n\nexport default function(transition) {\n  if (transition._id !== this._id) throw new Error;\n\n  for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n    for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n      if (node = group0[i] || group1[i]) {\n        merge[i] = node;\n      }\n    }\n  }\n\n  for (; j < m0; ++j) {\n    merges[j] = groups0[j];\n  }\n\n  return new Transition(merges, this._parents, this._name, this._id);\n}\n","import {Transition, newId} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function() {\n  var name = this._name,\n      id0 = this._id,\n      id1 = newId();\n\n  for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        var inherit = get(node, id0);\n        schedule(node, name, id1, i, group, {\n          time: inherit.time + inherit.delay + inherit.duration,\n          delay: 0,\n          duration: inherit.duration,\n          ease: inherit.ease\n        });\n      }\n    }\n  }\n\n  return new Transition(groups, this._parents, name, id1);\n}\n","import {tweenValue} from \"./tween.js\";\n\nfunction textConstant(value) {\n  return function() {\n    this.textContent = value;\n  };\n}\n\nfunction textFunction(value) {\n  return function() {\n    var value1 = value(this);\n    this.textContent = value1 == null ? \"\" : value1;\n  };\n}\n\nexport default function(value) {\n  return this.tween(\"text\", typeof value === \"function\"\n      ? textFunction(tweenValue(this, \"text\", value))\n      : textConstant(value == null ? \"\" : value + \"\"));\n}\n","import {set} from \"./schedule.js\";\n\nexport default function() {\n  var on0, on1, that = this, id = that._id, size = that.size();\n  return new Promise(function(resolve, reject) {\n    var cancel = {value: reject},\n        end = {value: function() { if (--size === 0) resolve(); }};\n\n    that.each(function() {\n      var schedule = set(this, id),\n          on = schedule.on;\n\n      // If this node shared a dispatch with the previous node,\n      // just assign the updated shared dispatch and we’re done!\n      // Otherwise, copy-on-write.\n      if (on !== on0) {\n        on1 = (on0 = on).copy();\n        on1._.cancel.push(cancel);\n        on1._.interrupt.push(cancel);\n        on1._.end.push(end);\n      }\n\n      schedule.on = on1;\n    });\n  });\n}\n","import {Transition, newId} from \"../transition/index.js\";\nimport schedule from \"../transition/schedule.js\";\nimport {easeCubicInOut} from \"d3-ease\";\nimport {now} from \"d3-timer\";\n\nvar defaultTiming = {\n  time: null, // Set on use.\n  delay: 0,\n  duration: 250,\n  ease: easeCubicInOut\n};\n\nfunction inherit(node, id) {\n  var timing;\n  while (!(timing = node.__transition) || !(timing = timing[id])) {\n    if (!(node = node.parentNode)) {\n      return defaultTiming.time = now(), defaultTiming;\n    }\n  }\n  return timing;\n}\n\nexport default function(name) {\n  var id,\n      timing;\n\n  if (name instanceof Transition) {\n    id = name._id, name = name._name;\n  } else {\n    id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + \"\";\n  }\n\n  for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        schedule(node, name, id, i, group, timing || inherit(node, id));\n      }\n    }\n  }\n\n  return new Transition(groups, this._parents, name, id);\n}\n","export function cubicIn(t) {\n  return t * t * t;\n}\n\nexport function cubicOut(t) {\n  return --t * t * t + 1;\n}\n\nexport function cubicInOut(t) {\n  return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n","import {selection} from \"d3-selection\";\nimport selection_interrupt from \"./interrupt.js\";\nimport selection_transition from \"./transition.js\";\n\nselection.prototype.interrupt = selection_interrupt;\nselection.prototype.transition = selection_transition;\n","import interrupt from \"../interrupt.js\";\n\nexport default function(name) {\n  return this.each(function() {\n    interrupt(this, name);\n  });\n}\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 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(values, valueof) {\n  var n = values.length,\n      i = -1,\n      value,\n      sum = 0;\n\n  if (valueof == null) {\n    while (++i < n) {\n      if (value = +values[i]) sum += value; // Note: zero and null are equivalent.\n    }\n  }\n\n  else {\n    while (++i < n) {\n      if (value = +valueof(values[i], i, values)) sum += value;\n    }\n  }\n\n  return sum;\n}\n","var noop = {value: function() {}};\n\nfunction dispatch() {\n  for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n    if (!(t = arguments[i] + \"\") || (t in _) || /[\\s.]/.test(t)) throw new Error(\"illegal type: \" + t);\n    _[t] = [];\n  }\n  return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n  this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n  return typenames.trim().split(/^|\\s+/).map(function(t) {\n    var name = \"\", i = t.indexOf(\".\");\n    if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n    if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n    return {type: t, name: name};\n  });\n}\n\nDispatch.prototype = dispatch.prototype = {\n  constructor: Dispatch,\n  on: function(typename, callback) {\n    var _ = this._,\n        T = parseTypenames(typename + \"\", _),\n        t,\n        i = -1,\n        n = T.length;\n\n    // If no callback was specified, return the callback of the given type and name.\n    if (arguments.length < 2) {\n      while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n      return;\n    }\n\n    // If a type was specified, set the callback for the given type and name.\n    // Otherwise, if a null callback was specified, remove callbacks of the given name.\n    if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n    while (++i < n) {\n      if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n      else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n    }\n\n    return this;\n  },\n  copy: function() {\n    var copy = {}, _ = this._;\n    for (var t in _) copy[t] = _[t].slice();\n    return new Dispatch(copy);\n  },\n  call: function(type, that) {\n    if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n    if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n    for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n  },\n  apply: function(type, that, args) {\n    if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n    for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n  }\n};\n\nfunction get(type, name) {\n  for (var i = 0, n = type.length, c; i < n; ++i) {\n    if ((c = type[i]).name === name) {\n      return c.value;\n    }\n  }\n}\n\nfunction set(type, name, callback) {\n  for (var i = 0, n = type.length; i < n; ++i) {\n    if (type[i].name === name) {\n      type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n      break;\n    }\n  }\n  if (callback != null) type.push({name: name, value: callback});\n  return type;\n}\n\nexport default dispatch;\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","import {map} from \"d3-collection\";\nimport {slice} from \"./array\";\nimport {initRange} from \"./init\";\n\nexport var implicit = {name: \"implicit\"};\n\nexport default function ordinal() {\n  var index = map(),\n      domain = [],\n      range = [],\n      unknown = implicit;\n\n  function scale(d) {\n    var key = d + \"\", i = index.get(key);\n    if (!i) {\n      if (unknown !== implicit) return unknown;\n      index.set(key, i = domain.push(d));\n    }\n    return range[(i - 1) % range.length];\n  }\n\n  scale.domain = function(_) {\n    if (!arguments.length) return domain.slice();\n    domain = [], index = map();\n    var i = -1, n = _.length, d, key;\n    while (++i < n) if (!index.has(key = (d = _[i]) + \"\")) index.set(key, domain.push(d));\n    return scale;\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (range = slice.call(_), scale) : range.slice();\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  scale.copy = function() {\n    return ordinal(domain, range).unknown(unknown);\n  };\n\n  initRange.apply(scale, arguments);\n\n  return scale;\n}\n","import {range as sequence} from \"d3-array\";\nimport {initRange} from \"./init\";\nimport ordinal from \"./ordinal\";\n\nexport default function band() {\n  var scale = ordinal().unknown(undefined),\n      domain = scale.domain,\n      ordinalRange = scale.range,\n      range = [0, 1],\n      step,\n      bandwidth,\n      round = false,\n      paddingInner = 0,\n      paddingOuter = 0,\n      align = 0.5;\n\n  delete scale.unknown;\n\n  function rescale() {\n    var n = domain().length,\n        reverse = range[1] < range[0],\n        start = range[reverse - 0],\n        stop = range[1 - reverse];\n    step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);\n    if (round) step = Math.floor(step);\n    start += (stop - start - step * (n - paddingInner)) * align;\n    bandwidth = step * (1 - paddingInner);\n    if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);\n    var values = sequence(n).map(function(i) { return start + step * i; });\n    return ordinalRange(reverse ? values.reverse() : values);\n  }\n\n  scale.domain = function(_) {\n    return arguments.length ? (domain(_), rescale()) : domain();\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (range = [+_[0], +_[1]], rescale()) : range.slice();\n  };\n\n  scale.rangeRound = function(_) {\n    return range = [+_[0], +_[1]], round = true, rescale();\n  };\n\n  scale.bandwidth = function() {\n    return bandwidth;\n  };\n\n  scale.step = function() {\n    return step;\n  };\n\n  scale.round = function(_) {\n    return arguments.length ? (round = !!_, rescale()) : round;\n  };\n\n  scale.padding = function(_) {\n    return arguments.length ? (paddingInner = Math.min(1, paddingOuter = +_), rescale()) : paddingInner;\n  };\n\n  scale.paddingInner = function(_) {\n    return arguments.length ? (paddingInner = Math.min(1, _), rescale()) : paddingInner;\n  };\n\n  scale.paddingOuter = function(_) {\n    return arguments.length ? (paddingOuter = +_, rescale()) : paddingOuter;\n  };\n\n  scale.align = function(_) {\n    return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;\n  };\n\n  scale.copy = function() {\n    return band(domain(), range)\n        .round(round)\n        .paddingInner(paddingInner)\n        .paddingOuter(paddingOuter)\n        .align(align);\n  };\n\n  return initRange.apply(rescale(), arguments);\n}\n\nfunction pointish(scale) {\n  var copy = scale.copy;\n\n  scale.padding = scale.paddingOuter;\n  delete scale.paddingInner;\n  delete scale.paddingOuter;\n\n  scale.copy = function() {\n    return pointish(copy());\n  };\n\n  return scale;\n}\n\nexport function point() {\n  return pointish(band.apply(null, arguments).paddingInner(1));\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","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","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"],"sourceRoot":""}