All Downloads are FREE. Search and download functionalities are using the official Maven repository.

web-interface.assets.b6c24c3d-6.3bfbc2b154025cf53e35.js.map Maven / Gradle / Ivy

There is a newer version: 6.0.5
Show newest version
{"version":3,"sources":["webpack:///./node_modules/d3/d3.js"],"names":["d3","version","d3_arraySlice","slice","d3_array","list","call","d3_document","this","document","d3_documentElement","node","ownerDocument","documentElement","d3_window","defaultView","childNodes","nodeType","e","i","length","array","Array","Date","now","createElement","style","setProperty","error","d3_element_prototype","Element","prototype","d3_element_setAttribute","setAttribute","d3_element_setAttributeNS","setAttributeNS","d3_style_prototype","CSSStyleDeclaration","d3_style_setProperty","name","value","space","local","priority","d3_ascending","a","b","NaN","d3_number","x","d3_numeric","isNaN","d3_bisector","compare","left","lo","hi","arguments","mid","right","ascending","descending","min","f","n","max","extent","c","sum","s","mean","j","quantile","values","p","H","h","Math","floor","v","median","numbers","push","sort","variance","d","m","deviation","apply","sqrt","d3_bisect","d3_transposeLength","bisectLeft","bisect","bisectRight","bisector","shuffle","i0","i1","t","random","permute","indexes","permutes","pairs","p1","transpose","matrix","row","zip","keys","map","key","entries","merge","arrays","merged","abs","d3_range_integerScale","k","d3_class","ctor","properties","Object","defineProperty","enumerable","d3_Map","_","create","range","start","stop","step","Infinity","Error","object","forEach","set","isArray","o","d3_map_escape","d3_map_unescape","d3_map_has","d3_map_remove","d3_map_keys","d3_map_size","size","d3_map_empty","d3_Set","d3_identity","d3_rebind","target","source","method","d3_vendorSymbol","charAt","toUpperCase","d3_vendorPrefixes","prefixName","has","get","remove","empty","nest","sortValues","rollup","sortKeys","mapType","depth","keyValue","setter","valuesByKey","sortKey","keyMap","order","add","behavior","rebind","d3_noop","d3_dispatch","d3_dispatch_event","dispatch","listeners","listenerByName","event","l","z","on","listener","indexOf","concat","d3_eventPreventDefault","preventDefault","d3_eventSource","sourceEvent","d3_eventDispatch","of","thiz","argumentz","e1","e0","type","hasOwnProperty","requote","replace","d3_requote_re","d3_subclass","__proto__","property","d3_selection","groups","d3_selectionPrototype","d3_select","querySelector","d3_selectAll","querySelectorAll","d3_selectMatches","d3_selectMatcher","matches","Sizzle","matchesSelector","selection","select","d3_selection_selector","selector","d3_selection_selectorAll","subgroup","subnode","group","subgroups","parentNode","__data__","selectAll","d3_nsXhtml","d3_nsPrefix","svg","xhtml","xlink","xml","xmlns","d3_selection_attr","ns","qualify","removeAttributeNS","removeAttribute","d3_collapse","trim","d3_selection_classedRe","RegExp","d3_selection_classes","split","d3_selection_classed","d3_selection_classedName","re","classList","getAttribute","lastIndex","test","d3_selection_style","removeProperty","d3_selection_property","d3_selection_creator","createElementNS","namespace","namespaceURI","d3_selectionRemove","parent","removeChild","d3_selection_dataNode","data","d3_selection_filter","d3_selection_sortComparator","comparator","d3_selection_each","callback","d3_selection_enter","d3_selection_enterPrototype","prefix","attr","getAttributeNS","each","classed","contains","getComputedStyle","getPropertyValue","text","textContent","html","innerHTML","append","appendChild","insert","before","insertBefore","bind","groupData","nodeData","n0","updateNodes","enterNodes","exitNodes","nodeByKeyValue","keyValues","update","enter","exit","datum","filter","next","nextSibling","args","d3_selection_enterInsertBefore","j0","d3_selection_on","capture","wrap","d3_selection_onListener","d3_selection_onFilters","onRemove","removeEventListener","$","d3_selection_onFilter","addEventListener","match","upgroup","nodes","mouseenter","mouseleave","related","relatedTarget","compareDocumentPosition","d3_event_dragSelect","d3_event_dragId","d3_event_dragSuppress","click","w","suppressClick","off","setTimeout","mouse","container","d3_mousePoint","d3_mouse_bug44083","navigator","userAgent","changedTouches","ownerSVGElement","createSVGPoint","point","window","scrollX","scrollY","ctm","position","top","margin","padding","border","getScreenCTM","pageX","y","pageY","clientX","clientY","matrixTransform","inverse","rect","getBoundingClientRect","clientLeft","clientTop","d3_behavior_dragTouchId","identifier","touch","touches","drag","origin","mousedown","dragstart","touchstart","id","subject","move","end","dragOffset","that","correspondingElement","dragged","dragId","dragName","dragSubject","moved","ended","dragRestore","position0","dx","dy","position1","ε","ε2","π","PI","τ","τε","halfπ","d3_radians","d3_degrees","d3_sgn","d3_cross2d","d3_acos","acos","d3_asin","asin","d3_cosh","exp","d3_haversin","sin","ρ","SQRT2","interpolateZoom","p0","S","ux0","uy0","w0","ux1","uy1","w1","d2","log","d1","b0","b1","r0","r1","coshr0","u","d3_sinh","duration","zoom","translate0","center0","center","mousewheelTimer","touchtime","x0","x1","y0","y1","view","scaleExtent","d3_behavior_zoomInfinity","zooming","mousemove","mouseup","g","mousedowned","d3_behavior_zoomWheel","mousewheeled","dblclicked","touchstarted","location","scaleTo","translateTo","zoomTo","__chart__","pow","transition","rescale","domain","invert","zoomstarted","zoomed","scale","translate","zoomended","location0","d3_selection_interrupt","scale0","locations0","distance0","zoomName","touchmove","touchend","targets","relocate","started","changed","LN2","q","l0","l1","distance1","scale1","clearTimeout","d3_behavior_zoomDelta","shiftKey","ceil","deltaY","deltaMode","wheelDelta","detail","view1","d3_transitionInheritId","tween","cx","cy","copy","d3_color","d3_hsl","d3_rgb_parse","d3_rgb_hsl","color","toString","rgb","hsl","d3_hslPrototype","d3_hsl_rgb","m1","m2","vv","round","d3_rgb","d3_hcl","d3_lab_hcl","d3_lab","d3_rgb_lab","r","brighter","darker","hcl","d3_hclPrototype","d3_hcl_lab","cos","d3_lab_K","lab","d3_lab_X","d3_lab_Z","d3_labPrototype","d3_lab_rgb","d3_xyz_rgb","d3_lab_xyz","atan2","d3_xyz_lab","d3_rgbNumber","d3_rgbString","d3_rgbPrototype","d3_rgb_hex","format","exec","toLowerCase","parseFloat","d3_rgb_parseNumber","d3_rgb_names","parseInt","d3_rgb_xyz","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","d3_functor","d3_xhrType","response","url","mimeType","d3_xhr","xhr","headers","request","XMLHttpRequest","responseType","respond","result","status","responseText","d3_xhrHasResponse","load","XDomainRequest","onload","onerror","onreadystatechange","readyState","onprogress","progress","header","send","open","setRequestHeader","overrideMimeType","beforesend","abort","d3_xhr_fixCallback","functor","dsv","delimiter","reFormat","delimiterCode","charCodeAt","typedResponse","parse","formatRow","formatValue","join","parseRows","Function","JSON","stringify","eol","EOL","EOF","rows","N","I","token","formatRows","fieldSet","fields","field","csv","tsv","d3_timer_queueHead","d3_timer_queueTail","d3_timer_interval","d3_timer_timeout","d3_timer_frame","d3_timer","delay","then","time","timer","d3_timer_step","d3_timer_mark","d3_timer_sweep","isFinite","t0","t1","d3_format_precision","LN10","flush","d3_formatPrefixes","symbol","d3_locale_numberFormat","locale","locale_decimal","decimal","locale_thousands","thousands","locale_grouping","grouping","locale_currency","currency","formatGroup","width","substring","reverse","specifier","d3_format_re","fill","align","sign","zfill","comma","precision","suffix","integer","exponent","d3_format_types","d3_format_typeDefault","zcomma","fullSuffix","negative","unit","formatPrefix","after","lastIndexOf","String","fromCharCode","X","toPrecision","toExponential","toFixed","d3_time","d3_date","d3_date_utc","UTC","getDate","getUTCDate","getDay","getUTCDay","getFullYear","getUTCFullYear","getHours","getUTCHours","getMilliseconds","getUTCMilliseconds","getMinutes","getUTCMinutes","getMonth","getUTCMonth","getSeconds","getUTCSeconds","getTime","getTimezoneOffset","valueOf","setDate","d3_time_prototype","setUTCDate","setDay","setUTCDay","setFullYear","setUTCFullYear","setHours","setUTCHours","setMilliseconds","setUTCMilliseconds","setMinutes","setUTCMinutes","setMonth","setUTCMonth","setSeconds","setUTCSeconds","setTime","d3_time_interval","number","date","d0","offset","dt","times","utc","d3_time_interval_utc","d3_locale_timeFormat","locale_dateTime","dateTime","locale_date","locale_time","locale_periods","periods","locale_days","days","locale_shortDays","shortDays","locale_months","months","locale_shortMonths","shortMonths","d3_time_format","template","string","d3_time_formatPads","d3_time_formats","M","L","Z","d3_time_parse","localZ","W","U","d3_time_parsers","multi","d3_time_formatMulti","d3_time_periodLookup","d3_time_dayRe","d3_time_formatRe","d3_time_dayLookup","d3_time_formatLookup","d3_time_dayAbbrevRe","d3_time_dayAbbrevLookup","d3_time_monthRe","d3_time_monthLookup","d3_time_monthAbbrevRe","d3_time_monthAbbrevLookup","A","B","d3_time_formatPad","dayOfYear","sundayOfYear","mondayOfYear","Y","d3_time_zone","d3_time_parseDay","d3_time_parseHour24","d3_time_parseDayOfYear","d3_time_parseMilliseconds","d3_time_parseMonthNumber","d3_time_parseMinutes","d3_time_parseSeconds","d3_time_parseWeekNumberSunday","d3_time_parseWeekdayNumber","d3_time_parseWeekNumberMonday","d3_time_parseYear","d3_time_parseFullYear","d3_time_parseZone","d3_time_parseLiteralPercent","year","day","years","interval","week","sunday","weeks","weekOfYear","d3_time_numberRe","d3_time_percentRe","names","zs","zh","zm","formats","numberFormat","timeFormat","d3_locale_enUS","d3_adder","geo","d3_adderSum","d3_adderTemp","reset","bv","av","d3_geo_streamGeometry","geometry","d3_geo_streamGeometryType","stream","d3_geo_streamObjectType","Feature","feature","FeatureCollection","features","Sphere","sphere","Point","coordinates","MultiPoint","LineString","d3_geo_streamLine","MultiLineString","Polygon","d3_geo_streamPolygon","MultiPolygon","GeometryCollection","geometries","closed","coordinate","lineStart","lineEnd","polygonStart","polygonEnd","area","d3_geo_areaSum","d3_geo_area","d3_geo_centroidW0","d3_geo_centroidW1","d3_geo_centroidX0","d3_geo_centroidY0","d3_geo_centroidZ0","d3_geo_centroidX1","d3_geo_centroidY1","d3_geo_centroidZ1","d3_geo_centroidX2","d3_geo_centroidY2","d3_geo_centroidZ2","d3_geo_areaRingSum","d3_geo_areaRingStart","λ00","φ00","λ0","cosφ0","sinφ0","nextPoint","λ","φ","dλ","sdλ","adλ","cosφ","sinφ","d3_geo_cartesian","spherical","d3_geo_cartesianDot","d3_geo_cartesianCross","d3_geo_cartesianAdd","d3_geo_cartesianScale","vector","d3_geo_cartesianNormalize","d3_geo_spherical","cartesian","d3_geo_sphericalEqual","bounds","φ0","λ1","φ1","λ_","λ__","φ__","dλSum","ranges","bound","ringPoint","ringStart","ringEnd","linePoint","normal","inflection","λi","antimeridian","φi","angle","compareRanges","withinRange","best","centroid","d3_geo_centroid","d3_geo_centroidPoint","d3_geo_centroidLineStart","d3_geo_centroidLineEnd","d3_geo_centroidRingStart","d3_geo_centroidPointXYZ","z0","cz","d3_geo_compose","compose","d3_true","d3_geo_clipPolygon","segments","clipStartInside","interpolate","clip","segment","d3_geo_clipPolygonIntersection","d3_geo_clipPolygonLinkCircular","entry","points","current","isSubject","other","d3_geo_clip","pointVisible","clipLine","clipStart","rotate","line","rotatedClipStart","pointRing","polygon","meridian","parallel","meridianNormal","polarAngle","winding","ring","point0","arc","intersection","φarc","d3_geo_pointInPolygon","polygonStarted","d3_geo_clipSort","pointLine","buffer","d3_geo_clipBufferListener","ringListener","clean","ringSegments","pop","shift","d3_geo_clipSegmentLength1","lines","rejoin","d3_geo_clipAntimeridian","sλ0","sλ1","cosφ1","sinλ0_λ1","atan","d3_geo_clipAntimeridianIntersect","from","to","direction","d3_geo_clipCircle","radius","cr","smallRadius","notHemisphere","visible","c0","v0","v00","point2","point1","code","intersect","d3_geo_circleInterpolate","two","n1","n2","n2n2","n1n2","determinant","c1","c2","n1xn2","uu","t2","δλ","polar","q1","d3_geom_clipLine","ax","ay","d3_geo_clipExtentMAX","d3_geo_clipExtent","x__","y__","v__","x_","y_","v_","first","listener_","bufferListener","wn","insidePolygon","inside","a1","corner","comparePoints","ca","cb","d3_geo_conic","projectAt","d3_geo_projectionMutator","parallels","d3_geo_conicEqualArea","C","ρ0","forward","ρ0_y","clipExtent","output","valid","conicEqualArea","raw","albers","albersUsa","lower48Point","alaskaPoint","hawaiiPoint","lower48","alaska","hawaii","pointStream","lower48Stream","alaskaStream","hawaiiStream","d3_geo_pathAreaSum","d3_geo_pathAreaPolygon","d3_geo_pathBoundsX0","d3_geo_pathBoundsY0","d3_geo_pathBoundsX1","d3_geo_pathBoundsY1","d3_geo_pathArea","d3_geo_pathAreaRingStart","x00","y00","d3_geo_pathBounds","d3_geo_pathBuffer","pointCircle","d3_geo_pathBufferCircle","pointLineStart","lineEndPolygon","pointRadius","d3_geo_lengthSum","d3_geo_pathCentroid","d3_geo_pathCentroidPoint","d3_geo_pathCentroidLineStart","d3_geo_pathCentroidLineEnd","d3_geo_pathCentroidRingStart","d3_geo_pathContext","context","moveTo","lineTo","closePath","d3_geo_resample","project","δ2","cosMinDistance","maxDepth","resample","resampleRecursive","resampleNone","d3_geo_transformPoint","a00","b00","c00","a0","resampleLineTo","φ2","λ2","x2","y2","dx2","dy2","dz","d3_geo_pathProjectStream","d3_geo_projectionRadians","d3_geo_transform","d3_geo_projection","projectRotate","δx","δy","projectResample","δφ","δγ","preclip","postclip","clipAngle","projection","d3_geo_rotation","invalidate","d3_geo_equirectangular","d3_geo_identityRotation","d3_geo_rotationλ","d3_geo_rotationφγ","d3_geo_forwardRotationλ","rotation","cosδφ","sinδφ","cosδγ","sinδγ","sr","d3_geo_circleAngle","d3_geo_graticuleX","d3_geo_graticuleY","d3_source","d3_target","path","projectStream","contextStream","cacheStream","transform","methods","projectionMutator","equirectangular","circle","distance","Δλ","sinΔλ","cosΔλ","sinφ1","graticule","X1","X0","Y1","Y0","DX","DY","outline","majorExtent","minorExtent","majorStep","minorStep","greatArc","source_","target_","cy0","sy0","cy1","sy1","kx0","ky0","kx1","ky1","d3_geo_length","d3_geo_azimuthal","azimuthal","cosλ","sinc","cosc","d3_geo_azimuthalEqualArea","cosλcosφ","azimuthalEqualArea","d3_geo_azimuthalEquidistant","d3_geo_conicConformal","F","d3_geo_mercator","d3_geo_conicEquidistant","G","azimuthalEquidistant","conicConformal","conicEquidistant","d3_geo_gnomonic","d3_geo_mercatorProjection","clipAuto","gnomonic","mercator","d3_geo_orthographic","orthographic","d3_geo_stereographic","d3_geo_transverseMercator","d3_geom_pointX","d3_geom_pointY","d3_geom_hullUpper","hull","hs","d3_geom_hullOrder","stereographic","transverseMercator","geom","vertices","fx","fy","flippedPoints","upper","lower","skipLeft","skipRight","d3_geom_polygonPrototype","d3_geom_polygonInside","d3_geom_polygonIntersect","x3","x21","x43","y3","y21","y43","ua","d3_geom_polygonClosed","input","d3_geom_voronoiEdges","d3_geom_voronoiCells","d3_geom_voronoiBeaches","d3_geom_voronoiFirstCircle","d3_geom_voronoiCircles","d3_geom_voronoiBeachPool","d3_geom_voronoiCirclePool","d3_geom_voronoiBeach","d3_geom_voronoiRedBlackNode","edge","site","d3_geom_voronoiCreateBeach","beach","d3_geom_voronoiDetachBeach","d3_geom_voronoiDetachCircle","d3_geom_voronoiRemoveBeach","vertex","previous","P","disappearing","lArc","unshift","rArc","iArc","nArcs","d3_geom_voronoiSetEdgeEnd","d3_geom_voronoiCreateEdge","d3_geom_voronoiAttachCircle","d3_geom_voronoiAddBeach","dxl","dxr","directrix","d3_geom_voronoiLeftBreakPoint","d3_geom_voronoiRightBreakPoint","R","newArc","lSite","bx","by","rSite","hb","hc","rfocx","rfocy","pby2","lfocx","lfocy","plby2","hl","aby2","d3_geom_voronoiCell","edges","d3_geom_voronoiHalfEdgeOrder","d3_geom_voronoiCircle","cSite","ha","d3_geom_voronoiConnectEdge","vb","fm","fb","va","lx","ly","rx","ry","d3_geom_voronoiEdge","d3_geom_voronoiHalfEdge","d3_geom_voronoiCreateBorderEdge","d3_geom_voronoiRedBlackTree","d3_geom_voronoiRedBlackRotateLeft","tree","d3_geom_voronoiRedBlackRotateRight","d3_geom_voronoiRedBlackFirst","d3_geom_voronoi","sites","bbox","d3_geom_voronoiVertexOrder","splice","d3_geom_voronoiClipEdges","cell","iHalfEdge","halfEdges","nHalfEdges","cells","iCell","prepare","d3_geom_voronoiCloseCells","diagram","grandpa","uncle","sibling","voronoi","d3_geom_voronoiClipExtent","polygons","links","triangles","s0","s1","d3_geom_quadtreeCompatX","d3_geom_quadtreeCompatY","d3_geom_quadtreeVisit","sx","sy","children","d3_geom_quadtreeFind","root","closestPoint","minDistance2","find","distance2","xm","ym","d3_interpolateRgb","ar","ag","ab","br","bg","bb","d3_interpolateObject","d3_interpolate","d3_interpolateNumber","d3_interpolateString","am","bm","bs","bi","d3_interpolate_numberA","d3_interpolate_numberB","index","delaunay","quadtree","compat","xs","ys","x1_","y1_","x2_","y2_","leaf","nx","ny","insertChild","nPoint","below","interpolateRgb","interpolateObject","interpolateNumber","interpolateString","interpolators","d3_interpolateArray","na","nb","interpolateArray","d3_ease_default","d3_ease","linear","poly","quad","d3_ease_quad","cubic","d3_ease_cubic","d3_ease_sin","d3_ease_exp","d3_ease_circle","elastic","back","bounce","d3_ease_bounce","d3_ease_mode","out","d3_ease_reverse","d3_ease_reflect","d3_ease_clamp","d3_ease_cubicInOut","t3","d3_interpolateRound","d3_transform","kx","d3_transformNormalize","kz","d3_transformDot","ky","skew","ease","interpolateHcl","ah","ac","al","bh","bc","bl","interpolateHsl","as","interpolateLab","aa","ba","interpolateRound","baseVal","consolidate","d3_transformIdentity","d3_interpolateTransformPop","d3_interpolateTransform","ta","tb","d3_interpolateTranslate","ra","rb","d3_interpolateRotate","wa","wb","d3_interpolateSkew","ka","kb","d3_interpolateScale","d3_uninterpolateNumber","d3_uninterpolateClamp","d3_layout_bundlePath","link","lca","aNodes","d3_layout_bundleAncestors","bNodes","aNode","bNode","sharedNode","d3_layout_bundleLeastCommonAncestor","ancestors","d3_layout_forceDragstart","fixed","d3_layout_forceDragend","d3_layout_forceMouseover","px","py","d3_layout_forceMouseout","d3_layout_forceAccumulate","alpha","charges","charge","pointCharge","interpolateTransform","layout","bundle","paths","chord","chords","sortGroups","sortSubgroups","sortChords","relayout","groupSums","groupIndex","subgroupIndex","di","dj","subindex","startAngle","endAngle","resort","force","distances","strengths","friction","linkDistance","d3_layout_forceLinkDistance","linkStrength","d3_layout_forceLinkStrength","chargeDistance2","d3_layout_forceChargeDistance2","gravity","theta2","repulse","dw","dn","dragmove","resume","tick","weight","visit","chargeDistance","theta","neighbors","dimension","candidates","d3_layout_hierarchyRebind","hierarchy","d3_layout_hierarchyLinks","d3_layout_hierarchyVisitBefore","d3_layout_hierarchyVisitAfter","nodes2","d3_layout_hierarchyChildren","d3_layout_hierarchyValue","d3_layout_hierarchySort","child","stack","childs","revalue","partition","pie","Number","d3_layout_pieSortByValue","padAngle","da","pa","arcs","d3_layout_stackX","d3_layout_stackY","d3_layout_stackOut","d3_layout_stackOrderDefault","d3_layout_stackOffsetZero","series","orders","offsets","d3_layout_stackOrders","d3_layout_stackOffsets","d3_layout_stackMaxIndex","sums","d3_layout_stackReduceSum","bottom","tops","bottoms","silhouette","wiggle","s2","s3","o0","expand","zero","reduce","d3_layout_stackSum","d3_layout_histogramBinSturges","d3_layout_histogramBinFixed","d3_layout_histogramRange","d3_layout_packSort","d3_layout_packInsert","_pack_next","_pack_prev","d3_layout_packSplice","d3_layout_packIntersects","dr","d3_layout_packSiblings","xMin","xMax","yMin","yMax","d3_layout_packLink","d3_layout_packPlace","isect","d3_layout_packUnlink","d3_layout_packTransform","db","dc","d3_layout_treeSeparation","d3_layout_treeLeft","d3_layout_treeRight","d3_layout_treeMove","wm","wp","change","d3_layout_treeAncestor","vim","ancestor","d3_layout_clusterLeft","d3_layout_clusterRight","d3_layout_treemapPadNull","d3_layout_treemapPad","d3_scaleExtent","d3_scaleRange","rangeExtent","d3_scale_bilinear","uninterpolate","d3_scale_nice","nice","d3_scale_niceStep","d3_scale_niceIdentity","histogram","frequency","valuer","ranger","binner","bin","bins","thresholds","pack","separation","nodeSize","root0","root1","node1","queue","wrapTree","firstWalk","secondWalk","sizeNode","tx","siblings","d3_layout_treeShift","midpoint","vip","vop","vom","sip","sop","sim","som","apportion","cluster","previousNode","d3_layout_clusterX","d3_layout_clusterY","treemap","stickies","pad","sticky","mode","ratio","squarify","score","remaining","worst","stickify","rmax","rmin","padFunction","padConstant","µ","σ","logNormal","bates","irwinHall","d3_scale_polylinear","d3_scale_linear","clamp","rangeRound","ticks","d3_scale_linearTicks","tickFormat","d3_scale_linearTickFormat","d3_scale_linearNice","d3_scale_linearRebind","d3_scale_linearTickRange","span","err","d3_scale_linearPrecision","d3_scale_linearFormatSignificant","d3_scale_linearFormatPrecision","d3_scale_log","base","positive","niced","d3_scale_logNiceNegative","d3_scale_logFormat","d3_scale_pow","powp","d3_scale_powPow","powb","d3_scale_ordinal","rangeBand","steps","xi","rangePoints","rangeRoundPoints","rangeBands","outerPadding","rangeRoundBands","ordinal","category10","d3_category10","category20","d3_category20","category20b","d3_category20b","category20c","d3_category20c","d3_scale_quantile","quantiles","invertExtent","d3_scale_quantize","d3_scale_threshold","d3_scale_identity","identity","d3_zero","quantize","threshold","innerRadius","d3_svg_arcInnerRadius","outerRadius","d3_svg_arcOuterRadius","cornerRadius","padRadius","d3_svg_arcAuto","d3_svg_arcStartAngle","d3_svg_arcEndAngle","d3_svg_arcPadAngle","cw","rc","circleSegment","rp","ap","d3_svg_arcSweep","h1","h0","rc1","rc0","oc","kc","lc","t30","d3_svg_arcCornerTangents","t12","t03","t21","x01","y01","ox","oy","D","cx0","cx1","dx0","dy0","dx1","dy1","d3_svg_line","defined","d3_svg_lineLinear","interpolateKey","tension","d3_svg_lineInterpolators","d3_svg_lineLinearClosed","d3_svg_lineStepBefore","d3_svg_lineStepAfter","basis","d3_svg_lineBasis","pi","d3_svg_lineDot4","d3_svg_lineBasisBezier3","d3_svg_lineBasisBezier","cardinal","d3_svg_lineHermite","d3_svg_lineCardinalTangents","monotone","tangents","d3_svg_lineSlope","d3_svg_lineFiniteDifferences","d3_svg_lineMonotoneTangents","lp","p2","d3_svg_lineBasisBezier1","d3_svg_lineBasisBezier2","d3_svg_lineRadial","d3_svg_area","interpolateReverse","points0","points1","fx0","fy0","fx1","fy1","d3_svg_chordRadius","d3_svg_diagonalProjection","d3_svg_diagonalRadialProjection","d3_svg_symbolSize","d3_svg_symbolType","d3_svg_symbolCircle","radial","curve","self","diagonal","p3","projection_","d3_svg_symbols","cross","diamond","d3_svg_symbolTan30","square","d3_svg_symbolSqrt3","symbolTypes","d3_transitionId","d3_transitionNamespace","d3_transitionInherit","d3_transitionNode","d3_transition","interrupt","d3_selection_interruptNS","lock","activeId","active","count","d3_transitionPrototype","d3_transition_tween","d3_transition_text","inherit","tweens","elapsed","cancelId","cancel","subnodes","nameNS","attrNull","attrNullNS","attrTween","attrTweenNS","styleNull","styleString","styleTween","inheritId","id0","id1","axis","tickFormat_","orient","d3_svg_axisDefaultOrient","innerTickSize","outerTickSize","tickPadding","tickArguments_","tickValues","tickTransform","tickEnter","tickExit","tickUpdate","tickSpacing","pathUpdate","lineEnter","lineUpdate","textEnter","textUpdate","d3_svg_axisX","d3_svg_axisY","d3_svg_axisOrients","tickSize","tickSubdivide","brush","xExtentDomain","yExtentDomain","xExtent","yExtent","xClamp","yClamp","resizes","d3_svg_brushResizes","brushstart","background","resize","d3_svg_brushCursor","gUpdate","backgroundUpdate","redrawX","redrawY","redraw","eventTarget","event_","resizing","resizingX","resizingY","dragging","keydown","keyup","brushmove","brushend","ex","ey","altKey","keyCode","move1","extent1","extent0","yi","clear","nw","ne","se","sw","d3_time_formatUtc","d3_time_formatIso","d3_time_formatIsoNative","toISOString","d3_time_scale","tickMethod","d3_time_scaleSteps","d3_time_scaleMilliseconds","d3_time_scaleDate","skip","skipped","iso","second","seconds","minute","minutes","hour","timezone","hours","month","d3_time_scaleLocalMethods","d3_time_scaleLocalFormat","d3_time_scaleUtcMethods","d3_time_scaleUtcFormat","d3_json","d3_html","createRange","selectNode","body","createContextualFragment","json","responseXML"],"mappings":"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","file":"b6c24c3d-6.3bfbc2b154025cf53e35.js","sourcesContent":["!function() {\n  var d3 = {\n    version: \"3.5.17\"\n  };\n  var d3_arraySlice = [].slice, d3_array = function(list) {\n    return d3_arraySlice.call(list);\n  };\n  var d3_document = this.document;\n  function d3_documentElement(node) {\n    return node && (node.ownerDocument || node.document || node).documentElement;\n  }\n  function d3_window(node) {\n    return node && (node.ownerDocument && node.ownerDocument.defaultView || node.document && node || node.defaultView);\n  }\n  if (d3_document) {\n    try {\n      d3_array(d3_document.documentElement.childNodes)[0].nodeType;\n    } catch (e) {\n      d3_array = function(list) {\n        var i = list.length, array = new Array(i);\n        while (i--) array[i] = list[i];\n        return array;\n      };\n    }\n  }\n  if (!Date.now) Date.now = function() {\n    return +new Date();\n  };\n  if (d3_document) {\n    try {\n      d3_document.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\");\n    } catch (error) {\n      var d3_element_prototype = this.Element.prototype, d3_element_setAttribute = d3_element_prototype.setAttribute, d3_element_setAttributeNS = d3_element_prototype.setAttributeNS, d3_style_prototype = this.CSSStyleDeclaration.prototype, d3_style_setProperty = d3_style_prototype.setProperty;\n      d3_element_prototype.setAttribute = function(name, value) {\n        d3_element_setAttribute.call(this, name, value + \"\");\n      };\n      d3_element_prototype.setAttributeNS = function(space, local, value) {\n        d3_element_setAttributeNS.call(this, space, local, value + \"\");\n      };\n      d3_style_prototype.setProperty = function(name, value, priority) {\n        d3_style_setProperty.call(this, name, value + \"\", priority);\n      };\n    }\n  }\n  d3.ascending = d3_ascending;\n  function d3_ascending(a, b) {\n    return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n  }\n  d3.descending = function(a, b) {\n    return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n  };\n  d3.min = function(array, f) {\n    var i = -1, n = array.length, a, b;\n    if (arguments.length === 1) {\n      while (++i < n) if ((b = array[i]) != null && b >= b) {\n        a = b;\n        break;\n      }\n      while (++i < n) if ((b = array[i]) != null && a > b) a = b;\n    } else {\n      while (++i < n) if ((b = f.call(array, array[i], i)) != null && b >= b) {\n        a = b;\n        break;\n      }\n      while (++i < n) if ((b = f.call(array, array[i], i)) != null && a > b) a = b;\n    }\n    return a;\n  };\n  d3.max = function(array, f) {\n    var i = -1, n = array.length, a, b;\n    if (arguments.length === 1) {\n      while (++i < n) if ((b = array[i]) != null && b >= b) {\n        a = b;\n        break;\n      }\n      while (++i < n) if ((b = array[i]) != null && b > a) a = b;\n    } else {\n      while (++i < n) if ((b = f.call(array, array[i], i)) != null && b >= b) {\n        a = b;\n        break;\n      }\n      while (++i < n) if ((b = f.call(array, array[i], i)) != null && b > a) a = b;\n    }\n    return a;\n  };\n  d3.extent = function(array, f) {\n    var i = -1, n = array.length, a, b, c;\n    if (arguments.length === 1) {\n      while (++i < n) if ((b = array[i]) != null && b >= b) {\n        a = c = b;\n        break;\n      }\n      while (++i < n) if ((b = array[i]) != null) {\n        if (a > b) a = b;\n        if (c < b) c = b;\n      }\n    } else {\n      while (++i < n) if ((b = f.call(array, array[i], i)) != null && b >= b) {\n        a = c = b;\n        break;\n      }\n      while (++i < n) if ((b = f.call(array, array[i], i)) != null) {\n        if (a > b) a = b;\n        if (c < b) c = b;\n      }\n    }\n    return [ a, c ];\n  };\n  function d3_number(x) {\n    return x === null ? NaN : +x;\n  }\n  function d3_numeric(x) {\n    return !isNaN(x);\n  }\n  d3.sum = function(array, f) {\n    var s = 0, n = array.length, a, i = -1;\n    if (arguments.length === 1) {\n      while (++i < n) if (d3_numeric(a = +array[i])) s += a;\n    } else {\n      while (++i < n) if (d3_numeric(a = +f.call(array, array[i], i))) s += a;\n    }\n    return s;\n  };\n  d3.mean = function(array, f) {\n    var s = 0, n = array.length, a, i = -1, j = n;\n    if (arguments.length === 1) {\n      while (++i < n) if (d3_numeric(a = d3_number(array[i]))) s += a; else --j;\n    } else {\n      while (++i < n) if (d3_numeric(a = d3_number(f.call(array, array[i], i)))) s += a; else --j;\n    }\n    if (j) return s / j;\n  };\n  d3.quantile = function(values, p) {\n    var H = (values.length - 1) * p + 1, h = Math.floor(H), v = +values[h - 1], e = H - h;\n    return e ? v + e * (values[h] - v) : v;\n  };\n  d3.median = function(array, f) {\n    var numbers = [], n = array.length, a, i = -1;\n    if (arguments.length === 1) {\n      while (++i < n) if (d3_numeric(a = d3_number(array[i]))) numbers.push(a);\n    } else {\n      while (++i < n) if (d3_numeric(a = d3_number(f.call(array, array[i], i)))) numbers.push(a);\n    }\n    if (numbers.length) return d3.quantile(numbers.sort(d3_ascending), .5);\n  };\n  d3.variance = function(array, f) {\n    var n = array.length, m = 0, a, d, s = 0, i = -1, j = 0;\n    if (arguments.length === 1) {\n      while (++i < n) {\n        if (d3_numeric(a = d3_number(array[i]))) {\n          d = a - m;\n          m += d / ++j;\n          s += d * (a - m);\n        }\n      }\n    } else {\n      while (++i < n) {\n        if (d3_numeric(a = d3_number(f.call(array, array[i], i)))) {\n          d = a - m;\n          m += d / ++j;\n          s += d * (a - m);\n        }\n      }\n    }\n    if (j > 1) return s / (j - 1);\n  };\n  d3.deviation = function() {\n    var v = d3.variance.apply(this, arguments);\n    return v ? Math.sqrt(v) : v;\n  };\n  function d3_bisector(compare) {\n    return {\n      left: function(a, x, lo, hi) {\n        if (arguments.length < 3) lo = 0;\n        if (arguments.length < 4) hi = a.length;\n        while (lo < hi) {\n          var mid = lo + hi >>> 1;\n          if (compare(a[mid], x) < 0) lo = mid + 1; else hi = mid;\n        }\n        return lo;\n      },\n      right: function(a, x, lo, hi) {\n        if (arguments.length < 3) lo = 0;\n        if (arguments.length < 4) hi = a.length;\n        while (lo < hi) {\n          var mid = lo + hi >>> 1;\n          if (compare(a[mid], x) > 0) hi = mid; else lo = mid + 1;\n        }\n        return lo;\n      }\n    };\n  }\n  var d3_bisect = d3_bisector(d3_ascending);\n  d3.bisectLeft = d3_bisect.left;\n  d3.bisect = d3.bisectRight = d3_bisect.right;\n  d3.bisector = function(f) {\n    return d3_bisector(f.length === 1 ? function(d, x) {\n      return d3_ascending(f(d), x);\n    } : f);\n  };\n  d3.shuffle = function(array, i0, i1) {\n    if ((m = arguments.length) < 3) {\n      i1 = array.length;\n      if (m < 2) i0 = 0;\n    }\n    var m = i1 - i0, t, i;\n    while (m) {\n      i = Math.random() * m-- | 0;\n      t = array[m + i0], array[m + i0] = array[i + i0], array[i + i0] = t;\n    }\n    return array;\n  };\n  d3.permute = function(array, indexes) {\n    var i = indexes.length, permutes = new Array(i);\n    while (i--) permutes[i] = array[indexes[i]];\n    return permutes;\n  };\n  d3.pairs = function(array) {\n    var i = 0, n = array.length - 1, p0, p1 = array[0], pairs = new Array(n < 0 ? 0 : n);\n    while (i < n) pairs[i] = [ p0 = p1, p1 = array[++i] ];\n    return pairs;\n  };\n  d3.transpose = function(matrix) {\n    if (!(n = matrix.length)) return [];\n    for (var i = -1, m = d3.min(matrix, d3_transposeLength), transpose = new Array(m); ++i < m; ) {\n      for (var j = -1, n, row = transpose[i] = new Array(n); ++j < n; ) {\n        row[j] = matrix[j][i];\n      }\n    }\n    return transpose;\n  };\n  function d3_transposeLength(d) {\n    return d.length;\n  }\n  d3.zip = function() {\n    return d3.transpose(arguments);\n  };\n  d3.keys = function(map) {\n    var keys = [];\n    for (var key in map) keys.push(key);\n    return keys;\n  };\n  d3.values = function(map) {\n    var values = [];\n    for (var key in map) values.push(map[key]);\n    return values;\n  };\n  d3.entries = function(map) {\n    var entries = [];\n    for (var key in map) entries.push({\n      key: key,\n      value: map[key]\n    });\n    return entries;\n  };\n  d3.merge = function(arrays) {\n    var n = arrays.length, m, i = -1, j = 0, merged, array;\n    while (++i < n) j += arrays[i].length;\n    merged = new Array(j);\n    while (--n >= 0) {\n      array = arrays[n];\n      m = array.length;\n      while (--m >= 0) {\n        merged[--j] = array[m];\n      }\n    }\n    return merged;\n  };\n  var abs = Math.abs;\n  d3.range = function(start, stop, step) {\n    if (arguments.length < 3) {\n      step = 1;\n      if (arguments.length < 2) {\n        stop = start;\n        start = 0;\n      }\n    }\n    if ((stop - start) / step === Infinity) throw new Error(\"infinite range\");\n    var range = [], k = d3_range_integerScale(abs(step)), i = -1, j;\n    start *= k, stop *= k, step *= k;\n    if (step < 0) while ((j = start + step * ++i) > stop) range.push(j / k); else while ((j = start + step * ++i) < stop) range.push(j / k);\n    return range;\n  };\n  function d3_range_integerScale(x) {\n    var k = 1;\n    while (x * k % 1) k *= 10;\n    return k;\n  }\n  function d3_class(ctor, properties) {\n    for (var key in properties) {\n      Object.defineProperty(ctor.prototype, key, {\n        value: properties[key],\n        enumerable: false\n      });\n    }\n  }\n  d3.map = function(object, f) {\n    var map = new d3_Map();\n    if (object instanceof d3_Map) {\n      object.forEach(function(key, value) {\n        map.set(key, value);\n      });\n    } else if (Array.isArray(object)) {\n      var i = -1, n = object.length, o;\n      if (arguments.length === 1) while (++i < n) map.set(i, object[i]); else while (++i < n) map.set(f.call(object, o = object[i], i), o);\n    } else {\n      for (var key in object) map.set(key, object[key]);\n    }\n    return map;\n  };\n  function d3_Map() {\n    this._ = Object.create(null);\n  }\n  var d3_map_proto = \"__proto__\", d3_map_zero = \"\\x00\";\n  d3_class(d3_Map, {\n    has: d3_map_has,\n    get: function(key) {\n      return this._[d3_map_escape(key)];\n    },\n    set: function(key, value) {\n      return this._[d3_map_escape(key)] = value;\n    },\n    remove: d3_map_remove,\n    keys: d3_map_keys,\n    values: function() {\n      var values = [];\n      for (var key in this._) values.push(this._[key]);\n      return values;\n    },\n    entries: function() {\n      var entries = [];\n      for (var key in this._) entries.push({\n        key: d3_map_unescape(key),\n        value: this._[key]\n      });\n      return entries;\n    },\n    size: d3_map_size,\n    empty: d3_map_empty,\n    forEach: function(f) {\n      for (var key in this._) f.call(this, d3_map_unescape(key), this._[key]);\n    }\n  });\n  function d3_map_escape(key) {\n    return (key += \"\") === d3_map_proto || key[0] === d3_map_zero ? d3_map_zero + key : key;\n  }\n  function d3_map_unescape(key) {\n    return (key += \"\")[0] === d3_map_zero ? key.slice(1) : key;\n  }\n  function d3_map_has(key) {\n    return d3_map_escape(key) in this._;\n  }\n  function d3_map_remove(key) {\n    return (key = d3_map_escape(key)) in this._ && delete this._[key];\n  }\n  function d3_map_keys() {\n    var keys = [];\n    for (var key in this._) keys.push(d3_map_unescape(key));\n    return keys;\n  }\n  function d3_map_size() {\n    var size = 0;\n    for (var key in this._) ++size;\n    return size;\n  }\n  function d3_map_empty() {\n    for (var key in this._) return false;\n    return true;\n  }\n  d3.nest = function() {\n    var nest = {}, keys = [], sortKeys = [], sortValues, rollup;\n    function map(mapType, array, depth) {\n      if (depth >= keys.length) return rollup ? rollup.call(nest, array) : sortValues ? array.sort(sortValues) : array;\n      var i = -1, n = array.length, key = keys[depth++], keyValue, object, setter, valuesByKey = new d3_Map(), values;\n      while (++i < n) {\n        if (values = valuesByKey.get(keyValue = key(object = array[i]))) {\n          values.push(object);\n        } else {\n          valuesByKey.set(keyValue, [ object ]);\n        }\n      }\n      if (mapType) {\n        object = mapType();\n        setter = function(keyValue, values) {\n          object.set(keyValue, map(mapType, values, depth));\n        };\n      } else {\n        object = {};\n        setter = function(keyValue, values) {\n          object[keyValue] = map(mapType, values, depth);\n        };\n      }\n      valuesByKey.forEach(setter);\n      return object;\n    }\n    function entries(map, depth) {\n      if (depth >= keys.length) return map;\n      var array = [], sortKey = sortKeys[depth++];\n      map.forEach(function(key, keyMap) {\n        array.push({\n          key: key,\n          values: entries(keyMap, depth)\n        });\n      });\n      return sortKey ? array.sort(function(a, b) {\n        return sortKey(a.key, b.key);\n      }) : array;\n    }\n    nest.map = function(array, mapType) {\n      return map(mapType, array, 0);\n    };\n    nest.entries = function(array) {\n      return entries(map(d3.map, array, 0), 0);\n    };\n    nest.key = function(d) {\n      keys.push(d);\n      return nest;\n    };\n    nest.sortKeys = function(order) {\n      sortKeys[keys.length - 1] = order;\n      return nest;\n    };\n    nest.sortValues = function(order) {\n      sortValues = order;\n      return nest;\n    };\n    nest.rollup = function(f) {\n      rollup = f;\n      return nest;\n    };\n    return nest;\n  };\n  d3.set = function(array) {\n    var set = new d3_Set();\n    if (array) for (var i = 0, n = array.length; i < n; ++i) set.add(array[i]);\n    return set;\n  };\n  function d3_Set() {\n    this._ = Object.create(null);\n  }\n  d3_class(d3_Set, {\n    has: d3_map_has,\n    add: function(key) {\n      this._[d3_map_escape(key += \"\")] = true;\n      return key;\n    },\n    remove: d3_map_remove,\n    values: d3_map_keys,\n    size: d3_map_size,\n    empty: d3_map_empty,\n    forEach: function(f) {\n      for (var key in this._) f.call(this, d3_map_unescape(key));\n    }\n  });\n  d3.behavior = {};\n  function d3_identity(d) {\n    return d;\n  }\n  d3.rebind = function(target, source) {\n    var i = 1, n = arguments.length, method;\n    while (++i < n) target[method = arguments[i]] = d3_rebind(target, source, source[method]);\n    return target;\n  };\n  function d3_rebind(target, source, method) {\n    return function() {\n      var value = method.apply(source, arguments);\n      return value === source ? target : value;\n    };\n  }\n  function d3_vendorSymbol(object, name) {\n    if (name in object) return name;\n    name = name.charAt(0).toUpperCase() + name.slice(1);\n    for (var i = 0, n = d3_vendorPrefixes.length; i < n; ++i) {\n      var prefixName = d3_vendorPrefixes[i] + name;\n      if (prefixName in object) return prefixName;\n    }\n  }\n  var d3_vendorPrefixes = [ \"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\" ];\n  function d3_noop() {}\n  d3.dispatch = function() {\n    var dispatch = new d3_dispatch(), i = -1, n = arguments.length;\n    while (++i < n) dispatch[arguments[i]] = d3_dispatch_event(dispatch);\n    return dispatch;\n  };\n  function d3_dispatch() {}\n  d3_dispatch.prototype.on = function(type, listener) {\n    var i = type.indexOf(\".\"), name = \"\";\n    if (i >= 0) {\n      name = type.slice(i + 1);\n      type = type.slice(0, i);\n    }\n    if (type) return arguments.length < 2 ? this[type].on(name) : this[type].on(name, listener);\n    if (arguments.length === 2) {\n      if (listener == null) for (type in this) {\n        if (this.hasOwnProperty(type)) this[type].on(name, null);\n      }\n      return this;\n    }\n  };\n  function d3_dispatch_event(dispatch) {\n    var listeners = [], listenerByName = new d3_Map();\n    function event() {\n      var z = listeners, i = -1, n = z.length, l;\n      while (++i < n) if (l = z[i].on) l.apply(this, arguments);\n      return dispatch;\n    }\n    event.on = function(name, listener) {\n      var l = listenerByName.get(name), i;\n      if (arguments.length < 2) return l && l.on;\n      if (l) {\n        l.on = null;\n        listeners = listeners.slice(0, i = listeners.indexOf(l)).concat(listeners.slice(i + 1));\n        listenerByName.remove(name);\n      }\n      if (listener) listeners.push(listenerByName.set(name, {\n        on: listener\n      }));\n      return dispatch;\n    };\n    return event;\n  }\n  d3.event = null;\n  function d3_eventPreventDefault() {\n    d3.event.preventDefault();\n  }\n  function d3_eventSource() {\n    var e = d3.event, s;\n    while (s = e.sourceEvent) e = s;\n    return e;\n  }\n  function d3_eventDispatch(target) {\n    var dispatch = new d3_dispatch(), i = 0, n = arguments.length;\n    while (++i < n) dispatch[arguments[i]] = d3_dispatch_event(dispatch);\n    dispatch.of = function(thiz, argumentz) {\n      return function(e1) {\n        try {\n          var e0 = e1.sourceEvent = d3.event;\n          e1.target = target;\n          d3.event = e1;\n          dispatch[e1.type].apply(thiz, argumentz);\n        } finally {\n          d3.event = e0;\n        }\n      };\n    };\n    return dispatch;\n  }\n  d3.requote = function(s) {\n    return s.replace(d3_requote_re, \"\\\\$&\");\n  };\n  var d3_requote_re = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g;\n  var d3_subclass = {}.__proto__ ? function(object, prototype) {\n    object.__proto__ = prototype;\n  } : function(object, prototype) {\n    for (var property in prototype) object[property] = prototype[property];\n  };\n  function d3_selection(groups) {\n    d3_subclass(groups, d3_selectionPrototype);\n    return groups;\n  }\n  var d3_select = function(s, n) {\n    return n.querySelector(s);\n  }, d3_selectAll = function(s, n) {\n    return n.querySelectorAll(s);\n  }, d3_selectMatches = function(n, s) {\n    var d3_selectMatcher = n.matches || n[d3_vendorSymbol(n, \"matchesSelector\")];\n    d3_selectMatches = function(n, s) {\n      return d3_selectMatcher.call(n, s);\n    };\n    return d3_selectMatches(n, s);\n  };\n  if (typeof Sizzle === \"function\") {\n    d3_select = function(s, n) {\n      return Sizzle(s, n)[0] || null;\n    };\n    d3_selectAll = Sizzle;\n    d3_selectMatches = Sizzle.matchesSelector;\n  }\n  d3.selection = function() {\n    return d3.select(d3_document.documentElement);\n  };\n  var d3_selectionPrototype = d3.selection.prototype = [];\n  d3_selectionPrototype.select = function(selector) {\n    var subgroups = [], subgroup, subnode, group, node;\n    selector = d3_selection_selector(selector);\n    for (var j = -1, m = this.length; ++j < m; ) {\n      subgroups.push(subgroup = []);\n      subgroup.parentNode = (group = this[j]).parentNode;\n      for (var i = -1, n = group.length; ++i < n; ) {\n        if (node = group[i]) {\n          subgroup.push(subnode = selector.call(node, node.__data__, i, j));\n          if (subnode && \"__data__\" in node) subnode.__data__ = node.__data__;\n        } else {\n          subgroup.push(null);\n        }\n      }\n    }\n    return d3_selection(subgroups);\n  };\n  function d3_selection_selector(selector) {\n    return typeof selector === \"function\" ? selector : function() {\n      return d3_select(selector, this);\n    };\n  }\n  d3_selectionPrototype.selectAll = function(selector) {\n    var subgroups = [], subgroup, node;\n    selector = d3_selection_selectorAll(selector);\n    for (var j = -1, m = this.length; ++j < m; ) {\n      for (var group = this[j], i = -1, n = group.length; ++i < n; ) {\n        if (node = group[i]) {\n          subgroups.push(subgroup = d3_array(selector.call(node, node.__data__, i, j)));\n          subgroup.parentNode = node;\n        }\n      }\n    }\n    return d3_selection(subgroups);\n  };\n  function d3_selection_selectorAll(selector) {\n    return typeof selector === \"function\" ? selector : function() {\n      return d3_selectAll(selector, this);\n    };\n  }\n  var d3_nsXhtml = \"http://www.w3.org/1999/xhtml\";\n  var d3_nsPrefix = {\n    svg: \"http://www.w3.org/2000/svg\",\n    xhtml: d3_nsXhtml,\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  d3.ns = {\n    prefix: d3_nsPrefix,\n    qualify: function(name) {\n      var i = name.indexOf(\":\"), prefix = name;\n      if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n      return d3_nsPrefix.hasOwnProperty(prefix) ? {\n        space: d3_nsPrefix[prefix],\n        local: name\n      } : name;\n    }\n  };\n  d3_selectionPrototype.attr = function(name, value) {\n    if (arguments.length < 2) {\n      if (typeof name === \"string\") {\n        var node = this.node();\n        name = d3.ns.qualify(name);\n        return name.local ? node.getAttributeNS(name.space, name.local) : node.getAttribute(name);\n      }\n      for (value in name) this.each(d3_selection_attr(value, name[value]));\n      return this;\n    }\n    return this.each(d3_selection_attr(name, value));\n  };\n  function d3_selection_attr(name, value) {\n    name = d3.ns.qualify(name);\n    function attrNull() {\n      this.removeAttribute(name);\n    }\n    function attrNullNS() {\n      this.removeAttributeNS(name.space, name.local);\n    }\n    function attrConstant() {\n      this.setAttribute(name, value);\n    }\n    function attrConstantNS() {\n      this.setAttributeNS(name.space, name.local, value);\n    }\n    function attrFunction() {\n      var x = value.apply(this, arguments);\n      if (x == null) this.removeAttribute(name); else this.setAttribute(name, x);\n    }\n    function attrFunctionNS() {\n      var x = value.apply(this, arguments);\n      if (x == null) this.removeAttributeNS(name.space, name.local); else this.setAttributeNS(name.space, name.local, x);\n    }\n    return value == null ? name.local ? attrNullNS : attrNull : typeof value === \"function\" ? name.local ? attrFunctionNS : attrFunction : name.local ? attrConstantNS : attrConstant;\n  }\n  function d3_collapse(s) {\n    return s.trim().replace(/\\s+/g, \" \");\n  }\n  d3_selectionPrototype.classed = function(name, value) {\n    if (arguments.length < 2) {\n      if (typeof name === \"string\") {\n        var node = this.node(), n = (name = d3_selection_classes(name)).length, i = -1;\n        if (value = node.classList) {\n          while (++i < n) if (!value.contains(name[i])) return false;\n        } else {\n          value = node.getAttribute(\"class\");\n          while (++i < n) if (!d3_selection_classedRe(name[i]).test(value)) return false;\n        }\n        return true;\n      }\n      for (value in name) this.each(d3_selection_classed(value, name[value]));\n      return this;\n    }\n    return this.each(d3_selection_classed(name, value));\n  };\n  function d3_selection_classedRe(name) {\n    return new RegExp(\"(?:^|\\\\s+)\" + d3.requote(name) + \"(?:\\\\s+|$)\", \"g\");\n  }\n  function d3_selection_classes(name) {\n    return (name + \"\").trim().split(/^|\\s+/);\n  }\n  function d3_selection_classed(name, value) {\n    name = d3_selection_classes(name).map(d3_selection_classedName);\n    var n = name.length;\n    function classedConstant() {\n      var i = -1;\n      while (++i < n) name[i](this, value);\n    }\n    function classedFunction() {\n      var i = -1, x = value.apply(this, arguments);\n      while (++i < n) name[i](this, x);\n    }\n    return typeof value === \"function\" ? classedFunction : classedConstant;\n  }\n  function d3_selection_classedName(name) {\n    var re = d3_selection_classedRe(name);\n    return function(node, value) {\n      if (c = node.classList) return value ? c.add(name) : c.remove(name);\n      var c = node.getAttribute(\"class\") || \"\";\n      if (value) {\n        re.lastIndex = 0;\n        if (!re.test(c)) node.setAttribute(\"class\", d3_collapse(c + \" \" + name));\n      } else {\n        node.setAttribute(\"class\", d3_collapse(c.replace(re, \" \")));\n      }\n    };\n  }\n  d3_selectionPrototype.style = function(name, value, priority) {\n    var n = arguments.length;\n    if (n < 3) {\n      if (typeof name !== \"string\") {\n        if (n < 2) value = \"\";\n        for (priority in name) this.each(d3_selection_style(priority, name[priority], value));\n        return this;\n      }\n      if (n < 2) {\n        var node = this.node();\n        return d3_window(node).getComputedStyle(node, null).getPropertyValue(name);\n      }\n      priority = \"\";\n    }\n    return this.each(d3_selection_style(name, value, priority));\n  };\n  function d3_selection_style(name, value, priority) {\n    function styleNull() {\n      this.style.removeProperty(name);\n    }\n    function styleConstant() {\n      this.style.setProperty(name, value, priority);\n    }\n    function styleFunction() {\n      var x = value.apply(this, arguments);\n      if (x == null) this.style.removeProperty(name); else this.style.setProperty(name, x, priority);\n    }\n    return value == null ? styleNull : typeof value === \"function\" ? styleFunction : styleConstant;\n  }\n  d3_selectionPrototype.property = function(name, value) {\n    if (arguments.length < 2) {\n      if (typeof name === \"string\") return this.node()[name];\n      for (value in name) this.each(d3_selection_property(value, name[value]));\n      return this;\n    }\n    return this.each(d3_selection_property(name, value));\n  };\n  function d3_selection_property(name, value) {\n    function propertyNull() {\n      delete this[name];\n    }\n    function propertyConstant() {\n      this[name] = value;\n    }\n    function propertyFunction() {\n      var x = value.apply(this, arguments);\n      if (x == null) delete this[name]; else this[name] = x;\n    }\n    return value == null ? propertyNull : typeof value === \"function\" ? propertyFunction : propertyConstant;\n  }\n  d3_selectionPrototype.text = function(value) {\n    return arguments.length ? this.each(typeof value === \"function\" ? function() {\n      var v = value.apply(this, arguments);\n      this.textContent = v == null ? \"\" : v;\n    } : value == null ? function() {\n      this.textContent = \"\";\n    } : function() {\n      this.textContent = value;\n    }) : this.node().textContent;\n  };\n  d3_selectionPrototype.html = function(value) {\n    return arguments.length ? this.each(typeof value === \"function\" ? function() {\n      var v = value.apply(this, arguments);\n      this.innerHTML = v == null ? \"\" : v;\n    } : value == null ? function() {\n      this.innerHTML = \"\";\n    } : function() {\n      this.innerHTML = value;\n    }) : this.node().innerHTML;\n  };\n  d3_selectionPrototype.append = function(name) {\n    name = d3_selection_creator(name);\n    return this.select(function() {\n      return this.appendChild(name.apply(this, arguments));\n    });\n  };\n  function d3_selection_creator(name) {\n    function create() {\n      var document = this.ownerDocument, namespace = this.namespaceURI;\n      return namespace === d3_nsXhtml && document.documentElement.namespaceURI === d3_nsXhtml ? document.createElement(name) : document.createElementNS(namespace, name);\n    }\n    function createNS() {\n      return this.ownerDocument.createElementNS(name.space, name.local);\n    }\n    return typeof name === \"function\" ? name : (name = d3.ns.qualify(name)).local ? createNS : create;\n  }\n  d3_selectionPrototype.insert = function(name, before) {\n    name = d3_selection_creator(name);\n    before = d3_selection_selector(before);\n    return this.select(function() {\n      return this.insertBefore(name.apply(this, arguments), before.apply(this, arguments) || null);\n    });\n  };\n  d3_selectionPrototype.remove = function() {\n    return this.each(d3_selectionRemove);\n  };\n  function d3_selectionRemove() {\n    var parent = this.parentNode;\n    if (parent) parent.removeChild(this);\n  }\n  d3_selectionPrototype.data = function(value, key) {\n    var i = -1, n = this.length, group, node;\n    if (!arguments.length) {\n      value = new Array(n = (group = this[0]).length);\n      while (++i < n) {\n        if (node = group[i]) {\n          value[i] = node.__data__;\n        }\n      }\n      return value;\n    }\n    function bind(group, groupData) {\n      var i, n = group.length, m = groupData.length, n0 = Math.min(n, m), updateNodes = new Array(m), enterNodes = new Array(m), exitNodes = new Array(n), node, nodeData;\n      if (key) {\n        var nodeByKeyValue = new d3_Map(), keyValues = new Array(n), keyValue;\n        for (i = -1; ++i < n; ) {\n          if (node = group[i]) {\n            if (nodeByKeyValue.has(keyValue = key.call(node, node.__data__, i))) {\n              exitNodes[i] = node;\n            } else {\n              nodeByKeyValue.set(keyValue, node);\n            }\n            keyValues[i] = keyValue;\n          }\n        }\n        for (i = -1; ++i < m; ) {\n          if (!(node = nodeByKeyValue.get(keyValue = key.call(groupData, nodeData = groupData[i], i)))) {\n            enterNodes[i] = d3_selection_dataNode(nodeData);\n          } else if (node !== true) {\n            updateNodes[i] = node;\n            node.__data__ = nodeData;\n          }\n          nodeByKeyValue.set(keyValue, true);\n        }\n        for (i = -1; ++i < n; ) {\n          if (i in keyValues && nodeByKeyValue.get(keyValues[i]) !== true) {\n            exitNodes[i] = group[i];\n          }\n        }\n      } else {\n        for (i = -1; ++i < n0; ) {\n          node = group[i];\n          nodeData = groupData[i];\n          if (node) {\n            node.__data__ = nodeData;\n            updateNodes[i] = node;\n          } else {\n            enterNodes[i] = d3_selection_dataNode(nodeData);\n          }\n        }\n        for (;i < m; ++i) {\n          enterNodes[i] = d3_selection_dataNode(groupData[i]);\n        }\n        for (;i < n; ++i) {\n          exitNodes[i] = group[i];\n        }\n      }\n      enterNodes.update = updateNodes;\n      enterNodes.parentNode = updateNodes.parentNode = exitNodes.parentNode = group.parentNode;\n      enter.push(enterNodes);\n      update.push(updateNodes);\n      exit.push(exitNodes);\n    }\n    var enter = d3_selection_enter([]), update = d3_selection([]), exit = d3_selection([]);\n    if (typeof value === \"function\") {\n      while (++i < n) {\n        bind(group = this[i], value.call(group, group.parentNode.__data__, i));\n      }\n    } else {\n      while (++i < n) {\n        bind(group = this[i], value);\n      }\n    }\n    update.enter = function() {\n      return enter;\n    };\n    update.exit = function() {\n      return exit;\n    };\n    return update;\n  };\n  function d3_selection_dataNode(data) {\n    return {\n      __data__: data\n    };\n  }\n  d3_selectionPrototype.datum = function(value) {\n    return arguments.length ? this.property(\"__data__\", value) : this.property(\"__data__\");\n  };\n  d3_selectionPrototype.filter = function(filter) {\n    var subgroups = [], subgroup, group, node;\n    if (typeof filter !== \"function\") filter = d3_selection_filter(filter);\n    for (var j = 0, m = this.length; j < m; j++) {\n      subgroups.push(subgroup = []);\n      subgroup.parentNode = (group = this[j]).parentNode;\n      for (var i = 0, n = group.length; i < n; i++) {\n        if ((node = group[i]) && filter.call(node, node.__data__, i, j)) {\n          subgroup.push(node);\n        }\n      }\n    }\n    return d3_selection(subgroups);\n  };\n  function d3_selection_filter(selector) {\n    return function() {\n      return d3_selectMatches(this, selector);\n    };\n  }\n  d3_selectionPrototype.order = function() {\n    for (var j = -1, m = this.length; ++j < m; ) {\n      for (var group = this[j], i = group.length - 1, next = group[i], node; --i >= 0; ) {\n        if (node = group[i]) {\n          if (next && next !== node.nextSibling) next.parentNode.insertBefore(node, next);\n          next = node;\n        }\n      }\n    }\n    return this;\n  };\n  d3_selectionPrototype.sort = function(comparator) {\n    comparator = d3_selection_sortComparator.apply(this, arguments);\n    for (var j = -1, m = this.length; ++j < m; ) this[j].sort(comparator);\n    return this.order();\n  };\n  function d3_selection_sortComparator(comparator) {\n    if (!arguments.length) comparator = d3_ascending;\n    return function(a, b) {\n      return a && b ? comparator(a.__data__, b.__data__) : !a - !b;\n    };\n  }\n  d3_selectionPrototype.each = function(callback) {\n    return d3_selection_each(this, function(node, i, j) {\n      callback.call(node, node.__data__, i, j);\n    });\n  };\n  function d3_selection_each(groups, callback) {\n    for (var 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(node, i, j);\n      }\n    }\n    return groups;\n  }\n  d3_selectionPrototype.call = function(callback) {\n    var args = d3_array(arguments);\n    callback.apply(args[0] = this, args);\n    return this;\n  };\n  d3_selectionPrototype.empty = function() {\n    return !this.node();\n  };\n  d3_selectionPrototype.node = function() {\n    for (var j = 0, m = this.length; j < m; j++) {\n      for (var group = this[j], i = 0, n = group.length; i < n; i++) {\n        var node = group[i];\n        if (node) return node;\n      }\n    }\n    return null;\n  };\n  d3_selectionPrototype.size = function() {\n    var n = 0;\n    d3_selection_each(this, function() {\n      ++n;\n    });\n    return n;\n  };\n  function d3_selection_enter(selection) {\n    d3_subclass(selection, d3_selection_enterPrototype);\n    return selection;\n  }\n  var d3_selection_enterPrototype = [];\n  d3.selection.enter = d3_selection_enter;\n  d3.selection.enter.prototype = d3_selection_enterPrototype;\n  d3_selection_enterPrototype.append = d3_selectionPrototype.append;\n  d3_selection_enterPrototype.empty = d3_selectionPrototype.empty;\n  d3_selection_enterPrototype.node = d3_selectionPrototype.node;\n  d3_selection_enterPrototype.call = d3_selectionPrototype.call;\n  d3_selection_enterPrototype.size = d3_selectionPrototype.size;\n  d3_selection_enterPrototype.select = function(selector) {\n    var subgroups = [], subgroup, subnode, upgroup, group, node;\n    for (var j = -1, m = this.length; ++j < m; ) {\n      upgroup = (group = this[j]).update;\n      subgroups.push(subgroup = []);\n      subgroup.parentNode = group.parentNode;\n      for (var i = -1, n = group.length; ++i < n; ) {\n        if (node = group[i]) {\n          subgroup.push(upgroup[i] = subnode = selector.call(group.parentNode, node.__data__, i, j));\n          subnode.__data__ = node.__data__;\n        } else {\n          subgroup.push(null);\n        }\n      }\n    }\n    return d3_selection(subgroups);\n  };\n  d3_selection_enterPrototype.insert = function(name, before) {\n    if (arguments.length < 2) before = d3_selection_enterInsertBefore(this);\n    return d3_selectionPrototype.insert.call(this, name, before);\n  };\n  function d3_selection_enterInsertBefore(enter) {\n    var i0, j0;\n    return function(d, i, j) {\n      var group = enter[j].update, n = group.length, node;\n      if (j != j0) j0 = j, i0 = 0;\n      if (i >= i0) i0 = i + 1;\n      while (!(node = group[i0]) && ++i0 < n) ;\n      return node;\n    };\n  }\n  d3.select = function(node) {\n    var group;\n    if (typeof node === \"string\") {\n      group = [ d3_select(node, d3_document) ];\n      group.parentNode = d3_document.documentElement;\n    } else {\n      group = [ node ];\n      group.parentNode = d3_documentElement(node);\n    }\n    return d3_selection([ group ]);\n  };\n  d3.selectAll = function(nodes) {\n    var group;\n    if (typeof nodes === \"string\") {\n      group = d3_array(d3_selectAll(nodes, d3_document));\n      group.parentNode = d3_document.documentElement;\n    } else {\n      group = d3_array(nodes);\n      group.parentNode = null;\n    }\n    return d3_selection([ group ]);\n  };\n  d3_selectionPrototype.on = function(type, listener, capture) {\n    var n = arguments.length;\n    if (n < 3) {\n      if (typeof type !== \"string\") {\n        if (n < 2) listener = false;\n        for (capture in type) this.each(d3_selection_on(capture, type[capture], listener));\n        return this;\n      }\n      if (n < 2) return (n = this.node()[\"__on\" + type]) && n._;\n      capture = false;\n    }\n    return this.each(d3_selection_on(type, listener, capture));\n  };\n  function d3_selection_on(type, listener, capture) {\n    var name = \"__on\" + type, i = type.indexOf(\".\"), wrap = d3_selection_onListener;\n    if (i > 0) type = type.slice(0, i);\n    var filter = d3_selection_onFilters.get(type);\n    if (filter) type = filter, wrap = d3_selection_onFilter;\n    function onRemove() {\n      var l = this[name];\n      if (l) {\n        this.removeEventListener(type, l, l.$);\n        delete this[name];\n      }\n    }\n    function onAdd() {\n      var l = wrap(listener, d3_array(arguments));\n      onRemove.call(this);\n      this.addEventListener(type, this[name] = l, l.$ = capture);\n      l._ = listener;\n    }\n    function removeAll() {\n      var re = new RegExp(\"^__on([^.]+)\" + d3.requote(type) + \"$\"), match;\n      for (var name in this) {\n        if (match = name.match(re)) {\n          var l = this[name];\n          this.removeEventListener(match[1], l, l.$);\n          delete this[name];\n        }\n      }\n    }\n    return i ? listener ? onAdd : onRemove : listener ? d3_noop : removeAll;\n  }\n  var d3_selection_onFilters = d3.map({\n    mouseenter: \"mouseover\",\n    mouseleave: \"mouseout\"\n  });\n  if (d3_document) {\n    d3_selection_onFilters.forEach(function(k) {\n      if (\"on\" + k in d3_document) d3_selection_onFilters.remove(k);\n    });\n  }\n  function d3_selection_onListener(listener, argumentz) {\n    return function(e) {\n      var o = d3.event;\n      d3.event = e;\n      argumentz[0] = this.__data__;\n      try {\n        listener.apply(this, argumentz);\n      } finally {\n        d3.event = o;\n      }\n    };\n  }\n  function d3_selection_onFilter(listener, argumentz) {\n    var l = d3_selection_onListener(listener, argumentz);\n    return function(e) {\n      var target = this, related = e.relatedTarget;\n      if (!related || related !== target && !(related.compareDocumentPosition(target) & 8)) {\n        l.call(target, e);\n      }\n    };\n  }\n  var d3_event_dragSelect, d3_event_dragId = 0;\n  function d3_event_dragSuppress(node) {\n    var name = \".dragsuppress-\" + ++d3_event_dragId, click = \"click\" + name, w = d3.select(d3_window(node)).on(\"touchmove\" + name, d3_eventPreventDefault).on(\"dragstart\" + name, d3_eventPreventDefault).on(\"selectstart\" + name, d3_eventPreventDefault);\n    if (d3_event_dragSelect == null) {\n      d3_event_dragSelect = \"onselectstart\" in node ? false : d3_vendorSymbol(node.style, \"userSelect\");\n    }\n    if (d3_event_dragSelect) {\n      var style = d3_documentElement(node).style, select = style[d3_event_dragSelect];\n      style[d3_event_dragSelect] = \"none\";\n    }\n    return function(suppressClick) {\n      w.on(name, null);\n      if (d3_event_dragSelect) style[d3_event_dragSelect] = select;\n      if (suppressClick) {\n        var off = function() {\n          w.on(click, null);\n        };\n        w.on(click, function() {\n          d3_eventPreventDefault();\n          off();\n        }, true);\n        setTimeout(off, 0);\n      }\n    };\n  }\n  d3.mouse = function(container) {\n    return d3_mousePoint(container, d3_eventSource());\n  };\n  var d3_mouse_bug44083 = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n  function d3_mousePoint(container, e) {\n    if (e.changedTouches) e = e.changedTouches[0];\n    var svg = container.ownerSVGElement || container;\n    if (svg.createSVGPoint) {\n      var point = svg.createSVGPoint();\n      if (d3_mouse_bug44083 < 0) {\n        var window = d3_window(container);\n        if (window.scrollX || window.scrollY) {\n          svg = d3.select(\"body\").append(\"svg\").style({\n            position: \"absolute\",\n            top: 0,\n            left: 0,\n            margin: 0,\n            padding: 0,\n            border: \"none\"\n          }, \"important\");\n          var ctm = svg[0][0].getScreenCTM();\n          d3_mouse_bug44083 = !(ctm.f || ctm.e);\n          svg.remove();\n        }\n      }\n      if (d3_mouse_bug44083) point.x = e.pageX, point.y = e.pageY; else point.x = e.clientX, \n      point.y = e.clientY;\n      point = point.matrixTransform(container.getScreenCTM().inverse());\n      return [ point.x, point.y ];\n    }\n    var rect = container.getBoundingClientRect();\n    return [ e.clientX - rect.left - container.clientLeft, e.clientY - rect.top - container.clientTop ];\n  }\n  d3.touch = function(container, touches, identifier) {\n    if (arguments.length < 3) identifier = touches, touches = d3_eventSource().changedTouches;\n    if (touches) for (var i = 0, n = touches.length, touch; i < n; ++i) {\n      if ((touch = touches[i]).identifier === identifier) {\n        return d3_mousePoint(container, touch);\n      }\n    }\n  };\n  d3.behavior.drag = function() {\n    var event = d3_eventDispatch(drag, \"drag\", \"dragstart\", \"dragend\"), origin = null, mousedown = dragstart(d3_noop, d3.mouse, d3_window, \"mousemove\", \"mouseup\"), touchstart = dragstart(d3_behavior_dragTouchId, d3.touch, d3_identity, \"touchmove\", \"touchend\");\n    function drag() {\n      this.on(\"mousedown.drag\", mousedown).on(\"touchstart.drag\", touchstart);\n    }\n    function dragstart(id, position, subject, move, end) {\n      return function() {\n        var that = this, target = d3.event.target.correspondingElement || d3.event.target, parent = that.parentNode, dispatch = event.of(that, arguments), dragged = 0, dragId = id(), dragName = \".drag\" + (dragId == null ? \"\" : \"-\" + dragId), dragOffset, dragSubject = d3.select(subject(target)).on(move + dragName, moved).on(end + dragName, ended), dragRestore = d3_event_dragSuppress(target), position0 = position(parent, dragId);\n        if (origin) {\n          dragOffset = origin.apply(that, arguments);\n          dragOffset = [ dragOffset.x - position0[0], dragOffset.y - position0[1] ];\n        } else {\n          dragOffset = [ 0, 0 ];\n        }\n        dispatch({\n          type: \"dragstart\"\n        });\n        function moved() {\n          var position1 = position(parent, dragId), dx, dy;\n          if (!position1) return;\n          dx = position1[0] - position0[0];\n          dy = position1[1] - position0[1];\n          dragged |= dx | dy;\n          position0 = position1;\n          dispatch({\n            type: \"drag\",\n            x: position1[0] + dragOffset[0],\n            y: position1[1] + dragOffset[1],\n            dx: dx,\n            dy: dy\n          });\n        }\n        function ended() {\n          if (!position(parent, dragId)) return;\n          dragSubject.on(move + dragName, null).on(end + dragName, null);\n          dragRestore(dragged);\n          dispatch({\n            type: \"dragend\"\n          });\n        }\n      };\n    }\n    drag.origin = function(x) {\n      if (!arguments.length) return origin;\n      origin = x;\n      return drag;\n    };\n    return d3.rebind(drag, event, \"on\");\n  };\n  function d3_behavior_dragTouchId() {\n    return d3.event.changedTouches[0].identifier;\n  }\n  d3.touches = function(container, touches) {\n    if (arguments.length < 2) touches = d3_eventSource().touches;\n    return touches ? d3_array(touches).map(function(touch) {\n      var point = d3_mousePoint(container, touch);\n      point.identifier = touch.identifier;\n      return point;\n    }) : [];\n  };\n  var ε = 1e-6, ε2 = ε * ε, π = Math.PI, τ = 2 * π, τε = τ - ε, halfπ = π / 2, d3_radians = π / 180, d3_degrees = 180 / π;\n  function d3_sgn(x) {\n    return x > 0 ? 1 : x < 0 ? -1 : 0;\n  }\n  function d3_cross2d(a, b, c) {\n    return (b[0] - a[0]) * (c[1] - a[1]) - (b[1] - a[1]) * (c[0] - a[0]);\n  }\n  function d3_acos(x) {\n    return x > 1 ? 0 : x < -1 ? π : Math.acos(x);\n  }\n  function d3_asin(x) {\n    return x > 1 ? halfπ : x < -1 ? -halfπ : Math.asin(x);\n  }\n  function d3_sinh(x) {\n    return ((x = Math.exp(x)) - 1 / x) / 2;\n  }\n  function d3_cosh(x) {\n    return ((x = Math.exp(x)) + 1 / x) / 2;\n  }\n  function d3_tanh(x) {\n    return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n  }\n  function d3_haversin(x) {\n    return (x = Math.sin(x / 2)) * x;\n  }\n  var ρ = Math.SQRT2, ρ2 = 2, ρ4 = 4;\n  d3.interpolateZoom = function(p0, p1) {\n    var ux0 = p0[0], uy0 = p0[1], w0 = p0[2], ux1 = p1[0], uy1 = p1[1], w1 = p1[2], dx = ux1 - ux0, dy = uy1 - uy0, d2 = dx * dx + dy * dy, i, S;\n    if (d2 < ε2) {\n      S = Math.log(w1 / w0) / ρ;\n      i = function(t) {\n        return [ ux0 + t * dx, uy0 + t * dy, w0 * Math.exp(ρ * t * S) ];\n      };\n    } else {\n      var d1 = Math.sqrt(d2), b0 = (w1 * w1 - w0 * w0 + ρ4 * d2) / (2 * w0 * ρ2 * d1), b1 = (w1 * w1 - w0 * w0 - ρ4 * d2) / (2 * w1 * ρ2 * d1), r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0), r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n      S = (r1 - r0) / ρ;\n      i = function(t) {\n        var s = t * S, coshr0 = d3_cosh(r0), u = w0 / (ρ2 * d1) * (coshr0 * d3_tanh(ρ * s + r0) - d3_sinh(r0));\n        return [ ux0 + u * dx, uy0 + u * dy, w0 * coshr0 / d3_cosh(ρ * s + r0) ];\n      };\n    }\n    i.duration = S * 1e3;\n    return i;\n  };\n  d3.behavior.zoom = function() {\n    var view = {\n      x: 0,\n      y: 0,\n      k: 1\n    }, translate0, center0, center, size = [ 960, 500 ], scaleExtent = d3_behavior_zoomInfinity, duration = 250, zooming = 0, mousedown = \"mousedown.zoom\", mousemove = \"mousemove.zoom\", mouseup = \"mouseup.zoom\", mousewheelTimer, touchstart = \"touchstart.zoom\", touchtime, event = d3_eventDispatch(zoom, \"zoomstart\", \"zoom\", \"zoomend\"), x0, x1, y0, y1;\n    if (!d3_behavior_zoomWheel) {\n      d3_behavior_zoomWheel = \"onwheel\" in d3_document ? (d3_behavior_zoomDelta = function() {\n        return -d3.event.deltaY * (d3.event.deltaMode ? 120 : 1);\n      }, \"wheel\") : \"onmousewheel\" in d3_document ? (d3_behavior_zoomDelta = function() {\n        return d3.event.wheelDelta;\n      }, \"mousewheel\") : (d3_behavior_zoomDelta = function() {\n        return -d3.event.detail;\n      }, \"MozMousePixelScroll\");\n    }\n    function zoom(g) {\n      g.on(mousedown, mousedowned).on(d3_behavior_zoomWheel + \".zoom\", mousewheeled).on(\"dblclick.zoom\", dblclicked).on(touchstart, touchstarted);\n    }\n    zoom.event = function(g) {\n      g.each(function() {\n        var dispatch = event.of(this, arguments), view1 = view;\n        if (d3_transitionInheritId) {\n          d3.select(this).transition().each(\"start.zoom\", function() {\n            view = this.__chart__ || {\n              x: 0,\n              y: 0,\n              k: 1\n            };\n            zoomstarted(dispatch);\n          }).tween(\"zoom:zoom\", function() {\n            var dx = size[0], dy = size[1], cx = center0 ? center0[0] : dx / 2, cy = center0 ? center0[1] : dy / 2, i = d3.interpolateZoom([ (cx - view.x) / view.k, (cy - view.y) / view.k, dx / view.k ], [ (cx - view1.x) / view1.k, (cy - view1.y) / view1.k, dx / view1.k ]);\n            return function(t) {\n              var l = i(t), k = dx / l[2];\n              this.__chart__ = view = {\n                x: cx - l[0] * k,\n                y: cy - l[1] * k,\n                k: k\n              };\n              zoomed(dispatch);\n            };\n          }).each(\"interrupt.zoom\", function() {\n            zoomended(dispatch);\n          }).each(\"end.zoom\", function() {\n            zoomended(dispatch);\n          });\n        } else {\n          this.__chart__ = view;\n          zoomstarted(dispatch);\n          zoomed(dispatch);\n          zoomended(dispatch);\n        }\n      });\n    };\n    zoom.translate = function(_) {\n      if (!arguments.length) return [ view.x, view.y ];\n      view = {\n        x: +_[0],\n        y: +_[1],\n        k: view.k\n      };\n      rescale();\n      return zoom;\n    };\n    zoom.scale = function(_) {\n      if (!arguments.length) return view.k;\n      view = {\n        x: view.x,\n        y: view.y,\n        k: null\n      };\n      scaleTo(+_);\n      rescale();\n      return zoom;\n    };\n    zoom.scaleExtent = function(_) {\n      if (!arguments.length) return scaleExtent;\n      scaleExtent = _ == null ? d3_behavior_zoomInfinity : [ +_[0], +_[1] ];\n      return zoom;\n    };\n    zoom.center = function(_) {\n      if (!arguments.length) return center;\n      center = _ && [ +_[0], +_[1] ];\n      return zoom;\n    };\n    zoom.size = function(_) {\n      if (!arguments.length) return size;\n      size = _ && [ +_[0], +_[1] ];\n      return zoom;\n    };\n    zoom.duration = function(_) {\n      if (!arguments.length) return duration;\n      duration = +_;\n      return zoom;\n    };\n    zoom.x = function(z) {\n      if (!arguments.length) return x1;\n      x1 = z;\n      x0 = z.copy();\n      view = {\n        x: 0,\n        y: 0,\n        k: 1\n      };\n      return zoom;\n    };\n    zoom.y = function(z) {\n      if (!arguments.length) return y1;\n      y1 = z;\n      y0 = z.copy();\n      view = {\n        x: 0,\n        y: 0,\n        k: 1\n      };\n      return zoom;\n    };\n    function location(p) {\n      return [ (p[0] - view.x) / view.k, (p[1] - view.y) / view.k ];\n    }\n    function point(l) {\n      return [ l[0] * view.k + view.x, l[1] * view.k + view.y ];\n    }\n    function scaleTo(s) {\n      view.k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], s));\n    }\n    function translateTo(p, l) {\n      l = point(l);\n      view.x += p[0] - l[0];\n      view.y += p[1] - l[1];\n    }\n    function zoomTo(that, p, l, k) {\n      that.__chart__ = {\n        x: view.x,\n        y: view.y,\n        k: view.k\n      };\n      scaleTo(Math.pow(2, k));\n      translateTo(center0 = p, l);\n      that = d3.select(that);\n      if (duration > 0) that = that.transition().duration(duration);\n      that.call(zoom.event);\n    }\n    function rescale() {\n      if (x1) x1.domain(x0.range().map(function(x) {\n        return (x - view.x) / view.k;\n      }).map(x0.invert));\n      if (y1) y1.domain(y0.range().map(function(y) {\n        return (y - view.y) / view.k;\n      }).map(y0.invert));\n    }\n    function zoomstarted(dispatch) {\n      if (!zooming++) dispatch({\n        type: \"zoomstart\"\n      });\n    }\n    function zoomed(dispatch) {\n      rescale();\n      dispatch({\n        type: \"zoom\",\n        scale: view.k,\n        translate: [ view.x, view.y ]\n      });\n    }\n    function zoomended(dispatch) {\n      if (!--zooming) dispatch({\n        type: \"zoomend\"\n      }), center0 = null;\n    }\n    function mousedowned() {\n      var that = this, dispatch = event.of(that, arguments), dragged = 0, subject = d3.select(d3_window(that)).on(mousemove, moved).on(mouseup, ended), location0 = location(d3.mouse(that)), dragRestore = d3_event_dragSuppress(that);\n      d3_selection_interrupt.call(that);\n      zoomstarted(dispatch);\n      function moved() {\n        dragged = 1;\n        translateTo(d3.mouse(that), location0);\n        zoomed(dispatch);\n      }\n      function ended() {\n        subject.on(mousemove, null).on(mouseup, null);\n        dragRestore(dragged);\n        zoomended(dispatch);\n      }\n    }\n    function touchstarted() {\n      var that = this, dispatch = event.of(that, arguments), locations0 = {}, distance0 = 0, scale0, zoomName = \".zoom-\" + d3.event.changedTouches[0].identifier, touchmove = \"touchmove\" + zoomName, touchend = \"touchend\" + zoomName, targets = [], subject = d3.select(that), dragRestore = d3_event_dragSuppress(that);\n      started();\n      zoomstarted(dispatch);\n      subject.on(mousedown, null).on(touchstart, started);\n      function relocate() {\n        var touches = d3.touches(that);\n        scale0 = view.k;\n        touches.forEach(function(t) {\n          if (t.identifier in locations0) locations0[t.identifier] = location(t);\n        });\n        return touches;\n      }\n      function started() {\n        var target = d3.event.target;\n        d3.select(target).on(touchmove, moved).on(touchend, ended);\n        targets.push(target);\n        var changed = d3.event.changedTouches;\n        for (var i = 0, n = changed.length; i < n; ++i) {\n          locations0[changed[i].identifier] = null;\n        }\n        var touches = relocate(), now = Date.now();\n        if (touches.length === 1) {\n          if (now - touchtime < 500) {\n            var p = touches[0];\n            zoomTo(that, p, locations0[p.identifier], Math.floor(Math.log(view.k) / Math.LN2) + 1);\n            d3_eventPreventDefault();\n          }\n          touchtime = now;\n        } else if (touches.length > 1) {\n          var p = touches[0], q = touches[1], dx = p[0] - q[0], dy = p[1] - q[1];\n          distance0 = dx * dx + dy * dy;\n        }\n      }\n      function moved() {\n        var touches = d3.touches(that), p0, l0, p1, l1;\n        d3_selection_interrupt.call(that);\n        for (var i = 0, n = touches.length; i < n; ++i, l1 = null) {\n          p1 = touches[i];\n          if (l1 = locations0[p1.identifier]) {\n            if (l0) break;\n            p0 = p1, l0 = l1;\n          }\n        }\n        if (l1) {\n          var distance1 = (distance1 = p1[0] - p0[0]) * distance1 + (distance1 = p1[1] - p0[1]) * distance1, scale1 = distance0 && Math.sqrt(distance1 / distance0);\n          p0 = [ (p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2 ];\n          l0 = [ (l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2 ];\n          scaleTo(scale1 * scale0);\n        }\n        touchtime = null;\n        translateTo(p0, l0);\n        zoomed(dispatch);\n      }\n      function ended() {\n        if (d3.event.touches.length) {\n          var changed = d3.event.changedTouches;\n          for (var i = 0, n = changed.length; i < n; ++i) {\n            delete locations0[changed[i].identifier];\n          }\n          for (var identifier in locations0) {\n            return void relocate();\n          }\n        }\n        d3.selectAll(targets).on(zoomName, null);\n        subject.on(mousedown, mousedowned).on(touchstart, touchstarted);\n        dragRestore();\n        zoomended(dispatch);\n      }\n    }\n    function mousewheeled() {\n      var dispatch = event.of(this, arguments);\n      if (mousewheelTimer) clearTimeout(mousewheelTimer); else d3_selection_interrupt.call(this), \n      translate0 = location(center0 = center || d3.mouse(this)), zoomstarted(dispatch);\n      mousewheelTimer = setTimeout(function() {\n        mousewheelTimer = null;\n        zoomended(dispatch);\n      }, 50);\n      d3_eventPreventDefault();\n      scaleTo(Math.pow(2, d3_behavior_zoomDelta() * .002) * view.k);\n      translateTo(center0, translate0);\n      zoomed(dispatch);\n    }\n    function dblclicked() {\n      var p = d3.mouse(this), k = Math.log(view.k) / Math.LN2;\n      zoomTo(this, p, location(p), d3.event.shiftKey ? Math.ceil(k) - 1 : Math.floor(k) + 1);\n    }\n    return d3.rebind(zoom, event, \"on\");\n  };\n  var d3_behavior_zoomInfinity = [ 0, Infinity ], d3_behavior_zoomDelta, d3_behavior_zoomWheel;\n  d3.color = d3_color;\n  function d3_color() {}\n  d3_color.prototype.toString = function() {\n    return this.rgb() + \"\";\n  };\n  d3.hsl = d3_hsl;\n  function d3_hsl(h, s, l) {\n    return this instanceof d3_hsl ? void (this.h = +h, this.s = +s, this.l = +l) : arguments.length < 2 ? h instanceof d3_hsl ? new d3_hsl(h.h, h.s, h.l) : d3_rgb_parse(\"\" + h, d3_rgb_hsl, d3_hsl) : new d3_hsl(h, s, l);\n  }\n  var d3_hslPrototype = d3_hsl.prototype = new d3_color();\n  d3_hslPrototype.brighter = function(k) {\n    k = Math.pow(.7, arguments.length ? k : 1);\n    return new d3_hsl(this.h, this.s, this.l / k);\n  };\n  d3_hslPrototype.darker = function(k) {\n    k = Math.pow(.7, arguments.length ? k : 1);\n    return new d3_hsl(this.h, this.s, k * this.l);\n  };\n  d3_hslPrototype.rgb = function() {\n    return d3_hsl_rgb(this.h, this.s, this.l);\n  };\n  function d3_hsl_rgb(h, s, l) {\n    var m1, m2;\n    h = isNaN(h) ? 0 : (h %= 360) < 0 ? h + 360 : h;\n    s = isNaN(s) ? 0 : s < 0 ? 0 : s > 1 ? 1 : s;\n    l = l < 0 ? 0 : l > 1 ? 1 : l;\n    m2 = l <= .5 ? l * (1 + s) : l + s - l * s;\n    m1 = 2 * l - m2;\n    function v(h) {\n      if (h > 360) h -= 360; else if (h < 0) h += 360;\n      if (h < 60) return m1 + (m2 - m1) * h / 60;\n      if (h < 180) return m2;\n      if (h < 240) return m1 + (m2 - m1) * (240 - h) / 60;\n      return m1;\n    }\n    function vv(h) {\n      return Math.round(v(h) * 255);\n    }\n    return new d3_rgb(vv(h + 120), vv(h), vv(h - 120));\n  }\n  d3.hcl = d3_hcl;\n  function d3_hcl(h, c, l) {\n    return this instanceof d3_hcl ? void (this.h = +h, this.c = +c, this.l = +l) : arguments.length < 2 ? h instanceof d3_hcl ? new d3_hcl(h.h, h.c, h.l) : h instanceof d3_lab ? d3_lab_hcl(h.l, h.a, h.b) : d3_lab_hcl((h = d3_rgb_lab((h = d3.rgb(h)).r, h.g, h.b)).l, h.a, h.b) : new d3_hcl(h, c, l);\n  }\n  var d3_hclPrototype = d3_hcl.prototype = new d3_color();\n  d3_hclPrototype.brighter = function(k) {\n    return new d3_hcl(this.h, this.c, Math.min(100, this.l + d3_lab_K * (arguments.length ? k : 1)));\n  };\n  d3_hclPrototype.darker = function(k) {\n    return new d3_hcl(this.h, this.c, Math.max(0, this.l - d3_lab_K * (arguments.length ? k : 1)));\n  };\n  d3_hclPrototype.rgb = function() {\n    return d3_hcl_lab(this.h, this.c, this.l).rgb();\n  };\n  function d3_hcl_lab(h, c, l) {\n    if (isNaN(h)) h = 0;\n    if (isNaN(c)) c = 0;\n    return new d3_lab(l, Math.cos(h *= d3_radians) * c, Math.sin(h) * c);\n  }\n  d3.lab = d3_lab;\n  function d3_lab(l, a, b) {\n    return this instanceof d3_lab ? void (this.l = +l, this.a = +a, this.b = +b) : arguments.length < 2 ? l instanceof d3_lab ? new d3_lab(l.l, l.a, l.b) : l instanceof d3_hcl ? d3_hcl_lab(l.h, l.c, l.l) : d3_rgb_lab((l = d3_rgb(l)).r, l.g, l.b) : new d3_lab(l, a, b);\n  }\n  var d3_lab_K = 18;\n  var d3_lab_X = .95047, d3_lab_Y = 1, d3_lab_Z = 1.08883;\n  var d3_labPrototype = d3_lab.prototype = new d3_color();\n  d3_labPrototype.brighter = function(k) {\n    return new d3_lab(Math.min(100, this.l + d3_lab_K * (arguments.length ? k : 1)), this.a, this.b);\n  };\n  d3_labPrototype.darker = function(k) {\n    return new d3_lab(Math.max(0, this.l - d3_lab_K * (arguments.length ? k : 1)), this.a, this.b);\n  };\n  d3_labPrototype.rgb = function() {\n    return d3_lab_rgb(this.l, this.a, this.b);\n  };\n  function d3_lab_rgb(l, a, b) {\n    var y = (l + 16) / 116, x = y + a / 500, z = y - b / 200;\n    x = d3_lab_xyz(x) * d3_lab_X;\n    y = d3_lab_xyz(y) * d3_lab_Y;\n    z = d3_lab_xyz(z) * d3_lab_Z;\n    return new d3_rgb(d3_xyz_rgb(3.2404542 * x - 1.5371385 * y - .4985314 * z), d3_xyz_rgb(-.969266 * x + 1.8760108 * y + .041556 * z), d3_xyz_rgb(.0556434 * x - .2040259 * y + 1.0572252 * z));\n  }\n  function d3_lab_hcl(l, a, b) {\n    return l > 0 ? new d3_hcl(Math.atan2(b, a) * d3_degrees, Math.sqrt(a * a + b * b), l) : new d3_hcl(NaN, NaN, l);\n  }\n  function d3_lab_xyz(x) {\n    return x > .206893034 ? x * x * x : (x - 4 / 29) / 7.787037;\n  }\n  function d3_xyz_lab(x) {\n    return x > .008856 ? Math.pow(x, 1 / 3) : 7.787037 * x + 4 / 29;\n  }\n  function d3_xyz_rgb(r) {\n    return Math.round(255 * (r <= .00304 ? 12.92 * r : 1.055 * Math.pow(r, 1 / 2.4) - .055));\n  }\n  d3.rgb = d3_rgb;\n  function d3_rgb(r, g, b) {\n    return this instanceof d3_rgb ? void (this.r = ~~r, this.g = ~~g, this.b = ~~b) : arguments.length < 2 ? r instanceof d3_rgb ? new d3_rgb(r.r, r.g, r.b) : d3_rgb_parse(\"\" + r, d3_rgb, d3_hsl_rgb) : new d3_rgb(r, g, b);\n  }\n  function d3_rgbNumber(value) {\n    return new d3_rgb(value >> 16, value >> 8 & 255, value & 255);\n  }\n  function d3_rgbString(value) {\n    return d3_rgbNumber(value) + \"\";\n  }\n  var d3_rgbPrototype = d3_rgb.prototype = new d3_color();\n  d3_rgbPrototype.brighter = function(k) {\n    k = Math.pow(.7, arguments.length ? k : 1);\n    var r = this.r, g = this.g, b = this.b, i = 30;\n    if (!r && !g && !b) return new d3_rgb(i, i, i);\n    if (r && r < i) r = i;\n    if (g && g < i) g = i;\n    if (b && b < i) b = i;\n    return new d3_rgb(Math.min(255, r / k), Math.min(255, g / k), Math.min(255, b / k));\n  };\n  d3_rgbPrototype.darker = function(k) {\n    k = Math.pow(.7, arguments.length ? k : 1);\n    return new d3_rgb(k * this.r, k * this.g, k * this.b);\n  };\n  d3_rgbPrototype.hsl = function() {\n    return d3_rgb_hsl(this.r, this.g, this.b);\n  };\n  d3_rgbPrototype.toString = function() {\n    return \"#\" + d3_rgb_hex(this.r) + d3_rgb_hex(this.g) + d3_rgb_hex(this.b);\n  };\n  function d3_rgb_hex(v) {\n    return v < 16 ? \"0\" + Math.max(0, v).toString(16) : Math.min(255, v).toString(16);\n  }\n  function d3_rgb_parse(format, rgb, hsl) {\n    var r = 0, g = 0, b = 0, m1, m2, color;\n    m1 = /([a-z]+)\\((.*)\\)/.exec(format = format.toLowerCase());\n    if (m1) {\n      m2 = m1[2].split(\",\");\n      switch (m1[1]) {\n       case \"hsl\":\n        {\n          return hsl(parseFloat(m2[0]), parseFloat(m2[1]) / 100, parseFloat(m2[2]) / 100);\n        }\n\n       case \"rgb\":\n        {\n          return rgb(d3_rgb_parseNumber(m2[0]), d3_rgb_parseNumber(m2[1]), d3_rgb_parseNumber(m2[2]));\n        }\n      }\n    }\n    if (color = d3_rgb_names.get(format)) {\n      return rgb(color.r, color.g, color.b);\n    }\n    if (format != null && format.charAt(0) === \"#\" && !isNaN(color = parseInt(format.slice(1), 16))) {\n      if (format.length === 4) {\n        r = (color & 3840) >> 4;\n        r = r >> 4 | r;\n        g = color & 240;\n        g = g >> 4 | g;\n        b = color & 15;\n        b = b << 4 | b;\n      } else if (format.length === 7) {\n        r = (color & 16711680) >> 16;\n        g = (color & 65280) >> 8;\n        b = color & 255;\n      }\n    }\n    return rgb(r, g, b);\n  }\n  function d3_rgb_hsl(r, g, b) {\n    var min = Math.min(r /= 255, g /= 255, b /= 255), max = Math.max(r, g, b), d = max - min, h, s, l = (max + min) / 2;\n    if (d) {\n      s = l < .5 ? d / (max + min) : d / (2 - max - min);\n      if (r == max) h = (g - b) / d + (g < b ? 6 : 0); else if (g == max) h = (b - r) / d + 2; else h = (r - g) / d + 4;\n      h *= 60;\n    } else {\n      h = NaN;\n      s = l > 0 && l < 1 ? 0 : h;\n    }\n    return new d3_hsl(h, s, l);\n  }\n  function d3_rgb_lab(r, g, b) {\n    r = d3_rgb_xyz(r);\n    g = d3_rgb_xyz(g);\n    b = d3_rgb_xyz(b);\n    var x = d3_xyz_lab((.4124564 * r + .3575761 * g + .1804375 * b) / d3_lab_X), y = d3_xyz_lab((.2126729 * r + .7151522 * g + .072175 * b) / d3_lab_Y), z = d3_xyz_lab((.0193339 * r + .119192 * g + .9503041 * b) / d3_lab_Z);\n    return d3_lab(116 * y - 16, 500 * (x - y), 200 * (y - z));\n  }\n  function d3_rgb_xyz(r) {\n    return (r /= 255) <= .04045 ? r / 12.92 : Math.pow((r + .055) / 1.055, 2.4);\n  }\n  function d3_rgb_parseNumber(c) {\n    var f = parseFloat(c);\n    return c.charAt(c.length - 1) === \"%\" ? Math.round(f * 2.55) : f;\n  }\n  var d3_rgb_names = d3.map({\n    aliceblue: 15792383,\n    antiquewhite: 16444375,\n    aqua: 65535,\n    aquamarine: 8388564,\n    azure: 15794175,\n    beige: 16119260,\n    bisque: 16770244,\n    black: 0,\n    blanchedalmond: 16772045,\n    blue: 255,\n    blueviolet: 9055202,\n    brown: 10824234,\n    burlywood: 14596231,\n    cadetblue: 6266528,\n    chartreuse: 8388352,\n    chocolate: 13789470,\n    coral: 16744272,\n    cornflowerblue: 6591981,\n    cornsilk: 16775388,\n    crimson: 14423100,\n    cyan: 65535,\n    darkblue: 139,\n    darkcyan: 35723,\n    darkgoldenrod: 12092939,\n    darkgray: 11119017,\n    darkgreen: 25600,\n    darkgrey: 11119017,\n    darkkhaki: 12433259,\n    darkmagenta: 9109643,\n    darkolivegreen: 5597999,\n    darkorange: 16747520,\n    darkorchid: 10040012,\n    darkred: 9109504,\n    darksalmon: 15308410,\n    darkseagreen: 9419919,\n    darkslateblue: 4734347,\n    darkslategray: 3100495,\n    darkslategrey: 3100495,\n    darkturquoise: 52945,\n    darkviolet: 9699539,\n    deeppink: 16716947,\n    deepskyblue: 49151,\n    dimgray: 6908265,\n    dimgrey: 6908265,\n    dodgerblue: 2003199,\n    firebrick: 11674146,\n    floralwhite: 16775920,\n    forestgreen: 2263842,\n    fuchsia: 16711935,\n    gainsboro: 14474460,\n    ghostwhite: 16316671,\n    gold: 16766720,\n    goldenrod: 14329120,\n    gray: 8421504,\n    green: 32768,\n    greenyellow: 11403055,\n    grey: 8421504,\n    honeydew: 15794160,\n    hotpink: 16738740,\n    indianred: 13458524,\n    indigo: 4915330,\n    ivory: 16777200,\n    khaki: 15787660,\n    lavender: 15132410,\n    lavenderblush: 16773365,\n    lawngreen: 8190976,\n    lemonchiffon: 16775885,\n    lightblue: 11393254,\n    lightcoral: 15761536,\n    lightcyan: 14745599,\n    lightgoldenrodyellow: 16448210,\n    lightgray: 13882323,\n    lightgreen: 9498256,\n    lightgrey: 13882323,\n    lightpink: 16758465,\n    lightsalmon: 16752762,\n    lightseagreen: 2142890,\n    lightskyblue: 8900346,\n    lightslategray: 7833753,\n    lightslategrey: 7833753,\n    lightsteelblue: 11584734,\n    lightyellow: 16777184,\n    lime: 65280,\n    limegreen: 3329330,\n    linen: 16445670,\n    magenta: 16711935,\n    maroon: 8388608,\n    mediumaquamarine: 6737322,\n    mediumblue: 205,\n    mediumorchid: 12211667,\n    mediumpurple: 9662683,\n    mediumseagreen: 3978097,\n    mediumslateblue: 8087790,\n    mediumspringgreen: 64154,\n    mediumturquoise: 4772300,\n    mediumvioletred: 13047173,\n    midnightblue: 1644912,\n    mintcream: 16121850,\n    mistyrose: 16770273,\n    moccasin: 16770229,\n    navajowhite: 16768685,\n    navy: 128,\n    oldlace: 16643558,\n    olive: 8421376,\n    olivedrab: 7048739,\n    orange: 16753920,\n    orangered: 16729344,\n    orchid: 14315734,\n    palegoldenrod: 15657130,\n    palegreen: 10025880,\n    paleturquoise: 11529966,\n    palevioletred: 14381203,\n    papayawhip: 16773077,\n    peachpuff: 16767673,\n    peru: 13468991,\n    pink: 16761035,\n    plum: 14524637,\n    powderblue: 11591910,\n    purple: 8388736,\n    rebeccapurple: 6697881,\n    red: 16711680,\n    rosybrown: 12357519,\n    royalblue: 4286945,\n    saddlebrown: 9127187,\n    salmon: 16416882,\n    sandybrown: 16032864,\n    seagreen: 3050327,\n    seashell: 16774638,\n    sienna: 10506797,\n    silver: 12632256,\n    skyblue: 8900331,\n    slateblue: 6970061,\n    slategray: 7372944,\n    slategrey: 7372944,\n    snow: 16775930,\n    springgreen: 65407,\n    steelblue: 4620980,\n    tan: 13808780,\n    teal: 32896,\n    thistle: 14204888,\n    tomato: 16737095,\n    turquoise: 4251856,\n    violet: 15631086,\n    wheat: 16113331,\n    white: 16777215,\n    whitesmoke: 16119285,\n    yellow: 16776960,\n    yellowgreen: 10145074\n  });\n  d3_rgb_names.forEach(function(key, value) {\n    d3_rgb_names.set(key, d3_rgbNumber(value));\n  });\n  function d3_functor(v) {\n    return typeof v === \"function\" ? v : function() {\n      return v;\n    };\n  }\n  d3.functor = d3_functor;\n  d3.xhr = d3_xhrType(d3_identity);\n  function d3_xhrType(response) {\n    return function(url, mimeType, callback) {\n      if (arguments.length === 2 && typeof mimeType === \"function\") callback = mimeType, \n      mimeType = null;\n      return d3_xhr(url, mimeType, response, callback);\n    };\n  }\n  function d3_xhr(url, mimeType, response, callback) {\n    var xhr = {}, dispatch = d3.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"), headers = {}, request = new XMLHttpRequest(), responseType = null;\n    if (this.XDomainRequest && !(\"withCredentials\" in request) && /^(http(s)?:)?\\/\\//.test(url)) request = new XDomainRequest();\n    \"onload\" in request ? request.onload = request.onerror = respond : request.onreadystatechange = function() {\n      request.readyState > 3 && respond();\n    };\n    function respond() {\n      var status = request.status, result;\n      if (!status && d3_xhrHasResponse(request) || status >= 200 && status < 300 || status === 304) {\n        try {\n          result = response.call(xhr, request);\n        } catch (e) {\n          dispatch.error.call(xhr, e);\n          return;\n        }\n        dispatch.load.call(xhr, result);\n      } else {\n        dispatch.error.call(xhr, request);\n      }\n    }\n    request.onprogress = function(event) {\n      var o = d3.event;\n      d3.event = event;\n      try {\n        dispatch.progress.call(xhr, request);\n      } finally {\n        d3.event = o;\n      }\n    };\n    xhr.header = function(name, value) {\n      name = (name + \"\").toLowerCase();\n      if (arguments.length < 2) return headers[name];\n      if (value == null) delete headers[name]; else headers[name] = value + \"\";\n      return xhr;\n    };\n    xhr.mimeType = function(value) {\n      if (!arguments.length) return mimeType;\n      mimeType = value == null ? null : value + \"\";\n      return xhr;\n    };\n    xhr.responseType = function(value) {\n      if (!arguments.length) return responseType;\n      responseType = value;\n      return xhr;\n    };\n    xhr.response = function(value) {\n      response = value;\n      return xhr;\n    };\n    [ \"get\", \"post\" ].forEach(function(method) {\n      xhr[method] = function() {\n        return xhr.send.apply(xhr, [ method ].concat(d3_array(arguments)));\n      };\n    });\n    xhr.send = function(method, data, callback) {\n      if (arguments.length === 2 && typeof data === \"function\") callback = data, data = null;\n      request.open(method, url, true);\n      if (mimeType != null && !(\"accept\" in headers)) headers[\"accept\"] = mimeType + \",*/*\";\n      if (request.setRequestHeader) for (var name in headers) request.setRequestHeader(name, headers[name]);\n      if (mimeType != null && request.overrideMimeType) request.overrideMimeType(mimeType);\n      if (responseType != null) request.responseType = responseType;\n      if (callback != null) xhr.on(\"error\", callback).on(\"load\", function(request) {\n        callback(null, request);\n      });\n      dispatch.beforesend.call(xhr, request);\n      request.send(data == null ? null : data);\n      return xhr;\n    };\n    xhr.abort = function() {\n      request.abort();\n      return xhr;\n    };\n    d3.rebind(xhr, dispatch, \"on\");\n    return callback == null ? xhr : xhr.get(d3_xhr_fixCallback(callback));\n  }\n  function d3_xhr_fixCallback(callback) {\n    return callback.length === 1 ? function(error, request) {\n      callback(error == null ? request : null);\n    } : callback;\n  }\n  function d3_xhrHasResponse(request) {\n    var type = request.responseType;\n    return type && type !== \"text\" ? request.response : request.responseText;\n  }\n  d3.dsv = function(delimiter, mimeType) {\n    var reFormat = new RegExp('[\"' + delimiter + \"\\n]\"), delimiterCode = delimiter.charCodeAt(0);\n    function dsv(url, row, callback) {\n      if (arguments.length < 3) callback = row, row = null;\n      var xhr = d3_xhr(url, mimeType, row == null ? response : typedResponse(row), callback);\n      xhr.row = function(_) {\n        return arguments.length ? xhr.response((row = _) == null ? response : typedResponse(_)) : row;\n      };\n      return xhr;\n    }\n    function response(request) {\n      return dsv.parse(request.responseText);\n    }\n    function typedResponse(f) {\n      return function(request) {\n        return dsv.parse(request.responseText, f);\n      };\n    }\n    dsv.parse = function(text, f) {\n      var o;\n      return dsv.parseRows(text, function(row, i) {\n        if (o) return o(row, i - 1);\n        var a = new Function(\"d\", \"return {\" + row.map(function(name, i) {\n          return JSON.stringify(name) + \": d[\" + i + \"]\";\n        }).join(\",\") + \"}\");\n        o = f ? function(row, i) {\n          return f(a(row), i);\n        } : a;\n      });\n    };\n    dsv.parseRows = function(text, f) {\n      var EOL = {}, EOF = {}, rows = [], N = text.length, I = 0, n = 0, t, eol;\n      function token() {\n        if (I >= N) return EOF;\n        if (eol) return eol = false, EOL;\n        var j = I;\n        if (text.charCodeAt(j) === 34) {\n          var i = j;\n          while (i++ < N) {\n            if (text.charCodeAt(i) === 34) {\n              if (text.charCodeAt(i + 1) !== 34) break;\n              ++i;\n            }\n          }\n          I = i + 2;\n          var c = text.charCodeAt(i + 1);\n          if (c === 13) {\n            eol = true;\n            if (text.charCodeAt(i + 2) === 10) ++I;\n          } else if (c === 10) {\n            eol = true;\n          }\n          return text.slice(j + 1, i).replace(/\"\"/g, '\"');\n        }\n        while (I < N) {\n          var c = text.charCodeAt(I++), k = 1;\n          if (c === 10) eol = true; else if (c === 13) {\n            eol = true;\n            if (text.charCodeAt(I) === 10) ++I, ++k;\n          } else if (c !== delimiterCode) continue;\n          return text.slice(j, I - k);\n        }\n        return text.slice(j);\n      }\n      while ((t = token()) !== EOF) {\n        var a = [];\n        while (t !== EOL && t !== EOF) {\n          a.push(t);\n          t = token();\n        }\n        if (f && (a = f(a, n++)) == null) continue;\n        rows.push(a);\n      }\n      return rows;\n    };\n    dsv.format = function(rows) {\n      if (Array.isArray(rows[0])) return dsv.formatRows(rows);\n      var fieldSet = new d3_Set(), fields = [];\n      rows.forEach(function(row) {\n        for (var field in row) {\n          if (!fieldSet.has(field)) {\n            fields.push(fieldSet.add(field));\n          }\n        }\n      });\n      return [ fields.map(formatValue).join(delimiter) ].concat(rows.map(function(row) {\n        return fields.map(function(field) {\n          return formatValue(row[field]);\n        }).join(delimiter);\n      })).join(\"\\n\");\n    };\n    dsv.formatRows = function(rows) {\n      return rows.map(formatRow).join(\"\\n\");\n    };\n    function formatRow(row) {\n      return row.map(formatValue).join(delimiter);\n    }\n    function formatValue(text) {\n      return reFormat.test(text) ? '\"' + text.replace(/\\\"/g, '\"\"') + '\"' : text;\n    }\n    return dsv;\n  };\n  d3.csv = d3.dsv(\",\", \"text/csv\");\n  d3.tsv = d3.dsv(\"\t\", \"text/tab-separated-values\");\n  var d3_timer_queueHead, d3_timer_queueTail, d3_timer_interval, d3_timer_timeout, d3_timer_frame = this[d3_vendorSymbol(this, \"requestAnimationFrame\")] || function(callback) {\n    setTimeout(callback, 17);\n  };\n  d3.timer = function() {\n    d3_timer.apply(this, arguments);\n  };\n  function d3_timer(callback, delay, then) {\n    var n = arguments.length;\n    if (n < 2) delay = 0;\n    if (n < 3) then = Date.now();\n    var time = then + delay, timer = {\n      c: callback,\n      t: time,\n      n: null\n    };\n    if (d3_timer_queueTail) d3_timer_queueTail.n = timer; else d3_timer_queueHead = timer;\n    d3_timer_queueTail = timer;\n    if (!d3_timer_interval) {\n      d3_timer_timeout = clearTimeout(d3_timer_timeout);\n      d3_timer_interval = 1;\n      d3_timer_frame(d3_timer_step);\n    }\n    return timer;\n  }\n  function d3_timer_step() {\n    var now = d3_timer_mark(), delay = d3_timer_sweep() - now;\n    if (delay > 24) {\n      if (isFinite(delay)) {\n        clearTimeout(d3_timer_timeout);\n        d3_timer_timeout = setTimeout(d3_timer_step, delay);\n      }\n      d3_timer_interval = 0;\n    } else {\n      d3_timer_interval = 1;\n      d3_timer_frame(d3_timer_step);\n    }\n  }\n  d3.timer.flush = function() {\n    d3_timer_mark();\n    d3_timer_sweep();\n  };\n  function d3_timer_mark() {\n    var now = Date.now(), timer = d3_timer_queueHead;\n    while (timer) {\n      if (now >= timer.t && timer.c(now - timer.t)) timer.c = null;\n      timer = timer.n;\n    }\n    return now;\n  }\n  function d3_timer_sweep() {\n    var t0, t1 = d3_timer_queueHead, time = Infinity;\n    while (t1) {\n      if (t1.c) {\n        if (t1.t < time) time = t1.t;\n        t1 = (t0 = t1).n;\n      } else {\n        t1 = t0 ? t0.n = t1.n : d3_timer_queueHead = t1.n;\n      }\n    }\n    d3_timer_queueTail = t0;\n    return time;\n  }\n  function d3_format_precision(x, p) {\n    return p - (x ? Math.ceil(Math.log(x) / Math.LN10) : 1);\n  }\n  d3.round = function(x, n) {\n    return n ? Math.round(x * (n = Math.pow(10, n))) / n : Math.round(x);\n  };\n  var d3_formatPrefixes = [ \"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"µ\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\" ].map(d3_formatPrefix);\n  d3.formatPrefix = function(value, precision) {\n    var i = 0;\n    if (value = +value) {\n      if (value < 0) value *= -1;\n      if (precision) value = d3.round(value, d3_format_precision(value, precision));\n      i = 1 + Math.floor(1e-12 + Math.log(value) / Math.LN10);\n      i = Math.max(-24, Math.min(24, Math.floor((i - 1) / 3) * 3));\n    }\n    return d3_formatPrefixes[8 + i / 3];\n  };\n  function d3_formatPrefix(d, i) {\n    var k = Math.pow(10, abs(8 - i) * 3);\n    return {\n      scale: i > 8 ? function(d) {\n        return d / k;\n      } : function(d) {\n        return d * k;\n      },\n      symbol: d\n    };\n  }\n  function d3_locale_numberFormat(locale) {\n    var locale_decimal = locale.decimal, locale_thousands = locale.thousands, locale_grouping = locale.grouping, locale_currency = locale.currency, formatGroup = locale_grouping && locale_thousands ? function(value, width) {\n      var i = value.length, t = [], j = 0, g = locale_grouping[0], length = 0;\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 = locale_grouping[j = (j + 1) % locale_grouping.length];\n      }\n      return t.reverse().join(locale_thousands);\n    } : d3_identity;\n    return function(specifier) {\n      var match = d3_format_re.exec(specifier), fill = match[1] || \" \", align = match[2] || \">\", sign = match[3] || \"-\", symbol = match[4] || \"\", zfill = match[5], width = +match[6], comma = match[7], precision = match[8], type = match[9], scale = 1, prefix = \"\", suffix = \"\", integer = false, exponent = true;\n      if (precision) precision = +precision.substring(1);\n      if (zfill || fill === \"0\" && align === \"=\") {\n        zfill = fill = \"0\";\n        align = \"=\";\n      }\n      switch (type) {\n       case \"n\":\n        comma = true;\n        type = \"g\";\n        break;\n\n       case \"%\":\n        scale = 100;\n        suffix = \"%\";\n        type = \"f\";\n        break;\n\n       case \"p\":\n        scale = 100;\n        suffix = \"%\";\n        type = \"r\";\n        break;\n\n       case \"b\":\n       case \"o\":\n       case \"x\":\n       case \"X\":\n        if (symbol === \"#\") prefix = \"0\" + type.toLowerCase();\n\n       case \"c\":\n        exponent = false;\n\n       case \"d\":\n        integer = true;\n        precision = 0;\n        break;\n\n       case \"s\":\n        scale = -1;\n        type = \"r\";\n        break;\n      }\n      if (symbol === \"$\") prefix = locale_currency[0], suffix = locale_currency[1];\n      if (type == \"r\" && !precision) type = \"g\";\n      if (precision != null) {\n        if (type == \"g\") precision = Math.max(1, Math.min(21, precision)); else if (type == \"e\" || type == \"f\") precision = Math.max(0, Math.min(20, precision));\n      }\n      type = d3_format_types.get(type) || d3_format_typeDefault;\n      var zcomma = zfill && comma;\n      return function(value) {\n        var fullSuffix = suffix;\n        if (integer && value % 1) return \"\";\n        var negative = value < 0 || value === 0 && 1 / value < 0 ? (value = -value, \"-\") : sign === \"-\" ? \"\" : sign;\n        if (scale < 0) {\n          var unit = d3.formatPrefix(value, precision);\n          value = unit.scale(value);\n          fullSuffix = unit.symbol + suffix;\n        } else {\n          value *= scale;\n        }\n        value = type(value, precision);\n        var i = value.lastIndexOf(\".\"), before, after;\n        if (i < 0) {\n          var j = exponent ? value.lastIndexOf(\"e\") : -1;\n          if (j < 0) before = value, after = \"\"; else before = value.substring(0, j), after = value.substring(j);\n        } else {\n          before = value.substring(0, i);\n          after = locale_decimal + value.substring(i + 1);\n        }\n        if (!zfill && comma) before = formatGroup(before, Infinity);\n        var length = prefix.length + before.length + after.length + (zcomma ? 0 : negative.length), padding = length < width ? new Array(length = width - length + 1).join(fill) : \"\";\n        if (zcomma) before = formatGroup(padding + before, padding.length ? width - after.length : Infinity);\n        negative += prefix;\n        value = before + after;\n        return (align === \"<\" ? negative + value + padding : align === \">\" ? padding + negative + value : align === \"^\" ? padding.substring(0, length >>= 1) + negative + value + padding.substring(length) : negative + (zcomma ? value : padding + value)) + fullSuffix;\n      };\n    };\n  }\n  var d3_format_re = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i;\n  var d3_format_types = d3.map({\n    b: function(x) {\n      return x.toString(2);\n    },\n    c: function(x) {\n      return String.fromCharCode(x);\n    },\n    o: function(x) {\n      return x.toString(8);\n    },\n    x: function(x) {\n      return x.toString(16);\n    },\n    X: function(x) {\n      return x.toString(16).toUpperCase();\n    },\n    g: function(x, p) {\n      return x.toPrecision(p);\n    },\n    e: function(x, p) {\n      return x.toExponential(p);\n    },\n    f: function(x, p) {\n      return x.toFixed(p);\n    },\n    r: function(x, p) {\n      return (x = d3.round(x, d3_format_precision(x, p))).toFixed(Math.max(0, Math.min(20, d3_format_precision(x * (1 + 1e-15), p))));\n    }\n  });\n  function d3_format_typeDefault(x) {\n    return x + \"\";\n  }\n  var d3_time = d3.time = {}, d3_date = Date;\n  function d3_date_utc() {\n    this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0]);\n  }\n  d3_date_utc.prototype = {\n    getDate: function() {\n      return this._.getUTCDate();\n    },\n    getDay: function() {\n      return this._.getUTCDay();\n    },\n    getFullYear: function() {\n      return this._.getUTCFullYear();\n    },\n    getHours: function() {\n      return this._.getUTCHours();\n    },\n    getMilliseconds: function() {\n      return this._.getUTCMilliseconds();\n    },\n    getMinutes: function() {\n      return this._.getUTCMinutes();\n    },\n    getMonth: function() {\n      return this._.getUTCMonth();\n    },\n    getSeconds: function() {\n      return this._.getUTCSeconds();\n    },\n    getTime: function() {\n      return this._.getTime();\n    },\n    getTimezoneOffset: function() {\n      return 0;\n    },\n    valueOf: function() {\n      return this._.valueOf();\n    },\n    setDate: function() {\n      d3_time_prototype.setUTCDate.apply(this._, arguments);\n    },\n    setDay: function() {\n      d3_time_prototype.setUTCDay.apply(this._, arguments);\n    },\n    setFullYear: function() {\n      d3_time_prototype.setUTCFullYear.apply(this._, arguments);\n    },\n    setHours: function() {\n      d3_time_prototype.setUTCHours.apply(this._, arguments);\n    },\n    setMilliseconds: function() {\n      d3_time_prototype.setUTCMilliseconds.apply(this._, arguments);\n    },\n    setMinutes: function() {\n      d3_time_prototype.setUTCMinutes.apply(this._, arguments);\n    },\n    setMonth: function() {\n      d3_time_prototype.setUTCMonth.apply(this._, arguments);\n    },\n    setSeconds: function() {\n      d3_time_prototype.setUTCSeconds.apply(this._, arguments);\n    },\n    setTime: function() {\n      d3_time_prototype.setTime.apply(this._, arguments);\n    }\n  };\n  var d3_time_prototype = Date.prototype;\n  function d3_time_interval(local, step, number) {\n    function round(date) {\n      var d0 = local(date), d1 = offset(d0, 1);\n      return date - d0 < d1 - date ? d0 : d1;\n    }\n    function ceil(date) {\n      step(date = local(new d3_date(date - 1)), 1);\n      return date;\n    }\n    function offset(date, k) {\n      step(date = new d3_date(+date), k);\n      return date;\n    }\n    function range(t0, t1, dt) {\n      var time = ceil(t0), times = [];\n      if (dt > 1) {\n        while (time < t1) {\n          if (!(number(time) % dt)) times.push(new Date(+time));\n          step(time, 1);\n        }\n      } else {\n        while (time < t1) times.push(new Date(+time)), step(time, 1);\n      }\n      return times;\n    }\n    function range_utc(t0, t1, dt) {\n      try {\n        d3_date = d3_date_utc;\n        var utc = new d3_date_utc();\n        utc._ = t0;\n        return range(utc, t1, dt);\n      } finally {\n        d3_date = Date;\n      }\n    }\n    local.floor = local;\n    local.round = round;\n    local.ceil = ceil;\n    local.offset = offset;\n    local.range = range;\n    var utc = local.utc = d3_time_interval_utc(local);\n    utc.floor = utc;\n    utc.round = d3_time_interval_utc(round);\n    utc.ceil = d3_time_interval_utc(ceil);\n    utc.offset = d3_time_interval_utc(offset);\n    utc.range = range_utc;\n    return local;\n  }\n  function d3_time_interval_utc(method) {\n    return function(date, k) {\n      try {\n        d3_date = d3_date_utc;\n        var utc = new d3_date_utc();\n        utc._ = date;\n        return method(utc, k)._;\n      } finally {\n        d3_date = Date;\n      }\n    };\n  }\n  d3_time.year = d3_time_interval(function(date) {\n    date = d3_time.day(date);\n    date.setMonth(0, 1);\n    return date;\n  }, function(date, offset) {\n    date.setFullYear(date.getFullYear() + offset);\n  }, function(date) {\n    return date.getFullYear();\n  });\n  d3_time.years = d3_time.year.range;\n  d3_time.years.utc = d3_time.year.utc.range;\n  d3_time.day = d3_time_interval(function(date) {\n    var day = new d3_date(2e3, 0);\n    day.setFullYear(date.getFullYear(), date.getMonth(), date.getDate());\n    return day;\n  }, function(date, offset) {\n    date.setDate(date.getDate() + offset);\n  }, function(date) {\n    return date.getDate() - 1;\n  });\n  d3_time.days = d3_time.day.range;\n  d3_time.days.utc = d3_time.day.utc.range;\n  d3_time.dayOfYear = function(date) {\n    var year = d3_time.year(date);\n    return Math.floor((date - year - (date.getTimezoneOffset() - year.getTimezoneOffset()) * 6e4) / 864e5);\n  };\n  [ \"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\" ].forEach(function(day, i) {\n    i = 7 - i;\n    var interval = d3_time[day] = d3_time_interval(function(date) {\n      (date = d3_time.day(date)).setDate(date.getDate() - (date.getDay() + i) % 7);\n      return date;\n    }, function(date, offset) {\n      date.setDate(date.getDate() + Math.floor(offset) * 7);\n    }, function(date) {\n      var day = d3_time.year(date).getDay();\n      return Math.floor((d3_time.dayOfYear(date) + (day + i) % 7) / 7) - (day !== i);\n    });\n    d3_time[day + \"s\"] = interval.range;\n    d3_time[day + \"s\"].utc = interval.utc.range;\n    d3_time[day + \"OfYear\"] = function(date) {\n      var day = d3_time.year(date).getDay();\n      return Math.floor((d3_time.dayOfYear(date) + (day + i) % 7) / 7);\n    };\n  });\n  d3_time.week = d3_time.sunday;\n  d3_time.weeks = d3_time.sunday.range;\n  d3_time.weeks.utc = d3_time.sunday.utc.range;\n  d3_time.weekOfYear = d3_time.sundayOfYear;\n  function d3_locale_timeFormat(locale) {\n    var locale_dateTime = locale.dateTime, locale_date = locale.date, locale_time = locale.time, locale_periods = locale.periods, locale_days = locale.days, locale_shortDays = locale.shortDays, locale_months = locale.months, locale_shortMonths = locale.shortMonths;\n    function d3_time_format(template) {\n      var n = template.length;\n      function format(date) {\n        var string = [], i = -1, j = 0, c, p, f;\n        while (++i < n) {\n          if (template.charCodeAt(i) === 37) {\n            string.push(template.slice(j, i));\n            if ((p = d3_time_formatPads[c = template.charAt(++i)]) != null) c = template.charAt(++i);\n            if (f = d3_time_formats[c]) c = f(date, p == null ? c === \"e\" ? \" \" : \"0\" : p);\n            string.push(c);\n            j = i + 1;\n          }\n        }\n        string.push(template.slice(j, i));\n        return string.join(\"\");\n      }\n      format.parse = function(string) {\n        var d = {\n          y: 1900,\n          m: 0,\n          d: 1,\n          H: 0,\n          M: 0,\n          S: 0,\n          L: 0,\n          Z: null\n        }, i = d3_time_parse(d, template, string, 0);\n        if (i != string.length) return null;\n        if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n        var localZ = d.Z != null && d3_date !== d3_date_utc, date = new (localZ ? d3_date_utc : d3_date)();\n        if (\"j\" in d) date.setFullYear(d.y, 0, d.j); else if (\"W\" in d || \"U\" in d) {\n          if (!(\"w\" in d)) d.w = \"W\" in d ? 1 : 0;\n          date.setFullYear(d.y, 0, 1);\n          date.setFullYear(d.y, 0, \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (date.getDay() + 5) % 7 : d.w + d.U * 7 - (date.getDay() + 6) % 7);\n        } else date.setFullYear(d.y, d.m, d.d);\n        date.setHours(d.H + (d.Z / 100 | 0), d.M + d.Z % 100, d.S, d.L);\n        return localZ ? date._ : date;\n      };\n      format.toString = function() {\n        return template;\n      };\n      return format;\n    }\n    function d3_time_parse(date, template, string, j) {\n      var c, p, t, i = 0, n = template.length, m = string.length;\n      while (i < n) {\n        if (j >= m) return -1;\n        c = template.charCodeAt(i++);\n        if (c === 37) {\n          t = template.charAt(i++);\n          p = d3_time_parsers[t in d3_time_formatPads ? template.charAt(i++) : t];\n          if (!p || (j = p(date, string, j)) < 0) return -1;\n        } else if (c != string.charCodeAt(j++)) {\n          return -1;\n        }\n      }\n      return j;\n    }\n    d3_time_format.utc = function(template) {\n      var local = d3_time_format(template);\n      function format(date) {\n        try {\n          d3_date = d3_date_utc;\n          var utc = new d3_date();\n          utc._ = date;\n          return local(utc);\n        } finally {\n          d3_date = Date;\n        }\n      }\n      format.parse = function(string) {\n        try {\n          d3_date = d3_date_utc;\n          var date = local.parse(string);\n          return date && date._;\n        } finally {\n          d3_date = Date;\n        }\n      };\n      format.toString = local.toString;\n      return format;\n    };\n    d3_time_format.multi = d3_time_format.utc.multi = d3_time_formatMulti;\n    var d3_time_periodLookup = d3.map(), d3_time_dayRe = d3_time_formatRe(locale_days), d3_time_dayLookup = d3_time_formatLookup(locale_days), d3_time_dayAbbrevRe = d3_time_formatRe(locale_shortDays), d3_time_dayAbbrevLookup = d3_time_formatLookup(locale_shortDays), d3_time_monthRe = d3_time_formatRe(locale_months), d3_time_monthLookup = d3_time_formatLookup(locale_months), d3_time_monthAbbrevRe = d3_time_formatRe(locale_shortMonths), d3_time_monthAbbrevLookup = d3_time_formatLookup(locale_shortMonths);\n    locale_periods.forEach(function(p, i) {\n      d3_time_periodLookup.set(p.toLowerCase(), i);\n    });\n    var d3_time_formats = {\n      a: function(d) {\n        return locale_shortDays[d.getDay()];\n      },\n      A: function(d) {\n        return locale_days[d.getDay()];\n      },\n      b: function(d) {\n        return locale_shortMonths[d.getMonth()];\n      },\n      B: function(d) {\n        return locale_months[d.getMonth()];\n      },\n      c: d3_time_format(locale_dateTime),\n      d: function(d, p) {\n        return d3_time_formatPad(d.getDate(), p, 2);\n      },\n      e: function(d, p) {\n        return d3_time_formatPad(d.getDate(), p, 2);\n      },\n      H: function(d, p) {\n        return d3_time_formatPad(d.getHours(), p, 2);\n      },\n      I: function(d, p) {\n        return d3_time_formatPad(d.getHours() % 12 || 12, p, 2);\n      },\n      j: function(d, p) {\n        return d3_time_formatPad(1 + d3_time.dayOfYear(d), p, 3);\n      },\n      L: function(d, p) {\n        return d3_time_formatPad(d.getMilliseconds(), p, 3);\n      },\n      m: function(d, p) {\n        return d3_time_formatPad(d.getMonth() + 1, p, 2);\n      },\n      M: function(d, p) {\n        return d3_time_formatPad(d.getMinutes(), p, 2);\n      },\n      p: function(d) {\n        return locale_periods[+(d.getHours() >= 12)];\n      },\n      S: function(d, p) {\n        return d3_time_formatPad(d.getSeconds(), p, 2);\n      },\n      U: function(d, p) {\n        return d3_time_formatPad(d3_time.sundayOfYear(d), p, 2);\n      },\n      w: function(d) {\n        return d.getDay();\n      },\n      W: function(d, p) {\n        return d3_time_formatPad(d3_time.mondayOfYear(d), p, 2);\n      },\n      x: d3_time_format(locale_date),\n      X: d3_time_format(locale_time),\n      y: function(d, p) {\n        return d3_time_formatPad(d.getFullYear() % 100, p, 2);\n      },\n      Y: function(d, p) {\n        return d3_time_formatPad(d.getFullYear() % 1e4, p, 4);\n      },\n      Z: d3_time_zone,\n      \"%\": function() {\n        return \"%\";\n      }\n    };\n    var d3_time_parsers = {\n      a: d3_time_parseWeekdayAbbrev,\n      A: d3_time_parseWeekday,\n      b: d3_time_parseMonthAbbrev,\n      B: d3_time_parseMonth,\n      c: d3_time_parseLocaleFull,\n      d: d3_time_parseDay,\n      e: d3_time_parseDay,\n      H: d3_time_parseHour24,\n      I: d3_time_parseHour24,\n      j: d3_time_parseDayOfYear,\n      L: d3_time_parseMilliseconds,\n      m: d3_time_parseMonthNumber,\n      M: d3_time_parseMinutes,\n      p: d3_time_parseAmPm,\n      S: d3_time_parseSeconds,\n      U: d3_time_parseWeekNumberSunday,\n      w: d3_time_parseWeekdayNumber,\n      W: d3_time_parseWeekNumberMonday,\n      x: d3_time_parseLocaleDate,\n      X: d3_time_parseLocaleTime,\n      y: d3_time_parseYear,\n      Y: d3_time_parseFullYear,\n      Z: d3_time_parseZone,\n      \"%\": d3_time_parseLiteralPercent\n    };\n    function d3_time_parseWeekdayAbbrev(date, string, i) {\n      d3_time_dayAbbrevRe.lastIndex = 0;\n      var n = d3_time_dayAbbrevRe.exec(string.slice(i));\n      return n ? (date.w = d3_time_dayAbbrevLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n    }\n    function d3_time_parseWeekday(date, string, i) {\n      d3_time_dayRe.lastIndex = 0;\n      var n = d3_time_dayRe.exec(string.slice(i));\n      return n ? (date.w = d3_time_dayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n    }\n    function d3_time_parseMonthAbbrev(date, string, i) {\n      d3_time_monthAbbrevRe.lastIndex = 0;\n      var n = d3_time_monthAbbrevRe.exec(string.slice(i));\n      return n ? (date.m = d3_time_monthAbbrevLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n    }\n    function d3_time_parseMonth(date, string, i) {\n      d3_time_monthRe.lastIndex = 0;\n      var n = d3_time_monthRe.exec(string.slice(i));\n      return n ? (date.m = d3_time_monthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n    }\n    function d3_time_parseLocaleFull(date, string, i) {\n      return d3_time_parse(date, d3_time_formats.c.toString(), string, i);\n    }\n    function d3_time_parseLocaleDate(date, string, i) {\n      return d3_time_parse(date, d3_time_formats.x.toString(), string, i);\n    }\n    function d3_time_parseLocaleTime(date, string, i) {\n      return d3_time_parse(date, d3_time_formats.X.toString(), string, i);\n    }\n    function d3_time_parseAmPm(date, string, i) {\n      var n = d3_time_periodLookup.get(string.slice(i, i += 2).toLowerCase());\n      return n == null ? -1 : (date.p = n, i);\n    }\n    return d3_time_format;\n  }\n  var d3_time_formatPads = {\n    \"-\": \"\",\n    _: \" \",\n    \"0\": \"0\"\n  }, d3_time_numberRe = /^\\s*\\d+/, d3_time_percentRe = /^%/;\n  function d3_time_formatPad(value, fill, width) {\n    var sign = value < 0 ? \"-\" : \"\", string = (sign ? -value : value) + \"\", length = string.length;\n    return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n  }\n  function d3_time_formatRe(names) {\n    return new RegExp(\"^(?:\" + names.map(d3.requote).join(\"|\") + \")\", \"i\");\n  }\n  function d3_time_formatLookup(names) {\n    var map = new d3_Map(), i = -1, n = names.length;\n    while (++i < n) map.set(names[i].toLowerCase(), i);\n    return map;\n  }\n  function d3_time_parseWeekdayNumber(date, string, i) {\n    d3_time_numberRe.lastIndex = 0;\n    var n = d3_time_numberRe.exec(string.slice(i, i + 1));\n    return n ? (date.w = +n[0], i + n[0].length) : -1;\n  }\n  function d3_time_parseWeekNumberSunday(date, string, i) {\n    d3_time_numberRe.lastIndex = 0;\n    var n = d3_time_numberRe.exec(string.slice(i));\n    return n ? (date.U = +n[0], i + n[0].length) : -1;\n  }\n  function d3_time_parseWeekNumberMonday(date, string, i) {\n    d3_time_numberRe.lastIndex = 0;\n    var n = d3_time_numberRe.exec(string.slice(i));\n    return n ? (date.W = +n[0], i + n[0].length) : -1;\n  }\n  function d3_time_parseFullYear(date, string, i) {\n    d3_time_numberRe.lastIndex = 0;\n    var n = d3_time_numberRe.exec(string.slice(i, i + 4));\n    return n ? (date.y = +n[0], i + n[0].length) : -1;\n  }\n  function d3_time_parseYear(date, string, i) {\n    d3_time_numberRe.lastIndex = 0;\n    var n = d3_time_numberRe.exec(string.slice(i, i + 2));\n    return n ? (date.y = d3_time_expandYear(+n[0]), i + n[0].length) : -1;\n  }\n  function d3_time_parseZone(date, string, i) {\n    return /^[+-]\\d{4}$/.test(string = string.slice(i, i + 5)) ? (date.Z = -string, \n    i + 5) : -1;\n  }\n  function d3_time_expandYear(d) {\n    return d + (d > 68 ? 1900 : 2e3);\n  }\n  function d3_time_parseMonthNumber(date, string, i) {\n    d3_time_numberRe.lastIndex = 0;\n    var n = d3_time_numberRe.exec(string.slice(i, i + 2));\n    return n ? (date.m = n[0] - 1, i + n[0].length) : -1;\n  }\n  function d3_time_parseDay(date, string, i) {\n    d3_time_numberRe.lastIndex = 0;\n    var n = d3_time_numberRe.exec(string.slice(i, i + 2));\n    return n ? (date.d = +n[0], i + n[0].length) : -1;\n  }\n  function d3_time_parseDayOfYear(date, string, i) {\n    d3_time_numberRe.lastIndex = 0;\n    var n = d3_time_numberRe.exec(string.slice(i, i + 3));\n    return n ? (date.j = +n[0], i + n[0].length) : -1;\n  }\n  function d3_time_parseHour24(date, string, i) {\n    d3_time_numberRe.lastIndex = 0;\n    var n = d3_time_numberRe.exec(string.slice(i, i + 2));\n    return n ? (date.H = +n[0], i + n[0].length) : -1;\n  }\n  function d3_time_parseMinutes(date, string, i) {\n    d3_time_numberRe.lastIndex = 0;\n    var n = d3_time_numberRe.exec(string.slice(i, i + 2));\n    return n ? (date.M = +n[0], i + n[0].length) : -1;\n  }\n  function d3_time_parseSeconds(date, string, i) {\n    d3_time_numberRe.lastIndex = 0;\n    var n = d3_time_numberRe.exec(string.slice(i, i + 2));\n    return n ? (date.S = +n[0], i + n[0].length) : -1;\n  }\n  function d3_time_parseMilliseconds(date, string, i) {\n    d3_time_numberRe.lastIndex = 0;\n    var n = d3_time_numberRe.exec(string.slice(i, i + 3));\n    return n ? (date.L = +n[0], i + n[0].length) : -1;\n  }\n  function d3_time_zone(d) {\n    var z = d.getTimezoneOffset(), zs = z > 0 ? \"-\" : \"+\", zh = abs(z) / 60 | 0, zm = abs(z) % 60;\n    return zs + d3_time_formatPad(zh, \"0\", 2) + d3_time_formatPad(zm, \"0\", 2);\n  }\n  function d3_time_parseLiteralPercent(date, string, i) {\n    d3_time_percentRe.lastIndex = 0;\n    var n = d3_time_percentRe.exec(string.slice(i, i + 1));\n    return n ? i + n[0].length : -1;\n  }\n  function d3_time_formatMulti(formats) {\n    var n = formats.length, i = -1;\n    while (++i < n) formats[i][0] = this(formats[i][0]);\n    return function(date) {\n      var i = 0, f = formats[i];\n      while (!f[1](date)) f = formats[++i];\n      return f[0](date);\n    };\n  }\n  d3.locale = function(locale) {\n    return {\n      numberFormat: d3_locale_numberFormat(locale),\n      timeFormat: d3_locale_timeFormat(locale)\n    };\n  };\n  var d3_locale_enUS = d3.locale({\n    decimal: \".\",\n    thousands: \",\",\n    grouping: [ 3 ],\n    currency: [ \"$\", \"\" ],\n    dateTime: \"%a %b %e %X %Y\",\n    date: \"%m/%d/%Y\",\n    time: \"%H:%M:%S\",\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  d3.format = d3_locale_enUS.numberFormat;\n  d3.geo = {};\n  function d3_adder() {}\n  d3_adder.prototype = {\n    s: 0,\n    t: 0,\n    add: function(y) {\n      d3_adderSum(y, this.t, d3_adderTemp);\n      d3_adderSum(d3_adderTemp.s, this.s, this);\n      if (this.s) this.t += d3_adderTemp.t; else this.s = d3_adderTemp.t;\n    },\n    reset: function() {\n      this.s = this.t = 0;\n    },\n    valueOf: function() {\n      return this.s;\n    }\n  };\n  var d3_adderTemp = new d3_adder();\n  function d3_adderSum(a, b, o) {\n    var x = o.s = a + b, bv = x - a, av = x - bv;\n    o.t = a - av + (b - bv);\n  }\n  d3.geo.stream = function(object, listener) {\n    if (object && d3_geo_streamObjectType.hasOwnProperty(object.type)) {\n      d3_geo_streamObjectType[object.type](object, listener);\n    } else {\n      d3_geo_streamGeometry(object, listener);\n    }\n  };\n  function d3_geo_streamGeometry(geometry, listener) {\n    if (geometry && d3_geo_streamGeometryType.hasOwnProperty(geometry.type)) {\n      d3_geo_streamGeometryType[geometry.type](geometry, listener);\n    }\n  }\n  var d3_geo_streamObjectType = {\n    Feature: function(feature, listener) {\n      d3_geo_streamGeometry(feature.geometry, listener);\n    },\n    FeatureCollection: function(object, listener) {\n      var features = object.features, i = -1, n = features.length;\n      while (++i < n) d3_geo_streamGeometry(features[i].geometry, listener);\n    }\n  };\n  var d3_geo_streamGeometryType = {\n    Sphere: function(object, listener) {\n      listener.sphere();\n    },\n    Point: function(object, listener) {\n      object = object.coordinates;\n      listener.point(object[0], object[1], object[2]);\n    },\n    MultiPoint: function(object, listener) {\n      var coordinates = object.coordinates, i = -1, n = coordinates.length;\n      while (++i < n) object = coordinates[i], listener.point(object[0], object[1], object[2]);\n    },\n    LineString: function(object, listener) {\n      d3_geo_streamLine(object.coordinates, listener, 0);\n    },\n    MultiLineString: function(object, listener) {\n      var coordinates = object.coordinates, i = -1, n = coordinates.length;\n      while (++i < n) d3_geo_streamLine(coordinates[i], listener, 0);\n    },\n    Polygon: function(object, listener) {\n      d3_geo_streamPolygon(object.coordinates, listener);\n    },\n    MultiPolygon: function(object, listener) {\n      var coordinates = object.coordinates, i = -1, n = coordinates.length;\n      while (++i < n) d3_geo_streamPolygon(coordinates[i], listener);\n    },\n    GeometryCollection: function(object, listener) {\n      var geometries = object.geometries, i = -1, n = geometries.length;\n      while (++i < n) d3_geo_streamGeometry(geometries[i], listener);\n    }\n  };\n  function d3_geo_streamLine(coordinates, listener, closed) {\n    var i = -1, n = coordinates.length - closed, coordinate;\n    listener.lineStart();\n    while (++i < n) coordinate = coordinates[i], listener.point(coordinate[0], coordinate[1], coordinate[2]);\n    listener.lineEnd();\n  }\n  function d3_geo_streamPolygon(coordinates, listener) {\n    var i = -1, n = coordinates.length;\n    listener.polygonStart();\n    while (++i < n) d3_geo_streamLine(coordinates[i], listener, 1);\n    listener.polygonEnd();\n  }\n  d3.geo.area = function(object) {\n    d3_geo_areaSum = 0;\n    d3.geo.stream(object, d3_geo_area);\n    return d3_geo_areaSum;\n  };\n  var d3_geo_areaSum, d3_geo_areaRingSum = new d3_adder();\n  var d3_geo_area = {\n    sphere: function() {\n      d3_geo_areaSum += 4 * π;\n    },\n    point: d3_noop,\n    lineStart: d3_noop,\n    lineEnd: d3_noop,\n    polygonStart: function() {\n      d3_geo_areaRingSum.reset();\n      d3_geo_area.lineStart = d3_geo_areaRingStart;\n    },\n    polygonEnd: function() {\n      var area = 2 * d3_geo_areaRingSum;\n      d3_geo_areaSum += area < 0 ? 4 * π + area : area;\n      d3_geo_area.lineStart = d3_geo_area.lineEnd = d3_geo_area.point = d3_noop;\n    }\n  };\n  function d3_geo_areaRingStart() {\n    var λ00, φ00, λ0, cosφ0, sinφ0;\n    d3_geo_area.point = function(λ, φ) {\n      d3_geo_area.point = nextPoint;\n      λ0 = (λ00 = λ) * d3_radians, cosφ0 = Math.cos(φ = (φ00 = φ) * d3_radians / 2 + π / 4), \n      sinφ0 = Math.sin(φ);\n    };\n    function nextPoint(λ, φ) {\n      λ *= d3_radians;\n      φ = φ * d3_radians / 2 + π / 4;\n      var dλ = λ - λ0, sdλ = dλ >= 0 ? 1 : -1, adλ = sdλ * dλ, cosφ = Math.cos(φ), sinφ = Math.sin(φ), k = sinφ0 * sinφ, u = cosφ0 * cosφ + k * Math.cos(adλ), v = k * sdλ * Math.sin(adλ);\n      d3_geo_areaRingSum.add(Math.atan2(v, u));\n      λ0 = λ, cosφ0 = cosφ, sinφ0 = sinφ;\n    }\n    d3_geo_area.lineEnd = function() {\n      nextPoint(λ00, φ00);\n    };\n  }\n  function d3_geo_cartesian(spherical) {\n    var λ = spherical[0], φ = spherical[1], cosφ = Math.cos(φ);\n    return [ cosφ * Math.cos(λ), cosφ * Math.sin(λ), Math.sin(φ) ];\n  }\n  function d3_geo_cartesianDot(a, b) {\n    return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n  }\n  function d3_geo_cartesianCross(a, b) {\n    return [ a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0] ];\n  }\n  function d3_geo_cartesianAdd(a, b) {\n    a[0] += b[0];\n    a[1] += b[1];\n    a[2] += b[2];\n  }\n  function d3_geo_cartesianScale(vector, k) {\n    return [ vector[0] * k, vector[1] * k, vector[2] * k ];\n  }\n  function d3_geo_cartesianNormalize(d) {\n    var l = Math.sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);\n    d[0] /= l;\n    d[1] /= l;\n    d[2] /= l;\n  }\n  function d3_geo_spherical(cartesian) {\n    return [ Math.atan2(cartesian[1], cartesian[0]), d3_asin(cartesian[2]) ];\n  }\n  function d3_geo_sphericalEqual(a, b) {\n    return abs(a[0] - b[0]) < ε && abs(a[1] - b[1]) < ε;\n  }\n  d3.geo.bounds = function() {\n    var λ0, φ0, λ1, φ1, λ_, λ__, φ__, p0, dλSum, ranges, range;\n    var bound = {\n      point: point,\n      lineStart: lineStart,\n      lineEnd: lineEnd,\n      polygonStart: function() {\n        bound.point = ringPoint;\n        bound.lineStart = ringStart;\n        bound.lineEnd = ringEnd;\n        dλSum = 0;\n        d3_geo_area.polygonStart();\n      },\n      polygonEnd: function() {\n        d3_geo_area.polygonEnd();\n        bound.point = point;\n        bound.lineStart = lineStart;\n        bound.lineEnd = lineEnd;\n        if (d3_geo_areaRingSum < 0) λ0 = -(λ1 = 180), φ0 = -(φ1 = 90); else if (dλSum > ε) φ1 = 90; else if (dλSum < -ε) φ0 = -90;\n        range[0] = λ0, range[1] = λ1;\n      }\n    };\n    function point(λ, φ) {\n      ranges.push(range = [ λ0 = λ, λ1 = λ ]);\n      if (φ < φ0) φ0 = φ;\n      if (φ > φ1) φ1 = φ;\n    }\n    function linePoint(λ, φ) {\n      var p = d3_geo_cartesian([ λ * d3_radians, φ * d3_radians ]);\n      if (p0) {\n        var normal = d3_geo_cartesianCross(p0, p), equatorial = [ normal[1], -normal[0], 0 ], inflection = d3_geo_cartesianCross(equatorial, normal);\n        d3_geo_cartesianNormalize(inflection);\n        inflection = d3_geo_spherical(inflection);\n        var dλ = λ - λ_, s = dλ > 0 ? 1 : -1, λi = inflection[0] * d3_degrees * s, antimeridian = abs(dλ) > 180;\n        if (antimeridian ^ (s * λ_ < λi && λi < s * λ)) {\n          var φi = inflection[1] * d3_degrees;\n          if (φi > φ1) φ1 = φi;\n        } else if (λi = (λi + 360) % 360 - 180, antimeridian ^ (s * λ_ < λi && λi < s * λ)) {\n          var φi = -inflection[1] * d3_degrees;\n          if (φi < φ0) φ0 = φi;\n        } else {\n          if (φ < φ0) φ0 = φ;\n          if (φ > φ1) φ1 = φ;\n        }\n        if (antimeridian) {\n          if (λ < λ_) {\n            if (angle(λ0, λ) > angle(λ0, λ1)) λ1 = λ;\n          } else {\n            if (angle(λ, λ1) > angle(λ0, λ1)) λ0 = λ;\n          }\n        } else {\n          if (λ1 >= λ0) {\n            if (λ < λ0) λ0 = λ;\n            if (λ > λ1) λ1 = λ;\n          } else {\n            if (λ > λ_) {\n              if (angle(λ0, λ) > angle(λ0, λ1)) λ1 = λ;\n            } else {\n              if (angle(λ, λ1) > angle(λ0, λ1)) λ0 = λ;\n            }\n          }\n        }\n      } else {\n        point(λ, φ);\n      }\n      p0 = p, λ_ = λ;\n    }\n    function lineStart() {\n      bound.point = linePoint;\n    }\n    function lineEnd() {\n      range[0] = λ0, range[1] = λ1;\n      bound.point = point;\n      p0 = null;\n    }\n    function ringPoint(λ, φ) {\n      if (p0) {\n        var dλ = λ - λ_;\n        dλSum += abs(dλ) > 180 ? dλ + (dλ > 0 ? 360 : -360) : dλ;\n      } else λ__ = λ, φ__ = φ;\n      d3_geo_area.point(λ, φ);\n      linePoint(λ, φ);\n    }\n    function ringStart() {\n      d3_geo_area.lineStart();\n    }\n    function ringEnd() {\n      ringPoint(λ__, φ__);\n      d3_geo_area.lineEnd();\n      if (abs(dλSum) > ε) λ0 = -(λ1 = 180);\n      range[0] = λ0, range[1] = λ1;\n      p0 = null;\n    }\n    function angle(λ0, λ1) {\n      return (λ1 -= λ0) < 0 ? λ1 + 360 : λ1;\n    }\n    function compareRanges(a, b) {\n      return a[0] - b[0];\n    }\n    function withinRange(x, range) {\n      return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x;\n    }\n    return function(feature) {\n      φ1 = λ1 = -(λ0 = φ0 = Infinity);\n      ranges = [];\n      d3.geo.stream(feature, bound);\n      var n = ranges.length;\n      if (n) {\n        ranges.sort(compareRanges);\n        for (var i = 1, a = ranges[0], b, merged = [ a ]; i < n; ++i) {\n          b = ranges[i];\n          if (withinRange(b[0], a) || withinRange(b[1], a)) {\n            if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1];\n            if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0];\n          } else {\n            merged.push(a = b);\n          }\n        }\n        var best = -Infinity, dλ;\n        for (var n = merged.length - 1, i = 0, a = merged[n], b; i <= n; a = b, ++i) {\n          b = merged[i];\n          if ((dλ = angle(a[1], b[0])) > best) best = dλ, λ0 = b[0], λ1 = a[1];\n        }\n      }\n      ranges = range = null;\n      return λ0 === Infinity || φ0 === Infinity ? [ [ NaN, NaN ], [ NaN, NaN ] ] : [ [ λ0, φ0 ], [ λ1, φ1 ] ];\n    };\n  }();\n  d3.geo.centroid = function(object) {\n    d3_geo_centroidW0 = d3_geo_centroidW1 = d3_geo_centroidX0 = d3_geo_centroidY0 = d3_geo_centroidZ0 = d3_geo_centroidX1 = d3_geo_centroidY1 = d3_geo_centroidZ1 = d3_geo_centroidX2 = d3_geo_centroidY2 = d3_geo_centroidZ2 = 0;\n    d3.geo.stream(object, d3_geo_centroid);\n    var x = d3_geo_centroidX2, y = d3_geo_centroidY2, z = d3_geo_centroidZ2, m = x * x + y * y + z * z;\n    if (m < ε2) {\n      x = d3_geo_centroidX1, y = d3_geo_centroidY1, z = d3_geo_centroidZ1;\n      if (d3_geo_centroidW1 < ε) x = d3_geo_centroidX0, y = d3_geo_centroidY0, z = d3_geo_centroidZ0;\n      m = x * x + y * y + z * z;\n      if (m < ε2) return [ NaN, NaN ];\n    }\n    return [ Math.atan2(y, x) * d3_degrees, d3_asin(z / Math.sqrt(m)) * d3_degrees ];\n  };\n  var d3_geo_centroidW0, d3_geo_centroidW1, d3_geo_centroidX0, d3_geo_centroidY0, d3_geo_centroidZ0, d3_geo_centroidX1, d3_geo_centroidY1, d3_geo_centroidZ1, d3_geo_centroidX2, d3_geo_centroidY2, d3_geo_centroidZ2;\n  var d3_geo_centroid = {\n    sphere: d3_noop,\n    point: d3_geo_centroidPoint,\n    lineStart: d3_geo_centroidLineStart,\n    lineEnd: d3_geo_centroidLineEnd,\n    polygonStart: function() {\n      d3_geo_centroid.lineStart = d3_geo_centroidRingStart;\n    },\n    polygonEnd: function() {\n      d3_geo_centroid.lineStart = d3_geo_centroidLineStart;\n    }\n  };\n  function d3_geo_centroidPoint(λ, φ) {\n    λ *= d3_radians;\n    var cosφ = Math.cos(φ *= d3_radians);\n    d3_geo_centroidPointXYZ(cosφ * Math.cos(λ), cosφ * Math.sin(λ), Math.sin(φ));\n  }\n  function d3_geo_centroidPointXYZ(x, y, z) {\n    ++d3_geo_centroidW0;\n    d3_geo_centroidX0 += (x - d3_geo_centroidX0) / d3_geo_centroidW0;\n    d3_geo_centroidY0 += (y - d3_geo_centroidY0) / d3_geo_centroidW0;\n    d3_geo_centroidZ0 += (z - d3_geo_centroidZ0) / d3_geo_centroidW0;\n  }\n  function d3_geo_centroidLineStart() {\n    var x0, y0, z0;\n    d3_geo_centroid.point = function(λ, φ) {\n      λ *= d3_radians;\n      var cosφ = Math.cos(φ *= d3_radians);\n      x0 = cosφ * Math.cos(λ);\n      y0 = cosφ * Math.sin(λ);\n      z0 = Math.sin(φ);\n      d3_geo_centroid.point = nextPoint;\n      d3_geo_centroidPointXYZ(x0, y0, z0);\n    };\n    function nextPoint(λ, φ) {\n      λ *= d3_radians;\n      var cosφ = Math.cos(φ *= d3_radians), x = cosφ * Math.cos(λ), y = cosφ * Math.sin(λ), z = Math.sin(φ), w = Math.atan2(Math.sqrt((w = y0 * z - z0 * y) * w + (w = z0 * x - x0 * z) * w + (w = x0 * y - y0 * x) * w), x0 * x + y0 * y + z0 * z);\n      d3_geo_centroidW1 += w;\n      d3_geo_centroidX1 += w * (x0 + (x0 = x));\n      d3_geo_centroidY1 += w * (y0 + (y0 = y));\n      d3_geo_centroidZ1 += w * (z0 + (z0 = z));\n      d3_geo_centroidPointXYZ(x0, y0, z0);\n    }\n  }\n  function d3_geo_centroidLineEnd() {\n    d3_geo_centroid.point = d3_geo_centroidPoint;\n  }\n  function d3_geo_centroidRingStart() {\n    var λ00, φ00, x0, y0, z0;\n    d3_geo_centroid.point = function(λ, φ) {\n      λ00 = λ, φ00 = φ;\n      d3_geo_centroid.point = nextPoint;\n      λ *= d3_radians;\n      var cosφ = Math.cos(φ *= d3_radians);\n      x0 = cosφ * Math.cos(λ);\n      y0 = cosφ * Math.sin(λ);\n      z0 = Math.sin(φ);\n      d3_geo_centroidPointXYZ(x0, y0, z0);\n    };\n    d3_geo_centroid.lineEnd = function() {\n      nextPoint(λ00, φ00);\n      d3_geo_centroid.lineEnd = d3_geo_centroidLineEnd;\n      d3_geo_centroid.point = d3_geo_centroidPoint;\n    };\n    function nextPoint(λ, φ) {\n      λ *= d3_radians;\n      var cosφ = Math.cos(φ *= d3_radians), x = cosφ * Math.cos(λ), y = cosφ * Math.sin(λ), z = Math.sin(φ), cx = y0 * z - z0 * y, cy = z0 * x - x0 * z, cz = x0 * y - y0 * x, m = Math.sqrt(cx * cx + cy * cy + cz * cz), u = x0 * x + y0 * y + z0 * z, v = m && -d3_acos(u) / m, w = Math.atan2(m, u);\n      d3_geo_centroidX2 += v * cx;\n      d3_geo_centroidY2 += v * cy;\n      d3_geo_centroidZ2 += v * cz;\n      d3_geo_centroidW1 += w;\n      d3_geo_centroidX1 += w * (x0 + (x0 = x));\n      d3_geo_centroidY1 += w * (y0 + (y0 = y));\n      d3_geo_centroidZ1 += w * (z0 + (z0 = z));\n      d3_geo_centroidPointXYZ(x0, y0, z0);\n    }\n  }\n  function d3_geo_compose(a, b) {\n    function compose(x, y) {\n      return x = a(x, y), b(x[0], x[1]);\n    }\n    if (a.invert && b.invert) compose.invert = function(x, y) {\n      return x = b.invert(x, y), x && a.invert(x[0], x[1]);\n    };\n    return compose;\n  }\n  function d3_true() {\n    return true;\n  }\n  function d3_geo_clipPolygon(segments, compare, clipStartInside, interpolate, listener) {\n    var subject = [], clip = [];\n    segments.forEach(function(segment) {\n      if ((n = segment.length - 1) <= 0) return;\n      var n, p0 = segment[0], p1 = segment[n];\n      if (d3_geo_sphericalEqual(p0, p1)) {\n        listener.lineStart();\n        for (var i = 0; i < n; ++i) listener.point((p0 = segment[i])[0], p0[1]);\n        listener.lineEnd();\n        return;\n      }\n      var a = new d3_geo_clipPolygonIntersection(p0, segment, null, true), b = new d3_geo_clipPolygonIntersection(p0, null, a, false);\n      a.o = b;\n      subject.push(a);\n      clip.push(b);\n      a = new d3_geo_clipPolygonIntersection(p1, segment, null, false);\n      b = new d3_geo_clipPolygonIntersection(p1, null, a, true);\n      a.o = b;\n      subject.push(a);\n      clip.push(b);\n    });\n    clip.sort(compare);\n    d3_geo_clipPolygonLinkCircular(subject);\n    d3_geo_clipPolygonLinkCircular(clip);\n    if (!subject.length) return;\n    for (var i = 0, entry = clipStartInside, n = clip.length; i < n; ++i) {\n      clip[i].e = entry = !entry;\n    }\n    var start = subject[0], points, point;\n    while (1) {\n      var current = start, isSubject = true;\n      while (current.v) if ((current = current.n) === start) return;\n      points = current.z;\n      listener.lineStart();\n      do {\n        current.v = current.o.v = true;\n        if (current.e) {\n          if (isSubject) {\n            for (var i = 0, n = points.length; i < n; ++i) listener.point((point = points[i])[0], point[1]);\n          } else {\n            interpolate(current.x, current.n.x, 1, listener);\n          }\n          current = current.n;\n        } else {\n          if (isSubject) {\n            points = current.p.z;\n            for (var i = points.length - 1; i >= 0; --i) listener.point((point = points[i])[0], point[1]);\n          } else {\n            interpolate(current.x, current.p.x, -1, listener);\n          }\n          current = current.p;\n        }\n        current = current.o;\n        points = current.z;\n        isSubject = !isSubject;\n      } while (!current.v);\n      listener.lineEnd();\n    }\n  }\n  function d3_geo_clipPolygonLinkCircular(array) {\n    if (!(n = array.length)) return;\n    var n, i = 0, a = array[0], b;\n    while (++i < n) {\n      a.n = b = array[i];\n      b.p = a;\n      a = b;\n    }\n    a.n = b = array[0];\n    b.p = a;\n  }\n  function d3_geo_clipPolygonIntersection(point, points, other, entry) {\n    this.x = point;\n    this.z = points;\n    this.o = other;\n    this.e = entry;\n    this.v = false;\n    this.n = this.p = null;\n  }\n  function d3_geo_clip(pointVisible, clipLine, interpolate, clipStart) {\n    return function(rotate, listener) {\n      var line = clipLine(listener), rotatedClipStart = rotate.invert(clipStart[0], clipStart[1]);\n      var clip = {\n        point: point,\n        lineStart: lineStart,\n        lineEnd: lineEnd,\n        polygonStart: function() {\n          clip.point = pointRing;\n          clip.lineStart = ringStart;\n          clip.lineEnd = ringEnd;\n          segments = [];\n          polygon = [];\n        },\n        polygonEnd: function() {\n          clip.point = point;\n          clip.lineStart = lineStart;\n          clip.lineEnd = lineEnd;\n          segments = d3.merge(segments);\n          var clipStartInside = d3_geo_pointInPolygon(rotatedClipStart, polygon);\n          if (segments.length) {\n            if (!polygonStarted) listener.polygonStart(), polygonStarted = true;\n            d3_geo_clipPolygon(segments, d3_geo_clipSort, clipStartInside, interpolate, listener);\n          } else if (clipStartInside) {\n            if (!polygonStarted) listener.polygonStart(), polygonStarted = true;\n            listener.lineStart();\n            interpolate(null, null, 1, listener);\n            listener.lineEnd();\n          }\n          if (polygonStarted) listener.polygonEnd(), polygonStarted = false;\n          segments = polygon = null;\n        },\n        sphere: function() {\n          listener.polygonStart();\n          listener.lineStart();\n          interpolate(null, null, 1, listener);\n          listener.lineEnd();\n          listener.polygonEnd();\n        }\n      };\n      function point(λ, φ) {\n        var point = rotate(λ, φ);\n        if (pointVisible(λ = point[0], φ = point[1])) listener.point(λ, φ);\n      }\n      function pointLine(λ, φ) {\n        var point = rotate(λ, φ);\n        line.point(point[0], point[1]);\n      }\n      function lineStart() {\n        clip.point = pointLine;\n        line.lineStart();\n      }\n      function lineEnd() {\n        clip.point = point;\n        line.lineEnd();\n      }\n      var segments;\n      var buffer = d3_geo_clipBufferListener(), ringListener = clipLine(buffer), polygonStarted = false, polygon, ring;\n      function pointRing(λ, φ) {\n        ring.push([ λ, φ ]);\n        var point = rotate(λ, φ);\n        ringListener.point(point[0], point[1]);\n      }\n      function ringStart() {\n        ringListener.lineStart();\n        ring = [];\n      }\n      function ringEnd() {\n        pointRing(ring[0][0], ring[0][1]);\n        ringListener.lineEnd();\n        var clean = ringListener.clean(), ringSegments = buffer.buffer(), segment, n = ringSegments.length;\n        ring.pop();\n        polygon.push(ring);\n        ring = null;\n        if (!n) return;\n        if (clean & 1) {\n          segment = ringSegments[0];\n          var n = segment.length - 1, i = -1, point;\n          if (n > 0) {\n            if (!polygonStarted) listener.polygonStart(), polygonStarted = true;\n            listener.lineStart();\n            while (++i < n) listener.point((point = segment[i])[0], point[1]);\n            listener.lineEnd();\n          }\n          return;\n        }\n        if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));\n        segments.push(ringSegments.filter(d3_geo_clipSegmentLength1));\n      }\n      return clip;\n    };\n  }\n  function d3_geo_clipSegmentLength1(segment) {\n    return segment.length > 1;\n  }\n  function d3_geo_clipBufferListener() {\n    var lines = [], line;\n    return {\n      lineStart: function() {\n        lines.push(line = []);\n      },\n      point: function(λ, φ) {\n        line.push([ λ, φ ]);\n      },\n      lineEnd: d3_noop,\n      buffer: function() {\n        var buffer = lines;\n        lines = [];\n        line = null;\n        return buffer;\n      },\n      rejoin: function() {\n        if (lines.length > 1) lines.push(lines.pop().concat(lines.shift()));\n      }\n    };\n  }\n  function d3_geo_clipSort(a, b) {\n    return ((a = a.x)[0] < 0 ? a[1] - halfπ - ε : halfπ - a[1]) - ((b = b.x)[0] < 0 ? b[1] - halfπ - ε : halfπ - b[1]);\n  }\n  var d3_geo_clipAntimeridian = d3_geo_clip(d3_true, d3_geo_clipAntimeridianLine, d3_geo_clipAntimeridianInterpolate, [ -π, -π / 2 ]);\n  function d3_geo_clipAntimeridianLine(listener) {\n    var λ0 = NaN, φ0 = NaN, sλ0 = NaN, clean;\n    return {\n      lineStart: function() {\n        listener.lineStart();\n        clean = 1;\n      },\n      point: function(λ1, φ1) {\n        var sλ1 = λ1 > 0 ? π : -π, dλ = abs(λ1 - λ0);\n        if (abs(dλ - π) < ε) {\n          listener.point(λ0, φ0 = (φ0 + φ1) / 2 > 0 ? halfπ : -halfπ);\n          listener.point(sλ0, φ0);\n          listener.lineEnd();\n          listener.lineStart();\n          listener.point(sλ1, φ0);\n          listener.point(λ1, φ0);\n          clean = 0;\n        } else if (sλ0 !== sλ1 && dλ >= π) {\n          if (abs(λ0 - sλ0) < ε) λ0 -= sλ0 * ε;\n          if (abs(λ1 - sλ1) < ε) λ1 -= sλ1 * ε;\n          φ0 = d3_geo_clipAntimeridianIntersect(λ0, φ0, λ1, φ1);\n          listener.point(sλ0, φ0);\n          listener.lineEnd();\n          listener.lineStart();\n          listener.point(sλ1, φ0);\n          clean = 0;\n        }\n        listener.point(λ0 = λ1, φ0 = φ1);\n        sλ0 = sλ1;\n      },\n      lineEnd: function() {\n        listener.lineEnd();\n        λ0 = φ0 = NaN;\n      },\n      clean: function() {\n        return 2 - clean;\n      }\n    };\n  }\n  function d3_geo_clipAntimeridianIntersect(λ0, φ0, λ1, φ1) {\n    var cosφ0, cosφ1, sinλ0_λ1 = Math.sin(λ0 - λ1);\n    return abs(sinλ0_λ1) > ε ? Math.atan((Math.sin(φ0) * (cosφ1 = Math.cos(φ1)) * Math.sin(λ1) - Math.sin(φ1) * (cosφ0 = Math.cos(φ0)) * Math.sin(λ0)) / (cosφ0 * cosφ1 * sinλ0_λ1)) : (φ0 + φ1) / 2;\n  }\n  function d3_geo_clipAntimeridianInterpolate(from, to, direction, listener) {\n    var φ;\n    if (from == null) {\n      φ = direction * halfπ;\n      listener.point(-π, φ);\n      listener.point(0, φ);\n      listener.point(π, φ);\n      listener.point(π, 0);\n      listener.point(π, -φ);\n      listener.point(0, -φ);\n      listener.point(-π, -φ);\n      listener.point(-π, 0);\n      listener.point(-π, φ);\n    } else if (abs(from[0] - to[0]) > ε) {\n      var s = from[0] < to[0] ? π : -π;\n      φ = direction * s / 2;\n      listener.point(-s, φ);\n      listener.point(0, φ);\n      listener.point(s, φ);\n    } else {\n      listener.point(to[0], to[1]);\n    }\n  }\n  function d3_geo_pointInPolygon(point, polygon) {\n    var meridian = point[0], parallel = point[1], meridianNormal = [ Math.sin(meridian), -Math.cos(meridian), 0 ], polarAngle = 0, winding = 0;\n    d3_geo_areaRingSum.reset();\n    for (var i = 0, n = polygon.length; i < n; ++i) {\n      var ring = polygon[i], m = ring.length;\n      if (!m) continue;\n      var point0 = ring[0], λ0 = point0[0], φ0 = point0[1] / 2 + π / 4, sinφ0 = Math.sin(φ0), cosφ0 = Math.cos(φ0), j = 1;\n      while (true) {\n        if (j === m) j = 0;\n        point = ring[j];\n        var λ = point[0], φ = point[1] / 2 + π / 4, sinφ = Math.sin(φ), cosφ = Math.cos(φ), dλ = λ - λ0, sdλ = dλ >= 0 ? 1 : -1, adλ = sdλ * dλ, antimeridian = adλ > π, k = sinφ0 * sinφ;\n        d3_geo_areaRingSum.add(Math.atan2(k * sdλ * Math.sin(adλ), cosφ0 * cosφ + k * Math.cos(adλ)));\n        polarAngle += antimeridian ? dλ + sdλ * τ : dλ;\n        if (antimeridian ^ λ0 >= meridian ^ λ >= meridian) {\n          var arc = d3_geo_cartesianCross(d3_geo_cartesian(point0), d3_geo_cartesian(point));\n          d3_geo_cartesianNormalize(arc);\n          var intersection = d3_geo_cartesianCross(meridianNormal, arc);\n          d3_geo_cartesianNormalize(intersection);\n          var φarc = (antimeridian ^ dλ >= 0 ? -1 : 1) * d3_asin(intersection[2]);\n          if (parallel > φarc || parallel === φarc && (arc[0] || arc[1])) {\n            winding += antimeridian ^ dλ >= 0 ? 1 : -1;\n          }\n        }\n        if (!j++) break;\n        λ0 = λ, sinφ0 = sinφ, cosφ0 = cosφ, point0 = point;\n      }\n    }\n    return (polarAngle < -ε || polarAngle < ε && d3_geo_areaRingSum < -ε) ^ winding & 1;\n  }\n  function d3_geo_clipCircle(radius) {\n    var cr = Math.cos(radius), smallRadius = cr > 0, notHemisphere = abs(cr) > ε, interpolate = d3_geo_circleInterpolate(radius, 6 * d3_radians);\n    return d3_geo_clip(visible, clipLine, interpolate, smallRadius ? [ 0, -radius ] : [ -π, radius - π ]);\n    function visible(λ, φ) {\n      return Math.cos(λ) * Math.cos(φ) > cr;\n    }\n    function clipLine(listener) {\n      var point0, c0, v0, v00, clean;\n      return {\n        lineStart: function() {\n          v00 = v0 = false;\n          clean = 1;\n        },\n        point: function(λ, φ) {\n          var point1 = [ λ, φ ], point2, v = visible(λ, φ), c = smallRadius ? v ? 0 : code(λ, φ) : v ? code(λ + (λ < 0 ? π : -π), φ) : 0;\n          if (!point0 && (v00 = v0 = v)) listener.lineStart();\n          if (v !== v0) {\n            point2 = intersect(point0, point1);\n            if (d3_geo_sphericalEqual(point0, point2) || d3_geo_sphericalEqual(point1, point2)) {\n              point1[0] += ε;\n              point1[1] += ε;\n              v = visible(point1[0], point1[1]);\n            }\n          }\n          if (v !== v0) {\n            clean = 0;\n            if (v) {\n              listener.lineStart();\n              point2 = intersect(point1, point0);\n              listener.point(point2[0], point2[1]);\n            } else {\n              point2 = intersect(point0, point1);\n              listener.point(point2[0], point2[1]);\n              listener.lineEnd();\n            }\n            point0 = point2;\n          } else if (notHemisphere && point0 && smallRadius ^ v) {\n            var t;\n            if (!(c & c0) && (t = intersect(point1, point0, true))) {\n              clean = 0;\n              if (smallRadius) {\n                listener.lineStart();\n                listener.point(t[0][0], t[0][1]);\n                listener.point(t[1][0], t[1][1]);\n                listener.lineEnd();\n              } else {\n                listener.point(t[1][0], t[1][1]);\n                listener.lineEnd();\n                listener.lineStart();\n                listener.point(t[0][0], t[0][1]);\n              }\n            }\n          }\n          if (v && (!point0 || !d3_geo_sphericalEqual(point0, point1))) {\n            listener.point(point1[0], point1[1]);\n          }\n          point0 = point1, v0 = v, c0 = c;\n        },\n        lineEnd: function() {\n          if (v0) listener.lineEnd();\n          point0 = null;\n        },\n        clean: function() {\n          return clean | (v00 && v0) << 1;\n        }\n      };\n    }\n    function intersect(a, b, two) {\n      var pa = d3_geo_cartesian(a), pb = d3_geo_cartesian(b);\n      var n1 = [ 1, 0, 0 ], n2 = d3_geo_cartesianCross(pa, pb), n2n2 = d3_geo_cartesianDot(n2, n2), n1n2 = n2[0], determinant = n2n2 - n1n2 * n1n2;\n      if (!determinant) return !two && a;\n      var c1 = cr * n2n2 / determinant, c2 = -cr * n1n2 / determinant, n1xn2 = d3_geo_cartesianCross(n1, n2), A = d3_geo_cartesianScale(n1, c1), B = d3_geo_cartesianScale(n2, c2);\n      d3_geo_cartesianAdd(A, B);\n      var u = n1xn2, w = d3_geo_cartesianDot(A, u), uu = d3_geo_cartesianDot(u, u), t2 = w * w - uu * (d3_geo_cartesianDot(A, A) - 1);\n      if (t2 < 0) return;\n      var t = Math.sqrt(t2), q = d3_geo_cartesianScale(u, (-w - t) / uu);\n      d3_geo_cartesianAdd(q, A);\n      q = d3_geo_spherical(q);\n      if (!two) return q;\n      var λ0 = a[0], λ1 = b[0], φ0 = a[1], φ1 = b[1], z;\n      if (λ1 < λ0) z = λ0, λ0 = λ1, λ1 = z;\n      var δλ = λ1 - λ0, polar = abs(δλ - π) < ε, meridian = polar || δλ < ε;\n      if (!polar && φ1 < φ0) z = φ0, φ0 = φ1, φ1 = z;\n      if (meridian ? polar ? φ0 + φ1 > 0 ^ q[1] < (abs(q[0] - λ0) < ε ? φ0 : φ1) : φ0 <= q[1] && q[1] <= φ1 : δλ > π ^ (λ0 <= q[0] && q[0] <= λ1)) {\n        var q1 = d3_geo_cartesianScale(u, (-w + t) / uu);\n        d3_geo_cartesianAdd(q1, A);\n        return [ q, d3_geo_spherical(q1) ];\n      }\n    }\n    function code(λ, φ) {\n      var r = smallRadius ? radius : π - radius, code = 0;\n      if (λ < -r) code |= 1; else if (λ > r) code |= 2;\n      if (φ < -r) code |= 4; else if (φ > r) code |= 8;\n      return code;\n    }\n  }\n  function d3_geom_clipLine(x0, y0, x1, y1) {\n    return function(line) {\n      var a = line.a, b = line.b, ax = a.x, ay = a.y, bx = b.x, by = b.y, t0 = 0, t1 = 1, dx = bx - ax, dy = by - ay, r;\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      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      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      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      if (t0 > 0) line.a = {\n        x: ax + t0 * dx,\n        y: ay + t0 * dy\n      };\n      if (t1 < 1) line.b = {\n        x: ax + t1 * dx,\n        y: ay + t1 * dy\n      };\n      return line;\n    };\n  }\n  var d3_geo_clipExtentMAX = 1e9;\n  d3.geo.clipExtent = function() {\n    var x0, y0, x1, y1, stream, clip, clipExtent = {\n      stream: function(output) {\n        if (stream) stream.valid = false;\n        stream = clip(output);\n        stream.valid = true;\n        return stream;\n      },\n      extent: function(_) {\n        if (!arguments.length) return [ [ x0, y0 ], [ x1, y1 ] ];\n        clip = d3_geo_clipExtent(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]);\n        if (stream) stream.valid = false, stream = null;\n        return clipExtent;\n      }\n    };\n    return clipExtent.extent([ [ 0, 0 ], [ 960, 500 ] ]);\n  };\n  function d3_geo_clipExtent(x0, y0, x1, y1) {\n    return function(listener) {\n      var listener_ = listener, bufferListener = d3_geo_clipBufferListener(), clipLine = d3_geom_clipLine(x0, y0, x1, y1), segments, polygon, ring;\n      var clip = {\n        point: point,\n        lineStart: lineStart,\n        lineEnd: lineEnd,\n        polygonStart: function() {\n          listener = bufferListener;\n          segments = [];\n          polygon = [];\n          clean = true;\n        },\n        polygonEnd: function() {\n          listener = listener_;\n          segments = d3.merge(segments);\n          var clipStartInside = insidePolygon([ x0, y1 ]), inside = clean && clipStartInside, visible = segments.length;\n          if (inside || visible) {\n            listener.polygonStart();\n            if (inside) {\n              listener.lineStart();\n              interpolate(null, null, 1, listener);\n              listener.lineEnd();\n            }\n            if (visible) {\n              d3_geo_clipPolygon(segments, compare, clipStartInside, interpolate, listener);\n            }\n            listener.polygonEnd();\n          }\n          segments = polygon = ring = null;\n        }\n      };\n      function insidePolygon(p) {\n        var wn = 0, n = polygon.length, y = p[1];\n        for (var i = 0; i < n; ++i) {\n          for (var j = 1, v = polygon[i], m = v.length, a = v[0], b; j < m; ++j) {\n            b = v[j];\n            if (a[1] <= y) {\n              if (b[1] > y && d3_cross2d(a, b, p) > 0) ++wn;\n            } else {\n              if (b[1] <= y && d3_cross2d(a, b, p) < 0) --wn;\n            }\n            a = b;\n          }\n        }\n        return wn !== 0;\n      }\n      function interpolate(from, to, direction, listener) {\n        var a = 0, a1 = 0;\n        if (from == null || (a = corner(from, direction)) !== (a1 = corner(to, direction)) || comparePoints(from, to) < 0 ^ direction > 0) {\n          do {\n            listener.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0);\n          } while ((a = (a + direction + 4) % 4) !== a1);\n        } else {\n          listener.point(to[0], to[1]);\n        }\n      }\n      function pointVisible(x, y) {\n        return x0 <= x && x <= x1 && y0 <= y && y <= y1;\n      }\n      function point(x, y) {\n        if (pointVisible(x, y)) listener.point(x, y);\n      }\n      var x__, y__, v__, x_, y_, v_, first, clean;\n      function lineStart() {\n        clip.point = linePoint;\n        if (polygon) polygon.push(ring = []);\n        first = true;\n        v_ = false;\n        x_ = y_ = NaN;\n      }\n      function lineEnd() {\n        if (segments) {\n          linePoint(x__, y__);\n          if (v__ && v_) bufferListener.rejoin();\n          segments.push(bufferListener.buffer());\n        }\n        clip.point = point;\n        if (v_) listener.lineEnd();\n      }\n      function linePoint(x, y) {\n        x = Math.max(-d3_geo_clipExtentMAX, Math.min(d3_geo_clipExtentMAX, x));\n        y = Math.max(-d3_geo_clipExtentMAX, Math.min(d3_geo_clipExtentMAX, y));\n        var v = pointVisible(x, y);\n        if (polygon) ring.push([ x, y ]);\n        if (first) {\n          x__ = x, y__ = y, v__ = v;\n          first = false;\n          if (v) {\n            listener.lineStart();\n            listener.point(x, y);\n          }\n        } else {\n          if (v && v_) listener.point(x, y); else {\n            var l = {\n              a: {\n                x: x_,\n                y: y_\n              },\n              b: {\n                x: x,\n                y: y\n              }\n            };\n            if (clipLine(l)) {\n              if (!v_) {\n                listener.lineStart();\n                listener.point(l.a.x, l.a.y);\n              }\n              listener.point(l.b.x, l.b.y);\n              if (!v) listener.lineEnd();\n              clean = false;\n            } else if (v) {\n              listener.lineStart();\n              listener.point(x, y);\n              clean = false;\n            }\n          }\n        }\n        x_ = x, y_ = y, v_ = v;\n      }\n      return clip;\n    };\n    function corner(p, direction) {\n      return abs(p[0] - x0) < ε ? direction > 0 ? 0 : 3 : abs(p[0] - x1) < ε ? direction > 0 ? 2 : 1 : abs(p[1] - y0) < ε ? direction > 0 ? 1 : 0 : direction > 0 ? 3 : 2;\n    }\n    function compare(a, b) {\n      return comparePoints(a.x, b.x);\n    }\n    function comparePoints(a, b) {\n      var ca = corner(a, 1), cb = corner(b, 1);\n      return ca !== cb ? ca - cb : ca === 0 ? b[1] - a[1] : ca === 1 ? a[0] - b[0] : ca === 2 ? a[1] - b[1] : b[0] - a[0];\n    }\n  }\n  function d3_geo_conic(projectAt) {\n    var φ0 = 0, φ1 = π / 3, m = d3_geo_projectionMutator(projectAt), p = m(φ0, φ1);\n    p.parallels = function(_) {\n      if (!arguments.length) return [ φ0 / π * 180, φ1 / π * 180 ];\n      return m(φ0 = _[0] * π / 180, φ1 = _[1] * π / 180);\n    };\n    return p;\n  }\n  function d3_geo_conicEqualArea(φ0, φ1) {\n    var sinφ0 = Math.sin(φ0), n = (sinφ0 + Math.sin(φ1)) / 2, C = 1 + sinφ0 * (2 * n - sinφ0), ρ0 = Math.sqrt(C) / n;\n    function forward(λ, φ) {\n      var ρ = Math.sqrt(C - 2 * n * Math.sin(φ)) / n;\n      return [ ρ * Math.sin(λ *= n), ρ0 - ρ * Math.cos(λ) ];\n    }\n    forward.invert = function(x, y) {\n      var ρ0_y = ρ0 - y;\n      return [ Math.atan2(x, ρ0_y) / n, d3_asin((C - (x * x + ρ0_y * ρ0_y) * n * n) / (2 * n)) ];\n    };\n    return forward;\n  }\n  (d3.geo.conicEqualArea = function() {\n    return d3_geo_conic(d3_geo_conicEqualArea);\n  }).raw = d3_geo_conicEqualArea;\n  d3.geo.albers = function() {\n    return d3.geo.conicEqualArea().rotate([ 96, 0 ]).center([ -.6, 38.7 ]).parallels([ 29.5, 45.5 ]).scale(1070);\n  };\n  d3.geo.albersUsa = function() {\n    var lower48 = d3.geo.albers();\n    var alaska = d3.geo.conicEqualArea().rotate([ 154, 0 ]).center([ -2, 58.5 ]).parallels([ 55, 65 ]);\n    var hawaii = d3.geo.conicEqualArea().rotate([ 157, 0 ]).center([ -3, 19.9 ]).parallels([ 8, 18 ]);\n    var point, pointStream = {\n      point: function(x, y) {\n        point = [ x, y ];\n      }\n    }, lower48Point, alaskaPoint, hawaiiPoint;\n    function albersUsa(coordinates) {\n      var x = coordinates[0], y = coordinates[1];\n      point = null;\n      (lower48Point(x, y), point) || (alaskaPoint(x, y), point) || hawaiiPoint(x, y);\n      return point;\n    }\n    albersUsa.invert = function(coordinates) {\n      var k = lower48.scale(), t = lower48.translate(), x = (coordinates[0] - t[0]) / k, y = (coordinates[1] - t[1]) / k;\n      return (y >= .12 && y < .234 && x >= -.425 && x < -.214 ? alaska : y >= .166 && y < .234 && x >= -.214 && x < -.115 ? hawaii : lower48).invert(coordinates);\n    };\n    albersUsa.stream = function(stream) {\n      var lower48Stream = lower48.stream(stream), alaskaStream = alaska.stream(stream), hawaiiStream = hawaii.stream(stream);\n      return {\n        point: function(x, y) {\n          lower48Stream.point(x, y);\n          alaskaStream.point(x, y);\n          hawaiiStream.point(x, y);\n        },\n        sphere: function() {\n          lower48Stream.sphere();\n          alaskaStream.sphere();\n          hawaiiStream.sphere();\n        },\n        lineStart: function() {\n          lower48Stream.lineStart();\n          alaskaStream.lineStart();\n          hawaiiStream.lineStart();\n        },\n        lineEnd: function() {\n          lower48Stream.lineEnd();\n          alaskaStream.lineEnd();\n          hawaiiStream.lineEnd();\n        },\n        polygonStart: function() {\n          lower48Stream.polygonStart();\n          alaskaStream.polygonStart();\n          hawaiiStream.polygonStart();\n        },\n        polygonEnd: function() {\n          lower48Stream.polygonEnd();\n          alaskaStream.polygonEnd();\n          hawaiiStream.polygonEnd();\n        }\n      };\n    };\n    albersUsa.precision = function(_) {\n      if (!arguments.length) return lower48.precision();\n      lower48.precision(_);\n      alaska.precision(_);\n      hawaii.precision(_);\n      return albersUsa;\n    };\n    albersUsa.scale = function(_) {\n      if (!arguments.length) return lower48.scale();\n      lower48.scale(_);\n      alaska.scale(_ * .35);\n      hawaii.scale(_);\n      return albersUsa.translate(lower48.translate());\n    };\n    albersUsa.translate = function(_) {\n      if (!arguments.length) return lower48.translate();\n      var k = lower48.scale(), x = +_[0], y = +_[1];\n      lower48Point = lower48.translate(_).clipExtent([ [ x - .455 * k, y - .238 * k ], [ x + .455 * k, y + .238 * k ] ]).stream(pointStream).point;\n      alaskaPoint = alaska.translate([ x - .307 * k, y + .201 * k ]).clipExtent([ [ x - .425 * k + ε, y + .12 * k + ε ], [ x - .214 * k - ε, y + .234 * k - ε ] ]).stream(pointStream).point;\n      hawaiiPoint = hawaii.translate([ x - .205 * k, y + .212 * k ]).clipExtent([ [ x - .214 * k + ε, y + .166 * k + ε ], [ x - .115 * k - ε, y + .234 * k - ε ] ]).stream(pointStream).point;\n      return albersUsa;\n    };\n    return albersUsa.scale(1070);\n  };\n  var d3_geo_pathAreaSum, d3_geo_pathAreaPolygon, d3_geo_pathArea = {\n    point: d3_noop,\n    lineStart: d3_noop,\n    lineEnd: d3_noop,\n    polygonStart: function() {\n      d3_geo_pathAreaPolygon = 0;\n      d3_geo_pathArea.lineStart = d3_geo_pathAreaRingStart;\n    },\n    polygonEnd: function() {\n      d3_geo_pathArea.lineStart = d3_geo_pathArea.lineEnd = d3_geo_pathArea.point = d3_noop;\n      d3_geo_pathAreaSum += abs(d3_geo_pathAreaPolygon / 2);\n    }\n  };\n  function d3_geo_pathAreaRingStart() {\n    var x00, y00, x0, y0;\n    d3_geo_pathArea.point = function(x, y) {\n      d3_geo_pathArea.point = nextPoint;\n      x00 = x0 = x, y00 = y0 = y;\n    };\n    function nextPoint(x, y) {\n      d3_geo_pathAreaPolygon += y0 * x - x0 * y;\n      x0 = x, y0 = y;\n    }\n    d3_geo_pathArea.lineEnd = function() {\n      nextPoint(x00, y00);\n    };\n  }\n  var d3_geo_pathBoundsX0, d3_geo_pathBoundsY0, d3_geo_pathBoundsX1, d3_geo_pathBoundsY1;\n  var d3_geo_pathBounds = {\n    point: d3_geo_pathBoundsPoint,\n    lineStart: d3_noop,\n    lineEnd: d3_noop,\n    polygonStart: d3_noop,\n    polygonEnd: d3_noop\n  };\n  function d3_geo_pathBoundsPoint(x, y) {\n    if (x < d3_geo_pathBoundsX0) d3_geo_pathBoundsX0 = x;\n    if (x > d3_geo_pathBoundsX1) d3_geo_pathBoundsX1 = x;\n    if (y < d3_geo_pathBoundsY0) d3_geo_pathBoundsY0 = y;\n    if (y > d3_geo_pathBoundsY1) d3_geo_pathBoundsY1 = y;\n  }\n  function d3_geo_pathBuffer() {\n    var pointCircle = d3_geo_pathBufferCircle(4.5), buffer = [];\n    var stream = {\n      point: point,\n      lineStart: function() {\n        stream.point = pointLineStart;\n      },\n      lineEnd: lineEnd,\n      polygonStart: function() {\n        stream.lineEnd = lineEndPolygon;\n      },\n      polygonEnd: function() {\n        stream.lineEnd = lineEnd;\n        stream.point = point;\n      },\n      pointRadius: function(_) {\n        pointCircle = d3_geo_pathBufferCircle(_);\n        return stream;\n      },\n      result: function() {\n        if (buffer.length) {\n          var result = buffer.join(\"\");\n          buffer = [];\n          return result;\n        }\n      }\n    };\n    function point(x, y) {\n      buffer.push(\"M\", x, \",\", y, pointCircle);\n    }\n    function pointLineStart(x, y) {\n      buffer.push(\"M\", x, \",\", y);\n      stream.point = pointLine;\n    }\n    function pointLine(x, y) {\n      buffer.push(\"L\", x, \",\", y);\n    }\n    function lineEnd() {\n      stream.point = point;\n    }\n    function lineEndPolygon() {\n      buffer.push(\"Z\");\n    }\n    return stream;\n  }\n  function d3_geo_pathBufferCircle(radius) {\n    return \"m0,\" + radius + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + -2 * radius + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + 2 * radius + \"z\";\n  }\n  var d3_geo_pathCentroid = {\n    point: d3_geo_pathCentroidPoint,\n    lineStart: d3_geo_pathCentroidLineStart,\n    lineEnd: d3_geo_pathCentroidLineEnd,\n    polygonStart: function() {\n      d3_geo_pathCentroid.lineStart = d3_geo_pathCentroidRingStart;\n    },\n    polygonEnd: function() {\n      d3_geo_pathCentroid.point = d3_geo_pathCentroidPoint;\n      d3_geo_pathCentroid.lineStart = d3_geo_pathCentroidLineStart;\n      d3_geo_pathCentroid.lineEnd = d3_geo_pathCentroidLineEnd;\n    }\n  };\n  function d3_geo_pathCentroidPoint(x, y) {\n    d3_geo_centroidX0 += x;\n    d3_geo_centroidY0 += y;\n    ++d3_geo_centroidZ0;\n  }\n  function d3_geo_pathCentroidLineStart() {\n    var x0, y0;\n    d3_geo_pathCentroid.point = function(x, y) {\n      d3_geo_pathCentroid.point = nextPoint;\n      d3_geo_pathCentroidPoint(x0 = x, y0 = y);\n    };\n    function nextPoint(x, y) {\n      var dx = x - x0, dy = y - y0, z = Math.sqrt(dx * dx + dy * dy);\n      d3_geo_centroidX1 += z * (x0 + x) / 2;\n      d3_geo_centroidY1 += z * (y0 + y) / 2;\n      d3_geo_centroidZ1 += z;\n      d3_geo_pathCentroidPoint(x0 = x, y0 = y);\n    }\n  }\n  function d3_geo_pathCentroidLineEnd() {\n    d3_geo_pathCentroid.point = d3_geo_pathCentroidPoint;\n  }\n  function d3_geo_pathCentroidRingStart() {\n    var x00, y00, x0, y0;\n    d3_geo_pathCentroid.point = function(x, y) {\n      d3_geo_pathCentroid.point = nextPoint;\n      d3_geo_pathCentroidPoint(x00 = x0 = x, y00 = y0 = y);\n    };\n    function nextPoint(x, y) {\n      var dx = x - x0, dy = y - y0, z = Math.sqrt(dx * dx + dy * dy);\n      d3_geo_centroidX1 += z * (x0 + x) / 2;\n      d3_geo_centroidY1 += z * (y0 + y) / 2;\n      d3_geo_centroidZ1 += z;\n      z = y0 * x - x0 * y;\n      d3_geo_centroidX2 += z * (x0 + x);\n      d3_geo_centroidY2 += z * (y0 + y);\n      d3_geo_centroidZ2 += z * 3;\n      d3_geo_pathCentroidPoint(x0 = x, y0 = y);\n    }\n    d3_geo_pathCentroid.lineEnd = function() {\n      nextPoint(x00, y00);\n    };\n  }\n  function d3_geo_pathContext(context) {\n    var pointRadius = 4.5;\n    var stream = {\n      point: point,\n      lineStart: function() {\n        stream.point = pointLineStart;\n      },\n      lineEnd: lineEnd,\n      polygonStart: function() {\n        stream.lineEnd = lineEndPolygon;\n      },\n      polygonEnd: function() {\n        stream.lineEnd = lineEnd;\n        stream.point = point;\n      },\n      pointRadius: function(_) {\n        pointRadius = _;\n        return stream;\n      },\n      result: d3_noop\n    };\n    function point(x, y) {\n      context.moveTo(x + pointRadius, y);\n      context.arc(x, y, pointRadius, 0, τ);\n    }\n    function pointLineStart(x, y) {\n      context.moveTo(x, y);\n      stream.point = pointLine;\n    }\n    function pointLine(x, y) {\n      context.lineTo(x, y);\n    }\n    function lineEnd() {\n      stream.point = point;\n    }\n    function lineEndPolygon() {\n      context.closePath();\n    }\n    return stream;\n  }\n  function d3_geo_resample(project) {\n    var δ2 = .5, cosMinDistance = Math.cos(30 * d3_radians), maxDepth = 16;\n    function resample(stream) {\n      return (maxDepth ? resampleRecursive : resampleNone)(stream);\n    }\n    function resampleNone(stream) {\n      return d3_geo_transformPoint(stream, function(x, y) {\n        x = project(x, y);\n        stream.point(x[0], x[1]);\n      });\n    }\n    function resampleRecursive(stream) {\n      var λ00, φ00, x00, y00, a00, b00, c00, λ0, x0, y0, a0, b0, c0;\n      var resample = {\n        point: point,\n        lineStart: lineStart,\n        lineEnd: lineEnd,\n        polygonStart: function() {\n          stream.polygonStart();\n          resample.lineStart = ringStart;\n        },\n        polygonEnd: function() {\n          stream.polygonEnd();\n          resample.lineStart = lineStart;\n        }\n      };\n      function point(x, y) {\n        x = project(x, y);\n        stream.point(x[0], x[1]);\n      }\n      function lineStart() {\n        x0 = NaN;\n        resample.point = linePoint;\n        stream.lineStart();\n      }\n      function linePoint(λ, φ) {\n        var c = d3_geo_cartesian([ λ, φ ]), p = project(λ, φ);\n        resampleLineTo(x0, y0, λ0, a0, b0, c0, x0 = p[0], y0 = p[1], λ0 = λ, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream);\n        stream.point(x0, y0);\n      }\n      function lineEnd() {\n        resample.point = point;\n        stream.lineEnd();\n      }\n      function ringStart() {\n        lineStart();\n        resample.point = ringPoint;\n        resample.lineEnd = ringEnd;\n      }\n      function ringPoint(λ, φ) {\n        linePoint(λ00 = λ, φ00 = φ), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0;\n        resample.point = linePoint;\n      }\n      function ringEnd() {\n        resampleLineTo(x0, y0, λ0, a0, b0, c0, x00, y00, λ00, a00, b00, c00, maxDepth, stream);\n        resample.lineEnd = lineEnd;\n        lineEnd();\n      }\n      return resample;\n    }\n    function resampleLineTo(x0, y0, λ0, a0, b0, c0, x1, y1, λ1, a1, b1, c1, depth, stream) {\n      var dx = x1 - x0, dy = y1 - y0, d2 = dx * dx + dy * dy;\n      if (d2 > 4 * δ2 && depth--) {\n        var a = a0 + a1, b = b0 + b1, c = c0 + c1, m = Math.sqrt(a * a + b * b + c * c), φ2 = Math.asin(c /= m), λ2 = abs(abs(c) - 1) < ε || abs(λ0 - λ1) < ε ? (λ0 + λ1) / 2 : Math.atan2(b, a), p = project(λ2, φ2), x2 = p[0], y2 = p[1], dx2 = x2 - x0, dy2 = y2 - y0, dz = dy * dx2 - dx * dy2;\n        if (dz * dz / d2 > δ2 || abs((dx * dx2 + dy * dy2) / d2 - .5) > .3 || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) {\n          resampleLineTo(x0, y0, λ0, a0, b0, c0, x2, y2, λ2, a /= m, b /= m, c, depth, stream);\n          stream.point(x2, y2);\n          resampleLineTo(x2, y2, λ2, a, b, c, x1, y1, λ1, a1, b1, c1, depth, stream);\n        }\n      }\n    }\n    resample.precision = function(_) {\n      if (!arguments.length) return Math.sqrt(δ2);\n      maxDepth = (δ2 = _ * _) > 0 && 16;\n      return resample;\n    };\n    return resample;\n  }\n  d3.geo.path = function() {\n    var pointRadius = 4.5, projection, context, projectStream, contextStream, cacheStream;\n    function path(object) {\n      if (object) {\n        if (typeof pointRadius === \"function\") contextStream.pointRadius(+pointRadius.apply(this, arguments));\n        if (!cacheStream || !cacheStream.valid) cacheStream = projectStream(contextStream);\n        d3.geo.stream(object, cacheStream);\n      }\n      return contextStream.result();\n    }\n    path.area = function(object) {\n      d3_geo_pathAreaSum = 0;\n      d3.geo.stream(object, projectStream(d3_geo_pathArea));\n      return d3_geo_pathAreaSum;\n    };\n    path.centroid = function(object) {\n      d3_geo_centroidX0 = d3_geo_centroidY0 = d3_geo_centroidZ0 = d3_geo_centroidX1 = d3_geo_centroidY1 = d3_geo_centroidZ1 = d3_geo_centroidX2 = d3_geo_centroidY2 = d3_geo_centroidZ2 = 0;\n      d3.geo.stream(object, projectStream(d3_geo_pathCentroid));\n      return d3_geo_centroidZ2 ? [ d3_geo_centroidX2 / d3_geo_centroidZ2, d3_geo_centroidY2 / d3_geo_centroidZ2 ] : d3_geo_centroidZ1 ? [ d3_geo_centroidX1 / d3_geo_centroidZ1, d3_geo_centroidY1 / d3_geo_centroidZ1 ] : d3_geo_centroidZ0 ? [ d3_geo_centroidX0 / d3_geo_centroidZ0, d3_geo_centroidY0 / d3_geo_centroidZ0 ] : [ NaN, NaN ];\n    };\n    path.bounds = function(object) {\n      d3_geo_pathBoundsX1 = d3_geo_pathBoundsY1 = -(d3_geo_pathBoundsX0 = d3_geo_pathBoundsY0 = Infinity);\n      d3.geo.stream(object, projectStream(d3_geo_pathBounds));\n      return [ [ d3_geo_pathBoundsX0, d3_geo_pathBoundsY0 ], [ d3_geo_pathBoundsX1, d3_geo_pathBoundsY1 ] ];\n    };\n    path.projection = function(_) {\n      if (!arguments.length) return projection;\n      projectStream = (projection = _) ? _.stream || d3_geo_pathProjectStream(_) : d3_identity;\n      return reset();\n    };\n    path.context = function(_) {\n      if (!arguments.length) return context;\n      contextStream = (context = _) == null ? new d3_geo_pathBuffer() : new d3_geo_pathContext(_);\n      if (typeof pointRadius !== \"function\") contextStream.pointRadius(pointRadius);\n      return reset();\n    };\n    path.pointRadius = function(_) {\n      if (!arguments.length) return pointRadius;\n      pointRadius = typeof _ === \"function\" ? _ : (contextStream.pointRadius(+_), +_);\n      return path;\n    };\n    function reset() {\n      cacheStream = null;\n      return path;\n    }\n    return path.projection(d3.geo.albersUsa()).context(null);\n  };\n  function d3_geo_pathProjectStream(project) {\n    var resample = d3_geo_resample(function(x, y) {\n      return project([ x * d3_degrees, y * d3_degrees ]);\n    });\n    return function(stream) {\n      return d3_geo_projectionRadians(resample(stream));\n    };\n  }\n  d3.geo.transform = function(methods) {\n    return {\n      stream: function(stream) {\n        var transform = new d3_geo_transform(stream);\n        for (var k in methods) transform[k] = methods[k];\n        return transform;\n      }\n    };\n  };\n  function d3_geo_transform(stream) {\n    this.stream = stream;\n  }\n  d3_geo_transform.prototype = {\n    point: function(x, y) {\n      this.stream.point(x, y);\n    },\n    sphere: function() {\n      this.stream.sphere();\n    },\n    lineStart: function() {\n      this.stream.lineStart();\n    },\n    lineEnd: function() {\n      this.stream.lineEnd();\n    },\n    polygonStart: function() {\n      this.stream.polygonStart();\n    },\n    polygonEnd: function() {\n      this.stream.polygonEnd();\n    }\n  };\n  function d3_geo_transformPoint(stream, point) {\n    return {\n      point: point,\n      sphere: function() {\n        stream.sphere();\n      },\n      lineStart: function() {\n        stream.lineStart();\n      },\n      lineEnd: function() {\n        stream.lineEnd();\n      },\n      polygonStart: function() {\n        stream.polygonStart();\n      },\n      polygonEnd: function() {\n        stream.polygonEnd();\n      }\n    };\n  }\n  d3.geo.projection = d3_geo_projection;\n  d3.geo.projectionMutator = d3_geo_projectionMutator;\n  function d3_geo_projection(project) {\n    return d3_geo_projectionMutator(function() {\n      return project;\n    })();\n  }\n  function d3_geo_projectionMutator(projectAt) {\n    var project, rotate, projectRotate, projectResample = d3_geo_resample(function(x, y) {\n      x = project(x, y);\n      return [ x[0] * k + δx, δy - x[1] * k ];\n    }), k = 150, x = 480, y = 250, λ = 0, φ = 0, δλ = 0, δφ = 0, δγ = 0, δx, δy, preclip = d3_geo_clipAntimeridian, postclip = d3_identity, clipAngle = null, clipExtent = null, stream;\n    function projection(point) {\n      point = projectRotate(point[0] * d3_radians, point[1] * d3_radians);\n      return [ point[0] * k + δx, δy - point[1] * k ];\n    }\n    function invert(point) {\n      point = projectRotate.invert((point[0] - δx) / k, (δy - point[1]) / k);\n      return point && [ point[0] * d3_degrees, point[1] * d3_degrees ];\n    }\n    projection.stream = function(output) {\n      if (stream) stream.valid = false;\n      stream = d3_geo_projectionRadians(preclip(rotate, projectResample(postclip(output))));\n      stream.valid = true;\n      return stream;\n    };\n    projection.clipAngle = function(_) {\n      if (!arguments.length) return clipAngle;\n      preclip = _ == null ? (clipAngle = _, d3_geo_clipAntimeridian) : d3_geo_clipCircle((clipAngle = +_) * d3_radians);\n      return invalidate();\n    };\n    projection.clipExtent = function(_) {\n      if (!arguments.length) return clipExtent;\n      clipExtent = _;\n      postclip = _ ? d3_geo_clipExtent(_[0][0], _[0][1], _[1][0], _[1][1]) : d3_identity;\n      return invalidate();\n    };\n    projection.scale = function(_) {\n      if (!arguments.length) return k;\n      k = +_;\n      return reset();\n    };\n    projection.translate = function(_) {\n      if (!arguments.length) return [ x, y ];\n      x = +_[0];\n      y = +_[1];\n      return reset();\n    };\n    projection.center = function(_) {\n      if (!arguments.length) return [ λ * d3_degrees, φ * d3_degrees ];\n      λ = _[0] % 360 * d3_radians;\n      φ = _[1] % 360 * d3_radians;\n      return reset();\n    };\n    projection.rotate = function(_) {\n      if (!arguments.length) return [ δλ * d3_degrees, δφ * d3_degrees, δγ * d3_degrees ];\n      δλ = _[0] % 360 * d3_radians;\n      δφ = _[1] % 360 * d3_radians;\n      δγ = _.length > 2 ? _[2] % 360 * d3_radians : 0;\n      return reset();\n    };\n    d3.rebind(projection, projectResample, \"precision\");\n    function reset() {\n      projectRotate = d3_geo_compose(rotate = d3_geo_rotation(δλ, δφ, δγ), project);\n      var center = project(λ, φ);\n      δx = x - center[0] * k;\n      δy = y + center[1] * k;\n      return invalidate();\n    }\n    function invalidate() {\n      if (stream) stream.valid = false, stream = null;\n      return projection;\n    }\n    return function() {\n      project = projectAt.apply(this, arguments);\n      projection.invert = project.invert && invert;\n      return reset();\n    };\n  }\n  function d3_geo_projectionRadians(stream) {\n    return d3_geo_transformPoint(stream, function(x, y) {\n      stream.point(x * d3_radians, y * d3_radians);\n    });\n  }\n  function d3_geo_equirectangular(λ, φ) {\n    return [ λ, φ ];\n  }\n  (d3.geo.equirectangular = function() {\n    return d3_geo_projection(d3_geo_equirectangular);\n  }).raw = d3_geo_equirectangular.invert = d3_geo_equirectangular;\n  d3.geo.rotation = function(rotate) {\n    rotate = d3_geo_rotation(rotate[0] % 360 * d3_radians, rotate[1] * d3_radians, rotate.length > 2 ? rotate[2] * d3_radians : 0);\n    function forward(coordinates) {\n      coordinates = rotate(coordinates[0] * d3_radians, coordinates[1] * d3_radians);\n      return coordinates[0] *= d3_degrees, coordinates[1] *= d3_degrees, coordinates;\n    }\n    forward.invert = function(coordinates) {\n      coordinates = rotate.invert(coordinates[0] * d3_radians, coordinates[1] * d3_radians);\n      return coordinates[0] *= d3_degrees, coordinates[1] *= d3_degrees, coordinates;\n    };\n    return forward;\n  };\n  function d3_geo_identityRotation(λ, φ) {\n    return [ λ > π ? λ - τ : λ < -π ? λ + τ : λ, φ ];\n  }\n  d3_geo_identityRotation.invert = d3_geo_equirectangular;\n  function d3_geo_rotation(δλ, δφ, δγ) {\n    return δλ ? δφ || δγ ? d3_geo_compose(d3_geo_rotationλ(δλ), d3_geo_rotationφγ(δφ, δγ)) : d3_geo_rotationλ(δλ) : δφ || δγ ? d3_geo_rotationφγ(δφ, δγ) : d3_geo_identityRotation;\n  }\n  function d3_geo_forwardRotationλ(δλ) {\n    return function(λ, φ) {\n      return λ += δλ, [ λ > π ? λ - τ : λ < -π ? λ + τ : λ, φ ];\n    };\n  }\n  function d3_geo_rotationλ(δλ) {\n    var rotation = d3_geo_forwardRotationλ(δλ);\n    rotation.invert = d3_geo_forwardRotationλ(-δλ);\n    return rotation;\n  }\n  function d3_geo_rotationφγ(δφ, δγ) {\n    var cosδφ = Math.cos(δφ), sinδφ = Math.sin(δφ), cosδγ = Math.cos(δγ), sinδγ = Math.sin(δγ);\n    function rotation(λ, φ) {\n      var cosφ = Math.cos(φ), x = Math.cos(λ) * cosφ, y = Math.sin(λ) * cosφ, z = Math.sin(φ), k = z * cosδφ + x * sinδφ;\n      return [ Math.atan2(y * cosδγ - k * sinδγ, x * cosδφ - z * sinδφ), d3_asin(k * cosδγ + y * sinδγ) ];\n    }\n    rotation.invert = function(λ, φ) {\n      var cosφ = Math.cos(φ), x = Math.cos(λ) * cosφ, y = Math.sin(λ) * cosφ, z = Math.sin(φ), k = z * cosδγ - y * sinδγ;\n      return [ Math.atan2(y * cosδγ + z * sinδγ, x * cosδφ + k * sinδφ), d3_asin(k * cosδφ - x * sinδφ) ];\n    };\n    return rotation;\n  }\n  d3.geo.circle = function() {\n    var origin = [ 0, 0 ], angle, precision = 6, interpolate;\n    function circle() {\n      var center = typeof origin === \"function\" ? origin.apply(this, arguments) : origin, rotate = d3_geo_rotation(-center[0] * d3_radians, -center[1] * d3_radians, 0).invert, ring = [];\n      interpolate(null, null, 1, {\n        point: function(x, y) {\n          ring.push(x = rotate(x, y));\n          x[0] *= d3_degrees, x[1] *= d3_degrees;\n        }\n      });\n      return {\n        type: \"Polygon\",\n        coordinates: [ ring ]\n      };\n    }\n    circle.origin = function(x) {\n      if (!arguments.length) return origin;\n      origin = x;\n      return circle;\n    };\n    circle.angle = function(x) {\n      if (!arguments.length) return angle;\n      interpolate = d3_geo_circleInterpolate((angle = +x) * d3_radians, precision * d3_radians);\n      return circle;\n    };\n    circle.precision = function(_) {\n      if (!arguments.length) return precision;\n      interpolate = d3_geo_circleInterpolate(angle * d3_radians, (precision = +_) * d3_radians);\n      return circle;\n    };\n    return circle.angle(90);\n  };\n  function d3_geo_circleInterpolate(radius, precision) {\n    var cr = Math.cos(radius), sr = Math.sin(radius);\n    return function(from, to, direction, listener) {\n      var step = direction * precision;\n      if (from != null) {\n        from = d3_geo_circleAngle(cr, from);\n        to = d3_geo_circleAngle(cr, to);\n        if (direction > 0 ? from < to : from > to) from += direction * τ;\n      } else {\n        from = radius + direction * τ;\n        to = radius - .5 * step;\n      }\n      for (var point, t = from; direction > 0 ? t > to : t < to; t -= step) {\n        listener.point((point = d3_geo_spherical([ cr, -sr * Math.cos(t), -sr * Math.sin(t) ]))[0], point[1]);\n      }\n    };\n  }\n  function d3_geo_circleAngle(cr, point) {\n    var a = d3_geo_cartesian(point);\n    a[0] -= cr;\n    d3_geo_cartesianNormalize(a);\n    var angle = d3_acos(-a[1]);\n    return ((-a[2] < 0 ? -angle : angle) + 2 * Math.PI - ε) % (2 * Math.PI);\n  }\n  d3.geo.distance = function(a, b) {\n    var Δλ = (b[0] - a[0]) * d3_radians, φ0 = a[1] * d3_radians, φ1 = b[1] * d3_radians, sinΔλ = Math.sin(Δλ), cosΔλ = Math.cos(Δλ), sinφ0 = Math.sin(φ0), cosφ0 = Math.cos(φ0), sinφ1 = Math.sin(φ1), cosφ1 = Math.cos(φ1), t;\n    return Math.atan2(Math.sqrt((t = cosφ1 * sinΔλ) * t + (t = cosφ0 * sinφ1 - sinφ0 * cosφ1 * cosΔλ) * t), sinφ0 * sinφ1 + cosφ0 * cosφ1 * cosΔλ);\n  };\n  d3.geo.graticule = function() {\n    var x1, x0, X1, X0, y1, y0, Y1, Y0, dx = 10, dy = dx, DX = 90, DY = 360, x, y, X, Y, precision = 2.5;\n    function graticule() {\n      return {\n        type: \"MultiLineString\",\n        coordinates: lines()\n      };\n    }\n    function lines() {\n      return d3.range(Math.ceil(X0 / DX) * DX, X1, DX).map(X).concat(d3.range(Math.ceil(Y0 / DY) * DY, Y1, DY).map(Y)).concat(d3.range(Math.ceil(x0 / dx) * dx, x1, dx).filter(function(x) {\n        return abs(x % DX) > ε;\n      }).map(x)).concat(d3.range(Math.ceil(y0 / dy) * dy, y1, dy).filter(function(y) {\n        return abs(y % DY) > ε;\n      }).map(y));\n    }\n    graticule.lines = function() {\n      return lines().map(function(coordinates) {\n        return {\n          type: \"LineString\",\n          coordinates: coordinates\n        };\n      });\n    };\n    graticule.outline = function() {\n      return {\n        type: \"Polygon\",\n        coordinates: [ X(X0).concat(Y(Y1).slice(1), X(X1).reverse().slice(1), Y(Y0).reverse().slice(1)) ]\n      };\n    };\n    graticule.extent = function(_) {\n      if (!arguments.length) return graticule.minorExtent();\n      return graticule.majorExtent(_).minorExtent(_);\n    };\n    graticule.majorExtent = function(_) {\n      if (!arguments.length) return [ [ X0, Y0 ], [ X1, Y1 ] ];\n      X0 = +_[0][0], X1 = +_[1][0];\n      Y0 = +_[0][1], Y1 = +_[1][1];\n      if (X0 > X1) _ = X0, X0 = X1, X1 = _;\n      if (Y0 > Y1) _ = Y0, Y0 = Y1, Y1 = _;\n      return graticule.precision(precision);\n    };\n    graticule.minorExtent = function(_) {\n      if (!arguments.length) return [ [ x0, y0 ], [ x1, y1 ] ];\n      x0 = +_[0][0], x1 = +_[1][0];\n      y0 = +_[0][1], y1 = +_[1][1];\n      if (x0 > x1) _ = x0, x0 = x1, x1 = _;\n      if (y0 > y1) _ = y0, y0 = y1, y1 = _;\n      return graticule.precision(precision);\n    };\n    graticule.step = function(_) {\n      if (!arguments.length) return graticule.minorStep();\n      return graticule.majorStep(_).minorStep(_);\n    };\n    graticule.majorStep = function(_) {\n      if (!arguments.length) return [ DX, DY ];\n      DX = +_[0], DY = +_[1];\n      return graticule;\n    };\n    graticule.minorStep = function(_) {\n      if (!arguments.length) return [ dx, dy ];\n      dx = +_[0], dy = +_[1];\n      return graticule;\n    };\n    graticule.precision = function(_) {\n      if (!arguments.length) return precision;\n      precision = +_;\n      x = d3_geo_graticuleX(y0, y1, 90);\n      y = d3_geo_graticuleY(x0, x1, precision);\n      X = d3_geo_graticuleX(Y0, Y1, 90);\n      Y = d3_geo_graticuleY(X0, X1, precision);\n      return graticule;\n    };\n    return graticule.majorExtent([ [ -180, -90 + ε ], [ 180, 90 - ε ] ]).minorExtent([ [ -180, -80 - ε ], [ 180, 80 + ε ] ]);\n  };\n  function d3_geo_graticuleX(y0, y1, dy) {\n    var y = d3.range(y0, y1 - ε, dy).concat(y1);\n    return function(x) {\n      return y.map(function(y) {\n        return [ x, y ];\n      });\n    };\n  }\n  function d3_geo_graticuleY(x0, x1, dx) {\n    var x = d3.range(x0, x1 - ε, dx).concat(x1);\n    return function(y) {\n      return x.map(function(x) {\n        return [ x, y ];\n      });\n    };\n  }\n  function d3_source(d) {\n    return d.source;\n  }\n  function d3_target(d) {\n    return d.target;\n  }\n  d3.geo.greatArc = function() {\n    var source = d3_source, source_, target = d3_target, target_;\n    function greatArc() {\n      return {\n        type: \"LineString\",\n        coordinates: [ source_ || source.apply(this, arguments), target_ || target.apply(this, arguments) ]\n      };\n    }\n    greatArc.distance = function() {\n      return d3.geo.distance(source_ || source.apply(this, arguments), target_ || target.apply(this, arguments));\n    };\n    greatArc.source = function(_) {\n      if (!arguments.length) return source;\n      source = _, source_ = typeof _ === \"function\" ? null : _;\n      return greatArc;\n    };\n    greatArc.target = function(_) {\n      if (!arguments.length) return target;\n      target = _, target_ = typeof _ === \"function\" ? null : _;\n      return greatArc;\n    };\n    greatArc.precision = function() {\n      return arguments.length ? greatArc : 0;\n    };\n    return greatArc;\n  };\n  d3.geo.interpolate = function(source, target) {\n    return d3_geo_interpolate(source[0] * d3_radians, source[1] * d3_radians, target[0] * d3_radians, target[1] * d3_radians);\n  };\n  function d3_geo_interpolate(x0, y0, x1, y1) {\n    var cy0 = Math.cos(y0), sy0 = Math.sin(y0), cy1 = Math.cos(y1), sy1 = Math.sin(y1), kx0 = cy0 * Math.cos(x0), ky0 = cy0 * Math.sin(x0), kx1 = cy1 * Math.cos(x1), ky1 = cy1 * Math.sin(x1), d = 2 * Math.asin(Math.sqrt(d3_haversin(y1 - y0) + cy0 * cy1 * d3_haversin(x1 - x0))), k = 1 / Math.sin(d);\n    var interpolate = d ? function(t) {\n      var B = Math.sin(t *= d) * k, A = Math.sin(d - t) * k, x = A * kx0 + B * kx1, y = A * ky0 + B * ky1, z = A * sy0 + B * sy1;\n      return [ Math.atan2(y, x) * d3_degrees, Math.atan2(z, Math.sqrt(x * x + y * y)) * d3_degrees ];\n    } : function() {\n      return [ x0 * d3_degrees, y0 * d3_degrees ];\n    };\n    interpolate.distance = d;\n    return interpolate;\n  }\n  d3.geo.length = function(object) {\n    d3_geo_lengthSum = 0;\n    d3.geo.stream(object, d3_geo_length);\n    return d3_geo_lengthSum;\n  };\n  var d3_geo_lengthSum;\n  var d3_geo_length = {\n    sphere: d3_noop,\n    point: d3_noop,\n    lineStart: d3_geo_lengthLineStart,\n    lineEnd: d3_noop,\n    polygonStart: d3_noop,\n    polygonEnd: d3_noop\n  };\n  function d3_geo_lengthLineStart() {\n    var λ0, sinφ0, cosφ0;\n    d3_geo_length.point = function(λ, φ) {\n      λ0 = λ * d3_radians, sinφ0 = Math.sin(φ *= d3_radians), cosφ0 = Math.cos(φ);\n      d3_geo_length.point = nextPoint;\n    };\n    d3_geo_length.lineEnd = function() {\n      d3_geo_length.point = d3_geo_length.lineEnd = d3_noop;\n    };\n    function nextPoint(λ, φ) {\n      var sinφ = Math.sin(φ *= d3_radians), cosφ = Math.cos(φ), t = abs((λ *= d3_radians) - λ0), cosΔλ = Math.cos(t);\n      d3_geo_lengthSum += Math.atan2(Math.sqrt((t = cosφ * Math.sin(t)) * t + (t = cosφ0 * sinφ - sinφ0 * cosφ * cosΔλ) * t), sinφ0 * sinφ + cosφ0 * cosφ * cosΔλ);\n      λ0 = λ, sinφ0 = sinφ, cosφ0 = cosφ;\n    }\n  }\n  function d3_geo_azimuthal(scale, angle) {\n    function azimuthal(λ, φ) {\n      var cosλ = Math.cos(λ), cosφ = Math.cos(φ), k = scale(cosλ * cosφ);\n      return [ k * cosφ * Math.sin(λ), k * Math.sin(φ) ];\n    }\n    azimuthal.invert = function(x, y) {\n      var ρ = Math.sqrt(x * x + y * y), c = angle(ρ), sinc = Math.sin(c), cosc = Math.cos(c);\n      return [ Math.atan2(x * sinc, ρ * cosc), Math.asin(ρ && y * sinc / ρ) ];\n    };\n    return azimuthal;\n  }\n  var d3_geo_azimuthalEqualArea = d3_geo_azimuthal(function(cosλcosφ) {\n    return Math.sqrt(2 / (1 + cosλcosφ));\n  }, function(ρ) {\n    return 2 * Math.asin(ρ / 2);\n  });\n  (d3.geo.azimuthalEqualArea = function() {\n    return d3_geo_projection(d3_geo_azimuthalEqualArea);\n  }).raw = d3_geo_azimuthalEqualArea;\n  var d3_geo_azimuthalEquidistant = d3_geo_azimuthal(function(cosλcosφ) {\n    var c = Math.acos(cosλcosφ);\n    return c && c / Math.sin(c);\n  }, d3_identity);\n  (d3.geo.azimuthalEquidistant = function() {\n    return d3_geo_projection(d3_geo_azimuthalEquidistant);\n  }).raw = d3_geo_azimuthalEquidistant;\n  function d3_geo_conicConformal(φ0, φ1) {\n    var cosφ0 = Math.cos(φ0), t = function(φ) {\n      return Math.tan(π / 4 + φ / 2);\n    }, n = φ0 === φ1 ? Math.sin(φ0) : Math.log(cosφ0 / Math.cos(φ1)) / Math.log(t(φ1) / t(φ0)), F = cosφ0 * Math.pow(t(φ0), n) / n;\n    if (!n) return d3_geo_mercator;\n    function forward(λ, φ) {\n      if (F > 0) {\n        if (φ < -halfπ + ε) φ = -halfπ + ε;\n      } else {\n        if (φ > halfπ - ε) φ = halfπ - ε;\n      }\n      var ρ = F / Math.pow(t(φ), n);\n      return [ ρ * Math.sin(n * λ), F - ρ * Math.cos(n * λ) ];\n    }\n    forward.invert = function(x, y) {\n      var ρ0_y = F - y, ρ = d3_sgn(n) * Math.sqrt(x * x + ρ0_y * ρ0_y);\n      return [ Math.atan2(x, ρ0_y) / n, 2 * Math.atan(Math.pow(F / ρ, 1 / n)) - halfπ ];\n    };\n    return forward;\n  }\n  (d3.geo.conicConformal = function() {\n    return d3_geo_conic(d3_geo_conicConformal);\n  }).raw = d3_geo_conicConformal;\n  function d3_geo_conicEquidistant(φ0, φ1) {\n    var cosφ0 = Math.cos(φ0), n = φ0 === φ1 ? Math.sin(φ0) : (cosφ0 - Math.cos(φ1)) / (φ1 - φ0), G = cosφ0 / n + φ0;\n    if (abs(n) < ε) return d3_geo_equirectangular;\n    function forward(λ, φ) {\n      var ρ = G - φ;\n      return [ ρ * Math.sin(n * λ), G - ρ * Math.cos(n * λ) ];\n    }\n    forward.invert = function(x, y) {\n      var ρ0_y = G - y;\n      return [ Math.atan2(x, ρ0_y) / n, G - d3_sgn(n) * Math.sqrt(x * x + ρ0_y * ρ0_y) ];\n    };\n    return forward;\n  }\n  (d3.geo.conicEquidistant = function() {\n    return d3_geo_conic(d3_geo_conicEquidistant);\n  }).raw = d3_geo_conicEquidistant;\n  var d3_geo_gnomonic = d3_geo_azimuthal(function(cosλcosφ) {\n    return 1 / cosλcosφ;\n  }, Math.atan);\n  (d3.geo.gnomonic = function() {\n    return d3_geo_projection(d3_geo_gnomonic);\n  }).raw = d3_geo_gnomonic;\n  function d3_geo_mercator(λ, φ) {\n    return [ λ, Math.log(Math.tan(π / 4 + φ / 2)) ];\n  }\n  d3_geo_mercator.invert = function(x, y) {\n    return [ x, 2 * Math.atan(Math.exp(y)) - halfπ ];\n  };\n  function d3_geo_mercatorProjection(project) {\n    var m = d3_geo_projection(project), scale = m.scale, translate = m.translate, clipExtent = m.clipExtent, clipAuto;\n    m.scale = function() {\n      var v = scale.apply(m, arguments);\n      return v === m ? clipAuto ? m.clipExtent(null) : m : v;\n    };\n    m.translate = function() {\n      var v = translate.apply(m, arguments);\n      return v === m ? clipAuto ? m.clipExtent(null) : m : v;\n    };\n    m.clipExtent = function(_) {\n      var v = clipExtent.apply(m, arguments);\n      if (v === m) {\n        if (clipAuto = _ == null) {\n          var k = π * scale(), t = translate();\n          clipExtent([ [ t[0] - k, t[1] - k ], [ t[0] + k, t[1] + k ] ]);\n        }\n      } else if (clipAuto) {\n        v = null;\n      }\n      return v;\n    };\n    return m.clipExtent(null);\n  }\n  (d3.geo.mercator = function() {\n    return d3_geo_mercatorProjection(d3_geo_mercator);\n  }).raw = d3_geo_mercator;\n  var d3_geo_orthographic = d3_geo_azimuthal(function() {\n    return 1;\n  }, Math.asin);\n  (d3.geo.orthographic = function() {\n    return d3_geo_projection(d3_geo_orthographic);\n  }).raw = d3_geo_orthographic;\n  var d3_geo_stereographic = d3_geo_azimuthal(function(cosλcosφ) {\n    return 1 / (1 + cosλcosφ);\n  }, function(ρ) {\n    return 2 * Math.atan(ρ);\n  });\n  (d3.geo.stereographic = function() {\n    return d3_geo_projection(d3_geo_stereographic);\n  }).raw = d3_geo_stereographic;\n  function d3_geo_transverseMercator(λ, φ) {\n    return [ Math.log(Math.tan(π / 4 + φ / 2)), -λ ];\n  }\n  d3_geo_transverseMercator.invert = function(x, y) {\n    return [ -y, 2 * Math.atan(Math.exp(x)) - halfπ ];\n  };\n  (d3.geo.transverseMercator = function() {\n    var projection = d3_geo_mercatorProjection(d3_geo_transverseMercator), center = projection.center, rotate = projection.rotate;\n    projection.center = function(_) {\n      return _ ? center([ -_[1], _[0] ]) : (_ = center(), [ _[1], -_[0] ]);\n    };\n    projection.rotate = function(_) {\n      return _ ? rotate([ _[0], _[1], _.length > 2 ? _[2] + 90 : 90 ]) : (_ = rotate(), \n      [ _[0], _[1], _[2] - 90 ]);\n    };\n    return rotate([ 0, 0, 90 ]);\n  }).raw = d3_geo_transverseMercator;\n  d3.geom = {};\n  function d3_geom_pointX(d) {\n    return d[0];\n  }\n  function d3_geom_pointY(d) {\n    return d[1];\n  }\n  d3.geom.hull = function(vertices) {\n    var x = d3_geom_pointX, y = d3_geom_pointY;\n    if (arguments.length) return hull(vertices);\n    function hull(data) {\n      if (data.length < 3) return [];\n      var fx = d3_functor(x), fy = d3_functor(y), i, n = data.length, points = [], flippedPoints = [];\n      for (i = 0; i < n; i++) {\n        points.push([ +fx.call(this, data[i], i), +fy.call(this, data[i], i), i ]);\n      }\n      points.sort(d3_geom_hullOrder);\n      for (i = 0; i < n; i++) flippedPoints.push([ points[i][0], -points[i][1] ]);\n      var upper = d3_geom_hullUpper(points), lower = d3_geom_hullUpper(flippedPoints);\n      var skipLeft = lower[0] === upper[0], skipRight = lower[lower.length - 1] === upper[upper.length - 1], polygon = [];\n      for (i = upper.length - 1; i >= 0; --i) polygon.push(data[points[upper[i]][2]]);\n      for (i = +skipLeft; i < lower.length - skipRight; ++i) polygon.push(data[points[lower[i]][2]]);\n      return polygon;\n    }\n    hull.x = function(_) {\n      return arguments.length ? (x = _, hull) : x;\n    };\n    hull.y = function(_) {\n      return arguments.length ? (y = _, hull) : y;\n    };\n    return hull;\n  };\n  function d3_geom_hullUpper(points) {\n    var n = points.length, hull = [ 0, 1 ], hs = 2;\n    for (var i = 2; i < n; i++) {\n      while (hs > 1 && d3_cross2d(points[hull[hs - 2]], points[hull[hs - 1]], points[i]) <= 0) --hs;\n      hull[hs++] = i;\n    }\n    return hull.slice(0, hs);\n  }\n  function d3_geom_hullOrder(a, b) {\n    return a[0] - b[0] || a[1] - b[1];\n  }\n  d3.geom.polygon = function(coordinates) {\n    d3_subclass(coordinates, d3_geom_polygonPrototype);\n    return coordinates;\n  };\n  var d3_geom_polygonPrototype = d3.geom.polygon.prototype = [];\n  d3_geom_polygonPrototype.area = function() {\n    var i = -1, n = this.length, a, b = this[n - 1], area = 0;\n    while (++i < n) {\n      a = b;\n      b = this[i];\n      area += a[1] * b[0] - a[0] * b[1];\n    }\n    return area * .5;\n  };\n  d3_geom_polygonPrototype.centroid = function(k) {\n    var i = -1, n = this.length, x = 0, y = 0, a, b = this[n - 1], c;\n    if (!arguments.length) k = -1 / (6 * this.area());\n    while (++i < n) {\n      a = b;\n      b = this[i];\n      c = a[0] * b[1] - b[0] * a[1];\n      x += (a[0] + b[0]) * c;\n      y += (a[1] + b[1]) * c;\n    }\n    return [ x * k, y * k ];\n  };\n  d3_geom_polygonPrototype.clip = function(subject) {\n    var input, closed = d3_geom_polygonClosed(subject), i = -1, n = this.length - d3_geom_polygonClosed(this), j, m, a = this[n - 1], b, c, d;\n    while (++i < n) {\n      input = subject.slice();\n      subject.length = 0;\n      b = this[i];\n      c = input[(m = input.length - closed) - 1];\n      j = -1;\n      while (++j < m) {\n        d = input[j];\n        if (d3_geom_polygonInside(d, a, b)) {\n          if (!d3_geom_polygonInside(c, a, b)) {\n            subject.push(d3_geom_polygonIntersect(c, d, a, b));\n          }\n          subject.push(d);\n        } else if (d3_geom_polygonInside(c, a, b)) {\n          subject.push(d3_geom_polygonIntersect(c, d, a, b));\n        }\n        c = d;\n      }\n      if (closed) subject.push(subject[0]);\n      a = b;\n    }\n    return subject;\n  };\n  function d3_geom_polygonInside(p, a, b) {\n    return (b[0] - a[0]) * (p[1] - a[1]) < (b[1] - a[1]) * (p[0] - a[0]);\n  }\n  function d3_geom_polygonIntersect(c, d, a, b) {\n    var x1 = c[0], x3 = a[0], x21 = d[0] - x1, x43 = b[0] - x3, y1 = c[1], y3 = a[1], y21 = d[1] - y1, y43 = b[1] - y3, ua = (x43 * (y1 - y3) - y43 * (x1 - x3)) / (y43 * x21 - x43 * y21);\n    return [ x1 + ua * x21, y1 + ua * y21 ];\n  }\n  function d3_geom_polygonClosed(coordinates) {\n    var a = coordinates[0], b = coordinates[coordinates.length - 1];\n    return !(a[0] - b[0] || a[1] - b[1]);\n  }\n  var d3_geom_voronoiEdges, d3_geom_voronoiCells, d3_geom_voronoiBeaches, d3_geom_voronoiBeachPool = [], d3_geom_voronoiFirstCircle, d3_geom_voronoiCircles, d3_geom_voronoiCirclePool = [];\n  function d3_geom_voronoiBeach() {\n    d3_geom_voronoiRedBlackNode(this);\n    this.edge = this.site = this.circle = null;\n  }\n  function d3_geom_voronoiCreateBeach(site) {\n    var beach = d3_geom_voronoiBeachPool.pop() || new d3_geom_voronoiBeach();\n    beach.site = site;\n    return beach;\n  }\n  function d3_geom_voronoiDetachBeach(beach) {\n    d3_geom_voronoiDetachCircle(beach);\n    d3_geom_voronoiBeaches.remove(beach);\n    d3_geom_voronoiBeachPool.push(beach);\n    d3_geom_voronoiRedBlackNode(beach);\n  }\n  function d3_geom_voronoiRemoveBeach(beach) {\n    var circle = beach.circle, x = circle.x, y = circle.cy, vertex = {\n      x: x,\n      y: y\n    }, previous = beach.P, next = beach.N, disappearing = [ beach ];\n    d3_geom_voronoiDetachBeach(beach);\n    var lArc = previous;\n    while (lArc.circle && abs(x - lArc.circle.x) < ε && abs(y - lArc.circle.cy) < ε) {\n      previous = lArc.P;\n      disappearing.unshift(lArc);\n      d3_geom_voronoiDetachBeach(lArc);\n      lArc = previous;\n    }\n    disappearing.unshift(lArc);\n    d3_geom_voronoiDetachCircle(lArc);\n    var rArc = next;\n    while (rArc.circle && abs(x - rArc.circle.x) < ε && abs(y - rArc.circle.cy) < ε) {\n      next = rArc.N;\n      disappearing.push(rArc);\n      d3_geom_voronoiDetachBeach(rArc);\n      rArc = next;\n    }\n    disappearing.push(rArc);\n    d3_geom_voronoiDetachCircle(rArc);\n    var nArcs = disappearing.length, iArc;\n    for (iArc = 1; iArc < nArcs; ++iArc) {\n      rArc = disappearing[iArc];\n      lArc = disappearing[iArc - 1];\n      d3_geom_voronoiSetEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex);\n    }\n    lArc = disappearing[0];\n    rArc = disappearing[nArcs - 1];\n    rArc.edge = d3_geom_voronoiCreateEdge(lArc.site, rArc.site, null, vertex);\n    d3_geom_voronoiAttachCircle(lArc);\n    d3_geom_voronoiAttachCircle(rArc);\n  }\n  function d3_geom_voronoiAddBeach(site) {\n    var x = site.x, directrix = site.y, lArc, rArc, dxl, dxr, node = d3_geom_voronoiBeaches._;\n    while (node) {\n      dxl = d3_geom_voronoiLeftBreakPoint(node, directrix) - x;\n      if (dxl > ε) node = node.L; else {\n        dxr = x - d3_geom_voronoiRightBreakPoint(node, directrix);\n        if (dxr > ε) {\n          if (!node.R) {\n            lArc = node;\n            break;\n          }\n          node = node.R;\n        } else {\n          if (dxl > -ε) {\n            lArc = node.P;\n            rArc = node;\n          } else if (dxr > -ε) {\n            lArc = node;\n            rArc = node.N;\n          } else {\n            lArc = rArc = node;\n          }\n          break;\n        }\n      }\n    }\n    var newArc = d3_geom_voronoiCreateBeach(site);\n    d3_geom_voronoiBeaches.insert(lArc, newArc);\n    if (!lArc && !rArc) return;\n    if (lArc === rArc) {\n      d3_geom_voronoiDetachCircle(lArc);\n      rArc = d3_geom_voronoiCreateBeach(lArc.site);\n      d3_geom_voronoiBeaches.insert(newArc, rArc);\n      newArc.edge = rArc.edge = d3_geom_voronoiCreateEdge(lArc.site, newArc.site);\n      d3_geom_voronoiAttachCircle(lArc);\n      d3_geom_voronoiAttachCircle(rArc);\n      return;\n    }\n    if (!rArc) {\n      newArc.edge = d3_geom_voronoiCreateEdge(lArc.site, newArc.site);\n      return;\n    }\n    d3_geom_voronoiDetachCircle(lArc);\n    d3_geom_voronoiDetachCircle(rArc);\n    var lSite = lArc.site, ax = lSite.x, ay = lSite.y, bx = site.x - ax, by = site.y - ay, rSite = rArc.site, cx = rSite.x - ax, cy = rSite.y - ay, d = 2 * (bx * cy - by * cx), hb = bx * bx + by * by, hc = cx * cx + cy * cy, vertex = {\n      x: (cy * hb - by * hc) / d + ax,\n      y: (bx * hc - cx * hb) / d + ay\n    };\n    d3_geom_voronoiSetEdgeEnd(rArc.edge, lSite, rSite, vertex);\n    newArc.edge = d3_geom_voronoiCreateEdge(lSite, site, null, vertex);\n    rArc.edge = d3_geom_voronoiCreateEdge(site, rSite, null, vertex);\n    d3_geom_voronoiAttachCircle(lArc);\n    d3_geom_voronoiAttachCircle(rArc);\n  }\n  function d3_geom_voronoiLeftBreakPoint(arc, directrix) {\n    var site = arc.site, rfocx = site.x, rfocy = site.y, pby2 = rfocy - directrix;\n    if (!pby2) return rfocx;\n    var lArc = arc.P;\n    if (!lArc) return -Infinity;\n    site = lArc.site;\n    var lfocx = site.x, lfocy = site.y, plby2 = lfocy - directrix;\n    if (!plby2) return lfocx;\n    var hl = lfocx - rfocx, aby2 = 1 / pby2 - 1 / plby2, b = hl / plby2;\n    if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx;\n    return (rfocx + lfocx) / 2;\n  }\n  function d3_geom_voronoiRightBreakPoint(arc, directrix) {\n    var rArc = arc.N;\n    if (rArc) return d3_geom_voronoiLeftBreakPoint(rArc, directrix);\n    var site = arc.site;\n    return site.y === directrix ? site.x : Infinity;\n  }\n  function d3_geom_voronoiCell(site) {\n    this.site = site;\n    this.edges = [];\n  }\n  d3_geom_voronoiCell.prototype.prepare = function() {\n    var halfEdges = this.edges, iHalfEdge = halfEdges.length, edge;\n    while (iHalfEdge--) {\n      edge = halfEdges[iHalfEdge].edge;\n      if (!edge.b || !edge.a) halfEdges.splice(iHalfEdge, 1);\n    }\n    halfEdges.sort(d3_geom_voronoiHalfEdgeOrder);\n    return halfEdges.length;\n  };\n  function d3_geom_voronoiCloseCells(extent) {\n    var x0 = extent[0][0], x1 = extent[1][0], y0 = extent[0][1], y1 = extent[1][1], x2, y2, x3, y3, cells = d3_geom_voronoiCells, iCell = cells.length, cell, iHalfEdge, halfEdges, nHalfEdges, start, end;\n    while (iCell--) {\n      cell = cells[iCell];\n      if (!cell || !cell.prepare()) continue;\n      halfEdges = cell.edges;\n      nHalfEdges = halfEdges.length;\n      iHalfEdge = 0;\n      while (iHalfEdge < nHalfEdges) {\n        end = halfEdges[iHalfEdge].end(), x3 = end.x, y3 = end.y;\n        start = halfEdges[++iHalfEdge % nHalfEdges].start(), x2 = start.x, y2 = start.y;\n        if (abs(x3 - x2) > ε || abs(y3 - y2) > ε) {\n          halfEdges.splice(iHalfEdge, 0, new d3_geom_voronoiHalfEdge(d3_geom_voronoiCreateBorderEdge(cell.site, end, abs(x3 - x0) < ε && y1 - y3 > ε ? {\n            x: x0,\n            y: abs(x2 - x0) < ε ? y2 : y1\n          } : abs(y3 - y1) < ε && x1 - x3 > ε ? {\n            x: abs(y2 - y1) < ε ? x2 : x1,\n            y: y1\n          } : abs(x3 - x1) < ε && y3 - y0 > ε ? {\n            x: x1,\n            y: abs(x2 - x1) < ε ? y2 : y0\n          } : abs(y3 - y0) < ε && x3 - x0 > ε ? {\n            x: abs(y2 - y0) < ε ? x2 : x0,\n            y: y0\n          } : null), cell.site, null));\n          ++nHalfEdges;\n        }\n      }\n    }\n  }\n  function d3_geom_voronoiHalfEdgeOrder(a, b) {\n    return b.angle - a.angle;\n  }\n  function d3_geom_voronoiCircle() {\n    d3_geom_voronoiRedBlackNode(this);\n    this.x = this.y = this.arc = this.site = this.cy = null;\n  }\n  function d3_geom_voronoiAttachCircle(arc) {\n    var lArc = arc.P, rArc = arc.N;\n    if (!lArc || !rArc) return;\n    var lSite = lArc.site, cSite = arc.site, rSite = rArc.site;\n    if (lSite === rSite) return;\n    var bx = cSite.x, by = cSite.y, ax = lSite.x - bx, ay = lSite.y - by, cx = rSite.x - bx, cy = rSite.y - by;\n    var d = 2 * (ax * cy - ay * cx);\n    if (d >= -ε2) return;\n    var ha = ax * ax + ay * ay, hc = cx * cx + cy * cy, x = (cy * ha - ay * hc) / d, y = (ax * hc - cx * ha) / d, cy = y + by;\n    var circle = d3_geom_voronoiCirclePool.pop() || new d3_geom_voronoiCircle();\n    circle.arc = arc;\n    circle.site = cSite;\n    circle.x = x + bx;\n    circle.y = cy + Math.sqrt(x * x + y * y);\n    circle.cy = cy;\n    arc.circle = circle;\n    var before = null, node = d3_geom_voronoiCircles._;\n    while (node) {\n      if (circle.y < node.y || circle.y === node.y && circle.x <= node.x) {\n        if (node.L) node = node.L; else {\n          before = node.P;\n          break;\n        }\n      } else {\n        if (node.R) node = node.R; else {\n          before = node;\n          break;\n        }\n      }\n    }\n    d3_geom_voronoiCircles.insert(before, circle);\n    if (!before) d3_geom_voronoiFirstCircle = circle;\n  }\n  function d3_geom_voronoiDetachCircle(arc) {\n    var circle = arc.circle;\n    if (circle) {\n      if (!circle.P) d3_geom_voronoiFirstCircle = circle.N;\n      d3_geom_voronoiCircles.remove(circle);\n      d3_geom_voronoiCirclePool.push(circle);\n      d3_geom_voronoiRedBlackNode(circle);\n      arc.circle = null;\n    }\n  }\n  function d3_geom_voronoiClipEdges(extent) {\n    var edges = d3_geom_voronoiEdges, clip = d3_geom_clipLine(extent[0][0], extent[0][1], extent[1][0], extent[1][1]), i = edges.length, e;\n    while (i--) {\n      e = edges[i];\n      if (!d3_geom_voronoiConnectEdge(e, extent) || !clip(e) || abs(e.a.x - e.b.x) < ε && abs(e.a.y - e.b.y) < ε) {\n        e.a = e.b = null;\n        edges.splice(i, 1);\n      }\n    }\n  }\n  function d3_geom_voronoiConnectEdge(edge, extent) {\n    var vb = edge.b;\n    if (vb) return true;\n    var va = edge.a, x0 = extent[0][0], x1 = extent[1][0], y0 = extent[0][1], y1 = extent[1][1], lSite = edge.l, rSite = edge.r, lx = lSite.x, ly = lSite.y, rx = rSite.x, ry = rSite.y, fx = (lx + rx) / 2, fy = (ly + ry) / 2, fm, fb;\n    if (ry === ly) {\n      if (fx < x0 || fx >= x1) return;\n      if (lx > rx) {\n        if (!va) va = {\n          x: fx,\n          y: y0\n        }; else if (va.y >= y1) return;\n        vb = {\n          x: fx,\n          y: y1\n        };\n      } else {\n        if (!va) va = {\n          x: fx,\n          y: y1\n        }; else if (va.y < y0) return;\n        vb = {\n          x: fx,\n          y: y0\n        };\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 (!va) va = {\n            x: (y0 - fb) / fm,\n            y: y0\n          }; else if (va.y >= y1) return;\n          vb = {\n            x: (y1 - fb) / fm,\n            y: y1\n          };\n        } else {\n          if (!va) va = {\n            x: (y1 - fb) / fm,\n            y: y1\n          }; else if (va.y < y0) return;\n          vb = {\n            x: (y0 - fb) / fm,\n            y: y0\n          };\n        }\n      } else {\n        if (ly < ry) {\n          if (!va) va = {\n            x: x0,\n            y: fm * x0 + fb\n          }; else if (va.x >= x1) return;\n          vb = {\n            x: x1,\n            y: fm * x1 + fb\n          };\n        } else {\n          if (!va) va = {\n            x: x1,\n            y: fm * x1 + fb\n          }; else if (va.x < x0) return;\n          vb = {\n            x: x0,\n            y: fm * x0 + fb\n          };\n        }\n      }\n    }\n    edge.a = va;\n    edge.b = vb;\n    return true;\n  }\n  function d3_geom_voronoiEdge(lSite, rSite) {\n    this.l = lSite;\n    this.r = rSite;\n    this.a = this.b = null;\n  }\n  function d3_geom_voronoiCreateEdge(lSite, rSite, va, vb) {\n    var edge = new d3_geom_voronoiEdge(lSite, rSite);\n    d3_geom_voronoiEdges.push(edge);\n    if (va) d3_geom_voronoiSetEdgeEnd(edge, lSite, rSite, va);\n    if (vb) d3_geom_voronoiSetEdgeEnd(edge, rSite, lSite, vb);\n    d3_geom_voronoiCells[lSite.i].edges.push(new d3_geom_voronoiHalfEdge(edge, lSite, rSite));\n    d3_geom_voronoiCells[rSite.i].edges.push(new d3_geom_voronoiHalfEdge(edge, rSite, lSite));\n    return edge;\n  }\n  function d3_geom_voronoiCreateBorderEdge(lSite, va, vb) {\n    var edge = new d3_geom_voronoiEdge(lSite, null);\n    edge.a = va;\n    edge.b = vb;\n    d3_geom_voronoiEdges.push(edge);\n    return edge;\n  }\n  function d3_geom_voronoiSetEdgeEnd(edge, lSite, rSite, vertex) {\n    if (!edge.a && !edge.b) {\n      edge.a = vertex;\n      edge.l = lSite;\n      edge.r = rSite;\n    } else if (edge.l === rSite) {\n      edge.b = vertex;\n    } else {\n      edge.a = vertex;\n    }\n  }\n  function d3_geom_voronoiHalfEdge(edge, lSite, rSite) {\n    var va = edge.a, vb = edge.b;\n    this.edge = edge;\n    this.site = lSite;\n    this.angle = rSite ? Math.atan2(rSite.y - lSite.y, rSite.x - lSite.x) : edge.l === lSite ? Math.atan2(vb.x - va.x, va.y - vb.y) : Math.atan2(va.x - vb.x, vb.y - va.y);\n  }\n  d3_geom_voronoiHalfEdge.prototype = {\n    start: function() {\n      return this.edge.l === this.site ? this.edge.a : this.edge.b;\n    },\n    end: function() {\n      return this.edge.l === this.site ? this.edge.b : this.edge.a;\n    }\n  };\n  function d3_geom_voronoiRedBlackTree() {\n    this._ = null;\n  }\n  function d3_geom_voronoiRedBlackNode(node) {\n    node.U = node.C = node.L = node.R = node.P = node.N = null;\n  }\n  d3_geom_voronoiRedBlackTree.prototype = {\n    insert: function(after, node) {\n      var parent, grandpa, uncle;\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 = d3_geom_voronoiRedBlackFirst(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      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              d3_geom_voronoiRedBlackRotateLeft(this, parent);\n              after = parent;\n              parent = after.U;\n            }\n            parent.C = false;\n            grandpa.C = true;\n            d3_geom_voronoiRedBlackRotateRight(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              d3_geom_voronoiRedBlackRotateRight(this, parent);\n              after = parent;\n              parent = after.U;\n            }\n            parent.C = false;\n            grandpa.C = true;\n            d3_geom_voronoiRedBlackRotateLeft(this, grandpa);\n          }\n        }\n        parent = after.U;\n      }\n      this._.C = false;\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      var parent = node.U, sibling, left = node.L, right = node.R, next, red;\n      if (!left) next = right; else if (!right) next = left; else next = d3_geom_voronoiRedBlackFirst(right);\n      if (parent) {\n        if (parent.L === node) parent.L = next; else parent.R = next;\n      } else {\n        this._ = next;\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      if (node) node.U = parent;\n      if (red) return;\n      if (node && node.C) {\n        node.C = false;\n        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            d3_geom_voronoiRedBlackRotateLeft(this, parent);\n            sibling = parent.R;\n          }\n          if (sibling.L && sibling.L.C || sibling.R && sibling.R.C) {\n            if (!sibling.R || !sibling.R.C) {\n              sibling.L.C = false;\n              sibling.C = true;\n              d3_geom_voronoiRedBlackRotateRight(this, sibling);\n              sibling = parent.R;\n            }\n            sibling.C = parent.C;\n            parent.C = sibling.R.C = false;\n            d3_geom_voronoiRedBlackRotateLeft(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            d3_geom_voronoiRedBlackRotateRight(this, parent);\n            sibling = parent.L;\n          }\n          if (sibling.L && sibling.L.C || sibling.R && sibling.R.C) {\n            if (!sibling.L || !sibling.L.C) {\n              sibling.R.C = false;\n              sibling.C = true;\n              d3_geom_voronoiRedBlackRotateLeft(this, sibling);\n              sibling = parent.L;\n            }\n            sibling.C = parent.C;\n            parent.C = sibling.L.C = false;\n            d3_geom_voronoiRedBlackRotateRight(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      if (node) node.C = false;\n    }\n  };\n  function d3_geom_voronoiRedBlackRotateLeft(tree, node) {\n    var p = node, q = node.R, parent = p.U;\n    if (parent) {\n      if (parent.L === p) parent.L = q; else parent.R = q;\n    } else {\n      tree._ = q;\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  function d3_geom_voronoiRedBlackRotateRight(tree, node) {\n    var p = node, q = node.L, parent = p.U;\n    if (parent) {\n      if (parent.L === p) parent.L = q; else parent.R = q;\n    } else {\n      tree._ = q;\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  function d3_geom_voronoiRedBlackFirst(node) {\n    while (node.L) node = node.L;\n    return node;\n  }\n  function d3_geom_voronoi(sites, bbox) {\n    var site = sites.sort(d3_geom_voronoiVertexOrder).pop(), x0, y0, circle;\n    d3_geom_voronoiEdges = [];\n    d3_geom_voronoiCells = new Array(sites.length);\n    d3_geom_voronoiBeaches = new d3_geom_voronoiRedBlackTree();\n    d3_geom_voronoiCircles = new d3_geom_voronoiRedBlackTree();\n    while (true) {\n      circle = d3_geom_voronoiFirstCircle;\n      if (site && (!circle || site.y < circle.y || site.y === circle.y && site.x < circle.x)) {\n        if (site.x !== x0 || site.y !== y0) {\n          d3_geom_voronoiCells[site.i] = new d3_geom_voronoiCell(site);\n          d3_geom_voronoiAddBeach(site);\n          x0 = site.x, y0 = site.y;\n        }\n        site = sites.pop();\n      } else if (circle) {\n        d3_geom_voronoiRemoveBeach(circle.arc);\n      } else {\n        break;\n      }\n    }\n    if (bbox) d3_geom_voronoiClipEdges(bbox), d3_geom_voronoiCloseCells(bbox);\n    var diagram = {\n      cells: d3_geom_voronoiCells,\n      edges: d3_geom_voronoiEdges\n    };\n    d3_geom_voronoiBeaches = d3_geom_voronoiCircles = d3_geom_voronoiEdges = d3_geom_voronoiCells = null;\n    return diagram;\n  }\n  function d3_geom_voronoiVertexOrder(a, b) {\n    return b.y - a.y || b.x - a.x;\n  }\n  d3.geom.voronoi = function(points) {\n    var x = d3_geom_pointX, y = d3_geom_pointY, fx = x, fy = y, clipExtent = d3_geom_voronoiClipExtent;\n    if (points) return voronoi(points);\n    function voronoi(data) {\n      var polygons = new Array(data.length), x0 = clipExtent[0][0], y0 = clipExtent[0][1], x1 = clipExtent[1][0], y1 = clipExtent[1][1];\n      d3_geom_voronoi(sites(data), clipExtent).cells.forEach(function(cell, i) {\n        var edges = cell.edges, site = cell.site, polygon = polygons[i] = edges.length ? edges.map(function(e) {\n          var s = e.start();\n          return [ s.x, s.y ];\n        }) : site.x >= x0 && site.x <= x1 && site.y >= y0 && site.y <= y1 ? [ [ x0, y1 ], [ x1, y1 ], [ x1, y0 ], [ x0, y0 ] ] : [];\n        polygon.point = data[i];\n      });\n      return polygons;\n    }\n    function sites(data) {\n      return data.map(function(d, i) {\n        return {\n          x: Math.round(fx(d, i) / ε) * ε,\n          y: Math.round(fy(d, i) / ε) * ε,\n          i: i\n        };\n      });\n    }\n    voronoi.links = function(data) {\n      return d3_geom_voronoi(sites(data)).edges.filter(function(edge) {\n        return edge.l && edge.r;\n      }).map(function(edge) {\n        return {\n          source: data[edge.l.i],\n          target: data[edge.r.i]\n        };\n      });\n    };\n    voronoi.triangles = function(data) {\n      var triangles = [];\n      d3_geom_voronoi(sites(data)).cells.forEach(function(cell, i) {\n        var site = cell.site, edges = cell.edges.sort(d3_geom_voronoiHalfEdgeOrder), j = -1, m = edges.length, e0, s0, e1 = edges[m - 1].edge, s1 = e1.l === site ? e1.r : e1.l;\n        while (++j < m) {\n          e0 = e1;\n          s0 = s1;\n          e1 = edges[j].edge;\n          s1 = e1.l === site ? e1.r : e1.l;\n          if (i < s0.i && i < s1.i && d3_geom_voronoiTriangleArea(site, s0, s1) < 0) {\n            triangles.push([ data[i], data[s0.i], data[s1.i] ]);\n          }\n        }\n      });\n      return triangles;\n    };\n    voronoi.x = function(_) {\n      return arguments.length ? (fx = d3_functor(x = _), voronoi) : x;\n    };\n    voronoi.y = function(_) {\n      return arguments.length ? (fy = d3_functor(y = _), voronoi) : y;\n    };\n    voronoi.clipExtent = function(_) {\n      if (!arguments.length) return clipExtent === d3_geom_voronoiClipExtent ? null : clipExtent;\n      clipExtent = _ == null ? d3_geom_voronoiClipExtent : _;\n      return voronoi;\n    };\n    voronoi.size = function(_) {\n      if (!arguments.length) return clipExtent === d3_geom_voronoiClipExtent ? null : clipExtent && clipExtent[1];\n      return voronoi.clipExtent(_ && [ [ 0, 0 ], _ ]);\n    };\n    return voronoi;\n  };\n  var d3_geom_voronoiClipExtent = [ [ -1e6, -1e6 ], [ 1e6, 1e6 ] ];\n  function d3_geom_voronoiTriangleArea(a, b, c) {\n    return (a.x - c.x) * (b.y - a.y) - (a.x - b.x) * (c.y - a.y);\n  }\n  d3.geom.delaunay = function(vertices) {\n    return d3.geom.voronoi().triangles(vertices);\n  };\n  d3.geom.quadtree = function(points, x1, y1, x2, y2) {\n    var x = d3_geom_pointX, y = d3_geom_pointY, compat;\n    if (compat = arguments.length) {\n      x = d3_geom_quadtreeCompatX;\n      y = d3_geom_quadtreeCompatY;\n      if (compat === 3) {\n        y2 = y1;\n        x2 = x1;\n        y1 = x1 = 0;\n      }\n      return quadtree(points);\n    }\n    function quadtree(data) {\n      var d, fx = d3_functor(x), fy = d3_functor(y), xs, ys, i, n, x1_, y1_, x2_, y2_;\n      if (x1 != null) {\n        x1_ = x1, y1_ = y1, x2_ = x2, y2_ = y2;\n      } else {\n        x2_ = y2_ = -(x1_ = y1_ = Infinity);\n        xs = [], ys = [];\n        n = data.length;\n        if (compat) for (i = 0; i < n; ++i) {\n          d = data[i];\n          if (d.x < x1_) x1_ = d.x;\n          if (d.y < y1_) y1_ = d.y;\n          if (d.x > x2_) x2_ = d.x;\n          if (d.y > y2_) y2_ = d.y;\n          xs.push(d.x);\n          ys.push(d.y);\n        } else for (i = 0; i < n; ++i) {\n          var x_ = +fx(d = data[i], i), y_ = +fy(d, i);\n          if (x_ < x1_) x1_ = x_;\n          if (y_ < y1_) y1_ = y_;\n          if (x_ > x2_) x2_ = x_;\n          if (y_ > y2_) y2_ = y_;\n          xs.push(x_);\n          ys.push(y_);\n        }\n      }\n      var dx = x2_ - x1_, dy = y2_ - y1_;\n      if (dx > dy) y2_ = y1_ + dx; else x2_ = x1_ + dy;\n      function insert(n, d, x, y, x1, y1, x2, y2) {\n        if (isNaN(x) || isNaN(y)) return;\n        if (n.leaf) {\n          var nx = n.x, ny = n.y;\n          if (nx != null) {\n            if (abs(nx - x) + abs(ny - y) < .01) {\n              insertChild(n, d, x, y, x1, y1, x2, y2);\n            } else {\n              var nPoint = n.point;\n              n.x = n.y = n.point = null;\n              insertChild(n, nPoint, nx, ny, x1, y1, x2, y2);\n              insertChild(n, d, x, y, x1, y1, x2, y2);\n            }\n          } else {\n            n.x = x, n.y = y, n.point = d;\n          }\n        } else {\n          insertChild(n, d, x, y, x1, y1, x2, y2);\n        }\n      }\n      function insertChild(n, d, x, y, x1, y1, x2, y2) {\n        var xm = (x1 + x2) * .5, ym = (y1 + y2) * .5, right = x >= xm, below = y >= ym, i = below << 1 | right;\n        n.leaf = false;\n        n = n.nodes[i] || (n.nodes[i] = d3_geom_quadtreeNode());\n        if (right) x1 = xm; else x2 = xm;\n        if (below) y1 = ym; else y2 = ym;\n        insert(n, d, x, y, x1, y1, x2, y2);\n      }\n      var root = d3_geom_quadtreeNode();\n      root.add = function(d) {\n        insert(root, d, +fx(d, ++i), +fy(d, i), x1_, y1_, x2_, y2_);\n      };\n      root.visit = function(f) {\n        d3_geom_quadtreeVisit(f, root, x1_, y1_, x2_, y2_);\n      };\n      root.find = function(point) {\n        return d3_geom_quadtreeFind(root, point[0], point[1], x1_, y1_, x2_, y2_);\n      };\n      i = -1;\n      if (x1 == null) {\n        while (++i < n) {\n          insert(root, data[i], xs[i], ys[i], x1_, y1_, x2_, y2_);\n        }\n        --i;\n      } else data.forEach(root.add);\n      xs = ys = data = d = null;\n      return root;\n    }\n    quadtree.x = function(_) {\n      return arguments.length ? (x = _, quadtree) : x;\n    };\n    quadtree.y = function(_) {\n      return arguments.length ? (y = _, quadtree) : y;\n    };\n    quadtree.extent = function(_) {\n      if (!arguments.length) return x1 == null ? null : [ [ x1, y1 ], [ x2, y2 ] ];\n      if (_ == null) x1 = y1 = x2 = y2 = null; else x1 = +_[0][0], y1 = +_[0][1], x2 = +_[1][0], \n      y2 = +_[1][1];\n      return quadtree;\n    };\n    quadtree.size = function(_) {\n      if (!arguments.length) return x1 == null ? null : [ x2 - x1, y2 - y1 ];\n      if (_ == null) x1 = y1 = x2 = y2 = null; else x1 = y1 = 0, x2 = +_[0], y2 = +_[1];\n      return quadtree;\n    };\n    return quadtree;\n  };\n  function d3_geom_quadtreeCompatX(d) {\n    return d.x;\n  }\n  function d3_geom_quadtreeCompatY(d) {\n    return d.y;\n  }\n  function d3_geom_quadtreeNode() {\n    return {\n      leaf: true,\n      nodes: [],\n      point: null,\n      x: null,\n      y: null\n    };\n  }\n  function d3_geom_quadtreeVisit(f, node, x1, y1, x2, y2) {\n    if (!f(node, x1, y1, x2, y2)) {\n      var sx = (x1 + x2) * .5, sy = (y1 + y2) * .5, children = node.nodes;\n      if (children[0]) d3_geom_quadtreeVisit(f, children[0], x1, y1, sx, sy);\n      if (children[1]) d3_geom_quadtreeVisit(f, children[1], sx, y1, x2, sy);\n      if (children[2]) d3_geom_quadtreeVisit(f, children[2], x1, sy, sx, y2);\n      if (children[3]) d3_geom_quadtreeVisit(f, children[3], sx, sy, x2, y2);\n    }\n  }\n  function d3_geom_quadtreeFind(root, x, y, x0, y0, x3, y3) {\n    var minDistance2 = Infinity, closestPoint;\n    (function find(node, x1, y1, x2, y2) {\n      if (x1 > x3 || y1 > y3 || x2 < x0 || y2 < y0) return;\n      if (point = node.point) {\n        var point, dx = x - node.x, dy = y - node.y, distance2 = dx * dx + dy * dy;\n        if (distance2 < minDistance2) {\n          var distance = Math.sqrt(minDistance2 = distance2);\n          x0 = x - distance, y0 = y - distance;\n          x3 = x + distance, y3 = y + distance;\n          closestPoint = point;\n        }\n      }\n      var children = node.nodes, xm = (x1 + x2) * .5, ym = (y1 + y2) * .5, right = x >= xm, below = y >= ym;\n      for (var i = below << 1 | right, j = i + 4; i < j; ++i) {\n        if (node = children[i & 3]) switch (i & 3) {\n         case 0:\n          find(node, x1, y1, xm, ym);\n          break;\n\n         case 1:\n          find(node, xm, y1, x2, ym);\n          break;\n\n         case 2:\n          find(node, x1, ym, xm, y2);\n          break;\n\n         case 3:\n          find(node, xm, ym, x2, y2);\n          break;\n        }\n      }\n    })(root, x0, y0, x3, y3);\n    return closestPoint;\n  }\n  d3.interpolateRgb = d3_interpolateRgb;\n  function d3_interpolateRgb(a, b) {\n    a = d3.rgb(a);\n    b = d3.rgb(b);\n    var ar = a.r, ag = a.g, ab = a.b, br = b.r - ar, bg = b.g - ag, bb = b.b - ab;\n    return function(t) {\n      return \"#\" + d3_rgb_hex(Math.round(ar + br * t)) + d3_rgb_hex(Math.round(ag + bg * t)) + d3_rgb_hex(Math.round(ab + bb * t));\n    };\n  }\n  d3.interpolateObject = d3_interpolateObject;\n  function d3_interpolateObject(a, b) {\n    var i = {}, c = {}, k;\n    for (k in a) {\n      if (k in b) {\n        i[k] = d3_interpolate(a[k], b[k]);\n      } else {\n        c[k] = a[k];\n      }\n    }\n    for (k in b) {\n      if (!(k in a)) {\n        c[k] = b[k];\n      }\n    }\n    return function(t) {\n      for (k in i) c[k] = i[k](t);\n      return c;\n    };\n  }\n  d3.interpolateNumber = d3_interpolateNumber;\n  function d3_interpolateNumber(a, b) {\n    a = +a, b = +b;\n    return function(t) {\n      return a * (1 - t) + b * t;\n    };\n  }\n  d3.interpolateString = d3_interpolateString;\n  function d3_interpolateString(a, b) {\n    var bi = d3_interpolate_numberA.lastIndex = d3_interpolate_numberB.lastIndex = 0, am, bm, bs, i = -1, s = [], q = [];\n    a = a + \"\", b = b + \"\";\n    while ((am = d3_interpolate_numberA.exec(a)) && (bm = d3_interpolate_numberB.exec(b))) {\n      if ((bs = bm.index) > bi) {\n        bs = b.slice(bi, bs);\n        if (s[i]) s[i] += bs; else s[++i] = bs;\n      }\n      if ((am = am[0]) === (bm = bm[0])) {\n        if (s[i]) s[i] += bm; else s[++i] = bm;\n      } else {\n        s[++i] = null;\n        q.push({\n          i: i,\n          x: d3_interpolateNumber(am, bm)\n        });\n      }\n      bi = d3_interpolate_numberB.lastIndex;\n    }\n    if (bi < b.length) {\n      bs = b.slice(bi);\n      if (s[i]) s[i] += bs; else s[++i] = bs;\n    }\n    return s.length < 2 ? q[0] ? (b = q[0].x, function(t) {\n      return b(t) + \"\";\n    }) : function() {\n      return 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  var d3_interpolate_numberA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g, d3_interpolate_numberB = new RegExp(d3_interpolate_numberA.source, \"g\");\n  d3.interpolate = d3_interpolate;\n  function d3_interpolate(a, b) {\n    var i = d3.interpolators.length, f;\n    while (--i >= 0 && !(f = d3.interpolators[i](a, b))) ;\n    return f;\n  }\n  d3.interpolators = [ function(a, b) {\n    var t = typeof b;\n    return (t === \"string\" ? d3_rgb_names.has(b.toLowerCase()) || /^(#|rgb\\(|hsl\\()/i.test(b) ? d3_interpolateRgb : d3_interpolateString : b instanceof d3_color ? d3_interpolateRgb : Array.isArray(b) ? d3_interpolateArray : t === \"object\" && isNaN(b) ? d3_interpolateObject : d3_interpolateNumber)(a, b);\n  } ];\n  d3.interpolateArray = d3_interpolateArray;\n  function d3_interpolateArray(a, b) {\n    var x = [], c = [], na = a.length, nb = b.length, n0 = Math.min(a.length, b.length), i;\n    for (i = 0; i < n0; ++i) x.push(d3_interpolate(a[i], b[i]));\n    for (;i < na; ++i) c[i] = a[i];\n    for (;i < nb; ++i) c[i] = b[i];\n    return function(t) {\n      for (i = 0; i < n0; ++i) c[i] = x[i](t);\n      return c;\n    };\n  }\n  var d3_ease_default = function() {\n    return d3_identity;\n  };\n  var d3_ease = d3.map({\n    linear: d3_ease_default,\n    poly: d3_ease_poly,\n    quad: function() {\n      return d3_ease_quad;\n    },\n    cubic: function() {\n      return d3_ease_cubic;\n    },\n    sin: function() {\n      return d3_ease_sin;\n    },\n    exp: function() {\n      return d3_ease_exp;\n    },\n    circle: function() {\n      return d3_ease_circle;\n    },\n    elastic: d3_ease_elastic,\n    back: d3_ease_back,\n    bounce: function() {\n      return d3_ease_bounce;\n    }\n  });\n  var d3_ease_mode = d3.map({\n    \"in\": d3_identity,\n    out: d3_ease_reverse,\n    \"in-out\": d3_ease_reflect,\n    \"out-in\": function(f) {\n      return d3_ease_reflect(d3_ease_reverse(f));\n    }\n  });\n  d3.ease = function(name) {\n    var i = name.indexOf(\"-\"), t = i >= 0 ? name.slice(0, i) : name, m = i >= 0 ? name.slice(i + 1) : \"in\";\n    t = d3_ease.get(t) || d3_ease_default;\n    m = d3_ease_mode.get(m) || d3_identity;\n    return d3_ease_clamp(m(t.apply(null, d3_arraySlice.call(arguments, 1))));\n  };\n  function d3_ease_clamp(f) {\n    return function(t) {\n      return t <= 0 ? 0 : t >= 1 ? 1 : f(t);\n    };\n  }\n  function d3_ease_reverse(f) {\n    return function(t) {\n      return 1 - f(1 - t);\n    };\n  }\n  function d3_ease_reflect(f) {\n    return function(t) {\n      return .5 * (t < .5 ? f(2 * t) : 2 - f(2 - 2 * t));\n    };\n  }\n  function d3_ease_quad(t) {\n    return t * t;\n  }\n  function d3_ease_cubic(t) {\n    return t * t * t;\n  }\n  function d3_ease_cubicInOut(t) {\n    if (t <= 0) return 0;\n    if (t >= 1) return 1;\n    var t2 = t * t, t3 = t2 * t;\n    return 4 * (t < .5 ? t3 : 3 * (t - t2) + t3 - .75);\n  }\n  function d3_ease_poly(e) {\n    return function(t) {\n      return Math.pow(t, e);\n    };\n  }\n  function d3_ease_sin(t) {\n    return 1 - Math.cos(t * halfπ);\n  }\n  function d3_ease_exp(t) {\n    return Math.pow(2, 10 * (t - 1));\n  }\n  function d3_ease_circle(t) {\n    return 1 - Math.sqrt(1 - t * t);\n  }\n  function d3_ease_elastic(a, p) {\n    var s;\n    if (arguments.length < 2) p = .45;\n    if (arguments.length) s = p / τ * Math.asin(1 / a); else a = 1, s = p / 4;\n    return function(t) {\n      return 1 + a * Math.pow(2, -10 * t) * Math.sin((t - s) * τ / p);\n    };\n  }\n  function d3_ease_back(s) {\n    if (!s) s = 1.70158;\n    return function(t) {\n      return t * t * ((s + 1) * t - s);\n    };\n  }\n  function d3_ease_bounce(t) {\n    return t < 1 / 2.75 ? 7.5625 * t * t : t < 2 / 2.75 ? 7.5625 * (t -= 1.5 / 2.75) * t + .75 : t < 2.5 / 2.75 ? 7.5625 * (t -= 2.25 / 2.75) * t + .9375 : 7.5625 * (t -= 2.625 / 2.75) * t + .984375;\n  }\n  d3.interpolateHcl = d3_interpolateHcl;\n  function d3_interpolateHcl(a, b) {\n    a = d3.hcl(a);\n    b = d3.hcl(b);\n    var ah = a.h, ac = a.c, al = a.l, bh = b.h - ah, bc = b.c - ac, bl = b.l - al;\n    if (isNaN(bc)) bc = 0, ac = isNaN(ac) ? b.c : ac;\n    if (isNaN(bh)) bh = 0, ah = isNaN(ah) ? b.h : ah; else if (bh > 180) bh -= 360; else if (bh < -180) bh += 360;\n    return function(t) {\n      return d3_hcl_lab(ah + bh * t, ac + bc * t, al + bl * t) + \"\";\n    };\n  }\n  d3.interpolateHsl = d3_interpolateHsl;\n  function d3_interpolateHsl(a, b) {\n    a = d3.hsl(a);\n    b = d3.hsl(b);\n    var ah = a.h, as = a.s, al = a.l, bh = b.h - ah, bs = b.s - as, bl = b.l - al;\n    if (isNaN(bs)) bs = 0, as = isNaN(as) ? b.s : as;\n    if (isNaN(bh)) bh = 0, ah = isNaN(ah) ? b.h : ah; else if (bh > 180) bh -= 360; else if (bh < -180) bh += 360;\n    return function(t) {\n      return d3_hsl_rgb(ah + bh * t, as + bs * t, al + bl * t) + \"\";\n    };\n  }\n  d3.interpolateLab = d3_interpolateLab;\n  function d3_interpolateLab(a, b) {\n    a = d3.lab(a);\n    b = d3.lab(b);\n    var al = a.l, aa = a.a, ab = a.b, bl = b.l - al, ba = b.a - aa, bb = b.b - ab;\n    return function(t) {\n      return d3_lab_rgb(al + bl * t, aa + ba * t, ab + bb * t) + \"\";\n    };\n  }\n  d3.interpolateRound = d3_interpolateRound;\n  function d3_interpolateRound(a, b) {\n    b -= a;\n    return function(t) {\n      return Math.round(a + b * t);\n    };\n  }\n  d3.transform = function(string) {\n    var g = d3_document.createElementNS(d3.ns.prefix.svg, \"g\");\n    return (d3.transform = function(string) {\n      if (string != null) {\n        g.setAttribute(\"transform\", string);\n        var t = g.transform.baseVal.consolidate();\n      }\n      return new d3_transform(t ? t.matrix : d3_transformIdentity);\n    })(string);\n  };\n  function d3_transform(m) {\n    var r0 = [ m.a, m.b ], r1 = [ m.c, m.d ], kx = d3_transformNormalize(r0), kz = d3_transformDot(r0, r1), ky = d3_transformNormalize(d3_transformCombine(r1, r0, -kz)) || 0;\n    if (r0[0] * r1[1] < r1[0] * r0[1]) {\n      r0[0] *= -1;\n      r0[1] *= -1;\n      kx *= -1;\n      kz *= -1;\n    }\n    this.rotate = (kx ? Math.atan2(r0[1], r0[0]) : Math.atan2(-r1[0], r1[1])) * d3_degrees;\n    this.translate = [ m.e, m.f ];\n    this.scale = [ kx, ky ];\n    this.skew = ky ? Math.atan2(kz, ky) * d3_degrees : 0;\n  }\n  d3_transform.prototype.toString = function() {\n    return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\";\n  };\n  function d3_transformDot(a, b) {\n    return a[0] * b[0] + a[1] * b[1];\n  }\n  function d3_transformNormalize(a) {\n    var k = Math.sqrt(d3_transformDot(a, a));\n    if (k) {\n      a[0] /= k;\n      a[1] /= k;\n    }\n    return k;\n  }\n  function d3_transformCombine(a, b, k) {\n    a[0] += k * b[0];\n    a[1] += k * b[1];\n    return a;\n  }\n  var d3_transformIdentity = {\n    a: 1,\n    b: 0,\n    c: 0,\n    d: 1,\n    e: 0,\n    f: 0\n  };\n  d3.interpolateTransform = d3_interpolateTransform;\n  function d3_interpolateTransformPop(s) {\n    return s.length ? s.pop() + \",\" : \"\";\n  }\n  function d3_interpolateTranslate(ta, tb, s, q) {\n    if (ta[0] !== tb[0] || ta[1] !== tb[1]) {\n      var i = s.push(\"translate(\", null, \",\", null, \")\");\n      q.push({\n        i: i - 4,\n        x: d3_interpolateNumber(ta[0], tb[0])\n      }, {\n        i: i - 2,\n        x: d3_interpolateNumber(ta[1], tb[1])\n      });\n    } else if (tb[0] || tb[1]) {\n      s.push(\"translate(\" + tb + \")\");\n    }\n  }\n  function d3_interpolateRotate(ra, rb, s, q) {\n    if (ra !== rb) {\n      if (ra - rb > 180) rb += 360; else if (rb - ra > 180) ra += 360;\n      q.push({\n        i: s.push(d3_interpolateTransformPop(s) + \"rotate(\", null, \")\") - 2,\n        x: d3_interpolateNumber(ra, rb)\n      });\n    } else if (rb) {\n      s.push(d3_interpolateTransformPop(s) + \"rotate(\" + rb + \")\");\n    }\n  }\n  function d3_interpolateSkew(wa, wb, s, q) {\n    if (wa !== wb) {\n      q.push({\n        i: s.push(d3_interpolateTransformPop(s) + \"skewX(\", null, \")\") - 2,\n        x: d3_interpolateNumber(wa, wb)\n      });\n    } else if (wb) {\n      s.push(d3_interpolateTransformPop(s) + \"skewX(\" + wb + \")\");\n    }\n  }\n  function d3_interpolateScale(ka, kb, s, q) {\n    if (ka[0] !== kb[0] || ka[1] !== kb[1]) {\n      var i = s.push(d3_interpolateTransformPop(s) + \"scale(\", null, \",\", null, \")\");\n      q.push({\n        i: i - 4,\n        x: d3_interpolateNumber(ka[0], kb[0])\n      }, {\n        i: i - 2,\n        x: d3_interpolateNumber(ka[1], kb[1])\n      });\n    } else if (kb[0] !== 1 || kb[1] !== 1) {\n      s.push(d3_interpolateTransformPop(s) + \"scale(\" + kb + \")\");\n    }\n  }\n  function d3_interpolateTransform(a, b) {\n    var s = [], q = [];\n    a = d3.transform(a), b = d3.transform(b);\n    d3_interpolateTranslate(a.translate, b.translate, s, q);\n    d3_interpolateRotate(a.rotate, b.rotate, s, q);\n    d3_interpolateSkew(a.skew, b.skew, s, q);\n    d3_interpolateScale(a.scale, b.scale, s, q);\n    a = b = null;\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  function d3_uninterpolateNumber(a, b) {\n    b = (b -= a = +a) || 1 / b;\n    return function(x) {\n      return (x - a) / b;\n    };\n  }\n  function d3_uninterpolateClamp(a, b) {\n    b = (b -= a = +a) || 1 / b;\n    return function(x) {\n      return Math.max(0, Math.min(1, (x - a) / b));\n    };\n  }\n  d3.layout = {};\n  d3.layout.bundle = function() {\n    return function(links) {\n      var paths = [], i = -1, n = links.length;\n      while (++i < n) paths.push(d3_layout_bundlePath(links[i]));\n      return paths;\n    };\n  };\n  function d3_layout_bundlePath(link) {\n    var start = link.source, end = link.target, lca = d3_layout_bundleLeastCommonAncestor(start, end), points = [ start ];\n    while (start !== lca) {\n      start = start.parent;\n      points.push(start);\n    }\n    var k = points.length;\n    while (end !== lca) {\n      points.splice(k, 0, end);\n      end = end.parent;\n    }\n    return points;\n  }\n  function d3_layout_bundleAncestors(node) {\n    var ancestors = [], parent = node.parent;\n    while (parent != null) {\n      ancestors.push(node);\n      node = parent;\n      parent = parent.parent;\n    }\n    ancestors.push(node);\n    return ancestors;\n  }\n  function d3_layout_bundleLeastCommonAncestor(a, b) {\n    if (a === b) return a;\n    var aNodes = d3_layout_bundleAncestors(a), bNodes = d3_layout_bundleAncestors(b), aNode = aNodes.pop(), bNode = bNodes.pop(), sharedNode = null;\n    while (aNode === bNode) {\n      sharedNode = aNode;\n      aNode = aNodes.pop();\n      bNode = bNodes.pop();\n    }\n    return sharedNode;\n  }\n  d3.layout.chord = function() {\n    var chord = {}, chords, groups, matrix, n, padding = 0, sortGroups, sortSubgroups, sortChords;\n    function relayout() {\n      var subgroups = {}, groupSums = [], groupIndex = d3.range(n), subgroupIndex = [], k, x, x0, i, j;\n      chords = [];\n      groups = [];\n      k = 0, i = -1;\n      while (++i < n) {\n        x = 0, j = -1;\n        while (++j < n) {\n          x += matrix[i][j];\n        }\n        groupSums.push(x);\n        subgroupIndex.push(d3.range(n));\n        k += x;\n      }\n      if (sortGroups) {\n        groupIndex.sort(function(a, b) {\n          return sortGroups(groupSums[a], groupSums[b]);\n        });\n      }\n      if (sortSubgroups) {\n        subgroupIndex.forEach(function(d, i) {\n          d.sort(function(a, b) {\n            return sortSubgroups(matrix[i][a], matrix[i][b]);\n          });\n        });\n      }\n      k = (τ - padding * n) / k;\n      x = 0, i = -1;\n      while (++i < n) {\n        x0 = x, j = -1;\n        while (++j < n) {\n          var di = groupIndex[i], dj = subgroupIndex[di][j], v = matrix[di][dj], a0 = x, a1 = x += v * k;\n          subgroups[di + \"-\" + dj] = {\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 += padding;\n      }\n      i = -1;\n      while (++i < n) {\n        j = i - 1;\n        while (++j < n) {\n          var source = subgroups[i + \"-\" + j], target = subgroups[j + \"-\" + i];\n          if (source.value || target.value) {\n            chords.push(source.value < target.value ? {\n              source: target,\n              target: source\n            } : {\n              source: source,\n              target: target\n            });\n          }\n        }\n      }\n      if (sortChords) resort();\n    }\n    function resort() {\n      chords.sort(function(a, b) {\n        return sortChords((a.source.value + a.target.value) / 2, (b.source.value + b.target.value) / 2);\n      });\n    }\n    chord.matrix = function(x) {\n      if (!arguments.length) return matrix;\n      n = (matrix = x) && matrix.length;\n      chords = groups = null;\n      return chord;\n    };\n    chord.padding = function(x) {\n      if (!arguments.length) return padding;\n      padding = x;\n      chords = groups = null;\n      return chord;\n    };\n    chord.sortGroups = function(x) {\n      if (!arguments.length) return sortGroups;\n      sortGroups = x;\n      chords = groups = null;\n      return chord;\n    };\n    chord.sortSubgroups = function(x) {\n      if (!arguments.length) return sortSubgroups;\n      sortSubgroups = x;\n      chords = null;\n      return chord;\n    };\n    chord.sortChords = function(x) {\n      if (!arguments.length) return sortChords;\n      sortChords = x;\n      if (chords) resort();\n      return chord;\n    };\n    chord.chords = function() {\n      if (!chords) relayout();\n      return chords;\n    };\n    chord.groups = function() {\n      if (!groups) relayout();\n      return groups;\n    };\n    return chord;\n  };\n  d3.layout.force = function() {\n    var force = {}, event = d3.dispatch(\"start\", \"tick\", \"end\"), timer, size = [ 1, 1 ], drag, alpha, friction = .9, linkDistance = d3_layout_forceLinkDistance, linkStrength = d3_layout_forceLinkStrength, charge = -30, chargeDistance2 = d3_layout_forceChargeDistance2, gravity = .1, theta2 = .64, nodes = [], links = [], distances, strengths, charges;\n    function repulse(node) {\n      return function(quad, x1, _, x2) {\n        if (quad.point !== node) {\n          var dx = quad.cx - node.x, dy = quad.cy - node.y, dw = x2 - x1, dn = dx * dx + dy * dy;\n          if (dw * dw / theta2 < dn) {\n            if (dn < chargeDistance2) {\n              var k = quad.charge / dn;\n              node.px -= dx * k;\n              node.py -= dy * k;\n            }\n            return true;\n          }\n          if (quad.point && dn && dn < chargeDistance2) {\n            var k = quad.pointCharge / dn;\n            node.px -= dx * k;\n            node.py -= dy * k;\n          }\n        }\n        return !quad.charge;\n      };\n    }\n    force.tick = function() {\n      if ((alpha *= .99) < .005) {\n        timer = null;\n        event.end({\n          type: \"end\",\n          alpha: alpha = 0\n        });\n        return true;\n      }\n      var n = nodes.length, m = links.length, q, i, o, s, t, l, k, x, y;\n      for (i = 0; i < m; ++i) {\n        o = links[i];\n        s = o.source;\n        t = o.target;\n        x = t.x - s.x;\n        y = t.y - s.y;\n        if (l = x * x + y * y) {\n          l = alpha * strengths[i] * ((l = Math.sqrt(l)) - distances[i]) / l;\n          x *= l;\n          y *= l;\n          t.x -= x * (k = s.weight + t.weight ? s.weight / (s.weight + t.weight) : .5);\n          t.y -= y * k;\n          s.x += x * (k = 1 - k);\n          s.y += y * k;\n        }\n      }\n      if (k = alpha * gravity) {\n        x = size[0] / 2;\n        y = size[1] / 2;\n        i = -1;\n        if (k) while (++i < n) {\n          o = nodes[i];\n          o.x += (x - o.x) * k;\n          o.y += (y - o.y) * k;\n        }\n      }\n      if (charge) {\n        d3_layout_forceAccumulate(q = d3.geom.quadtree(nodes), alpha, charges);\n        i = -1;\n        while (++i < n) {\n          if (!(o = nodes[i]).fixed) {\n            q.visit(repulse(o));\n          }\n        }\n      }\n      i = -1;\n      while (++i < n) {\n        o = nodes[i];\n        if (o.fixed) {\n          o.x = o.px;\n          o.y = o.py;\n        } else {\n          o.x -= (o.px - (o.px = o.x)) * friction;\n          o.y -= (o.py - (o.py = o.y)) * friction;\n        }\n      }\n      event.tick({\n        type: \"tick\",\n        alpha: alpha\n      });\n    };\n    force.nodes = function(x) {\n      if (!arguments.length) return nodes;\n      nodes = x;\n      return force;\n    };\n    force.links = function(x) {\n      if (!arguments.length) return links;\n      links = x;\n      return force;\n    };\n    force.size = function(x) {\n      if (!arguments.length) return size;\n      size = x;\n      return force;\n    };\n    force.linkDistance = function(x) {\n      if (!arguments.length) return linkDistance;\n      linkDistance = typeof x === \"function\" ? x : +x;\n      return force;\n    };\n    force.distance = force.linkDistance;\n    force.linkStrength = function(x) {\n      if (!arguments.length) return linkStrength;\n      linkStrength = typeof x === \"function\" ? x : +x;\n      return force;\n    };\n    force.friction = function(x) {\n      if (!arguments.length) return friction;\n      friction = +x;\n      return force;\n    };\n    force.charge = function(x) {\n      if (!arguments.length) return charge;\n      charge = typeof x === \"function\" ? x : +x;\n      return force;\n    };\n    force.chargeDistance = function(x) {\n      if (!arguments.length) return Math.sqrt(chargeDistance2);\n      chargeDistance2 = x * x;\n      return force;\n    };\n    force.gravity = function(x) {\n      if (!arguments.length) return gravity;\n      gravity = +x;\n      return force;\n    };\n    force.theta = function(x) {\n      if (!arguments.length) return Math.sqrt(theta2);\n      theta2 = x * x;\n      return force;\n    };\n    force.alpha = function(x) {\n      if (!arguments.length) return alpha;\n      x = +x;\n      if (alpha) {\n        if (x > 0) {\n          alpha = x;\n        } else {\n          timer.c = null, timer.t = NaN, timer = null;\n          event.end({\n            type: \"end\",\n            alpha: alpha = 0\n          });\n        }\n      } else if (x > 0) {\n        event.start({\n          type: \"start\",\n          alpha: alpha = x\n        });\n        timer = d3_timer(force.tick);\n      }\n      return force;\n    };\n    force.start = function() {\n      var i, n = nodes.length, m = links.length, w = size[0], h = size[1], neighbors, o;\n      for (i = 0; i < n; ++i) {\n        (o = nodes[i]).index = i;\n        o.weight = 0;\n      }\n      for (i = 0; i < m; ++i) {\n        o = links[i];\n        if (typeof o.source == \"number\") o.source = nodes[o.source];\n        if (typeof o.target == \"number\") o.target = nodes[o.target];\n        ++o.source.weight;\n        ++o.target.weight;\n      }\n      for (i = 0; i < n; ++i) {\n        o = nodes[i];\n        if (isNaN(o.x)) o.x = position(\"x\", w);\n        if (isNaN(o.y)) o.y = position(\"y\", h);\n        if (isNaN(o.px)) o.px = o.x;\n        if (isNaN(o.py)) o.py = o.y;\n      }\n      distances = [];\n      if (typeof linkDistance === \"function\") for (i = 0; i < m; ++i) distances[i] = +linkDistance.call(this, links[i], i); else for (i = 0; i < m; ++i) distances[i] = linkDistance;\n      strengths = [];\n      if (typeof linkStrength === \"function\") for (i = 0; i < m; ++i) strengths[i] = +linkStrength.call(this, links[i], i); else for (i = 0; i < m; ++i) strengths[i] = linkStrength;\n      charges = [];\n      if (typeof charge === \"function\") for (i = 0; i < n; ++i) charges[i] = +charge.call(this, nodes[i], i); else for (i = 0; i < n; ++i) charges[i] = charge;\n      function position(dimension, size) {\n        if (!neighbors) {\n          neighbors = new Array(n);\n          for (j = 0; j < n; ++j) {\n            neighbors[j] = [];\n          }\n          for (j = 0; j < m; ++j) {\n            var o = links[j];\n            neighbors[o.source.index].push(o.target);\n            neighbors[o.target.index].push(o.source);\n          }\n        }\n        var candidates = neighbors[i], j = -1, l = candidates.length, x;\n        while (++j < l) if (!isNaN(x = candidates[j][dimension])) return x;\n        return Math.random() * size;\n      }\n      return force.resume();\n    };\n    force.resume = function() {\n      return force.alpha(.1);\n    };\n    force.stop = function() {\n      return force.alpha(0);\n    };\n    force.drag = function() {\n      if (!drag) drag = d3.behavior.drag().origin(d3_identity).on(\"dragstart.force\", d3_layout_forceDragstart).on(\"drag.force\", dragmove).on(\"dragend.force\", d3_layout_forceDragend);\n      if (!arguments.length) return drag;\n      this.on(\"mouseover.force\", d3_layout_forceMouseover).on(\"mouseout.force\", d3_layout_forceMouseout).call(drag);\n    };\n    function dragmove(d) {\n      d.px = d3.event.x, d.py = d3.event.y;\n      force.resume();\n    }\n    return d3.rebind(force, event, \"on\");\n  };\n  function d3_layout_forceDragstart(d) {\n    d.fixed |= 2;\n  }\n  function d3_layout_forceDragend(d) {\n    d.fixed &= ~6;\n  }\n  function d3_layout_forceMouseover(d) {\n    d.fixed |= 4;\n    d.px = d.x, d.py = d.y;\n  }\n  function d3_layout_forceMouseout(d) {\n    d.fixed &= ~4;\n  }\n  function d3_layout_forceAccumulate(quad, alpha, charges) {\n    var cx = 0, cy = 0;\n    quad.charge = 0;\n    if (!quad.leaf) {\n      var nodes = quad.nodes, n = nodes.length, i = -1, c;\n      while (++i < n) {\n        c = nodes[i];\n        if (c == null) continue;\n        d3_layout_forceAccumulate(c, alpha, charges);\n        quad.charge += c.charge;\n        cx += c.charge * c.cx;\n        cy += c.charge * c.cy;\n      }\n    }\n    if (quad.point) {\n      if (!quad.leaf) {\n        quad.point.x += Math.random() - .5;\n        quad.point.y += Math.random() - .5;\n      }\n      var k = alpha * charges[quad.point.index];\n      quad.charge += quad.pointCharge = k;\n      cx += k * quad.point.x;\n      cy += k * quad.point.y;\n    }\n    quad.cx = cx / quad.charge;\n    quad.cy = cy / quad.charge;\n  }\n  var d3_layout_forceLinkDistance = 20, d3_layout_forceLinkStrength = 1, d3_layout_forceChargeDistance2 = Infinity;\n  d3.layout.hierarchy = function() {\n    var sort = d3_layout_hierarchySort, children = d3_layout_hierarchyChildren, value = d3_layout_hierarchyValue;\n    function hierarchy(root) {\n      var stack = [ root ], nodes = [], node;\n      root.depth = 0;\n      while ((node = stack.pop()) != null) {\n        nodes.push(node);\n        if ((childs = children.call(hierarchy, node, node.depth)) && (n = childs.length)) {\n          var n, childs, child;\n          while (--n >= 0) {\n            stack.push(child = childs[n]);\n            child.parent = node;\n            child.depth = node.depth + 1;\n          }\n          if (value) node.value = 0;\n          node.children = childs;\n        } else {\n          if (value) node.value = +value.call(hierarchy, node, node.depth) || 0;\n          delete node.children;\n        }\n      }\n      d3_layout_hierarchyVisitAfter(root, function(node) {\n        var childs, parent;\n        if (sort && (childs = node.children)) childs.sort(sort);\n        if (value && (parent = node.parent)) parent.value += node.value;\n      });\n      return nodes;\n    }\n    hierarchy.sort = function(x) {\n      if (!arguments.length) return sort;\n      sort = x;\n      return hierarchy;\n    };\n    hierarchy.children = function(x) {\n      if (!arguments.length) return children;\n      children = x;\n      return hierarchy;\n    };\n    hierarchy.value = function(x) {\n      if (!arguments.length) return value;\n      value = x;\n      return hierarchy;\n    };\n    hierarchy.revalue = function(root) {\n      if (value) {\n        d3_layout_hierarchyVisitBefore(root, function(node) {\n          if (node.children) node.value = 0;\n        });\n        d3_layout_hierarchyVisitAfter(root, function(node) {\n          var parent;\n          if (!node.children) node.value = +value.call(hierarchy, node, node.depth) || 0;\n          if (parent = node.parent) parent.value += node.value;\n        });\n      }\n      return root;\n    };\n    return hierarchy;\n  };\n  function d3_layout_hierarchyRebind(object, hierarchy) {\n    d3.rebind(object, hierarchy, \"sort\", \"children\", \"value\");\n    object.nodes = object;\n    object.links = d3_layout_hierarchyLinks;\n    return object;\n  }\n  function d3_layout_hierarchyVisitBefore(node, callback) {\n    var nodes = [ node ];\n    while ((node = nodes.pop()) != null) {\n      callback(node);\n      if ((children = node.children) && (n = children.length)) {\n        var n, children;\n        while (--n >= 0) nodes.push(children[n]);\n      }\n    }\n  }\n  function d3_layout_hierarchyVisitAfter(node, callback) {\n    var nodes = [ node ], nodes2 = [];\n    while ((node = nodes.pop()) != null) {\n      nodes2.push(node);\n      if ((children = node.children) && (n = children.length)) {\n        var i = -1, n, children;\n        while (++i < n) nodes.push(children[i]);\n      }\n    }\n    while ((node = nodes2.pop()) != null) {\n      callback(node);\n    }\n  }\n  function d3_layout_hierarchyChildren(d) {\n    return d.children;\n  }\n  function d3_layout_hierarchyValue(d) {\n    return d.value;\n  }\n  function d3_layout_hierarchySort(a, b) {\n    return b.value - a.value;\n  }\n  function d3_layout_hierarchyLinks(nodes) {\n    return d3.merge(nodes.map(function(parent) {\n      return (parent.children || []).map(function(child) {\n        return {\n          source: parent,\n          target: child\n        };\n      });\n    }));\n  }\n  d3.layout.partition = function() {\n    var hierarchy = d3.layout.hierarchy(), size = [ 1, 1 ];\n    function position(node, x, dx, dy) {\n      var children = node.children;\n      node.x = x;\n      node.y = node.depth * dy;\n      node.dx = dx;\n      node.dy = dy;\n      if (children && (n = children.length)) {\n        var i = -1, n, c, d;\n        dx = node.value ? dx / node.value : 0;\n        while (++i < n) {\n          position(c = children[i], x, d = c.value * dx, dy);\n          x += d;\n        }\n      }\n    }\n    function depth(node) {\n      var children = node.children, d = 0;\n      if (children && (n = children.length)) {\n        var i = -1, n;\n        while (++i < n) d = Math.max(d, depth(children[i]));\n      }\n      return 1 + d;\n    }\n    function partition(d, i) {\n      var nodes = hierarchy.call(this, d, i);\n      position(nodes[0], 0, size[0], size[1] / depth(nodes[0]));\n      return nodes;\n    }\n    partition.size = function(x) {\n      if (!arguments.length) return size;\n      size = x;\n      return partition;\n    };\n    return d3_layout_hierarchyRebind(partition, hierarchy);\n  };\n  d3.layout.pie = function() {\n    var value = Number, sort = d3_layout_pieSortByValue, startAngle = 0, endAngle = τ, padAngle = 0;\n    function pie(data) {\n      var n = data.length, values = data.map(function(d, i) {\n        return +value.call(pie, d, i);\n      }), a = +(typeof startAngle === \"function\" ? startAngle.apply(this, arguments) : startAngle), da = (typeof endAngle === \"function\" ? endAngle.apply(this, arguments) : endAngle) - a, p = Math.min(Math.abs(da) / n, +(typeof padAngle === \"function\" ? padAngle.apply(this, arguments) : padAngle)), pa = p * (da < 0 ? -1 : 1), sum = d3.sum(values), k = sum ? (da - n * pa) / sum : 0, index = d3.range(n), arcs = [], v;\n      if (sort != null) index.sort(sort === d3_layout_pieSortByValue ? function(i, j) {\n        return values[j] - values[i];\n      } : function(i, j) {\n        return sort(data[i], data[j]);\n      });\n      index.forEach(function(i) {\n        arcs[i] = {\n          data: data[i],\n          value: v = values[i],\n          startAngle: a,\n          endAngle: a += v * k + pa,\n          padAngle: p\n        };\n      });\n      return arcs;\n    }\n    pie.value = function(_) {\n      if (!arguments.length) return value;\n      value = _;\n      return pie;\n    };\n    pie.sort = function(_) {\n      if (!arguments.length) return sort;\n      sort = _;\n      return pie;\n    };\n    pie.startAngle = function(_) {\n      if (!arguments.length) return startAngle;\n      startAngle = _;\n      return pie;\n    };\n    pie.endAngle = function(_) {\n      if (!arguments.length) return endAngle;\n      endAngle = _;\n      return pie;\n    };\n    pie.padAngle = function(_) {\n      if (!arguments.length) return padAngle;\n      padAngle = _;\n      return pie;\n    };\n    return pie;\n  };\n  var d3_layout_pieSortByValue = {};\n  d3.layout.stack = function() {\n    var values = d3_identity, order = d3_layout_stackOrderDefault, offset = d3_layout_stackOffsetZero, out = d3_layout_stackOut, x = d3_layout_stackX, y = d3_layout_stackY;\n    function stack(data, index) {\n      if (!(n = data.length)) return data;\n      var series = data.map(function(d, i) {\n        return values.call(stack, d, i);\n      });\n      var points = series.map(function(d) {\n        return d.map(function(v, i) {\n          return [ x.call(stack, v, i), y.call(stack, v, i) ];\n        });\n      });\n      var orders = order.call(stack, points, index);\n      series = d3.permute(series, orders);\n      points = d3.permute(points, orders);\n      var offsets = offset.call(stack, points, index);\n      var m = series[0].length, n, i, j, o;\n      for (j = 0; j < m; ++j) {\n        out.call(stack, series[0][j], o = offsets[j], points[0][j][1]);\n        for (i = 1; i < n; ++i) {\n          out.call(stack, series[i][j], o += points[i - 1][j][1], points[i][j][1]);\n        }\n      }\n      return data;\n    }\n    stack.values = function(x) {\n      if (!arguments.length) return values;\n      values = x;\n      return stack;\n    };\n    stack.order = function(x) {\n      if (!arguments.length) return order;\n      order = typeof x === \"function\" ? x : d3_layout_stackOrders.get(x) || d3_layout_stackOrderDefault;\n      return stack;\n    };\n    stack.offset = function(x) {\n      if (!arguments.length) return offset;\n      offset = typeof x === \"function\" ? x : d3_layout_stackOffsets.get(x) || d3_layout_stackOffsetZero;\n      return stack;\n    };\n    stack.x = function(z) {\n      if (!arguments.length) return x;\n      x = z;\n      return stack;\n    };\n    stack.y = function(z) {\n      if (!arguments.length) return y;\n      y = z;\n      return stack;\n    };\n    stack.out = function(z) {\n      if (!arguments.length) return out;\n      out = z;\n      return stack;\n    };\n    return stack;\n  };\n  function d3_layout_stackX(d) {\n    return d.x;\n  }\n  function d3_layout_stackY(d) {\n    return d.y;\n  }\n  function d3_layout_stackOut(d, y0, y) {\n    d.y0 = y0;\n    d.y = y;\n  }\n  var d3_layout_stackOrders = d3.map({\n    \"inside-out\": function(data) {\n      var n = data.length, i, j, max = data.map(d3_layout_stackMaxIndex), sums = data.map(d3_layout_stackReduceSum), index = d3.range(n).sort(function(a, b) {\n        return max[a] - max[b];\n      }), top = 0, bottom = 0, tops = [], bottoms = [];\n      for (i = 0; i < n; ++i) {\n        j = index[i];\n        if (top < bottom) {\n          top += sums[j];\n          tops.push(j);\n        } else {\n          bottom += sums[j];\n          bottoms.push(j);\n        }\n      }\n      return bottoms.reverse().concat(tops);\n    },\n    reverse: function(data) {\n      return d3.range(data.length).reverse();\n    },\n    \"default\": d3_layout_stackOrderDefault\n  });\n  var d3_layout_stackOffsets = d3.map({\n    silhouette: function(data) {\n      var n = data.length, m = data[0].length, sums = [], max = 0, i, j, o, y0 = [];\n      for (j = 0; j < m; ++j) {\n        for (i = 0, o = 0; i < n; i++) o += data[i][j][1];\n        if (o > max) max = o;\n        sums.push(o);\n      }\n      for (j = 0; j < m; ++j) {\n        y0[j] = (max - sums[j]) / 2;\n      }\n      return y0;\n    },\n    wiggle: function(data) {\n      var n = data.length, x = data[0], m = x.length, i, j, k, s1, s2, s3, dx, o, o0, y0 = [];\n      y0[0] = o = o0 = 0;\n      for (j = 1; j < m; ++j) {\n        for (i = 0, s1 = 0; i < n; ++i) s1 += data[i][j][1];\n        for (i = 0, s2 = 0, dx = x[j][0] - x[j - 1][0]; i < n; ++i) {\n          for (k = 0, s3 = (data[i][j][1] - data[i][j - 1][1]) / (2 * dx); k < i; ++k) {\n            s3 += (data[k][j][1] - data[k][j - 1][1]) / dx;\n          }\n          s2 += s3 * data[i][j][1];\n        }\n        y0[j] = o -= s1 ? s2 / s1 * dx : 0;\n        if (o < o0) o0 = o;\n      }\n      for (j = 0; j < m; ++j) y0[j] -= o0;\n      return y0;\n    },\n    expand: function(data) {\n      var n = data.length, m = data[0].length, k = 1 / n, i, j, o, y0 = [];\n      for (j = 0; j < m; ++j) {\n        for (i = 0, o = 0; i < n; i++) o += data[i][j][1];\n        if (o) for (i = 0; i < n; i++) data[i][j][1] /= o; else for (i = 0; i < n; i++) data[i][j][1] = k;\n      }\n      for (j = 0; j < m; ++j) y0[j] = 0;\n      return y0;\n    },\n    zero: d3_layout_stackOffsetZero\n  });\n  function d3_layout_stackOrderDefault(data) {\n    return d3.range(data.length);\n  }\n  function d3_layout_stackOffsetZero(data) {\n    var j = -1, m = data[0].length, y0 = [];\n    while (++j < m) y0[j] = 0;\n    return y0;\n  }\n  function d3_layout_stackMaxIndex(array) {\n    var i = 1, j = 0, v = array[0][1], k, n = array.length;\n    for (;i < n; ++i) {\n      if ((k = array[i][1]) > v) {\n        j = i;\n        v = k;\n      }\n    }\n    return j;\n  }\n  function d3_layout_stackReduceSum(d) {\n    return d.reduce(d3_layout_stackSum, 0);\n  }\n  function d3_layout_stackSum(p, d) {\n    return p + d[1];\n  }\n  d3.layout.histogram = function() {\n    var frequency = true, valuer = Number, ranger = d3_layout_histogramRange, binner = d3_layout_histogramBinSturges;\n    function histogram(data, i) {\n      var bins = [], values = data.map(valuer, this), range = ranger.call(this, values, i), thresholds = binner.call(this, range, values, i), bin, i = -1, n = values.length, m = thresholds.length - 1, k = frequency ? 1 : 1 / n, x;\n      while (++i < m) {\n        bin = bins[i] = [];\n        bin.dx = thresholds[i + 1] - (bin.x = thresholds[i]);\n        bin.y = 0;\n      }\n      if (m > 0) {\n        i = -1;\n        while (++i < n) {\n          x = values[i];\n          if (x >= range[0] && x <= range[1]) {\n            bin = bins[d3.bisect(thresholds, x, 1, m) - 1];\n            bin.y += k;\n            bin.push(data[i]);\n          }\n        }\n      }\n      return bins;\n    }\n    histogram.value = function(x) {\n      if (!arguments.length) return valuer;\n      valuer = x;\n      return histogram;\n    };\n    histogram.range = function(x) {\n      if (!arguments.length) return ranger;\n      ranger = d3_functor(x);\n      return histogram;\n    };\n    histogram.bins = function(x) {\n      if (!arguments.length) return binner;\n      binner = typeof x === \"number\" ? function(range) {\n        return d3_layout_histogramBinFixed(range, x);\n      } : d3_functor(x);\n      return histogram;\n    };\n    histogram.frequency = function(x) {\n      if (!arguments.length) return frequency;\n      frequency = !!x;\n      return histogram;\n    };\n    return histogram;\n  };\n  function d3_layout_histogramBinSturges(range, values) {\n    return d3_layout_histogramBinFixed(range, Math.ceil(Math.log(values.length) / Math.LN2 + 1));\n  }\n  function d3_layout_histogramBinFixed(range, n) {\n    var x = -1, b = +range[0], m = (range[1] - b) / n, f = [];\n    while (++x <= n) f[x] = m * x + b;\n    return f;\n  }\n  function d3_layout_histogramRange(values) {\n    return [ d3.min(values), d3.max(values) ];\n  }\n  d3.layout.pack = function() {\n    var hierarchy = d3.layout.hierarchy().sort(d3_layout_packSort), padding = 0, size = [ 1, 1 ], radius;\n    function pack(d, i) {\n      var nodes = hierarchy.call(this, d, i), root = nodes[0], w = size[0], h = size[1], r = radius == null ? Math.sqrt : typeof radius === \"function\" ? radius : function() {\n        return radius;\n      };\n      root.x = root.y = 0;\n      d3_layout_hierarchyVisitAfter(root, function(d) {\n        d.r = +r(d.value);\n      });\n      d3_layout_hierarchyVisitAfter(root, d3_layout_packSiblings);\n      if (padding) {\n        var dr = padding * (radius ? 1 : Math.max(2 * root.r / w, 2 * root.r / h)) / 2;\n        d3_layout_hierarchyVisitAfter(root, function(d) {\n          d.r += dr;\n        });\n        d3_layout_hierarchyVisitAfter(root, d3_layout_packSiblings);\n        d3_layout_hierarchyVisitAfter(root, function(d) {\n          d.r -= dr;\n        });\n      }\n      d3_layout_packTransform(root, w / 2, h / 2, radius ? 1 : 1 / Math.max(2 * root.r / w, 2 * root.r / h));\n      return nodes;\n    }\n    pack.size = function(_) {\n      if (!arguments.length) return size;\n      size = _;\n      return pack;\n    };\n    pack.radius = function(_) {\n      if (!arguments.length) return radius;\n      radius = _ == null || typeof _ === \"function\" ? _ : +_;\n      return pack;\n    };\n    pack.padding = function(_) {\n      if (!arguments.length) return padding;\n      padding = +_;\n      return pack;\n    };\n    return d3_layout_hierarchyRebind(pack, hierarchy);\n  };\n  function d3_layout_packSort(a, b) {\n    return a.value - b.value;\n  }\n  function d3_layout_packInsert(a, b) {\n    var c = a._pack_next;\n    a._pack_next = b;\n    b._pack_prev = a;\n    b._pack_next = c;\n    c._pack_prev = b;\n  }\n  function d3_layout_packSplice(a, b) {\n    a._pack_next = b;\n    b._pack_prev = a;\n  }\n  function d3_layout_packIntersects(a, b) {\n    var dx = b.x - a.x, dy = b.y - a.y, dr = a.r + b.r;\n    return .999 * dr * dr > dx * dx + dy * dy;\n  }\n  function d3_layout_packSiblings(node) {\n    if (!(nodes = node.children) || !(n = nodes.length)) return;\n    var nodes, xMin = Infinity, xMax = -Infinity, yMin = Infinity, yMax = -Infinity, a, b, c, i, j, k, n;\n    function bound(node) {\n      xMin = Math.min(node.x - node.r, xMin);\n      xMax = Math.max(node.x + node.r, xMax);\n      yMin = Math.min(node.y - node.r, yMin);\n      yMax = Math.max(node.y + node.r, yMax);\n    }\n    nodes.forEach(d3_layout_packLink);\n    a = nodes[0];\n    a.x = -a.r;\n    a.y = 0;\n    bound(a);\n    if (n > 1) {\n      b = nodes[1];\n      b.x = b.r;\n      b.y = 0;\n      bound(b);\n      if (n > 2) {\n        c = nodes[2];\n        d3_layout_packPlace(a, b, c);\n        bound(c);\n        d3_layout_packInsert(a, c);\n        a._pack_prev = c;\n        d3_layout_packInsert(c, b);\n        b = a._pack_next;\n        for (i = 3; i < n; i++) {\n          d3_layout_packPlace(a, b, c = nodes[i]);\n          var isect = 0, s1 = 1, s2 = 1;\n          for (j = b._pack_next; j !== b; j = j._pack_next, s1++) {\n            if (d3_layout_packIntersects(j, c)) {\n              isect = 1;\n              break;\n            }\n          }\n          if (isect == 1) {\n            for (k = a._pack_prev; k !== j._pack_prev; k = k._pack_prev, s2++) {\n              if (d3_layout_packIntersects(k, c)) {\n                break;\n              }\n            }\n          }\n          if (isect) {\n            if (s1 < s2 || s1 == s2 && b.r < a.r) d3_layout_packSplice(a, b = j); else d3_layout_packSplice(a = k, b);\n            i--;\n          } else {\n            d3_layout_packInsert(a, c);\n            b = c;\n            bound(c);\n          }\n        }\n      }\n    }\n    var cx = (xMin + xMax) / 2, cy = (yMin + yMax) / 2, cr = 0;\n    for (i = 0; i < n; i++) {\n      c = nodes[i];\n      c.x -= cx;\n      c.y -= cy;\n      cr = Math.max(cr, c.r + Math.sqrt(c.x * c.x + c.y * c.y));\n    }\n    node.r = cr;\n    nodes.forEach(d3_layout_packUnlink);\n  }\n  function d3_layout_packLink(node) {\n    node._pack_next = node._pack_prev = node;\n  }\n  function d3_layout_packUnlink(node) {\n    delete node._pack_next;\n    delete node._pack_prev;\n  }\n  function d3_layout_packTransform(node, x, y, k) {\n    var children = node.children;\n    node.x = x += k * node.x;\n    node.y = y += k * node.y;\n    node.r *= k;\n    if (children) {\n      var i = -1, n = children.length;\n      while (++i < n) d3_layout_packTransform(children[i], x, y, k);\n    }\n  }\n  function d3_layout_packPlace(a, b, c) {\n    var db = a.r + c.r, dx = b.x - a.x, dy = b.y - a.y;\n    if (db && (dx || dy)) {\n      var da = b.r + c.r, dc = dx * dx + dy * dy;\n      da *= da;\n      db *= db;\n      var x = .5 + (db - da) / (2 * dc), y = Math.sqrt(Math.max(0, 2 * da * (db + dc) - (db -= dc) * db - da * da)) / (2 * dc);\n      c.x = a.x + x * dx + y * dy;\n      c.y = a.y + x * dy - y * dx;\n    } else {\n      c.x = a.x + db;\n      c.y = a.y;\n    }\n  }\n  d3.layout.tree = function() {\n    var hierarchy = d3.layout.hierarchy().sort(null).value(null), separation = d3_layout_treeSeparation, size = [ 1, 1 ], nodeSize = null;\n    function tree(d, i) {\n      var nodes = hierarchy.call(this, d, i), root0 = nodes[0], root1 = wrapTree(root0);\n      d3_layout_hierarchyVisitAfter(root1, firstWalk), root1.parent.m = -root1.z;\n      d3_layout_hierarchyVisitBefore(root1, secondWalk);\n      if (nodeSize) d3_layout_hierarchyVisitBefore(root0, sizeNode); else {\n        var left = root0, right = root0, bottom = root0;\n        d3_layout_hierarchyVisitBefore(root0, function(node) {\n          if (node.x < left.x) left = node;\n          if (node.x > right.x) right = node;\n          if (node.depth > bottom.depth) bottom = node;\n        });\n        var tx = separation(left, right) / 2 - left.x, kx = size[0] / (right.x + separation(right, left) / 2 + tx), ky = size[1] / (bottom.depth || 1);\n        d3_layout_hierarchyVisitBefore(root0, function(node) {\n          node.x = (node.x + tx) * kx;\n          node.y = node.depth * ky;\n        });\n      }\n      return nodes;\n    }\n    function wrapTree(root0) {\n      var root1 = {\n        A: null,\n        children: [ root0 ]\n      }, queue = [ root1 ], node1;\n      while ((node1 = queue.pop()) != null) {\n        for (var children = node1.children, child, i = 0, n = children.length; i < n; ++i) {\n          queue.push((children[i] = child = {\n            _: children[i],\n            parent: node1,\n            children: (child = children[i].children) && child.slice() || [],\n            A: null,\n            a: null,\n            z: 0,\n            m: 0,\n            c: 0,\n            s: 0,\n            t: null,\n            i: i\n          }).a = child);\n        }\n      }\n      return root1.children[0];\n    }\n    function firstWalk(v) {\n      var children = v.children, siblings = v.parent.children, w = v.i ? siblings[v.i - 1] : null;\n      if (children.length) {\n        d3_layout_treeShift(v);\n        var midpoint = (children[0].z + children[children.length - 1].z) / 2;\n        if (w) {\n          v.z = w.z + separation(v._, w._);\n          v.m = v.z - midpoint;\n        } else {\n          v.z = midpoint;\n        }\n      } else if (w) {\n        v.z = w.z + separation(v._, w._);\n      }\n      v.parent.A = apportion(v, w, v.parent.A || siblings[0]);\n    }\n    function secondWalk(v) {\n      v._.x = v.z + v.parent.m;\n      v.m += v.parent.m;\n    }\n    function apportion(v, w, ancestor) {\n      if (w) {\n        var vip = v, vop = v, vim = w, vom = vip.parent.children[0], sip = vip.m, sop = vop.m, sim = vim.m, som = vom.m, shift;\n        while (vim = d3_layout_treeRight(vim), vip = d3_layout_treeLeft(vip), vim && vip) {\n          vom = d3_layout_treeLeft(vom);\n          vop = d3_layout_treeRight(vop);\n          vop.a = v;\n          shift = vim.z + sim - vip.z - sip + separation(vim._, vip._);\n          if (shift > 0) {\n            d3_layout_treeMove(d3_layout_treeAncestor(vim, v, ancestor), v, shift);\n            sip += shift;\n            sop += shift;\n          }\n          sim += vim.m;\n          sip += vip.m;\n          som += vom.m;\n          sop += vop.m;\n        }\n        if (vim && !d3_layout_treeRight(vop)) {\n          vop.t = vim;\n          vop.m += sim - sop;\n        }\n        if (vip && !d3_layout_treeLeft(vom)) {\n          vom.t = vip;\n          vom.m += sip - som;\n          ancestor = v;\n        }\n      }\n      return ancestor;\n    }\n    function sizeNode(node) {\n      node.x *= size[0];\n      node.y = node.depth * size[1];\n    }\n    tree.separation = function(x) {\n      if (!arguments.length) return separation;\n      separation = x;\n      return tree;\n    };\n    tree.size = function(x) {\n      if (!arguments.length) return nodeSize ? null : size;\n      nodeSize = (size = x) == null ? sizeNode : null;\n      return tree;\n    };\n    tree.nodeSize = function(x) {\n      if (!arguments.length) return nodeSize ? size : null;\n      nodeSize = (size = x) == null ? null : sizeNode;\n      return tree;\n    };\n    return d3_layout_hierarchyRebind(tree, hierarchy);\n  };\n  function d3_layout_treeSeparation(a, b) {\n    return a.parent == b.parent ? 1 : 2;\n  }\n  function d3_layout_treeLeft(v) {\n    var children = v.children;\n    return children.length ? children[0] : v.t;\n  }\n  function d3_layout_treeRight(v) {\n    var children = v.children, n;\n    return (n = children.length) ? children[n - 1] : v.t;\n  }\n  function d3_layout_treeMove(wm, wp, shift) {\n    var change = shift / (wp.i - wm.i);\n    wp.c -= change;\n    wp.s += shift;\n    wm.c += change;\n    wp.z += shift;\n    wp.m += shift;\n  }\n  function d3_layout_treeShift(v) {\n    var shift = 0, change = 0, children = v.children, i = children.length, w;\n    while (--i >= 0) {\n      w = children[i];\n      w.z += shift;\n      w.m += shift;\n      shift += w.s + (change += w.c);\n    }\n  }\n  function d3_layout_treeAncestor(vim, v, ancestor) {\n    return vim.a.parent === v.parent ? vim.a : ancestor;\n  }\n  d3.layout.cluster = function() {\n    var hierarchy = d3.layout.hierarchy().sort(null).value(null), separation = d3_layout_treeSeparation, size = [ 1, 1 ], nodeSize = false;\n    function cluster(d, i) {\n      var nodes = hierarchy.call(this, d, i), root = nodes[0], previousNode, x = 0;\n      d3_layout_hierarchyVisitAfter(root, function(node) {\n        var children = node.children;\n        if (children && children.length) {\n          node.x = d3_layout_clusterX(children);\n          node.y = d3_layout_clusterY(children);\n        } else {\n          node.x = previousNode ? x += separation(node, previousNode) : 0;\n          node.y = 0;\n          previousNode = node;\n        }\n      });\n      var left = d3_layout_clusterLeft(root), right = d3_layout_clusterRight(root), x0 = left.x - separation(left, right) / 2, x1 = right.x + separation(right, left) / 2;\n      d3_layout_hierarchyVisitAfter(root, nodeSize ? function(node) {\n        node.x = (node.x - root.x) * size[0];\n        node.y = (root.y - node.y) * size[1];\n      } : function(node) {\n        node.x = (node.x - x0) / (x1 - x0) * size[0];\n        node.y = (1 - (root.y ? node.y / root.y : 1)) * size[1];\n      });\n      return nodes;\n    }\n    cluster.separation = function(x) {\n      if (!arguments.length) return separation;\n      separation = x;\n      return cluster;\n    };\n    cluster.size = function(x) {\n      if (!arguments.length) return nodeSize ? null : size;\n      nodeSize = (size = x) == null;\n      return cluster;\n    };\n    cluster.nodeSize = function(x) {\n      if (!arguments.length) return nodeSize ? size : null;\n      nodeSize = (size = x) != null;\n      return cluster;\n    };\n    return d3_layout_hierarchyRebind(cluster, hierarchy);\n  };\n  function d3_layout_clusterY(children) {\n    return 1 + d3.max(children, function(child) {\n      return child.y;\n    });\n  }\n  function d3_layout_clusterX(children) {\n    return children.reduce(function(x, child) {\n      return x + child.x;\n    }, 0) / children.length;\n  }\n  function d3_layout_clusterLeft(node) {\n    var children = node.children;\n    return children && children.length ? d3_layout_clusterLeft(children[0]) : node;\n  }\n  function d3_layout_clusterRight(node) {\n    var children = node.children, n;\n    return children && (n = children.length) ? d3_layout_clusterRight(children[n - 1]) : node;\n  }\n  d3.layout.treemap = function() {\n    var hierarchy = d3.layout.hierarchy(), round = Math.round, size = [ 1, 1 ], padding = null, pad = d3_layout_treemapPadNull, sticky = false, stickies, mode = \"squarify\", ratio = .5 * (1 + Math.sqrt(5));\n    function scale(children, k) {\n      var i = -1, n = children.length, child, area;\n      while (++i < n) {\n        area = (child = children[i]).value * (k < 0 ? 0 : k);\n        child.area = isNaN(area) || area <= 0 ? 0 : area;\n      }\n    }\n    function squarify(node) {\n      var children = node.children;\n      if (children && children.length) {\n        var rect = pad(node), row = [], remaining = children.slice(), child, best = Infinity, score, u = mode === \"slice\" ? rect.dx : mode === \"dice\" ? rect.dy : mode === \"slice-dice\" ? node.depth & 1 ? rect.dy : rect.dx : Math.min(rect.dx, rect.dy), n;\n        scale(remaining, rect.dx * rect.dy / node.value);\n        row.area = 0;\n        while ((n = remaining.length) > 0) {\n          row.push(child = remaining[n - 1]);\n          row.area += child.area;\n          if (mode !== \"squarify\" || (score = worst(row, u)) <= best) {\n            remaining.pop();\n            best = score;\n          } else {\n            row.area -= row.pop().area;\n            position(row, u, rect, false);\n            u = Math.min(rect.dx, rect.dy);\n            row.length = row.area = 0;\n            best = Infinity;\n          }\n        }\n        if (row.length) {\n          position(row, u, rect, true);\n          row.length = row.area = 0;\n        }\n        children.forEach(squarify);\n      }\n    }\n    function stickify(node) {\n      var children = node.children;\n      if (children && children.length) {\n        var rect = pad(node), remaining = children.slice(), child, row = [];\n        scale(remaining, rect.dx * rect.dy / node.value);\n        row.area = 0;\n        while (child = remaining.pop()) {\n          row.push(child);\n          row.area += child.area;\n          if (child.z != null) {\n            position(row, child.z ? rect.dx : rect.dy, rect, !remaining.length);\n            row.length = row.area = 0;\n          }\n        }\n        children.forEach(stickify);\n      }\n    }\n    function worst(row, u) {\n      var s = row.area, r, rmax = 0, rmin = Infinity, i = -1, n = row.length;\n      while (++i < n) {\n        if (!(r = row[i].area)) continue;\n        if (r < rmin) rmin = r;\n        if (r > rmax) rmax = r;\n      }\n      s *= s;\n      u *= u;\n      return s ? Math.max(u * rmax * ratio / s, s / (u * rmin * ratio)) : Infinity;\n    }\n    function position(row, u, rect, flush) {\n      var i = -1, n = row.length, x = rect.x, y = rect.y, v = u ? round(row.area / u) : 0, o;\n      if (u == rect.dx) {\n        if (flush || v > rect.dy) v = rect.dy;\n        while (++i < n) {\n          o = row[i];\n          o.x = x;\n          o.y = y;\n          o.dy = v;\n          x += o.dx = Math.min(rect.x + rect.dx - x, v ? round(o.area / v) : 0);\n        }\n        o.z = true;\n        o.dx += rect.x + rect.dx - x;\n        rect.y += v;\n        rect.dy -= v;\n      } else {\n        if (flush || v > rect.dx) v = rect.dx;\n        while (++i < n) {\n          o = row[i];\n          o.x = x;\n          o.y = y;\n          o.dx = v;\n          y += o.dy = Math.min(rect.y + rect.dy - y, v ? round(o.area / v) : 0);\n        }\n        o.z = false;\n        o.dy += rect.y + rect.dy - y;\n        rect.x += v;\n        rect.dx -= v;\n      }\n    }\n    function treemap(d) {\n      var nodes = stickies || hierarchy(d), root = nodes[0];\n      root.x = root.y = 0;\n      if (root.value) root.dx = size[0], root.dy = size[1]; else root.dx = root.dy = 0;\n      if (stickies) hierarchy.revalue(root);\n      scale([ root ], root.dx * root.dy / root.value);\n      (stickies ? stickify : squarify)(root);\n      if (sticky) stickies = nodes;\n      return nodes;\n    }\n    treemap.size = function(x) {\n      if (!arguments.length) return size;\n      size = x;\n      return treemap;\n    };\n    treemap.padding = function(x) {\n      if (!arguments.length) return padding;\n      function padFunction(node) {\n        var p = x.call(treemap, node, node.depth);\n        return p == null ? d3_layout_treemapPadNull(node) : d3_layout_treemapPad(node, typeof p === \"number\" ? [ p, p, p, p ] : p);\n      }\n      function padConstant(node) {\n        return d3_layout_treemapPad(node, x);\n      }\n      var type;\n      pad = (padding = x) == null ? d3_layout_treemapPadNull : (type = typeof x) === \"function\" ? padFunction : type === \"number\" ? (x = [ x, x, x, x ], \n      padConstant) : padConstant;\n      return treemap;\n    };\n    treemap.round = function(x) {\n      if (!arguments.length) return round != Number;\n      round = x ? Math.round : Number;\n      return treemap;\n    };\n    treemap.sticky = function(x) {\n      if (!arguments.length) return sticky;\n      sticky = x;\n      stickies = null;\n      return treemap;\n    };\n    treemap.ratio = function(x) {\n      if (!arguments.length) return ratio;\n      ratio = x;\n      return treemap;\n    };\n    treemap.mode = function(x) {\n      if (!arguments.length) return mode;\n      mode = x + \"\";\n      return treemap;\n    };\n    return d3_layout_hierarchyRebind(treemap, hierarchy);\n  };\n  function d3_layout_treemapPadNull(node) {\n    return {\n      x: node.x,\n      y: node.y,\n      dx: node.dx,\n      dy: node.dy\n    };\n  }\n  function d3_layout_treemapPad(node, padding) {\n    var x = node.x + padding[3], y = node.y + padding[0], dx = node.dx - padding[1] - padding[3], dy = node.dy - padding[0] - padding[2];\n    if (dx < 0) {\n      x += dx / 2;\n      dx = 0;\n    }\n    if (dy < 0) {\n      y += dy / 2;\n      dy = 0;\n    }\n    return {\n      x: x,\n      y: y,\n      dx: dx,\n      dy: dy\n    };\n  }\n  d3.random = {\n    normal: function(µ, σ) {\n      var n = arguments.length;\n      if (n < 2) σ = 1;\n      if (n < 1) µ = 0;\n      return function() {\n        var x, y, r;\n        do {\n          x = Math.random() * 2 - 1;\n          y = Math.random() * 2 - 1;\n          r = x * x + y * y;\n        } while (!r || r > 1);\n        return µ + σ * x * Math.sqrt(-2 * Math.log(r) / r);\n      };\n    },\n    logNormal: function() {\n      var random = d3.random.normal.apply(d3, arguments);\n      return function() {\n        return Math.exp(random());\n      };\n    },\n    bates: function(m) {\n      var random = d3.random.irwinHall(m);\n      return function() {\n        return random() / m;\n      };\n    },\n    irwinHall: function(m) {\n      return function() {\n        for (var s = 0, j = 0; j < m; j++) s += Math.random();\n        return s;\n      };\n    }\n  };\n  d3.scale = {};\n  function d3_scaleExtent(domain) {\n    var start = domain[0], stop = domain[domain.length - 1];\n    return start < stop ? [ start, stop ] : [ stop, start ];\n  }\n  function d3_scaleRange(scale) {\n    return scale.rangeExtent ? scale.rangeExtent() : d3_scaleExtent(scale.range());\n  }\n  function d3_scale_bilinear(domain, range, uninterpolate, interpolate) {\n    var u = uninterpolate(domain[0], domain[1]), i = interpolate(range[0], range[1]);\n    return function(x) {\n      return i(u(x));\n    };\n  }\n  function d3_scale_nice(domain, nice) {\n    var i0 = 0, i1 = domain.length - 1, x0 = domain[i0], x1 = domain[i1], dx;\n    if (x1 < x0) {\n      dx = i0, i0 = i1, i1 = dx;\n      dx = x0, x0 = x1, x1 = dx;\n    }\n    domain[i0] = nice.floor(x0);\n    domain[i1] = nice.ceil(x1);\n    return domain;\n  }\n  function d3_scale_niceStep(step) {\n    return step ? {\n      floor: function(x) {\n        return Math.floor(x / step) * step;\n      },\n      ceil: function(x) {\n        return Math.ceil(x / step) * step;\n      }\n    } : d3_scale_niceIdentity;\n  }\n  var d3_scale_niceIdentity = {\n    floor: d3_identity,\n    ceil: d3_identity\n  };\n  function d3_scale_polylinear(domain, range, uninterpolate, interpolate) {\n    var u = [], i = [], j = 0, k = Math.min(domain.length, range.length) - 1;\n    if (domain[k] < domain[0]) {\n      domain = domain.slice().reverse();\n      range = range.slice().reverse();\n    }\n    while (++j <= k) {\n      u.push(uninterpolate(domain[j - 1], domain[j]));\n      i.push(interpolate(range[j - 1], range[j]));\n    }\n    return function(x) {\n      var j = d3.bisect(domain, x, 1, k) - 1;\n      return i[j](u[j](x));\n    };\n  }\n  d3.scale.linear = function() {\n    return d3_scale_linear([ 0, 1 ], [ 0, 1 ], d3_interpolate, false);\n  };\n  function d3_scale_linear(domain, range, interpolate, clamp) {\n    var output, input;\n    function rescale() {\n      var linear = Math.min(domain.length, range.length) > 2 ? d3_scale_polylinear : d3_scale_bilinear, uninterpolate = clamp ? d3_uninterpolateClamp : d3_uninterpolateNumber;\n      output = linear(domain, range, uninterpolate, interpolate);\n      input = linear(range, domain, uninterpolate, d3_interpolate);\n      return scale;\n    }\n    function scale(x) {\n      return output(x);\n    }\n    scale.invert = function(y) {\n      return input(y);\n    };\n    scale.domain = function(x) {\n      if (!arguments.length) return domain;\n      domain = x.map(Number);\n      return rescale();\n    };\n    scale.range = function(x) {\n      if (!arguments.length) return range;\n      range = x;\n      return rescale();\n    };\n    scale.rangeRound = function(x) {\n      return scale.range(x).interpolate(d3_interpolateRound);\n    };\n    scale.clamp = function(x) {\n      if (!arguments.length) return clamp;\n      clamp = x;\n      return rescale();\n    };\n    scale.interpolate = function(x) {\n      if (!arguments.length) return interpolate;\n      interpolate = x;\n      return rescale();\n    };\n    scale.ticks = function(m) {\n      return d3_scale_linearTicks(domain, m);\n    };\n    scale.tickFormat = function(m, format) {\n      return d3_scale_linearTickFormat(domain, m, format);\n    };\n    scale.nice = function(m) {\n      d3_scale_linearNice(domain, m);\n      return rescale();\n    };\n    scale.copy = function() {\n      return d3_scale_linear(domain, range, interpolate, clamp);\n    };\n    return rescale();\n  }\n  function d3_scale_linearRebind(scale, linear) {\n    return d3.rebind(scale, linear, \"range\", \"rangeRound\", \"interpolate\", \"clamp\");\n  }\n  function d3_scale_linearNice(domain, m) {\n    d3_scale_nice(domain, d3_scale_niceStep(d3_scale_linearTickRange(domain, m)[2]));\n    d3_scale_nice(domain, d3_scale_niceStep(d3_scale_linearTickRange(domain, m)[2]));\n    return domain;\n  }\n  function d3_scale_linearTickRange(domain, m) {\n    if (m == null) m = 10;\n    var extent = d3_scaleExtent(domain), span = extent[1] - extent[0], step = Math.pow(10, Math.floor(Math.log(span / m) / Math.LN10)), err = m / span * step;\n    if (err <= .15) step *= 10; else if (err <= .35) step *= 5; else if (err <= .75) step *= 2;\n    extent[0] = Math.ceil(extent[0] / step) * step;\n    extent[1] = Math.floor(extent[1] / step) * step + step * .5;\n    extent[2] = step;\n    return extent;\n  }\n  function d3_scale_linearTicks(domain, m) {\n    return d3.range.apply(d3, d3_scale_linearTickRange(domain, m));\n  }\n  function d3_scale_linearTickFormat(domain, m, format) {\n    var range = d3_scale_linearTickRange(domain, m);\n    if (format) {\n      var match = d3_format_re.exec(format);\n      match.shift();\n      if (match[8] === \"s\") {\n        var prefix = d3.formatPrefix(Math.max(abs(range[0]), abs(range[1])));\n        if (!match[7]) match[7] = \".\" + d3_scale_linearPrecision(prefix.scale(range[2]));\n        match[8] = \"f\";\n        format = d3.format(match.join(\"\"));\n        return function(d) {\n          return format(prefix.scale(d)) + prefix.symbol;\n        };\n      }\n      if (!match[7]) match[7] = \".\" + d3_scale_linearFormatPrecision(match[8], range);\n      format = match.join(\"\");\n    } else {\n      format = \",.\" + d3_scale_linearPrecision(range[2]) + \"f\";\n    }\n    return d3.format(format);\n  }\n  var d3_scale_linearFormatSignificant = {\n    s: 1,\n    g: 1,\n    p: 1,\n    r: 1,\n    e: 1\n  };\n  function d3_scale_linearPrecision(value) {\n    return -Math.floor(Math.log(value) / Math.LN10 + .01);\n  }\n  function d3_scale_linearFormatPrecision(type, range) {\n    var p = d3_scale_linearPrecision(range[2]);\n    return type in d3_scale_linearFormatSignificant ? Math.abs(p - d3_scale_linearPrecision(Math.max(abs(range[0]), abs(range[1])))) + +(type !== \"e\") : p - (type === \"%\") * 2;\n  }\n  d3.scale.log = function() {\n    return d3_scale_log(d3.scale.linear().domain([ 0, 1 ]), 10, true, [ 1, 10 ]);\n  };\n  function d3_scale_log(linear, base, positive, domain) {\n    function log(x) {\n      return (positive ? Math.log(x < 0 ? 0 : x) : -Math.log(x > 0 ? 0 : -x)) / Math.log(base);\n    }\n    function pow(x) {\n      return positive ? Math.pow(base, x) : -Math.pow(base, -x);\n    }\n    function scale(x) {\n      return linear(log(x));\n    }\n    scale.invert = function(x) {\n      return pow(linear.invert(x));\n    };\n    scale.domain = function(x) {\n      if (!arguments.length) return domain;\n      positive = x[0] >= 0;\n      linear.domain((domain = x.map(Number)).map(log));\n      return scale;\n    };\n    scale.base = function(_) {\n      if (!arguments.length) return base;\n      base = +_;\n      linear.domain(domain.map(log));\n      return scale;\n    };\n    scale.nice = function() {\n      var niced = d3_scale_nice(domain.map(log), positive ? Math : d3_scale_logNiceNegative);\n      linear.domain(niced);\n      domain = niced.map(pow);\n      return scale;\n    };\n    scale.ticks = function() {\n      var extent = d3_scaleExtent(domain), ticks = [], u = extent[0], v = extent[1], i = Math.floor(log(u)), j = Math.ceil(log(v)), n = base % 1 ? 2 : base;\n      if (isFinite(j - i)) {\n        if (positive) {\n          for (;i < j; i++) for (var k = 1; k < n; k++) ticks.push(pow(i) * k);\n          ticks.push(pow(i));\n        } else {\n          ticks.push(pow(i));\n          for (;i++ < j; ) for (var k = n - 1; k > 0; k--) ticks.push(pow(i) * k);\n        }\n        for (i = 0; ticks[i] < u; i++) {}\n        for (j = ticks.length; ticks[j - 1] > v; j--) {}\n        ticks = ticks.slice(i, j);\n      }\n      return ticks;\n    };\n    scale.tickFormat = function(n, format) {\n      if (!arguments.length) return d3_scale_logFormat;\n      if (arguments.length < 2) format = d3_scale_logFormat; else if (typeof format !== \"function\") format = d3.format(format);\n      var k = Math.max(1, base * n / scale.ticks().length);\n      return function(d) {\n        var i = d / pow(Math.round(log(d)));\n        if (i * base < base - .5) i *= base;\n        return i <= k ? format(d) : \"\";\n      };\n    };\n    scale.copy = function() {\n      return d3_scale_log(linear.copy(), base, positive, domain);\n    };\n    return d3_scale_linearRebind(scale, linear);\n  }\n  var d3_scale_logFormat = d3.format(\".0e\"), d3_scale_logNiceNegative = {\n    floor: function(x) {\n      return -Math.ceil(-x);\n    },\n    ceil: function(x) {\n      return -Math.floor(-x);\n    }\n  };\n  d3.scale.pow = function() {\n    return d3_scale_pow(d3.scale.linear(), 1, [ 0, 1 ]);\n  };\n  function d3_scale_pow(linear, exponent, domain) {\n    var powp = d3_scale_powPow(exponent), powb = d3_scale_powPow(1 / exponent);\n    function scale(x) {\n      return linear(powp(x));\n    }\n    scale.invert = function(x) {\n      return powb(linear.invert(x));\n    };\n    scale.domain = function(x) {\n      if (!arguments.length) return domain;\n      linear.domain((domain = x.map(Number)).map(powp));\n      return scale;\n    };\n    scale.ticks = function(m) {\n      return d3_scale_linearTicks(domain, m);\n    };\n    scale.tickFormat = function(m, format) {\n      return d3_scale_linearTickFormat(domain, m, format);\n    };\n    scale.nice = function(m) {\n      return scale.domain(d3_scale_linearNice(domain, m));\n    };\n    scale.exponent = function(x) {\n      if (!arguments.length) return exponent;\n      powp = d3_scale_powPow(exponent = x);\n      powb = d3_scale_powPow(1 / exponent);\n      linear.domain(domain.map(powp));\n      return scale;\n    };\n    scale.copy = function() {\n      return d3_scale_pow(linear.copy(), exponent, domain);\n    };\n    return d3_scale_linearRebind(scale, linear);\n  }\n  function d3_scale_powPow(e) {\n    return function(x) {\n      return x < 0 ? -Math.pow(-x, e) : Math.pow(x, e);\n    };\n  }\n  d3.scale.sqrt = function() {\n    return d3.scale.pow().exponent(.5);\n  };\n  d3.scale.ordinal = function() {\n    return d3_scale_ordinal([], {\n      t: \"range\",\n      a: [ [] ]\n    });\n  };\n  function d3_scale_ordinal(domain, ranger) {\n    var index, range, rangeBand;\n    function scale(x) {\n      return range[((index.get(x) || (ranger.t === \"range\" ? index.set(x, domain.push(x)) : NaN)) - 1) % range.length];\n    }\n    function steps(start, step) {\n      return d3.range(domain.length).map(function(i) {\n        return start + step * i;\n      });\n    }\n    scale.domain = function(x) {\n      if (!arguments.length) return domain;\n      domain = [];\n      index = new d3_Map();\n      var i = -1, n = x.length, xi;\n      while (++i < n) if (!index.has(xi = x[i])) index.set(xi, domain.push(xi));\n      return scale[ranger.t].apply(scale, ranger.a);\n    };\n    scale.range = function(x) {\n      if (!arguments.length) return range;\n      range = x;\n      rangeBand = 0;\n      ranger = {\n        t: \"range\",\n        a: arguments\n      };\n      return scale;\n    };\n    scale.rangePoints = function(x, padding) {\n      if (arguments.length < 2) padding = 0;\n      var start = x[0], stop = x[1], step = domain.length < 2 ? (start = (start + stop) / 2, \n      0) : (stop - start) / (domain.length - 1 + padding);\n      range = steps(start + step * padding / 2, step);\n      rangeBand = 0;\n      ranger = {\n        t: \"rangePoints\",\n        a: arguments\n      };\n      return scale;\n    };\n    scale.rangeRoundPoints = function(x, padding) {\n      if (arguments.length < 2) padding = 0;\n      var start = x[0], stop = x[1], step = domain.length < 2 ? (start = stop = Math.round((start + stop) / 2), \n      0) : (stop - start) / (domain.length - 1 + padding) | 0;\n      range = steps(start + Math.round(step * padding / 2 + (stop - start - (domain.length - 1 + padding) * step) / 2), step);\n      rangeBand = 0;\n      ranger = {\n        t: \"rangeRoundPoints\",\n        a: arguments\n      };\n      return scale;\n    };\n    scale.rangeBands = function(x, padding, outerPadding) {\n      if (arguments.length < 2) padding = 0;\n      if (arguments.length < 3) outerPadding = padding;\n      var reverse = x[1] < x[0], start = x[reverse - 0], stop = x[1 - reverse], step = (stop - start) / (domain.length - padding + 2 * outerPadding);\n      range = steps(start + step * outerPadding, step);\n      if (reverse) range.reverse();\n      rangeBand = step * (1 - padding);\n      ranger = {\n        t: \"rangeBands\",\n        a: arguments\n      };\n      return scale;\n    };\n    scale.rangeRoundBands = function(x, padding, outerPadding) {\n      if (arguments.length < 2) padding = 0;\n      if (arguments.length < 3) outerPadding = padding;\n      var reverse = x[1] < x[0], start = x[reverse - 0], stop = x[1 - reverse], step = Math.floor((stop - start) / (domain.length - padding + 2 * outerPadding));\n      range = steps(start + Math.round((stop - start - (domain.length - padding) * step) / 2), step);\n      if (reverse) range.reverse();\n      rangeBand = Math.round(step * (1 - padding));\n      ranger = {\n        t: \"rangeRoundBands\",\n        a: arguments\n      };\n      return scale;\n    };\n    scale.rangeBand = function() {\n      return rangeBand;\n    };\n    scale.rangeExtent = function() {\n      return d3_scaleExtent(ranger.a[0]);\n    };\n    scale.copy = function() {\n      return d3_scale_ordinal(domain, ranger);\n    };\n    return scale.domain(domain);\n  }\n  d3.scale.category10 = function() {\n    return d3.scale.ordinal().range(d3_category10);\n  };\n  d3.scale.category20 = function() {\n    return d3.scale.ordinal().range(d3_category20);\n  };\n  d3.scale.category20b = function() {\n    return d3.scale.ordinal().range(d3_category20b);\n  };\n  d3.scale.category20c = function() {\n    return d3.scale.ordinal().range(d3_category20c);\n  };\n  var d3_category10 = [ 2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175 ].map(d3_rgbString);\n  var d3_category20 = [ 2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725 ].map(d3_rgbString);\n  var d3_category20b = [ 3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654 ].map(d3_rgbString);\n  var d3_category20c = [ 3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081 ].map(d3_rgbString);\n  d3.scale.quantile = function() {\n    return d3_scale_quantile([], []);\n  };\n  function d3_scale_quantile(domain, range) {\n    var thresholds;\n    function rescale() {\n      var k = 0, q = range.length;\n      thresholds = [];\n      while (++k < q) thresholds[k - 1] = d3.quantile(domain, k / q);\n      return scale;\n    }\n    function scale(x) {\n      if (!isNaN(x = +x)) return range[d3.bisect(thresholds, x)];\n    }\n    scale.domain = function(x) {\n      if (!arguments.length) return domain;\n      domain = x.map(d3_number).filter(d3_numeric).sort(d3_ascending);\n      return rescale();\n    };\n    scale.range = function(x) {\n      if (!arguments.length) return range;\n      range = x;\n      return rescale();\n    };\n    scale.quantiles = function() {\n      return thresholds;\n    };\n    scale.invertExtent = function(y) {\n      y = range.indexOf(y);\n      return y < 0 ? [ NaN, NaN ] : [ y > 0 ? thresholds[y - 1] : domain[0], y < thresholds.length ? thresholds[y] : domain[domain.length - 1] ];\n    };\n    scale.copy = function() {\n      return d3_scale_quantile(domain, range);\n    };\n    return rescale();\n  }\n  d3.scale.quantize = function() {\n    return d3_scale_quantize(0, 1, [ 0, 1 ]);\n  };\n  function d3_scale_quantize(x0, x1, range) {\n    var kx, i;\n    function scale(x) {\n      return range[Math.max(0, Math.min(i, Math.floor(kx * (x - x0))))];\n    }\n    function rescale() {\n      kx = range.length / (x1 - x0);\n      i = range.length - 1;\n      return scale;\n    }\n    scale.domain = function(x) {\n      if (!arguments.length) return [ x0, x1 ];\n      x0 = +x[0];\n      x1 = +x[x.length - 1];\n      return rescale();\n    };\n    scale.range = function(x) {\n      if (!arguments.length) return range;\n      range = x;\n      return rescale();\n    };\n    scale.invertExtent = function(y) {\n      y = range.indexOf(y);\n      y = y < 0 ? NaN : y / kx + x0;\n      return [ y, y + 1 / kx ];\n    };\n    scale.copy = function() {\n      return d3_scale_quantize(x0, x1, range);\n    };\n    return rescale();\n  }\n  d3.scale.threshold = function() {\n    return d3_scale_threshold([ .5 ], [ 0, 1 ]);\n  };\n  function d3_scale_threshold(domain, range) {\n    function scale(x) {\n      if (x <= x) return range[d3.bisect(domain, x)];\n    }\n    scale.domain = function(_) {\n      if (!arguments.length) return domain;\n      domain = _;\n      return scale;\n    };\n    scale.range = function(_) {\n      if (!arguments.length) return range;\n      range = _;\n      return scale;\n    };\n    scale.invertExtent = function(y) {\n      y = range.indexOf(y);\n      return [ domain[y - 1], domain[y] ];\n    };\n    scale.copy = function() {\n      return d3_scale_threshold(domain, range);\n    };\n    return scale;\n  }\n  d3.scale.identity = function() {\n    return d3_scale_identity([ 0, 1 ]);\n  };\n  function d3_scale_identity(domain) {\n    function identity(x) {\n      return +x;\n    }\n    identity.invert = identity;\n    identity.domain = identity.range = function(x) {\n      if (!arguments.length) return domain;\n      domain = x.map(identity);\n      return identity;\n    };\n    identity.ticks = function(m) {\n      return d3_scale_linearTicks(domain, m);\n    };\n    identity.tickFormat = function(m, format) {\n      return d3_scale_linearTickFormat(domain, m, format);\n    };\n    identity.copy = function() {\n      return d3_scale_identity(domain);\n    };\n    return identity;\n  }\n  d3.svg = {};\n  function d3_zero() {\n    return 0;\n  }\n  d3.svg.arc = function() {\n    var innerRadius = d3_svg_arcInnerRadius, outerRadius = d3_svg_arcOuterRadius, cornerRadius = d3_zero, padRadius = d3_svg_arcAuto, startAngle = d3_svg_arcStartAngle, endAngle = d3_svg_arcEndAngle, padAngle = d3_svg_arcPadAngle;\n    function arc() {\n      var r0 = Math.max(0, +innerRadius.apply(this, arguments)), r1 = Math.max(0, +outerRadius.apply(this, arguments)), a0 = startAngle.apply(this, arguments) - halfπ, a1 = endAngle.apply(this, arguments) - halfπ, da = Math.abs(a1 - a0), cw = a0 > a1 ? 0 : 1;\n      if (r1 < r0) rc = r1, r1 = r0, r0 = rc;\n      if (da >= τε) return circleSegment(r1, cw) + (r0 ? circleSegment(r0, 1 - cw) : \"\") + \"Z\";\n      var rc, cr, rp, ap, p0 = 0, p1 = 0, x0, y0, x1, y1, x2, y2, x3, y3, path = [];\n      if (ap = (+padAngle.apply(this, arguments) || 0) / 2) {\n        rp = padRadius === d3_svg_arcAuto ? Math.sqrt(r0 * r0 + r1 * r1) : +padRadius.apply(this, arguments);\n        if (!cw) p1 *= -1;\n        if (r1) p1 = d3_asin(rp / r1 * Math.sin(ap));\n        if (r0) p0 = d3_asin(rp / r0 * Math.sin(ap));\n      }\n      if (r1) {\n        x0 = r1 * Math.cos(a0 + p1);\n        y0 = r1 * Math.sin(a0 + p1);\n        x1 = r1 * Math.cos(a1 - p1);\n        y1 = r1 * Math.sin(a1 - p1);\n        var l1 = Math.abs(a1 - a0 - 2 * p1) <= π ? 0 : 1;\n        if (p1 && d3_svg_arcSweep(x0, y0, x1, y1) === cw ^ l1) {\n          var h1 = (a0 + a1) / 2;\n          x0 = r1 * Math.cos(h1);\n          y0 = r1 * Math.sin(h1);\n          x1 = y1 = null;\n        }\n      } else {\n        x0 = y0 = 0;\n      }\n      if (r0) {\n        x2 = r0 * Math.cos(a1 - p0);\n        y2 = r0 * Math.sin(a1 - p0);\n        x3 = r0 * Math.cos(a0 + p0);\n        y3 = r0 * Math.sin(a0 + p0);\n        var l0 = Math.abs(a0 - a1 + 2 * p0) <= π ? 0 : 1;\n        if (p0 && d3_svg_arcSweep(x2, y2, x3, y3) === 1 - cw ^ l0) {\n          var h0 = (a0 + a1) / 2;\n          x2 = r0 * Math.cos(h0);\n          y2 = r0 * Math.sin(h0);\n          x3 = y3 = null;\n        }\n      } else {\n        x2 = y2 = 0;\n      }\n      if (da > ε && (rc = Math.min(Math.abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments))) > .001) {\n        cr = r0 < r1 ^ cw ? 0 : 1;\n        var rc1 = rc, rc0 = rc;\n        if (da < π) {\n          var oc = x3 == null ? [ x2, y2 ] : x1 == null ? [ x0, y0 ] : d3_geom_polygonIntersect([ x0, y0 ], [ x3, y3 ], [ x1, y1 ], [ x2, y2 ]), ax = x0 - oc[0], ay = y0 - oc[1], bx = x1 - oc[0], by = y1 - oc[1], kc = 1 / Math.sin(Math.acos((ax * bx + ay * by) / (Math.sqrt(ax * ax + ay * ay) * Math.sqrt(bx * bx + by * by))) / 2), lc = Math.sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n          rc0 = Math.min(rc, (r0 - lc) / (kc - 1));\n          rc1 = Math.min(rc, (r1 - lc) / (kc + 1));\n        }\n        if (x1 != null) {\n          var t30 = d3_svg_arcCornerTangents(x3 == null ? [ x2, y2 ] : [ x3, y3 ], [ x0, y0 ], r1, rc1, cw), t12 = d3_svg_arcCornerTangents([ x1, y1 ], [ x2, y2 ], r1, rc1, cw);\n          if (rc === rc1) {\n            path.push(\"M\", t30[0], \"A\", rc1, \",\", rc1, \" 0 0,\", cr, \" \", t30[1], \"A\", r1, \",\", r1, \" 0 \", 1 - cw ^ d3_svg_arcSweep(t30[1][0], t30[1][1], t12[1][0], t12[1][1]), \",\", cw, \" \", t12[1], \"A\", rc1, \",\", rc1, \" 0 0,\", cr, \" \", t12[0]);\n          } else {\n            path.push(\"M\", t30[0], \"A\", rc1, \",\", rc1, \" 0 1,\", cr, \" \", t12[0]);\n          }\n        } else {\n          path.push(\"M\", x0, \",\", y0);\n        }\n        if (x3 != null) {\n          var t03 = d3_svg_arcCornerTangents([ x0, y0 ], [ x3, y3 ], r0, -rc0, cw), t21 = d3_svg_arcCornerTangents([ x2, y2 ], x1 == null ? [ x0, y0 ] : [ x1, y1 ], r0, -rc0, cw);\n          if (rc === rc0) {\n            path.push(\"L\", t21[0], \"A\", rc0, \",\", rc0, \" 0 0,\", cr, \" \", t21[1], \"A\", r0, \",\", r0, \" 0 \", cw ^ d3_svg_arcSweep(t21[1][0], t21[1][1], t03[1][0], t03[1][1]), \",\", 1 - cw, \" \", t03[1], \"A\", rc0, \",\", rc0, \" 0 0,\", cr, \" \", t03[0]);\n          } else {\n            path.push(\"L\", t21[0], \"A\", rc0, \",\", rc0, \" 0 0,\", cr, \" \", t03[0]);\n          }\n        } else {\n          path.push(\"L\", x2, \",\", y2);\n        }\n      } else {\n        path.push(\"M\", x0, \",\", y0);\n        if (x1 != null) path.push(\"A\", r1, \",\", r1, \" 0 \", l1, \",\", cw, \" \", x1, \",\", y1);\n        path.push(\"L\", x2, \",\", y2);\n        if (x3 != null) path.push(\"A\", r0, \",\", r0, \" 0 \", l0, \",\", 1 - cw, \" \", x3, \",\", y3);\n      }\n      path.push(\"Z\");\n      return path.join(\"\");\n    }\n    function circleSegment(r1, cw) {\n      return \"M0,\" + r1 + \"A\" + r1 + \",\" + r1 + \" 0 1,\" + cw + \" 0,\" + -r1 + \"A\" + r1 + \",\" + r1 + \" 0 1,\" + cw + \" 0,\" + r1;\n    }\n    arc.innerRadius = function(v) {\n      if (!arguments.length) return innerRadius;\n      innerRadius = d3_functor(v);\n      return arc;\n    };\n    arc.outerRadius = function(v) {\n      if (!arguments.length) return outerRadius;\n      outerRadius = d3_functor(v);\n      return arc;\n    };\n    arc.cornerRadius = function(v) {\n      if (!arguments.length) return cornerRadius;\n      cornerRadius = d3_functor(v);\n      return arc;\n    };\n    arc.padRadius = function(v) {\n      if (!arguments.length) return padRadius;\n      padRadius = v == d3_svg_arcAuto ? d3_svg_arcAuto : d3_functor(v);\n      return arc;\n    };\n    arc.startAngle = function(v) {\n      if (!arguments.length) return startAngle;\n      startAngle = d3_functor(v);\n      return arc;\n    };\n    arc.endAngle = function(v) {\n      if (!arguments.length) return endAngle;\n      endAngle = d3_functor(v);\n      return arc;\n    };\n    arc.padAngle = function(v) {\n      if (!arguments.length) return padAngle;\n      padAngle = d3_functor(v);\n      return arc;\n    };\n    arc.centroid = function() {\n      var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2, a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - halfπ;\n      return [ Math.cos(a) * r, Math.sin(a) * r ];\n    };\n    return arc;\n  };\n  var d3_svg_arcAuto = \"auto\";\n  function d3_svg_arcInnerRadius(d) {\n    return d.innerRadius;\n  }\n  function d3_svg_arcOuterRadius(d) {\n    return d.outerRadius;\n  }\n  function d3_svg_arcStartAngle(d) {\n    return d.startAngle;\n  }\n  function d3_svg_arcEndAngle(d) {\n    return d.endAngle;\n  }\n  function d3_svg_arcPadAngle(d) {\n    return d && d.padAngle;\n  }\n  function d3_svg_arcSweep(x0, y0, x1, y1) {\n    return (x0 - x1) * y0 - (y0 - y1) * x0 > 0 ? 0 : 1;\n  }\n  function d3_svg_arcCornerTangents(p0, p1, r1, rc, cw) {\n    var x01 = p0[0] - p1[0], y01 = p0[1] - p1[1], lo = (cw ? rc : -rc) / Math.sqrt(x01 * x01 + y01 * y01), ox = lo * y01, oy = -lo * x01, x1 = p0[0] + ox, y1 = p0[1] + oy, x2 = p1[0] + ox, y2 = p1[1] + oy, x3 = (x1 + x2) / 2, y3 = (y1 + y2) / 2, dx = x2 - x1, dy = y2 - y1, d2 = dx * dx + dy * dy, r = r1 - rc, D = x1 * y2 - x2 * y1, d = (dy < 0 ? -1 : 1) * Math.sqrt(Math.max(0, r * r * d2 - D * D)), cx0 = (D * dy - dx * d) / d2, cy0 = (-D * dx - dy * d) / d2, cx1 = (D * dy + dx * d) / d2, cy1 = (-D * dx + dy * d) / d2, dx0 = cx0 - x3, dy0 = cy0 - y3, dx1 = cx1 - x3, dy1 = cy1 - y3;\n    if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n    return [ [ cx0 - ox, cy0 - oy ], [ cx0 * r1 / r, cy0 * r1 / r ] ];\n  }\n  function d3_svg_line(projection) {\n    var x = d3_geom_pointX, y = d3_geom_pointY, defined = d3_true, interpolate = d3_svg_lineLinear, interpolateKey = interpolate.key, tension = .7;\n    function line(data) {\n      var segments = [], points = [], i = -1, n = data.length, d, fx = d3_functor(x), fy = d3_functor(y);\n      function segment() {\n        segments.push(\"M\", interpolate(projection(points), tension));\n      }\n      while (++i < n) {\n        if (defined.call(this, d = data[i], i)) {\n          points.push([ +fx.call(this, d, i), +fy.call(this, d, i) ]);\n        } else if (points.length) {\n          segment();\n          points = [];\n        }\n      }\n      if (points.length) segment();\n      return segments.length ? segments.join(\"\") : null;\n    }\n    line.x = function(_) {\n      if (!arguments.length) return x;\n      x = _;\n      return line;\n    };\n    line.y = function(_) {\n      if (!arguments.length) return y;\n      y = _;\n      return line;\n    };\n    line.defined = function(_) {\n      if (!arguments.length) return defined;\n      defined = _;\n      return line;\n    };\n    line.interpolate = function(_) {\n      if (!arguments.length) return interpolateKey;\n      if (typeof _ === \"function\") interpolateKey = interpolate = _; else interpolateKey = (interpolate = d3_svg_lineInterpolators.get(_) || d3_svg_lineLinear).key;\n      return line;\n    };\n    line.tension = function(_) {\n      if (!arguments.length) return tension;\n      tension = _;\n      return line;\n    };\n    return line;\n  }\n  d3.svg.line = function() {\n    return d3_svg_line(d3_identity);\n  };\n  var d3_svg_lineInterpolators = d3.map({\n    linear: d3_svg_lineLinear,\n    \"linear-closed\": d3_svg_lineLinearClosed,\n    step: d3_svg_lineStep,\n    \"step-before\": d3_svg_lineStepBefore,\n    \"step-after\": d3_svg_lineStepAfter,\n    basis: d3_svg_lineBasis,\n    \"basis-open\": d3_svg_lineBasisOpen,\n    \"basis-closed\": d3_svg_lineBasisClosed,\n    bundle: d3_svg_lineBundle,\n    cardinal: d3_svg_lineCardinal,\n    \"cardinal-open\": d3_svg_lineCardinalOpen,\n    \"cardinal-closed\": d3_svg_lineCardinalClosed,\n    monotone: d3_svg_lineMonotone\n  });\n  d3_svg_lineInterpolators.forEach(function(key, value) {\n    value.key = key;\n    value.closed = /-closed$/.test(key);\n  });\n  function d3_svg_lineLinear(points) {\n    return points.length > 1 ? points.join(\"L\") : points + \"Z\";\n  }\n  function d3_svg_lineLinearClosed(points) {\n    return points.join(\"L\") + \"Z\";\n  }\n  function d3_svg_lineStep(points) {\n    var i = 0, n = points.length, p = points[0], path = [ p[0], \",\", p[1] ];\n    while (++i < n) path.push(\"H\", (p[0] + (p = points[i])[0]) / 2, \"V\", p[1]);\n    if (n > 1) path.push(\"H\", p[0]);\n    return path.join(\"\");\n  }\n  function d3_svg_lineStepBefore(points) {\n    var i = 0, n = points.length, p = points[0], path = [ p[0], \",\", p[1] ];\n    while (++i < n) path.push(\"V\", (p = points[i])[1], \"H\", p[0]);\n    return path.join(\"\");\n  }\n  function d3_svg_lineStepAfter(points) {\n    var i = 0, n = points.length, p = points[0], path = [ p[0], \",\", p[1] ];\n    while (++i < n) path.push(\"H\", (p = points[i])[0], \"V\", p[1]);\n    return path.join(\"\");\n  }\n  function d3_svg_lineCardinalOpen(points, tension) {\n    return points.length < 4 ? d3_svg_lineLinear(points) : points[1] + d3_svg_lineHermite(points.slice(1, -1), d3_svg_lineCardinalTangents(points, tension));\n  }\n  function d3_svg_lineCardinalClosed(points, tension) {\n    return points.length < 3 ? d3_svg_lineLinearClosed(points) : points[0] + d3_svg_lineHermite((points.push(points[0]), \n    points), d3_svg_lineCardinalTangents([ points[points.length - 2] ].concat(points, [ points[1] ]), tension));\n  }\n  function d3_svg_lineCardinal(points, tension) {\n    return points.length < 3 ? d3_svg_lineLinear(points) : points[0] + d3_svg_lineHermite(points, d3_svg_lineCardinalTangents(points, tension));\n  }\n  function d3_svg_lineHermite(points, tangents) {\n    if (tangents.length < 1 || points.length != tangents.length && points.length != tangents.length + 2) {\n      return d3_svg_lineLinear(points);\n    }\n    var quad = points.length != tangents.length, path = \"\", p0 = points[0], p = points[1], t0 = tangents[0], t = t0, pi = 1;\n    if (quad) {\n      path += \"Q\" + (p[0] - t0[0] * 2 / 3) + \",\" + (p[1] - t0[1] * 2 / 3) + \",\" + p[0] + \",\" + p[1];\n      p0 = points[1];\n      pi = 2;\n    }\n    if (tangents.length > 1) {\n      t = tangents[1];\n      p = points[pi];\n      pi++;\n      path += \"C\" + (p0[0] + t0[0]) + \",\" + (p0[1] + t0[1]) + \",\" + (p[0] - t[0]) + \",\" + (p[1] - t[1]) + \",\" + p[0] + \",\" + p[1];\n      for (var i = 2; i < tangents.length; i++, pi++) {\n        p = points[pi];\n        t = tangents[i];\n        path += \"S\" + (p[0] - t[0]) + \",\" + (p[1] - t[1]) + \",\" + p[0] + \",\" + p[1];\n      }\n    }\n    if (quad) {\n      var lp = points[pi];\n      path += \"Q\" + (p[0] + t[0] * 2 / 3) + \",\" + (p[1] + t[1] * 2 / 3) + \",\" + lp[0] + \",\" + lp[1];\n    }\n    return path;\n  }\n  function d3_svg_lineCardinalTangents(points, tension) {\n    var tangents = [], a = (1 - tension) / 2, p0, p1 = points[0], p2 = points[1], i = 1, n = points.length;\n    while (++i < n) {\n      p0 = p1;\n      p1 = p2;\n      p2 = points[i];\n      tangents.push([ a * (p2[0] - p0[0]), a * (p2[1] - p0[1]) ]);\n    }\n    return tangents;\n  }\n  function d3_svg_lineBasis(points) {\n    if (points.length < 3) return d3_svg_lineLinear(points);\n    var i = 1, n = points.length, pi = points[0], x0 = pi[0], y0 = pi[1], px = [ x0, x0, x0, (pi = points[1])[0] ], py = [ y0, y0, y0, pi[1] ], path = [ x0, \",\", y0, \"L\", d3_svg_lineDot4(d3_svg_lineBasisBezier3, px), \",\", d3_svg_lineDot4(d3_svg_lineBasisBezier3, py) ];\n    points.push(points[n - 1]);\n    while (++i <= n) {\n      pi = points[i];\n      px.shift();\n      px.push(pi[0]);\n      py.shift();\n      py.push(pi[1]);\n      d3_svg_lineBasisBezier(path, px, py);\n    }\n    points.pop();\n    path.push(\"L\", pi);\n    return path.join(\"\");\n  }\n  function d3_svg_lineBasisOpen(points) {\n    if (points.length < 4) return d3_svg_lineLinear(points);\n    var path = [], i = -1, n = points.length, pi, px = [ 0 ], py = [ 0 ];\n    while (++i < 3) {\n      pi = points[i];\n      px.push(pi[0]);\n      py.push(pi[1]);\n    }\n    path.push(d3_svg_lineDot4(d3_svg_lineBasisBezier3, px) + \",\" + d3_svg_lineDot4(d3_svg_lineBasisBezier3, py));\n    --i;\n    while (++i < n) {\n      pi = points[i];\n      px.shift();\n      px.push(pi[0]);\n      py.shift();\n      py.push(pi[1]);\n      d3_svg_lineBasisBezier(path, px, py);\n    }\n    return path.join(\"\");\n  }\n  function d3_svg_lineBasisClosed(points) {\n    var path, i = -1, n = points.length, m = n + 4, pi, px = [], py = [];\n    while (++i < 4) {\n      pi = points[i % n];\n      px.push(pi[0]);\n      py.push(pi[1]);\n    }\n    path = [ d3_svg_lineDot4(d3_svg_lineBasisBezier3, px), \",\", d3_svg_lineDot4(d3_svg_lineBasisBezier3, py) ];\n    --i;\n    while (++i < m) {\n      pi = points[i % n];\n      px.shift();\n      px.push(pi[0]);\n      py.shift();\n      py.push(pi[1]);\n      d3_svg_lineBasisBezier(path, px, py);\n    }\n    return path.join(\"\");\n  }\n  function d3_svg_lineBundle(points, tension) {\n    var n = points.length - 1;\n    if (n) {\n      var x0 = points[0][0], y0 = points[0][1], dx = points[n][0] - x0, dy = points[n][1] - y0, i = -1, p, t;\n      while (++i <= n) {\n        p = points[i];\n        t = i / n;\n        p[0] = tension * p[0] + (1 - tension) * (x0 + t * dx);\n        p[1] = tension * p[1] + (1 - tension) * (y0 + t * dy);\n      }\n    }\n    return d3_svg_lineBasis(points);\n  }\n  function d3_svg_lineDot4(a, b) {\n    return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];\n  }\n  var d3_svg_lineBasisBezier1 = [ 0, 2 / 3, 1 / 3, 0 ], d3_svg_lineBasisBezier2 = [ 0, 1 / 3, 2 / 3, 0 ], d3_svg_lineBasisBezier3 = [ 0, 1 / 6, 2 / 3, 1 / 6 ];\n  function d3_svg_lineBasisBezier(path, x, y) {\n    path.push(\"C\", d3_svg_lineDot4(d3_svg_lineBasisBezier1, x), \",\", d3_svg_lineDot4(d3_svg_lineBasisBezier1, y), \",\", d3_svg_lineDot4(d3_svg_lineBasisBezier2, x), \",\", d3_svg_lineDot4(d3_svg_lineBasisBezier2, y), \",\", d3_svg_lineDot4(d3_svg_lineBasisBezier3, x), \",\", d3_svg_lineDot4(d3_svg_lineBasisBezier3, y));\n  }\n  function d3_svg_lineSlope(p0, p1) {\n    return (p1[1] - p0[1]) / (p1[0] - p0[0]);\n  }\n  function d3_svg_lineFiniteDifferences(points) {\n    var i = 0, j = points.length - 1, m = [], p0 = points[0], p1 = points[1], d = m[0] = d3_svg_lineSlope(p0, p1);\n    while (++i < j) {\n      m[i] = (d + (d = d3_svg_lineSlope(p0 = p1, p1 = points[i + 1]))) / 2;\n    }\n    m[i] = d;\n    return m;\n  }\n  function d3_svg_lineMonotoneTangents(points) {\n    var tangents = [], d, a, b, s, m = d3_svg_lineFiniteDifferences(points), i = -1, j = points.length - 1;\n    while (++i < j) {\n      d = d3_svg_lineSlope(points[i], points[i + 1]);\n      if (abs(d) < ε) {\n        m[i] = m[i + 1] = 0;\n      } else {\n        a = m[i] / d;\n        b = m[i + 1] / d;\n        s = a * a + b * b;\n        if (s > 9) {\n          s = d * 3 / Math.sqrt(s);\n          m[i] = s * a;\n          m[i + 1] = s * b;\n        }\n      }\n    }\n    i = -1;\n    while (++i <= j) {\n      s = (points[Math.min(j, i + 1)][0] - points[Math.max(0, i - 1)][0]) / (6 * (1 + m[i] * m[i]));\n      tangents.push([ s || 0, m[i] * s || 0 ]);\n    }\n    return tangents;\n  }\n  function d3_svg_lineMonotone(points) {\n    return points.length < 3 ? d3_svg_lineLinear(points) : points[0] + d3_svg_lineHermite(points, d3_svg_lineMonotoneTangents(points));\n  }\n  d3.svg.line.radial = function() {\n    var line = d3_svg_line(d3_svg_lineRadial);\n    line.radius = line.x, delete line.x;\n    line.angle = line.y, delete line.y;\n    return line;\n  };\n  function d3_svg_lineRadial(points) {\n    var point, i = -1, n = points.length, r, a;\n    while (++i < n) {\n      point = points[i];\n      r = point[0];\n      a = point[1] - halfπ;\n      point[0] = r * Math.cos(a);\n      point[1] = r * Math.sin(a);\n    }\n    return points;\n  }\n  function d3_svg_area(projection) {\n    var x0 = d3_geom_pointX, x1 = d3_geom_pointX, y0 = 0, y1 = d3_geom_pointY, defined = d3_true, interpolate = d3_svg_lineLinear, interpolateKey = interpolate.key, interpolateReverse = interpolate, L = \"L\", tension = .7;\n    function area(data) {\n      var segments = [], points0 = [], points1 = [], i = -1, n = data.length, d, fx0 = d3_functor(x0), fy0 = d3_functor(y0), fx1 = x0 === x1 ? function() {\n        return x;\n      } : d3_functor(x1), fy1 = y0 === y1 ? function() {\n        return y;\n      } : d3_functor(y1), x, y;\n      function segment() {\n        segments.push(\"M\", interpolate(projection(points1), tension), L, interpolateReverse(projection(points0.reverse()), tension), \"Z\");\n      }\n      while (++i < n) {\n        if (defined.call(this, d = data[i], i)) {\n          points0.push([ x = +fx0.call(this, d, i), y = +fy0.call(this, d, i) ]);\n          points1.push([ +fx1.call(this, d, i), +fy1.call(this, d, i) ]);\n        } else if (points0.length) {\n          segment();\n          points0 = [];\n          points1 = [];\n        }\n      }\n      if (points0.length) segment();\n      return segments.length ? segments.join(\"\") : null;\n    }\n    area.x = function(_) {\n      if (!arguments.length) return x1;\n      x0 = x1 = _;\n      return area;\n    };\n    area.x0 = function(_) {\n      if (!arguments.length) return x0;\n      x0 = _;\n      return area;\n    };\n    area.x1 = function(_) {\n      if (!arguments.length) return x1;\n      x1 = _;\n      return area;\n    };\n    area.y = function(_) {\n      if (!arguments.length) return y1;\n      y0 = y1 = _;\n      return area;\n    };\n    area.y0 = function(_) {\n      if (!arguments.length) return y0;\n      y0 = _;\n      return area;\n    };\n    area.y1 = function(_) {\n      if (!arguments.length) return y1;\n      y1 = _;\n      return area;\n    };\n    area.defined = function(_) {\n      if (!arguments.length) return defined;\n      defined = _;\n      return area;\n    };\n    area.interpolate = function(_) {\n      if (!arguments.length) return interpolateKey;\n      if (typeof _ === \"function\") interpolateKey = interpolate = _; else interpolateKey = (interpolate = d3_svg_lineInterpolators.get(_) || d3_svg_lineLinear).key;\n      interpolateReverse = interpolate.reverse || interpolate;\n      L = interpolate.closed ? \"M\" : \"L\";\n      return area;\n    };\n    area.tension = function(_) {\n      if (!arguments.length) return tension;\n      tension = _;\n      return area;\n    };\n    return area;\n  }\n  d3_svg_lineStepBefore.reverse = d3_svg_lineStepAfter;\n  d3_svg_lineStepAfter.reverse = d3_svg_lineStepBefore;\n  d3.svg.area = function() {\n    return d3_svg_area(d3_identity);\n  };\n  d3.svg.area.radial = function() {\n    var area = d3_svg_area(d3_svg_lineRadial);\n    area.radius = area.x, delete area.x;\n    area.innerRadius = area.x0, delete area.x0;\n    area.outerRadius = area.x1, delete area.x1;\n    area.angle = area.y, delete area.y;\n    area.startAngle = area.y0, delete area.y0;\n    area.endAngle = area.y1, delete area.y1;\n    return area;\n  };\n  d3.svg.chord = function() {\n    var source = d3_source, target = d3_target, radius = d3_svg_chordRadius, startAngle = d3_svg_arcStartAngle, endAngle = d3_svg_arcEndAngle;\n    function chord(d, i) {\n      var s = subgroup(this, source, d, i), t = subgroup(this, target, d, i);\n      return \"M\" + s.p0 + arc(s.r, s.p1, s.a1 - s.a0) + (equals(s, t) ? curve(s.r, s.p1, s.r, s.p0) : curve(s.r, s.p1, t.r, t.p0) + arc(t.r, t.p1, t.a1 - t.a0) + curve(t.r, t.p1, s.r, s.p0)) + \"Z\";\n    }\n    function subgroup(self, f, d, i) {\n      var subgroup = f.call(self, d, i), r = radius.call(self, subgroup, i), a0 = startAngle.call(self, subgroup, i) - halfπ, a1 = endAngle.call(self, subgroup, i) - halfπ;\n      return {\n        r: r,\n        a0: a0,\n        a1: a1,\n        p0: [ r * Math.cos(a0), r * Math.sin(a0) ],\n        p1: [ r * Math.cos(a1), r * Math.sin(a1) ]\n      };\n    }\n    function equals(a, b) {\n      return a.a0 == b.a0 && a.a1 == b.a1;\n    }\n    function arc(r, p, a) {\n      return \"A\" + r + \",\" + r + \" 0 \" + +(a > π) + \",1 \" + p;\n    }\n    function curve(r0, p0, r1, p1) {\n      return \"Q 0,0 \" + p1;\n    }\n    chord.radius = function(v) {\n      if (!arguments.length) return radius;\n      radius = d3_functor(v);\n      return chord;\n    };\n    chord.source = function(v) {\n      if (!arguments.length) return source;\n      source = d3_functor(v);\n      return chord;\n    };\n    chord.target = function(v) {\n      if (!arguments.length) return target;\n      target = d3_functor(v);\n      return chord;\n    };\n    chord.startAngle = function(v) {\n      if (!arguments.length) return startAngle;\n      startAngle = d3_functor(v);\n      return chord;\n    };\n    chord.endAngle = function(v) {\n      if (!arguments.length) return endAngle;\n      endAngle = d3_functor(v);\n      return chord;\n    };\n    return chord;\n  };\n  function d3_svg_chordRadius(d) {\n    return d.radius;\n  }\n  d3.svg.diagonal = function() {\n    var source = d3_source, target = d3_target, projection = d3_svg_diagonalProjection;\n    function diagonal(d, i) {\n      var p0 = source.call(this, d, i), p3 = target.call(this, d, i), m = (p0.y + p3.y) / 2, p = [ p0, {\n        x: p0.x,\n        y: m\n      }, {\n        x: p3.x,\n        y: m\n      }, p3 ];\n      p = p.map(projection);\n      return \"M\" + p[0] + \"C\" + p[1] + \" \" + p[2] + \" \" + p[3];\n    }\n    diagonal.source = function(x) {\n      if (!arguments.length) return source;\n      source = d3_functor(x);\n      return diagonal;\n    };\n    diagonal.target = function(x) {\n      if (!arguments.length) return target;\n      target = d3_functor(x);\n      return diagonal;\n    };\n    diagonal.projection = function(x) {\n      if (!arguments.length) return projection;\n      projection = x;\n      return diagonal;\n    };\n    return diagonal;\n  };\n  function d3_svg_diagonalProjection(d) {\n    return [ d.x, d.y ];\n  }\n  d3.svg.diagonal.radial = function() {\n    var diagonal = d3.svg.diagonal(), projection = d3_svg_diagonalProjection, projection_ = diagonal.projection;\n    diagonal.projection = function(x) {\n      return arguments.length ? projection_(d3_svg_diagonalRadialProjection(projection = x)) : projection;\n    };\n    return diagonal;\n  };\n  function d3_svg_diagonalRadialProjection(projection) {\n    return function() {\n      var d = projection.apply(this, arguments), r = d[0], a = d[1] - halfπ;\n      return [ r * Math.cos(a), r * Math.sin(a) ];\n    };\n  }\n  d3.svg.symbol = function() {\n    var type = d3_svg_symbolType, size = d3_svg_symbolSize;\n    function symbol(d, i) {\n      return (d3_svg_symbols.get(type.call(this, d, i)) || d3_svg_symbolCircle)(size.call(this, d, i));\n    }\n    symbol.type = function(x) {\n      if (!arguments.length) return type;\n      type = d3_functor(x);\n      return symbol;\n    };\n    symbol.size = function(x) {\n      if (!arguments.length) return size;\n      size = d3_functor(x);\n      return symbol;\n    };\n    return symbol;\n  };\n  function d3_svg_symbolSize() {\n    return 64;\n  }\n  function d3_svg_symbolType() {\n    return \"circle\";\n  }\n  function d3_svg_symbolCircle(size) {\n    var r = Math.sqrt(size / π);\n    return \"M0,\" + r + \"A\" + r + \",\" + r + \" 0 1,1 0,\" + -r + \"A\" + r + \",\" + r + \" 0 1,1 0,\" + r + \"Z\";\n  }\n  var d3_svg_symbols = d3.map({\n    circle: d3_svg_symbolCircle,\n    cross: function(size) {\n      var r = Math.sqrt(size / 5) / 2;\n      return \"M\" + -3 * r + \",\" + -r + \"H\" + -r + \"V\" + -3 * r + \"H\" + r + \"V\" + -r + \"H\" + 3 * r + \"V\" + r + \"H\" + r + \"V\" + 3 * r + \"H\" + -r + \"V\" + r + \"H\" + -3 * r + \"Z\";\n    },\n    diamond: function(size) {\n      var ry = Math.sqrt(size / (2 * d3_svg_symbolTan30)), rx = ry * d3_svg_symbolTan30;\n      return \"M0,\" + -ry + \"L\" + rx + \",0\" + \" 0,\" + ry + \" \" + -rx + \",0\" + \"Z\";\n    },\n    square: function(size) {\n      var r = Math.sqrt(size) / 2;\n      return \"M\" + -r + \",\" + -r + \"L\" + r + \",\" + -r + \" \" + r + \",\" + r + \" \" + -r + \",\" + r + \"Z\";\n    },\n    \"triangle-down\": function(size) {\n      var rx = Math.sqrt(size / d3_svg_symbolSqrt3), ry = rx * d3_svg_symbolSqrt3 / 2;\n      return \"M0,\" + ry + \"L\" + rx + \",\" + -ry + \" \" + -rx + \",\" + -ry + \"Z\";\n    },\n    \"triangle-up\": function(size) {\n      var rx = Math.sqrt(size / d3_svg_symbolSqrt3), ry = rx * d3_svg_symbolSqrt3 / 2;\n      return \"M0,\" + -ry + \"L\" + rx + \",\" + ry + \" \" + -rx + \",\" + ry + \"Z\";\n    }\n  });\n  d3.svg.symbolTypes = d3_svg_symbols.keys();\n  var d3_svg_symbolSqrt3 = Math.sqrt(3), d3_svg_symbolTan30 = Math.tan(30 * d3_radians);\n  d3_selectionPrototype.transition = function(name) {\n    var id = d3_transitionInheritId || ++d3_transitionId, ns = d3_transitionNamespace(name), subgroups = [], subgroup, node, transition = d3_transitionInherit || {\n      time: Date.now(),\n      ease: d3_ease_cubicInOut,\n      delay: 0,\n      duration: 250\n    };\n    for (var j = -1, m = this.length; ++j < m; ) {\n      subgroups.push(subgroup = []);\n      for (var group = this[j], i = -1, n = group.length; ++i < n; ) {\n        if (node = group[i]) d3_transitionNode(node, i, ns, id, transition);\n        subgroup.push(node);\n      }\n    }\n    return d3_transition(subgroups, ns, id);\n  };\n  d3_selectionPrototype.interrupt = function(name) {\n    return this.each(name == null ? d3_selection_interrupt : d3_selection_interruptNS(d3_transitionNamespace(name)));\n  };\n  var d3_selection_interrupt = d3_selection_interruptNS(d3_transitionNamespace());\n  function d3_selection_interruptNS(ns) {\n    return function() {\n      var lock, activeId, active;\n      if ((lock = this[ns]) && (active = lock[activeId = lock.active])) {\n        active.timer.c = null;\n        active.timer.t = NaN;\n        if (--lock.count) delete lock[activeId]; else delete this[ns];\n        lock.active += .5;\n        active.event && active.event.interrupt.call(this, this.__data__, active.index);\n      }\n    };\n  }\n  function d3_transition(groups, ns, id) {\n    d3_subclass(groups, d3_transitionPrototype);\n    groups.namespace = ns;\n    groups.id = id;\n    return groups;\n  }\n  var d3_transitionPrototype = [], d3_transitionId = 0, d3_transitionInheritId, d3_transitionInherit;\n  d3_transitionPrototype.call = d3_selectionPrototype.call;\n  d3_transitionPrototype.empty = d3_selectionPrototype.empty;\n  d3_transitionPrototype.node = d3_selectionPrototype.node;\n  d3_transitionPrototype.size = d3_selectionPrototype.size;\n  d3.transition = function(selection, name) {\n    return selection && selection.transition ? d3_transitionInheritId ? selection.transition(name) : selection : d3.selection().transition(selection);\n  };\n  d3.transition.prototype = d3_transitionPrototype;\n  d3_transitionPrototype.select = function(selector) {\n    var id = this.id, ns = this.namespace, subgroups = [], subgroup, subnode, node;\n    selector = d3_selection_selector(selector);\n    for (var j = -1, m = this.length; ++j < m; ) {\n      subgroups.push(subgroup = []);\n      for (var group = this[j], i = -1, n = group.length; ++i < n; ) {\n        if ((node = group[i]) && (subnode = selector.call(node, node.__data__, i, j))) {\n          if (\"__data__\" in node) subnode.__data__ = node.__data__;\n          d3_transitionNode(subnode, i, ns, id, node[ns][id]);\n          subgroup.push(subnode);\n        } else {\n          subgroup.push(null);\n        }\n      }\n    }\n    return d3_transition(subgroups, ns, id);\n  };\n  d3_transitionPrototype.selectAll = function(selector) {\n    var id = this.id, ns = this.namespace, subgroups = [], subgroup, subnodes, node, subnode, transition;\n    selector = d3_selection_selectorAll(selector);\n    for (var j = -1, m = this.length; ++j < m; ) {\n      for (var group = this[j], i = -1, n = group.length; ++i < n; ) {\n        if (node = group[i]) {\n          transition = node[ns][id];\n          subnodes = selector.call(node, node.__data__, i, j);\n          subgroups.push(subgroup = []);\n          for (var k = -1, o = subnodes.length; ++k < o; ) {\n            if (subnode = subnodes[k]) d3_transitionNode(subnode, k, ns, id, transition);\n            subgroup.push(subnode);\n          }\n        }\n      }\n    }\n    return d3_transition(subgroups, ns, id);\n  };\n  d3_transitionPrototype.filter = function(filter) {\n    var subgroups = [], subgroup, group, node;\n    if (typeof filter !== \"function\") filter = d3_selection_filter(filter);\n    for (var j = 0, m = this.length; j < m; j++) {\n      subgroups.push(subgroup = []);\n      for (var group = this[j], i = 0, n = group.length; i < n; i++) {\n        if ((node = group[i]) && filter.call(node, node.__data__, i, j)) {\n          subgroup.push(node);\n        }\n      }\n    }\n    return d3_transition(subgroups, this.namespace, this.id);\n  };\n  d3_transitionPrototype.tween = function(name, tween) {\n    var id = this.id, ns = this.namespace;\n    if (arguments.length < 2) return this.node()[ns][id].tween.get(name);\n    return d3_selection_each(this, tween == null ? function(node) {\n      node[ns][id].tween.remove(name);\n    } : function(node) {\n      node[ns][id].tween.set(name, tween);\n    });\n  };\n  function d3_transition_tween(groups, name, value, tween) {\n    var id = groups.id, ns = groups.namespace;\n    return d3_selection_each(groups, typeof value === \"function\" ? function(node, i, j) {\n      node[ns][id].tween.set(name, tween(value.call(node, node.__data__, i, j)));\n    } : (value = tween(value), function(node) {\n      node[ns][id].tween.set(name, value);\n    }));\n  }\n  d3_transitionPrototype.attr = function(nameNS, value) {\n    if (arguments.length < 2) {\n      for (value in nameNS) this.attr(value, nameNS[value]);\n      return this;\n    }\n    var interpolate = nameNS == \"transform\" ? d3_interpolateTransform : d3_interpolate, name = d3.ns.qualify(nameNS);\n    function attrNull() {\n      this.removeAttribute(name);\n    }\n    function attrNullNS() {\n      this.removeAttributeNS(name.space, name.local);\n    }\n    function attrTween(b) {\n      return b == null ? attrNull : (b += \"\", function() {\n        var a = this.getAttribute(name), i;\n        return a !== b && (i = interpolate(a, b), function(t) {\n          this.setAttribute(name, i(t));\n        });\n      });\n    }\n    function attrTweenNS(b) {\n      return b == null ? attrNullNS : (b += \"\", function() {\n        var a = this.getAttributeNS(name.space, name.local), i;\n        return a !== b && (i = interpolate(a, b), function(t) {\n          this.setAttributeNS(name.space, name.local, i(t));\n        });\n      });\n    }\n    return d3_transition_tween(this, \"attr.\" + nameNS, value, name.local ? attrTweenNS : attrTween);\n  };\n  d3_transitionPrototype.attrTween = function(nameNS, tween) {\n    var name = d3.ns.qualify(nameNS);\n    function attrTween(d, i) {\n      var f = tween.call(this, d, i, this.getAttribute(name));\n      return f && function(t) {\n        this.setAttribute(name, f(t));\n      };\n    }\n    function attrTweenNS(d, i) {\n      var f = tween.call(this, d, i, this.getAttributeNS(name.space, name.local));\n      return f && function(t) {\n        this.setAttributeNS(name.space, name.local, f(t));\n      };\n    }\n    return this.tween(\"attr.\" + nameNS, name.local ? attrTweenNS : attrTween);\n  };\n  d3_transitionPrototype.style = function(name, value, priority) {\n    var n = arguments.length;\n    if (n < 3) {\n      if (typeof name !== \"string\") {\n        if (n < 2) value = \"\";\n        for (priority in name) this.style(priority, name[priority], value);\n        return this;\n      }\n      priority = \"\";\n    }\n    function styleNull() {\n      this.style.removeProperty(name);\n    }\n    function styleString(b) {\n      return b == null ? styleNull : (b += \"\", function() {\n        var a = d3_window(this).getComputedStyle(this, null).getPropertyValue(name), i;\n        return a !== b && (i = d3_interpolate(a, b), function(t) {\n          this.style.setProperty(name, i(t), priority);\n        });\n      });\n    }\n    return d3_transition_tween(this, \"style.\" + name, value, styleString);\n  };\n  d3_transitionPrototype.styleTween = function(name, tween, priority) {\n    if (arguments.length < 3) priority = \"\";\n    function styleTween(d, i) {\n      var f = tween.call(this, d, i, d3_window(this).getComputedStyle(this, null).getPropertyValue(name));\n      return f && function(t) {\n        this.style.setProperty(name, f(t), priority);\n      };\n    }\n    return this.tween(\"style.\" + name, styleTween);\n  };\n  d3_transitionPrototype.text = function(value) {\n    return d3_transition_tween(this, \"text\", value, d3_transition_text);\n  };\n  function d3_transition_text(b) {\n    if (b == null) b = \"\";\n    return function() {\n      this.textContent = b;\n    };\n  }\n  d3_transitionPrototype.remove = function() {\n    var ns = this.namespace;\n    return this.each(\"end.transition\", function() {\n      var p;\n      if (this[ns].count < 2 && (p = this.parentNode)) p.removeChild(this);\n    });\n  };\n  d3_transitionPrototype.ease = function(value) {\n    var id = this.id, ns = this.namespace;\n    if (arguments.length < 1) return this.node()[ns][id].ease;\n    if (typeof value !== \"function\") value = d3.ease.apply(d3, arguments);\n    return d3_selection_each(this, function(node) {\n      node[ns][id].ease = value;\n    });\n  };\n  d3_transitionPrototype.delay = function(value) {\n    var id = this.id, ns = this.namespace;\n    if (arguments.length < 1) return this.node()[ns][id].delay;\n    return d3_selection_each(this, typeof value === \"function\" ? function(node, i, j) {\n      node[ns][id].delay = +value.call(node, node.__data__, i, j);\n    } : (value = +value, function(node) {\n      node[ns][id].delay = value;\n    }));\n  };\n  d3_transitionPrototype.duration = function(value) {\n    var id = this.id, ns = this.namespace;\n    if (arguments.length < 1) return this.node()[ns][id].duration;\n    return d3_selection_each(this, typeof value === \"function\" ? function(node, i, j) {\n      node[ns][id].duration = Math.max(1, value.call(node, node.__data__, i, j));\n    } : (value = Math.max(1, value), function(node) {\n      node[ns][id].duration = value;\n    }));\n  };\n  d3_transitionPrototype.each = function(type, listener) {\n    var id = this.id, ns = this.namespace;\n    if (arguments.length < 2) {\n      var inherit = d3_transitionInherit, inheritId = d3_transitionInheritId;\n      try {\n        d3_transitionInheritId = id;\n        d3_selection_each(this, function(node, i, j) {\n          d3_transitionInherit = node[ns][id];\n          type.call(node, node.__data__, i, j);\n        });\n      } finally {\n        d3_transitionInherit = inherit;\n        d3_transitionInheritId = inheritId;\n      }\n    } else {\n      d3_selection_each(this, function(node) {\n        var transition = node[ns][id];\n        (transition.event || (transition.event = d3.dispatch(\"start\", \"end\", \"interrupt\"))).on(type, listener);\n      });\n    }\n    return this;\n  };\n  d3_transitionPrototype.transition = function() {\n    var id0 = this.id, id1 = ++d3_transitionId, ns = this.namespace, subgroups = [], subgroup, group, node, transition;\n    for (var j = 0, m = this.length; j < m; j++) {\n      subgroups.push(subgroup = []);\n      for (var group = this[j], i = 0, n = group.length; i < n; i++) {\n        if (node = group[i]) {\n          transition = node[ns][id0];\n          d3_transitionNode(node, i, ns, id1, {\n            time: transition.time,\n            ease: transition.ease,\n            delay: transition.delay + transition.duration,\n            duration: transition.duration\n          });\n        }\n        subgroup.push(node);\n      }\n    }\n    return d3_transition(subgroups, ns, id1);\n  };\n  function d3_transitionNamespace(name) {\n    return name == null ? \"__transition__\" : \"__transition_\" + name + \"__\";\n  }\n  function d3_transitionNode(node, i, ns, id, inherit) {\n    var lock = node[ns] || (node[ns] = {\n      active: 0,\n      count: 0\n    }), transition = lock[id], time, timer, duration, ease, tweens;\n    function schedule(elapsed) {\n      var delay = transition.delay;\n      timer.t = delay + time;\n      if (delay <= elapsed) return start(elapsed - delay);\n      timer.c = start;\n    }\n    function start(elapsed) {\n      var activeId = lock.active, active = lock[activeId];\n      if (active) {\n        active.timer.c = null;\n        active.timer.t = NaN;\n        --lock.count;\n        delete lock[activeId];\n        active.event && active.event.interrupt.call(node, node.__data__, active.index);\n      }\n      for (var cancelId in lock) {\n        if (+cancelId < id) {\n          var cancel = lock[cancelId];\n          cancel.timer.c = null;\n          cancel.timer.t = NaN;\n          --lock.count;\n          delete lock[cancelId];\n        }\n      }\n      timer.c = tick;\n      d3_timer(function() {\n        if (timer.c && tick(elapsed || 1)) {\n          timer.c = null;\n          timer.t = NaN;\n        }\n        return 1;\n      }, 0, time);\n      lock.active = id;\n      transition.event && transition.event.start.call(node, node.__data__, i);\n      tweens = [];\n      transition.tween.forEach(function(key, value) {\n        if (value = value.call(node, node.__data__, i)) {\n          tweens.push(value);\n        }\n      });\n      ease = transition.ease;\n      duration = transition.duration;\n    }\n    function tick(elapsed) {\n      var t = elapsed / duration, e = ease(t), n = tweens.length;\n      while (n > 0) {\n        tweens[--n].call(node, e);\n      }\n      if (t >= 1) {\n        transition.event && transition.event.end.call(node, node.__data__, i);\n        if (--lock.count) delete lock[id]; else delete node[ns];\n        return 1;\n      }\n    }\n    if (!transition) {\n      time = inherit.time;\n      timer = d3_timer(schedule, 0, time);\n      transition = lock[id] = {\n        tween: new d3_Map(),\n        time: time,\n        timer: timer,\n        delay: inherit.delay,\n        duration: inherit.duration,\n        ease: inherit.ease,\n        index: i\n      };\n      inherit = null;\n      ++lock.count;\n    }\n  }\n  d3.svg.axis = function() {\n    var scale = d3.scale.linear(), orient = d3_svg_axisDefaultOrient, innerTickSize = 6, outerTickSize = 6, tickPadding = 3, tickArguments_ = [ 10 ], tickValues = null, tickFormat_;\n    function axis(g) {\n      g.each(function() {\n        var g = d3.select(this);\n        var scale0 = this.__chart__ || scale, scale1 = this.__chart__ = scale.copy();\n        var ticks = tickValues == null ? scale1.ticks ? scale1.ticks.apply(scale1, tickArguments_) : scale1.domain() : tickValues, tickFormat = tickFormat_ == null ? scale1.tickFormat ? scale1.tickFormat.apply(scale1, tickArguments_) : d3_identity : tickFormat_, tick = g.selectAll(\".tick\").data(ticks, scale1), tickEnter = tick.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", ε), tickExit = d3.transition(tick.exit()).style(\"opacity\", ε).remove(), tickUpdate = d3.transition(tick.order()).style(\"opacity\", 1), tickSpacing = Math.max(innerTickSize, 0) + tickPadding, tickTransform;\n        var range = d3_scaleRange(scale1), path = g.selectAll(\".domain\").data([ 0 ]), pathUpdate = (path.enter().append(\"path\").attr(\"class\", \"domain\"), \n        d3.transition(path));\n        tickEnter.append(\"line\");\n        tickEnter.append(\"text\");\n        var lineEnter = tickEnter.select(\"line\"), lineUpdate = tickUpdate.select(\"line\"), text = tick.select(\"text\").text(tickFormat), textEnter = tickEnter.select(\"text\"), textUpdate = tickUpdate.select(\"text\"), sign = orient === \"top\" || orient === \"left\" ? -1 : 1, x1, x2, y1, y2;\n        if (orient === \"bottom\" || orient === \"top\") {\n          tickTransform = d3_svg_axisX, x1 = \"x\", y1 = \"y\", x2 = \"x2\", y2 = \"y2\";\n          text.attr(\"dy\", sign < 0 ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\");\n          pathUpdate.attr(\"d\", \"M\" + range[0] + \",\" + sign * outerTickSize + \"V0H\" + range[1] + \"V\" + sign * outerTickSize);\n        } else {\n          tickTransform = d3_svg_axisY, x1 = \"y\", y1 = \"x\", x2 = \"y2\", y2 = \"x2\";\n          text.attr(\"dy\", \".32em\").style(\"text-anchor\", sign < 0 ? \"end\" : \"start\");\n          pathUpdate.attr(\"d\", \"M\" + sign * outerTickSize + \",\" + range[0] + \"H0V\" + range[1] + \"H\" + sign * outerTickSize);\n        }\n        lineEnter.attr(y2, sign * innerTickSize);\n        textEnter.attr(y1, sign * tickSpacing);\n        lineUpdate.attr(x2, 0).attr(y2, sign * innerTickSize);\n        textUpdate.attr(x1, 0).attr(y1, sign * tickSpacing);\n        if (scale1.rangeBand) {\n          var x = scale1, dx = x.rangeBand() / 2;\n          scale0 = scale1 = function(d) {\n            return x(d) + dx;\n          };\n        } else if (scale0.rangeBand) {\n          scale0 = scale1;\n        } else {\n          tickExit.call(tickTransform, scale1, scale0);\n        }\n        tickEnter.call(tickTransform, scale0, scale1);\n        tickUpdate.call(tickTransform, scale1, scale1);\n      });\n    }\n    axis.scale = function(x) {\n      if (!arguments.length) return scale;\n      scale = x;\n      return axis;\n    };\n    axis.orient = function(x) {\n      if (!arguments.length) return orient;\n      orient = x in d3_svg_axisOrients ? x + \"\" : d3_svg_axisDefaultOrient;\n      return axis;\n    };\n    axis.ticks = function() {\n      if (!arguments.length) return tickArguments_;\n      tickArguments_ = d3_array(arguments);\n      return axis;\n    };\n    axis.tickValues = function(x) {\n      if (!arguments.length) return tickValues;\n      tickValues = x;\n      return axis;\n    };\n    axis.tickFormat = function(x) {\n      if (!arguments.length) return tickFormat_;\n      tickFormat_ = x;\n      return axis;\n    };\n    axis.tickSize = function(x) {\n      var n = arguments.length;\n      if (!n) return innerTickSize;\n      innerTickSize = +x;\n      outerTickSize = +arguments[n - 1];\n      return axis;\n    };\n    axis.innerTickSize = function(x) {\n      if (!arguments.length) return innerTickSize;\n      innerTickSize = +x;\n      return axis;\n    };\n    axis.outerTickSize = function(x) {\n      if (!arguments.length) return outerTickSize;\n      outerTickSize = +x;\n      return axis;\n    };\n    axis.tickPadding = function(x) {\n      if (!arguments.length) return tickPadding;\n      tickPadding = +x;\n      return axis;\n    };\n    axis.tickSubdivide = function() {\n      return arguments.length && axis;\n    };\n    return axis;\n  };\n  var d3_svg_axisDefaultOrient = \"bottom\", d3_svg_axisOrients = {\n    top: 1,\n    right: 1,\n    bottom: 1,\n    left: 1\n  };\n  function d3_svg_axisX(selection, x0, x1) {\n    selection.attr(\"transform\", function(d) {\n      var v0 = x0(d);\n      return \"translate(\" + (isFinite(v0) ? v0 : x1(d)) + \",0)\";\n    });\n  }\n  function d3_svg_axisY(selection, y0, y1) {\n    selection.attr(\"transform\", function(d) {\n      var v0 = y0(d);\n      return \"translate(0,\" + (isFinite(v0) ? v0 : y1(d)) + \")\";\n    });\n  }\n  d3.svg.brush = function() {\n    var event = d3_eventDispatch(brush, \"brushstart\", \"brush\", \"brushend\"), x = null, y = null, xExtent = [ 0, 0 ], yExtent = [ 0, 0 ], xExtentDomain, yExtentDomain, xClamp = true, yClamp = true, resizes = d3_svg_brushResizes[0];\n    function brush(g) {\n      g.each(function() {\n        var g = d3.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", brushstart).on(\"touchstart.brush\", brushstart);\n        var background = g.selectAll(\".background\").data([ 0 ]);\n        background.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\");\n        g.selectAll(\".extent\").data([ 0 ]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n        var resize = g.selectAll(\".resize\").data(resizes, d3_identity);\n        resize.exit().remove();\n        resize.enter().append(\"g\").attr(\"class\", function(d) {\n          return \"resize \" + d;\n        }).style(\"cursor\", function(d) {\n          return d3_svg_brushCursor[d];\n        }).append(\"rect\").attr(\"x\", function(d) {\n          return /[ew]$/.test(d) ? -3 : null;\n        }).attr(\"y\", function(d) {\n          return /^[ns]/.test(d) ? -3 : null;\n        }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\");\n        resize.style(\"display\", brush.empty() ? \"none\" : null);\n        var gUpdate = d3.transition(g), backgroundUpdate = d3.transition(background), range;\n        if (x) {\n          range = d3_scaleRange(x);\n          backgroundUpdate.attr(\"x\", range[0]).attr(\"width\", range[1] - range[0]);\n          redrawX(gUpdate);\n        }\n        if (y) {\n          range = d3_scaleRange(y);\n          backgroundUpdate.attr(\"y\", range[0]).attr(\"height\", range[1] - range[0]);\n          redrawY(gUpdate);\n        }\n        redraw(gUpdate);\n      });\n    }\n    brush.event = function(g) {\n      g.each(function() {\n        var event_ = event.of(this, arguments), extent1 = {\n          x: xExtent,\n          y: yExtent,\n          i: xExtentDomain,\n          j: yExtentDomain\n        }, extent0 = this.__chart__ || extent1;\n        this.__chart__ = extent1;\n        if (d3_transitionInheritId) {\n          d3.select(this).transition().each(\"start.brush\", function() {\n            xExtentDomain = extent0.i;\n            yExtentDomain = extent0.j;\n            xExtent = extent0.x;\n            yExtent = extent0.y;\n            event_({\n              type: \"brushstart\"\n            });\n          }).tween(\"brush:brush\", function() {\n            var xi = d3_interpolateArray(xExtent, extent1.x), yi = d3_interpolateArray(yExtent, extent1.y);\n            xExtentDomain = yExtentDomain = null;\n            return function(t) {\n              xExtent = extent1.x = xi(t);\n              yExtent = extent1.y = yi(t);\n              event_({\n                type: \"brush\",\n                mode: \"resize\"\n              });\n            };\n          }).each(\"end.brush\", function() {\n            xExtentDomain = extent1.i;\n            yExtentDomain = extent1.j;\n            event_({\n              type: \"brush\",\n              mode: \"resize\"\n            });\n            event_({\n              type: \"brushend\"\n            });\n          });\n        } else {\n          event_({\n            type: \"brushstart\"\n          });\n          event_({\n            type: \"brush\",\n            mode: \"resize\"\n          });\n          event_({\n            type: \"brushend\"\n          });\n        }\n      });\n    };\n    function redraw(g) {\n      g.selectAll(\".resize\").attr(\"transform\", function(d) {\n        return \"translate(\" + xExtent[+/e$/.test(d)] + \",\" + yExtent[+/^s/.test(d)] + \")\";\n      });\n    }\n    function redrawX(g) {\n      g.select(\".extent\").attr(\"x\", xExtent[0]);\n      g.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", xExtent[1] - xExtent[0]);\n    }\n    function redrawY(g) {\n      g.select(\".extent\").attr(\"y\", yExtent[0]);\n      g.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", yExtent[1] - yExtent[0]);\n    }\n    function brushstart() {\n      var target = this, eventTarget = d3.select(d3.event.target), event_ = event.of(target, arguments), g = d3.select(target), resizing = eventTarget.datum(), resizingX = !/^(n|s)$/.test(resizing) && x, resizingY = !/^(e|w)$/.test(resizing) && y, dragging = eventTarget.classed(\"extent\"), dragRestore = d3_event_dragSuppress(target), center, origin = d3.mouse(target), offset;\n      var w = d3.select(d3_window(target)).on(\"keydown.brush\", keydown).on(\"keyup.brush\", keyup);\n      if (d3.event.changedTouches) {\n        w.on(\"touchmove.brush\", brushmove).on(\"touchend.brush\", brushend);\n      } else {\n        w.on(\"mousemove.brush\", brushmove).on(\"mouseup.brush\", brushend);\n      }\n      g.interrupt().selectAll(\"*\").interrupt();\n      if (dragging) {\n        origin[0] = xExtent[0] - origin[0];\n        origin[1] = yExtent[0] - origin[1];\n      } else if (resizing) {\n        var ex = +/w$/.test(resizing), ey = +/^n/.test(resizing);\n        offset = [ xExtent[1 - ex] - origin[0], yExtent[1 - ey] - origin[1] ];\n        origin[0] = xExtent[ex];\n        origin[1] = yExtent[ey];\n      } else if (d3.event.altKey) center = origin.slice();\n      g.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null);\n      d3.select(\"body\").style(\"cursor\", eventTarget.style(\"cursor\"));\n      event_({\n        type: \"brushstart\"\n      });\n      brushmove();\n      function keydown() {\n        if (d3.event.keyCode == 32) {\n          if (!dragging) {\n            center = null;\n            origin[0] -= xExtent[1];\n            origin[1] -= yExtent[1];\n            dragging = 2;\n          }\n          d3_eventPreventDefault();\n        }\n      }\n      function keyup() {\n        if (d3.event.keyCode == 32 && dragging == 2) {\n          origin[0] += xExtent[1];\n          origin[1] += yExtent[1];\n          dragging = 0;\n          d3_eventPreventDefault();\n        }\n      }\n      function brushmove() {\n        var point = d3.mouse(target), moved = false;\n        if (offset) {\n          point[0] += offset[0];\n          point[1] += offset[1];\n        }\n        if (!dragging) {\n          if (d3.event.altKey) {\n            if (!center) center = [ (xExtent[0] + xExtent[1]) / 2, (yExtent[0] + yExtent[1]) / 2 ];\n            origin[0] = xExtent[+(point[0] < center[0])];\n            origin[1] = yExtent[+(point[1] < center[1])];\n          } else center = null;\n        }\n        if (resizingX && move1(point, x, 0)) {\n          redrawX(g);\n          moved = true;\n        }\n        if (resizingY && move1(point, y, 1)) {\n          redrawY(g);\n          moved = true;\n        }\n        if (moved) {\n          redraw(g);\n          event_({\n            type: \"brush\",\n            mode: dragging ? \"move\" : \"resize\"\n          });\n        }\n      }\n      function move1(point, scale, i) {\n        var range = d3_scaleRange(scale), r0 = range[0], r1 = range[1], position = origin[i], extent = i ? yExtent : xExtent, size = extent[1] - extent[0], min, max;\n        if (dragging) {\n          r0 -= position;\n          r1 -= size + position;\n        }\n        min = (i ? yClamp : xClamp) ? Math.max(r0, Math.min(r1, point[i])) : point[i];\n        if (dragging) {\n          max = (min += position) + size;\n        } else {\n          if (center) position = Math.max(r0, Math.min(r1, 2 * center[i] - min));\n          if (position < min) {\n            max = min;\n            min = position;\n          } else {\n            max = position;\n          }\n        }\n        if (extent[0] != min || extent[1] != max) {\n          if (i) yExtentDomain = null; else xExtentDomain = null;\n          extent[0] = min;\n          extent[1] = max;\n          return true;\n        }\n      }\n      function brushend() {\n        brushmove();\n        g.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", brush.empty() ? \"none\" : null);\n        d3.select(\"body\").style(\"cursor\", null);\n        w.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null);\n        dragRestore();\n        event_({\n          type: \"brushend\"\n        });\n      }\n    }\n    brush.x = function(z) {\n      if (!arguments.length) return x;\n      x = z;\n      resizes = d3_svg_brushResizes[!x << 1 | !y];\n      return brush;\n    };\n    brush.y = function(z) {\n      if (!arguments.length) return y;\n      y = z;\n      resizes = d3_svg_brushResizes[!x << 1 | !y];\n      return brush;\n    };\n    brush.clamp = function(z) {\n      if (!arguments.length) return x && y ? [ xClamp, yClamp ] : x ? xClamp : y ? yClamp : null;\n      if (x && y) xClamp = !!z[0], yClamp = !!z[1]; else if (x) xClamp = !!z; else if (y) yClamp = !!z;\n      return brush;\n    };\n    brush.extent = function(z) {\n      var x0, x1, y0, y1, t;\n      if (!arguments.length) {\n        if (x) {\n          if (xExtentDomain) {\n            x0 = xExtentDomain[0], x1 = xExtentDomain[1];\n          } else {\n            x0 = xExtent[0], x1 = xExtent[1];\n            if (x.invert) x0 = x.invert(x0), x1 = x.invert(x1);\n            if (x1 < x0) t = x0, x0 = x1, x1 = t;\n          }\n        }\n        if (y) {\n          if (yExtentDomain) {\n            y0 = yExtentDomain[0], y1 = yExtentDomain[1];\n          } else {\n            y0 = yExtent[0], y1 = yExtent[1];\n            if (y.invert) y0 = y.invert(y0), y1 = y.invert(y1);\n            if (y1 < y0) t = y0, y0 = y1, y1 = t;\n          }\n        }\n        return x && y ? [ [ x0, y0 ], [ x1, y1 ] ] : x ? [ x0, x1 ] : y && [ y0, y1 ];\n      }\n      if (x) {\n        x0 = z[0], x1 = z[1];\n        if (y) x0 = x0[0], x1 = x1[0];\n        xExtentDomain = [ x0, x1 ];\n        if (x.invert) x0 = x(x0), x1 = x(x1);\n        if (x1 < x0) t = x0, x0 = x1, x1 = t;\n        if (x0 != xExtent[0] || x1 != xExtent[1]) xExtent = [ x0, x1 ];\n      }\n      if (y) {\n        y0 = z[0], y1 = z[1];\n        if (x) y0 = y0[1], y1 = y1[1];\n        yExtentDomain = [ y0, y1 ];\n        if (y.invert) y0 = y(y0), y1 = y(y1);\n        if (y1 < y0) t = y0, y0 = y1, y1 = t;\n        if (y0 != yExtent[0] || y1 != yExtent[1]) yExtent = [ y0, y1 ];\n      }\n      return brush;\n    };\n    brush.clear = function() {\n      if (!brush.empty()) {\n        xExtent = [ 0, 0 ], yExtent = [ 0, 0 ];\n        xExtentDomain = yExtentDomain = null;\n      }\n      return brush;\n    };\n    brush.empty = function() {\n      return !!x && xExtent[0] == xExtent[1] || !!y && yExtent[0] == yExtent[1];\n    };\n    return d3.rebind(brush, event, \"on\");\n  };\n  var d3_svg_brushCursor = {\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  var d3_svg_brushResizes = [ [ \"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\" ], [ \"e\", \"w\" ], [ \"n\", \"s\" ], [] ];\n  var d3_time_format = d3_time.format = d3_locale_enUS.timeFormat;\n  var d3_time_formatUtc = d3_time_format.utc;\n  var d3_time_formatIso = d3_time_formatUtc(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n  d3_time_format.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? d3_time_formatIsoNative : d3_time_formatIso;\n  function d3_time_formatIsoNative(date) {\n    return date.toISOString();\n  }\n  d3_time_formatIsoNative.parse = function(string) {\n    var date = new Date(string);\n    return isNaN(date) ? null : date;\n  };\n  d3_time_formatIsoNative.toString = d3_time_formatIso.toString;\n  d3_time.second = d3_time_interval(function(date) {\n    return new d3_date(Math.floor(date / 1e3) * 1e3);\n  }, function(date, offset) {\n    date.setTime(date.getTime() + Math.floor(offset) * 1e3);\n  }, function(date) {\n    return date.getSeconds();\n  });\n  d3_time.seconds = d3_time.second.range;\n  d3_time.seconds.utc = d3_time.second.utc.range;\n  d3_time.minute = d3_time_interval(function(date) {\n    return new d3_date(Math.floor(date / 6e4) * 6e4);\n  }, function(date, offset) {\n    date.setTime(date.getTime() + Math.floor(offset) * 6e4);\n  }, function(date) {\n    return date.getMinutes();\n  });\n  d3_time.minutes = d3_time.minute.range;\n  d3_time.minutes.utc = d3_time.minute.utc.range;\n  d3_time.hour = d3_time_interval(function(date) {\n    var timezone = date.getTimezoneOffset() / 60;\n    return new d3_date((Math.floor(date / 36e5 - timezone) + timezone) * 36e5);\n  }, function(date, offset) {\n    date.setTime(date.getTime() + Math.floor(offset) * 36e5);\n  }, function(date) {\n    return date.getHours();\n  });\n  d3_time.hours = d3_time.hour.range;\n  d3_time.hours.utc = d3_time.hour.utc.range;\n  d3_time.month = d3_time_interval(function(date) {\n    date = d3_time.day(date);\n    date.setDate(1);\n    return date;\n  }, function(date, offset) {\n    date.setMonth(date.getMonth() + offset);\n  }, function(date) {\n    return date.getMonth();\n  });\n  d3_time.months = d3_time.month.range;\n  d3_time.months.utc = d3_time.month.utc.range;\n  function d3_time_scale(linear, methods, format) {\n    function scale(x) {\n      return linear(x);\n    }\n    scale.invert = function(x) {\n      return d3_time_scaleDate(linear.invert(x));\n    };\n    scale.domain = function(x) {\n      if (!arguments.length) return linear.domain().map(d3_time_scaleDate);\n      linear.domain(x);\n      return scale;\n    };\n    function tickMethod(extent, count) {\n      var span = extent[1] - extent[0], target = span / count, i = d3.bisect(d3_time_scaleSteps, target);\n      return i == d3_time_scaleSteps.length ? [ methods.year, d3_scale_linearTickRange(extent.map(function(d) {\n        return d / 31536e6;\n      }), count)[2] ] : !i ? [ d3_time_scaleMilliseconds, d3_scale_linearTickRange(extent, count)[2] ] : methods[target / d3_time_scaleSteps[i - 1] < d3_time_scaleSteps[i] / target ? i - 1 : i];\n    }\n    scale.nice = function(interval, skip) {\n      var domain = scale.domain(), extent = d3_scaleExtent(domain), method = interval == null ? tickMethod(extent, 10) : typeof interval === \"number\" && tickMethod(extent, interval);\n      if (method) interval = method[0], skip = method[1];\n      function skipped(date) {\n        return !isNaN(date) && !interval.range(date, d3_time_scaleDate(+date + 1), skip).length;\n      }\n      return scale.domain(d3_scale_nice(domain, skip > 1 ? {\n        floor: function(date) {\n          while (skipped(date = interval.floor(date))) date = d3_time_scaleDate(date - 1);\n          return date;\n        },\n        ceil: function(date) {\n          while (skipped(date = interval.ceil(date))) date = d3_time_scaleDate(+date + 1);\n          return date;\n        }\n      } : interval));\n    };\n    scale.ticks = function(interval, skip) {\n      var extent = d3_scaleExtent(scale.domain()), method = interval == null ? tickMethod(extent, 10) : typeof interval === \"number\" ? tickMethod(extent, interval) : !interval.range && [ {\n        range: interval\n      }, skip ];\n      if (method) interval = method[0], skip = method[1];\n      return interval.range(extent[0], d3_time_scaleDate(+extent[1] + 1), skip < 1 ? 1 : skip);\n    };\n    scale.tickFormat = function() {\n      return format;\n    };\n    scale.copy = function() {\n      return d3_time_scale(linear.copy(), methods, format);\n    };\n    return d3_scale_linearRebind(scale, linear);\n  }\n  function d3_time_scaleDate(t) {\n    return new Date(t);\n  }\n  var d3_time_scaleSteps = [ 1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6 ];\n  var d3_time_scaleLocalMethods = [ [ d3_time.second, 1 ], [ d3_time.second, 5 ], [ d3_time.second, 15 ], [ d3_time.second, 30 ], [ d3_time.minute, 1 ], [ d3_time.minute, 5 ], [ d3_time.minute, 15 ], [ d3_time.minute, 30 ], [ d3_time.hour, 1 ], [ d3_time.hour, 3 ], [ d3_time.hour, 6 ], [ d3_time.hour, 12 ], [ d3_time.day, 1 ], [ d3_time.day, 2 ], [ d3_time.week, 1 ], [ d3_time.month, 1 ], [ d3_time.month, 3 ], [ d3_time.year, 1 ] ];\n  var d3_time_scaleLocalFormat = d3_time_format.multi([ [ \".%L\", function(d) {\n    return d.getMilliseconds();\n  } ], [ \":%S\", function(d) {\n    return d.getSeconds();\n  } ], [ \"%I:%M\", function(d) {\n    return d.getMinutes();\n  } ], [ \"%I %p\", function(d) {\n    return d.getHours();\n  } ], [ \"%a %d\", function(d) {\n    return d.getDay() && d.getDate() != 1;\n  } ], [ \"%b %d\", function(d) {\n    return d.getDate() != 1;\n  } ], [ \"%B\", function(d) {\n    return d.getMonth();\n  } ], [ \"%Y\", d3_true ] ]);\n  var d3_time_scaleMilliseconds = {\n    range: function(start, stop, step) {\n      return d3.range(Math.ceil(start / step) * step, +stop, step).map(d3_time_scaleDate);\n    },\n    floor: d3_identity,\n    ceil: d3_identity\n  };\n  d3_time_scaleLocalMethods.year = d3_time.year;\n  d3_time.scale = function() {\n    return d3_time_scale(d3.scale.linear(), d3_time_scaleLocalMethods, d3_time_scaleLocalFormat);\n  };\n  var d3_time_scaleUtcMethods = d3_time_scaleLocalMethods.map(function(m) {\n    return [ m[0].utc, m[1] ];\n  });\n  var d3_time_scaleUtcFormat = d3_time_formatUtc.multi([ [ \".%L\", function(d) {\n    return d.getUTCMilliseconds();\n  } ], [ \":%S\", function(d) {\n    return d.getUTCSeconds();\n  } ], [ \"%I:%M\", function(d) {\n    return d.getUTCMinutes();\n  } ], [ \"%I %p\", function(d) {\n    return d.getUTCHours();\n  } ], [ \"%a %d\", function(d) {\n    return d.getUTCDay() && d.getUTCDate() != 1;\n  } ], [ \"%b %d\", function(d) {\n    return d.getUTCDate() != 1;\n  } ], [ \"%B\", function(d) {\n    return d.getUTCMonth();\n  } ], [ \"%Y\", d3_true ] ]);\n  d3_time_scaleUtcMethods.year = d3_time.year.utc;\n  d3_time.scale.utc = function() {\n    return d3_time_scale(d3.scale.linear(), d3_time_scaleUtcMethods, d3_time_scaleUtcFormat);\n  };\n  d3.text = d3_xhrType(function(request) {\n    return request.responseText;\n  });\n  d3.json = function(url, callback) {\n    return d3_xhr(url, \"application/json\", d3_json, callback);\n  };\n  function d3_json(request) {\n    return JSON.parse(request.responseText);\n  }\n  d3.html = function(url, callback) {\n    return d3_xhr(url, \"text/html\", d3_html, callback);\n  };\n  function d3_html(request) {\n    var range = d3_document.createRange();\n    range.selectNode(d3_document.body);\n    return range.createContextualFragment(request.responseText);\n  }\n  d3.xml = d3_xhrType(function(request) {\n    return request.responseXML;\n  });\n  if (typeof define === \"function\" && define.amd) this.d3 = d3, define(d3); else if (typeof module === \"object\" && module.exports) module.exports = d3; else this.d3 = d3;\n}();"],"sourceRoot":""}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy