diff --git a/gulpfile.js b/gulpfile.js index 9fd9dcfef34e..3c8078484470 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -41,7 +41,8 @@ elixir(function(mix) { /** * JS configuration */ - mix.scripts(['resources/assets/js/Chart.js'], 'public/js/Chart.min.js'); + mix.scripts(['resources/assets/js/Chart.js'], 'public/js/Chart.min.js') + .scripts(['resources/assets/js/d3.js'], 'public/js/d3.min.js'); }); diff --git a/public/js/d3.min.js b/public/js/d3.min.js index 88550ae5124a..421944f8e335 100644 --- a/public/js/d3.min.js +++ b/public/js/d3.min.js @@ -1,5 +1,6 @@ -!function(){function n(n,t){return t>n?-1:n>t?1:n>=t?0:0/0}function t(n){return null!=n&&!isNaN(n)}function e(n){return{left:function(t,e,r,u){for(arguments.length<3&&(r=0),arguments.length<4&&(u=t.length);u>r;){var i=r+u>>>1;n(t[i],e)<0?r=i+1:u=i}return r},right:function(t,e,r,u){for(arguments.length<3&&(r=0),arguments.length<4&&(u=t.length);u>r;){var i=r+u>>>1;n(t[i],e)>0?u=i:r=i+1}return r}}}function r(n){return n.length}function u(n){for(var t=1;n*t%1;)t*=10;return t}function i(n,t){try{for(var e in t)Object.defineProperty(n.prototype,e,{value:t[e],enumerable:!1})}catch(r){n.prototype=t}}function o(){}function a(n){return ia+n in this}function c(n){return n=ia+n,n in this&&delete this[n]}function s(){var n=[];return this.forEach(function(t){n.push(t)}),n}function l(){var n=0;for(var t in this)t.charCodeAt(0)===oa&&++n;return n}function f(){for(var n in this)if(n.charCodeAt(0)===oa)return!1;return!0}function h(){}function g(n,t,e){return function(){var r=e.apply(t,arguments);return r===t?n:r}}function p(n,t){if(t in n)return t;t=t.charAt(0).toUpperCase()+t.substring(1);for(var e=0,r=aa.length;r>e;++e){var u=aa[e]+t;if(u in n)return u}}function v(){}function d(){}function m(n){function t(){for(var t,r=e,u=-1,i=r.length;++ue;e++)for(var u,i=n[e],o=0,a=i.length;a>o;o++)(u=i[o])&&t(u,o,e);return n}function U(n){return sa(n,da),n}function j(n){var t,e;return function(r,u,i){var o,a=n[i].update,c=a.length;for(i!=e&&(e=i,t=0),u>=t&&(t=u+1);!(o=a[t])&&++t0&&(n=n.substring(0,a));var s=ya.get(n);return s&&(n=s,c=Y),a?t?u:r:t?v:i}function O(n,t){return function(e){var r=Zo.event;Zo.event=e,t[0]=this.__data__;try{n.apply(this,t)}finally{Zo.event=r}}}function Y(n,t){var e=O(n,t);return function(n){var t=this,r=n.relatedTarget;r&&(r===t||8&r.compareDocumentPosition(t))||e.call(t,n)}}function I(){var n=".dragsuppress-"+ ++Ma,t="click"+n,e=Zo.select(Wo).on("touchmove"+n,y).on("dragstart"+n,y).on("selectstart"+n,y);if(xa){var r=Bo.style,u=r[xa];r[xa]="none"}return function(i){function o(){e.on(t,null)}e.on(n,null),xa&&(r[xa]=u),i&&(e.on(t,function(){y(),o()},!0),setTimeout(o,0))}}function Z(n,t){t.changedTouches&&(t=t.changedTouches[0]);var e=n.ownerSVGElement||n;if(e.createSVGPoint){var r=e.createSVGPoint();if(0>_a&&(Wo.scrollX||Wo.scrollY)){e=Zo.select("body").append("svg").style({position:"absolute",top:0,left:0,margin:0,padding:0,border:"none"},"important");var u=e[0][0].getScreenCTM();_a=!(u.f||u.e),e.remove()}return _a?(r.x=t.pageX,r.y=t.pageY):(r.x=t.clientX,r.y=t.clientY),r=r.matrixTransform(n.getScreenCTM().inverse()),[r.x,r.y]}var i=n.getBoundingClientRect();return[t.clientX-i.left-n.clientLeft,t.clientY-i.top-n.clientTop]}function V(){return Zo.event.changedTouches[0].identifier}function X(){return Zo.event.target}function $(){return Wo}function B(n){return n>0?1:0>n?-1:0}function W(n,t,e){return(t[0]-n[0])*(e[1]-n[1])-(t[1]-n[1])*(e[0]-n[0])}function J(n){return n>1?0:-1>n?ba:Math.acos(n)}function G(n){return n>1?Sa:-1>n?-Sa:Math.asin(n)}function K(n){return((n=Math.exp(n))-1/n)/2}function Q(n){return((n=Math.exp(n))+1/n)/2}function nt(n){return((n=Math.exp(2*n))-1)/(n+1)}function tt(n){return(n=Math.sin(n/2))*n}function et(){}function rt(n,t,e){return this instanceof rt?(this.h=+n,this.s=+t,void(this.l=+e)):arguments.length<2?n instanceof rt?new rt(n.h,n.s,n.l):mt(""+n,yt,rt):new rt(n,t,e)}function ut(n,t,e){function r(n){return n>360?n-=360:0>n&&(n+=360),60>n?i+(o-i)*n/60:180>n?o:240>n?i+(o-i)*(240-n)/60:i}function u(n){return Math.round(255*r(n))}var i,o;return n=isNaN(n)?0:(n%=360)<0?n+360:n,t=isNaN(t)?0:0>t?0:t>1?1:t,e=0>e?0:e>1?1:e,o=.5>=e?e*(1+t):e+t-e*t,i=2*e-o,new gt(u(n+120),u(n),u(n-120))}function it(n,t,e){return this instanceof it?(this.h=+n,this.c=+t,void(this.l=+e)):arguments.length<2?n instanceof it?new it(n.h,n.c,n.l):n instanceof at?st(n.l,n.a,n.b):st((n=xt((n=Zo.rgb(n)).r,n.g,n.b)).l,n.a,n.b):new it(n,t,e)}function ot(n,t,e){return isNaN(n)&&(n=0),isNaN(t)&&(t=0),new at(e,Math.cos(n*=Aa)*t,Math.sin(n)*t)}function at(n,t,e){return this instanceof at?(this.l=+n,this.a=+t,void(this.b=+e)):arguments.length<2?n instanceof at?new at(n.l,n.a,n.b):n instanceof it?ot(n.l,n.c,n.h):xt((n=gt(n)).r,n.g,n.b):new at(n,t,e)}function ct(n,t,e){var r=(n+16)/116,u=r+t/500,i=r-e/200;return u=lt(u)*ja,r=lt(r)*Ha,i=lt(i)*Fa,new gt(ht(3.2404542*u-1.5371385*r-.4985314*i),ht(-.969266*u+1.8760108*r+.041556*i),ht(.0556434*u-.2040259*r+1.0572252*i))}function st(n,t,e){return n>0?new it(Math.atan2(e,t)*Ca,Math.sqrt(t*t+e*e),n):new it(0/0,0/0,n)}function lt(n){return n>.206893034?n*n*n:(n-4/29)/7.787037}function ft(n){return n>.008856?Math.pow(n,1/3):7.787037*n+4/29}function ht(n){return Math.round(255*(.00304>=n?12.92*n:1.055*Math.pow(n,1/2.4)-.055))}function gt(n,t,e){return this instanceof gt?(this.r=~~n,this.g=~~t,void(this.b=~~e)):arguments.length<2?n instanceof gt?new gt(n.r,n.g,n.b):mt(""+n,gt,ut):new gt(n,t,e)}function pt(n){return new gt(n>>16,255&n>>8,255&n)}function vt(n){return pt(n)+""}function dt(n){return 16>n?"0"+Math.max(0,n).toString(16):Math.min(255,n).toString(16)}function mt(n,t,e){var r,u,i,o=0,a=0,c=0;if(r=/([a-z]+)\((.*)\)/i.exec(n))switch(u=r[2].split(","),r[1]){case"hsl":return e(parseFloat(u[0]),parseFloat(u[1])/100,parseFloat(u[2])/100);case"rgb":return t(_t(u[0]),_t(u[1]),_t(u[2]))}return(i=Ia.get(n))?t(i.r,i.g,i.b):(null==n||"#"!==n.charAt(0)||isNaN(i=parseInt(n.substring(1),16))||(4===n.length?(o=(3840&i)>>4,o=o>>4|o,a=240&i,a=a>>4|a,c=15&i,c=c<<4|c):7===n.length&&(o=(16711680&i)>>16,a=(65280&i)>>8,c=255&i)),t(o,a,c))}function yt(n,t,e){var r,u,i=Math.min(n/=255,t/=255,e/=255),o=Math.max(n,t,e),a=o-i,c=(o+i)/2;return a?(u=.5>c?a/(o+i):a/(2-o-i),r=n==o?(t-e)/a+(e>t?6:0):t==o?(e-n)/a+2:(n-t)/a+4,r*=60):(r=0/0,u=c>0&&1>c?0:r),new rt(r,u,c)}function xt(n,t,e){n=Mt(n),t=Mt(t),e=Mt(e);var r=ft((.4124564*n+.3575761*t+.1804375*e)/ja),u=ft((.2126729*n+.7151522*t+.072175*e)/Ha),i=ft((.0193339*n+.119192*t+.9503041*e)/Fa);return at(116*u-16,500*(r-u),200*(u-i))}function Mt(n){return(n/=255)<=.04045?n/12.92:Math.pow((n+.055)/1.055,2.4)}function _t(n){var t=parseFloat(n);return"%"===n.charAt(n.length-1)?Math.round(2.55*t):t}function bt(n){return"function"==typeof n?n:function(){return n}}function wt(n){return n}function St(n){return function(t,e,r){return 2===arguments.length&&"function"==typeof e&&(r=e,e=null),kt(t,e,n,r)}}function kt(n,t,e,r){function u(){var n,t=c.status;if(!t&&c.responseText||t>=200&&300>t||304===t){try{n=e.call(i,c)}catch(r){return o.error.call(i,r),void 0}o.load.call(i,n)}else o.error.call(i,c)}var i={},o=Zo.dispatch("beforesend","progress","load","error"),a={},c=new XMLHttpRequest,s=null;return!Wo.XDomainRequest||"withCredentials"in c||!/^(http(s)?:)?\/\//.test(n)||(c=new XDomainRequest),"onload"in c?c.onload=c.onerror=u:c.onreadystatechange=function(){c.readyState>3&&u()},c.onprogress=function(n){var t=Zo.event;Zo.event=n;try{o.progress.call(i,c)}finally{Zo.event=t}},i.header=function(n,t){return n=(n+"").toLowerCase(),arguments.length<2?a[n]:(null==t?delete a[n]:a[n]=t+"",i)},i.mimeType=function(n){return arguments.length?(t=null==n?null:n+"",i):t},i.responseType=function(n){return arguments.length?(s=n,i):s},i.response=function(n){return e=n,i},["get","post"].forEach(function(n){i[n]=function(){return i.send.apply(i,[n].concat(Xo(arguments)))}}),i.send=function(e,r,u){if(2===arguments.length&&"function"==typeof r&&(u=r,r=null),c.open(e,n,!0),null==t||"accept"in a||(a.accept=t+",*/*"),c.setRequestHeader)for(var l in a)c.setRequestHeader(l,a[l]);return null!=t&&c.overrideMimeType&&c.overrideMimeType(t),null!=s&&(c.responseType=s),null!=u&&i.on("error",u).on("load",function(n){u(null,n)}),o.beforesend.call(i,c),c.send(null==r?null:r),i},i.abort=function(){return c.abort(),i},Zo.rebind(i,o,"on"),null==r?i:i.get(Et(r))}function Et(n){return 1===n.length?function(t,e){n(null==t?e:null)}:n}function At(){var n=Ct(),t=Nt()-n;t>24?(isFinite(t)&&(clearTimeout($a),$a=setTimeout(At,t)),Xa=0):(Xa=1,Wa(At))}function Ct(){var n=Date.now();for(Ba=Za;Ba;)n>=Ba.t&&(Ba.f=Ba.c(n-Ba.t)),Ba=Ba.n;return n}function Nt(){for(var n,t=Za,e=1/0;t;)t.f?t=n?n.n=t.n:Za=t.n:(t.t8?function(n){return n/e}:function(n){return n*e},symbol:n}}function Tt(n){var t=n.decimal,e=n.thousands,r=n.grouping,u=n.currency,i=r?function(n){for(var t=n.length,u=[],i=0,o=r[0];t>0&&o>0;)u.push(n.substring(t-=o,t+o)),o=r[i=(i+1)%r.length];return u.reverse().join(e)}:wt;return function(n){var e=Ga.exec(n),r=e[1]||" ",o=e[2]||">",a=e[3]||"",c=e[4]||"",s=e[5],l=+e[6],f=e[7],h=e[8],g=e[9],p=1,v="",d="",m=!1;switch(h&&(h=+h.substring(1)),(s||"0"===r&&"="===o)&&(s=r="0",o="=",f&&(l-=Math.floor((l-1)/4))),g){case"n":f=!0,g="g";break;case"%":p=100,d="%",g="f";break;case"p":p=100,d="%",g="r";break;case"b":case"o":case"x":case"X":"#"===c&&(v="0"+g.toLowerCase());case"c":case"d":m=!0,h=0;break;case"s":p=-1,g="r"}"$"===c&&(v=u[0],d=u[1]),"r"!=g||h||(g="g"),null!=h&&("g"==g?h=Math.max(1,Math.min(21,h)):("e"==g||"f"==g)&&(h=Math.max(0,Math.min(20,h)))),g=Ka.get(g)||qt;var y=s&&f;return function(n){var e=d;if(m&&n%1)return"";var u=0>n||0===n&&0>1/n?(n=-n,"-"):a;if(0>p){var c=Zo.formatPrefix(n,h);n=c.scale(n),e=c.symbol+d}else n*=p;n=g(n,h);var x=n.lastIndexOf("."),M=0>x?n:n.substring(0,x),_=0>x?"":t+n.substring(x+1);!s&&f&&(M=i(M));var b=v.length+M.length+_.length+(y?0:u.length),w=l>b?new Array(b=l-b+1).join(r):"";return y&&(M=i(w+M)),u+=v,n=M+_,("<"===o?u+n+w:">"===o?w+u+n:"^"===o?w.substring(0,b>>=1)+u+n+w.substring(b):u+(y?n:w+n))+e}}}function qt(n){return n+""}function Rt(){this._=new Date(arguments.length>1?Date.UTC.apply(this,arguments):arguments[0])}function Dt(n,t,e){function r(t){var e=n(t),r=i(e,1);return r-t>t-e?e:r}function u(e){return t(e=n(new nc(e-1)),1),e}function i(n,e){return t(n=new nc(+n),e),n}function o(n,r,i){var o=u(n),a=[];if(i>1)for(;r>o;)e(o)%i||a.push(new Date(+o)),t(o,1);else for(;r>o;)a.push(new Date(+o)),t(o,1);return a}function a(n,t,e){try{nc=Rt;var r=new Rt;return r._=n,o(r,t,e)}finally{nc=Date}}n.floor=n,n.round=r,n.ceil=u,n.offset=i,n.range=o;var c=n.utc=Pt(n);return c.floor=c,c.round=Pt(r),c.ceil=Pt(u),c.offset=Pt(i),c.range=a,n}function Pt(n){return function(t,e){try{nc=Rt;var r=new Rt;return r._=t,n(r,e)._}finally{nc=Date}}}function Ut(n){function t(n){function t(t){for(var e,u,i,o=[],a=-1,c=0;++aa;){if(r>=s)return-1;if(u=t.charCodeAt(a++),37===u){if(o=t.charAt(a++),i=N[o in ec?t.charAt(a++):o],!i||(r=i(n,e,r))<0)return-1}else if(u!=e.charCodeAt(r++))return-1}return r}function r(n,t,e){b.lastIndex=0;var r=b.exec(t.substring(e));return r?(n.w=w.get(r[0].toLowerCase()),e+r[0].length):-1}function u(n,t,e){M.lastIndex=0;var r=M.exec(t.substring(e));return r?(n.w=_.get(r[0].toLowerCase()),e+r[0].length):-1}function i(n,t,e){E.lastIndex=0;var r=E.exec(t.substring(e));return r?(n.m=A.get(r[0].toLowerCase()),e+r[0].length):-1}function o(n,t,e){S.lastIndex=0;var r=S.exec(t.substring(e));return r?(n.m=k.get(r[0].toLowerCase()),e+r[0].length):-1}function a(n,t,r){return e(n,C.c.toString(),t,r)}function c(n,t,r){return e(n,C.x.toString(),t,r)}function s(n,t,r){return e(n,C.X.toString(),t,r)}function l(n,t,e){var r=x.get(t.substring(e,e+=2).toLowerCase());return null==r?-1:(n.p=r,e)}var f=n.dateTime,h=n.date,g=n.time,p=n.periods,v=n.days,d=n.shortDays,m=n.months,y=n.shortMonths;t.utc=function(n){function e(n){try{nc=Rt;var t=new nc;return t._=n,r(t)}finally{nc=Date}}var r=t(n);return e.parse=function(n){try{nc=Rt;var t=r.parse(n);return t&&t._}finally{nc=Date}},e.toString=r.toString,e},t.multi=t.utc.multi=re;var x=Zo.map(),M=Ht(v),_=Ft(v),b=Ht(d),w=Ft(d),S=Ht(m),k=Ft(m),E=Ht(y),A=Ft(y);p.forEach(function(n,t){x.set(n.toLowerCase(),t)});var C={a:function(n){return d[n.getDay()]},A:function(n){return v[n.getDay()]},b:function(n){return y[n.getMonth()]},B:function(n){return m[n.getMonth()]},c:t(f),d:function(n,t){return jt(n.getDate(),t,2)},e:function(n,t){return jt(n.getDate(),t,2)},H:function(n,t){return jt(n.getHours(),t,2)},I:function(n,t){return jt(n.getHours()%12||12,t,2)},j:function(n,t){return jt(1+Qa.dayOfYear(n),t,3)},L:function(n,t){return jt(n.getMilliseconds(),t,3)},m:function(n,t){return jt(n.getMonth()+1,t,2)},M:function(n,t){return jt(n.getMinutes(),t,2)},p:function(n){return p[+(n.getHours()>=12)]},S:function(n,t){return jt(n.getSeconds(),t,2)},U:function(n,t){return jt(Qa.sundayOfYear(n),t,2)},w:function(n){return n.getDay()},W:function(n,t){return jt(Qa.mondayOfYear(n),t,2)},x:t(h),X:t(g),y:function(n,t){return jt(n.getFullYear()%100,t,2)},Y:function(n,t){return jt(n.getFullYear()%1e4,t,4)},Z:te,"%":function(){return"%"}},N={a:r,A:u,b:i,B:o,c:a,d:Wt,e:Wt,H:Gt,I:Gt,j:Jt,L:ne,m:Bt,M:Kt,p:l,S:Qt,U:Yt,w:Ot,W:It,x:c,X:s,y:Vt,Y:Zt,Z:Xt,"%":ee};return t}function jt(n,t,e){var r=0>n?"-":"",u=(r?-n:n)+"",i=u.length;return r+(e>i?new Array(e-i+1).join(t)+u:u)}function Ht(n){return new RegExp("^(?:"+n.map(Zo.requote).join("|")+")","i")}function Ft(n){for(var t=new o,e=-1,r=n.length;++e68?1900:2e3)}function Bt(n,t,e){rc.lastIndex=0;var r=rc.exec(t.substring(e,e+2));return r?(n.m=r[0]-1,e+r[0].length):-1}function Wt(n,t,e){rc.lastIndex=0;var r=rc.exec(t.substring(e,e+2));return r?(n.d=+r[0],e+r[0].length):-1}function Jt(n,t,e){rc.lastIndex=0;var r=rc.exec(t.substring(e,e+3));return r?(n.j=+r[0],e+r[0].length):-1}function Gt(n,t,e){rc.lastIndex=0;var r=rc.exec(t.substring(e,e+2));return r?(n.H=+r[0],e+r[0].length):-1}function Kt(n,t,e){rc.lastIndex=0;var r=rc.exec(t.substring(e,e+2));return r?(n.M=+r[0],e+r[0].length):-1}function Qt(n,t,e){rc.lastIndex=0;var r=rc.exec(t.substring(e,e+2));return r?(n.S=+r[0],e+r[0].length):-1}function ne(n,t,e){rc.lastIndex=0;var r=rc.exec(t.substring(e,e+3));return r?(n.L=+r[0],e+r[0].length):-1}function te(n){var t=n.getTimezoneOffset(),e=t>0?"-":"+",r=~~(ua(t)/60),u=ua(t)%60;return e+jt(r,"0",2)+jt(u,"0",2)}function ee(n,t,e){uc.lastIndex=0;var r=uc.exec(t.substring(e,e+1));return r?e+r[0].length:-1}function re(n){for(var t=n.length,e=-1;++e=0?1:-1,a=o*e,c=Math.cos(t),s=Math.sin(t),l=i*s,f=u*c+l*Math.cos(a),h=l*o*Math.sin(a);lc.add(Math.atan2(h,f)),r=n,u=c,i=s}var t,e,r,u,i;fc.point=function(o,a){fc.point=n,r=(t=o)*Aa,u=Math.cos(a=(e=a)*Aa/2+ba/4),i=Math.sin(a)},fc.lineEnd=function(){n(t,e)}}function le(n){var t=n[0],e=n[1],r=Math.cos(e);return[r*Math.cos(t),r*Math.sin(t),Math.sin(e)]}function fe(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]}function he(n,t){return[n[1]*t[2]-n[2]*t[1],n[2]*t[0]-n[0]*t[2],n[0]*t[1]-n[1]*t[0]]}function ge(n,t){n[0]+=t[0],n[1]+=t[1],n[2]+=t[2]}function pe(n,t){return[n[0]*t,n[1]*t,n[2]*t]}function ve(n){var t=Math.sqrt(n[0]*n[0]+n[1]*n[1]+n[2]*n[2]);n[0]/=t,n[1]/=t,n[2]/=t}function de(n){return[Math.atan2(n[1],n[0]),G(n[2])]}function me(n,t){return ua(n[0]-t[0])a;++a)u.point((e=n[a])[0],e[1]);return u.lineEnd(),void 0}var c=new Ee(e,n,null,!0),s=new Ee(e,null,c,!1);c.o=s,i.push(c),o.push(s),c=new Ee(r,n,null,!1),s=new Ee(r,null,c,!0),c.o=s,i.push(c),o.push(s)}}),o.sort(t),ke(i),ke(o),i.length){for(var a=0,c=e,s=o.length;s>a;++a)o[a].e=c=!c;for(var l,f,h=i[0];;){for(var g=h,p=!0;g.v;)if((g=g.n)===h)return;l=g.z,u.lineStart();do{if(g.v=g.o.v=!0,g.e){if(p)for(var a=0,s=l.length;s>a;++a)u.point((f=l[a])[0],f[1]);else r(g.x,g.n.x,1,u);g=g.n}else{if(p){l=g.p.z;for(var a=l.length-1;a>=0;--a)u.point((f=l[a])[0],f[1])}else r(g.x,g.p.x,-1,u);g=g.p}g=g.o,l=g.z,p=!p}while(!g.v);u.lineEnd()}}}function ke(n){if(t=n.length){for(var t,e,r=0,u=n[0];++r0){for(_||(i.polygonStart(),_=!0),i.lineStart();++o1&&2&t&&e.push(e.pop().concat(e.shift())),g.push(e.filter(Ce))}var g,p,v,d=t(i),m=u.invert(r[0],r[1]),y={point:o,lineStart:c,lineEnd:s,polygonStart:function(){y.point=l,y.lineStart=f,y.lineEnd=h,g=[],p=[]},polygonEnd:function(){y.point=o,y.lineStart=c,y.lineEnd=s,g=Zo.merge(g);var n=Le(m,p);g.length?(_||(i.polygonStart(),_=!0),Se(g,ze,n,e,i)):n&&(_||(i.polygonStart(),_=!0),i.lineStart(),e(null,null,1,i),i.lineEnd()),_&&(i.polygonEnd(),_=!1),g=p=null},sphere:function(){i.polygonStart(),i.lineStart(),e(null,null,1,i),i.lineEnd(),i.polygonEnd()}},x=Ne(),M=t(x),_=!1;return y}}function Ce(n){return n.length>1}function Ne(){var n,t=[];return{lineStart:function(){t.push(n=[])},point:function(t,e){n.push([t,e])},lineEnd:v,buffer:function(){var e=t;return t=[],n=null,e},rejoin:function(){t.length>1&&t.push(t.pop().concat(t.shift()))}}}function ze(n,t){return((n=n.x)[0]<0?n[1]-Sa-ka:Sa-n[1])-((t=t.x)[0]<0?t[1]-Sa-ka:Sa-t[1])}function Le(n,t){var e=n[0],r=n[1],u=[Math.sin(e),-Math.cos(e),0],i=0,o=0;lc.reset();for(var a=0,c=t.length;c>a;++a){var s=t[a],l=s.length;if(l)for(var f=s[0],h=f[0],g=f[1]/2+ba/4,p=Math.sin(g),v=Math.cos(g),d=1;;){d===l&&(d=0),n=s[d];var m=n[0],y=n[1]/2+ba/4,x=Math.sin(y),M=Math.cos(y),_=m-h,b=_>=0?1:-1,w=b*_,S=w>ba,k=p*x;if(lc.add(Math.atan2(k*b*Math.sin(w),v*M+k*Math.cos(w))),i+=S?_+b*wa:_,S^h>=e^m>=e){var E=he(le(f),le(n));ve(E);var A=he(u,E);ve(A);var C=(S^_>=0?-1:1)*G(A[2]);(r>C||r===C&&(E[0]||E[1]))&&(o+=S^_>=0?1:-1)}if(!d++)break;h=m,p=x,v=M,f=n}}return(-ka>i||ka>i&&0>lc)^1&o}function Te(n){var t,e=0/0,r=0/0,u=0/0;return{lineStart:function(){n.lineStart(),t=1},point:function(i,o){var a=i>0?ba:-ba,c=ua(i-e);ua(c-ba)0?Sa:-Sa),n.point(u,r),n.lineEnd(),n.lineStart(),n.point(a,r),n.point(i,r),t=0):u!==a&&c>=ba&&(ua(e-u)ka?Math.atan((Math.sin(t)*(i=Math.cos(r))*Math.sin(e)-Math.sin(r)*(u=Math.cos(t))*Math.sin(n))/(u*i*o)):(t+r)/2}function Re(n,t,e,r){var u;if(null==n)u=e*Sa,r.point(-ba,u),r.point(0,u),r.point(ba,u),r.point(ba,0),r.point(ba,-u),r.point(0,-u),r.point(-ba,-u),r.point(-ba,0),r.point(-ba,u);else if(ua(n[0]-t[0])>ka){var i=n[0]i}function e(n){var e,i,c,s,l;return{lineStart:function(){s=c=!1,l=1},point:function(f,h){var g,p=[f,h],v=t(f,h),d=o?v?0:u(f,h):v?u(f+(0>f?ba:-ba),h):0;if(!e&&(s=c=v)&&n.lineStart(),v!==c&&(g=r(e,p),(me(e,g)||me(p,g))&&(p[0]+=ka,p[1]+=ka,v=t(p[0],p[1]))),v!==c)l=0,v?(n.lineStart(),g=r(p,e),n.point(g[0],g[1])):(g=r(e,p),n.point(g[0],g[1]),n.lineEnd()),e=g;else if(a&&e&&o^v){var m;d&i||!(m=r(p,e,!0))||(l=0,o?(n.lineStart(),n.point(m[0][0],m[0][1]),n.point(m[1][0],m[1][1]),n.lineEnd()):(n.point(m[1][0],m[1][1]),n.lineEnd(),n.lineStart(),n.point(m[0][0],m[0][1])))}!v||e&&me(e,p)||n.point(p[0],p[1]),e=p,c=v,i=d},lineEnd:function(){c&&n.lineEnd(),e=null},clean:function(){return l|(s&&c)<<1}}}function r(n,t,e){var r=le(n),u=le(t),o=[1,0,0],a=he(r,u),c=fe(a,a),s=a[0],l=c-s*s;if(!l)return!e&&n;var f=i*c/l,h=-i*s/l,g=he(o,a),p=pe(o,f),v=pe(a,h);ge(p,v);var d=g,m=fe(p,d),y=fe(d,d),x=m*m-y*(fe(p,p)-1);if(!(0>x)){var M=Math.sqrt(x),_=pe(d,(-m-M)/y);if(ge(_,p),_=de(_),!e)return _;var b,w=n[0],S=t[0],k=n[1],E=t[1];w>S&&(b=w,w=S,S=b);var A=S-w,C=ua(A-ba)A;if(!C&&k>E&&(b=k,k=E,E=b),N?C?k+E>0^_[1]<(ua(_[0]-w)ba^(w<=_[0]&&_[0]<=S)){var z=pe(d,(-m+M)/y);return ge(z,p),[_,de(z)]}}}function u(t,e){var r=o?n:ba-n,u=0;return-r>t?u|=1:t>r&&(u|=2),-r>e?u|=4:e>r&&(u|=8),u}var i=Math.cos(n),o=i>0,a=ua(i)>ka,c=sr(n,6*Aa);return Ae(t,e,c,o?[0,-n]:[-ba,n-ba])}function Pe(n,t,e,r){return function(u){var i,o=u.a,a=u.b,c=o.x,s=o.y,l=a.x,f=a.y,h=0,g=1,p=l-c,v=f-s;if(i=n-c,p||!(i>0)){if(i/=p,0>p){if(h>i)return;g>i&&(g=i)}else if(p>0){if(i>g)return;i>h&&(h=i)}if(i=e-c,p||!(0>i)){if(i/=p,0>p){if(i>g)return;i>h&&(h=i)}else if(p>0){if(h>i)return;g>i&&(g=i)}if(i=t-s,v||!(i>0)){if(i/=v,0>v){if(h>i)return;g>i&&(g=i)}else if(v>0){if(i>g)return;i>h&&(h=i)}if(i=r-s,v||!(0>i)){if(i/=v,0>v){if(i>g)return;i>h&&(h=i)}else if(v>0){if(h>i)return;g>i&&(g=i)}return h>0&&(u.a={x:c+h*p,y:s+h*v}),1>g&&(u.b={x:c+g*p,y:s+g*v}),u}}}}}}function Ue(n,t,e,r){function u(r,u){return ua(r[0]-n)0?0:3:ua(r[0]-e)0?2:1:ua(r[1]-t)0?1:0:u>0?3:2}function i(n,t){return o(n.x,t.x)}function o(n,t){var e=u(n,1),r=u(t,1);return e!==r?e-r:0===e?t[1]-n[1]:1===e?n[0]-t[0]:2===e?n[1]-t[1]:t[0]-n[0]}return function(a){function c(n){for(var t=0,e=d.length,r=n[1],u=0;e>u;++u)for(var i,o=1,a=d[u],c=a.length,s=a[0];c>o;++o)i=a[o],s[1]<=r?i[1]>r&&W(s,i,n)>0&&++t:i[1]<=r&&W(s,i,n)<0&&--t,s=i;return 0!==t}function s(i,a,c,s){var l=0,f=0;if(null==i||(l=u(i,c))!==(f=u(a,c))||o(i,a)<0^c>0){do s.point(0===l||3===l?n:e,l>1?r:t);while((l=(l+c+4)%4)!==f)}else s.point(a[0],a[1])}function l(u,i){return u>=n&&e>=u&&i>=t&&r>=i}function f(n,t){l(n,t)&&a.point(n,t)}function h(){N.point=p,d&&d.push(m=[]),S=!0,w=!1,_=b=0/0}function g(){v&&(p(y,x),M&&w&&A.rejoin(),v.push(A.buffer())),N.point=f,w&&a.lineEnd()}function p(n,t){n=Math.max(-kc,Math.min(kc,n)),t=Math.max(-kc,Math.min(kc,t));var e=l(n,t);if(d&&m.push([n,t]),S)y=n,x=t,M=e,S=!1,e&&(a.lineStart(),a.point(n,t));else if(e&&w)a.point(n,t);else{var r={a:{x:_,y:b},b:{x:n,y:t}};C(r)?(w||(a.lineStart(),a.point(r.a.x,r.a.y)),a.point(r.b.x,r.b.y),e||a.lineEnd(),k=!1):e&&(a.lineStart(),a.point(n,t),k=!1)}_=n,b=t,w=e}var v,d,m,y,x,M,_,b,w,S,k,E=a,A=Ne(),C=Pe(n,t,e,r),N={point:f,lineStart:h,lineEnd:g,polygonStart:function(){a=A,v=[],d=[],k=!0},polygonEnd:function(){a=E,v=Zo.merge(v);var t=c([n,r]),e=k&&t,u=v.length;(e||u)&&(a.polygonStart(),e&&(a.lineStart(),s(null,null,1,a),a.lineEnd()),u&&Se(v,i,t,s,a),a.polygonEnd()),v=d=m=null}};return N}}function je(n,t){function e(e,r){return e=n(e,r),t(e[0],e[1])}return n.invert&&t.invert&&(e.invert=function(e,r){return e=t.invert(e,r),e&&n.invert(e[0],e[1])}),e}function He(n){var t=0,e=ba/3,r=tr(n),u=r(t,e);return u.parallels=function(n){return arguments.length?r(t=n[0]*ba/180,e=n[1]*ba/180):[180*(t/ba),180*(e/ba)]},u}function Fe(n,t){function e(n,t){var e=Math.sqrt(i-2*u*Math.sin(t))/u;return[e*Math.sin(n*=u),o-e*Math.cos(n)]}var r=Math.sin(n),u=(r+Math.sin(t))/2,i=1+r*(2*u-r),o=Math.sqrt(i)/u;return e.invert=function(n,t){var e=o-t;return[Math.atan2(n,e)/u,G((i-(n*n+e*e)*u*u)/(2*u))]},e}function Oe(){function n(n,t){Ac+=u*n-r*t,r=n,u=t}var t,e,r,u;Tc.point=function(i,o){Tc.point=n,t=r=i,e=u=o},Tc.lineEnd=function(){n(t,e)}}function Ye(n,t){Cc>n&&(Cc=n),n>zc&&(zc=n),Nc>t&&(Nc=t),t>Lc&&(Lc=t)}function Ie(){function n(n,t){o.push("M",n,",",t,i)}function t(n,t){o.push("M",n,",",t),a.point=e}function e(n,t){o.push("L",n,",",t)}function r(){a.point=n}function u(){o.push("Z")}var i=Ze(4.5),o=[],a={point:n,lineStart:function(){a.point=t},lineEnd:r,polygonStart:function(){a.lineEnd=u},polygonEnd:function(){a.lineEnd=r,a.point=n},pointRadius:function(n){return i=Ze(n),a},result:function(){if(o.length){var n=o.join("");return o=[],n}}};return a}function Ze(n){return"m0,"+n+"a"+n+","+n+" 0 1,1 0,"+-2*n+"a"+n+","+n+" 0 1,1 0,"+2*n+"z"}function Ve(n,t){pc+=n,vc+=t,++dc}function Xe(){function n(n,r){var u=n-t,i=r-e,o=Math.sqrt(u*u+i*i);mc+=o*(t+n)/2,yc+=o*(e+r)/2,xc+=o,Ve(t=n,e=r)}var t,e;Rc.point=function(r,u){Rc.point=n,Ve(t=r,e=u)}}function $e(){Rc.point=Ve}function Be(){function n(n,t){var e=n-r,i=t-u,o=Math.sqrt(e*e+i*i);mc+=o*(r+n)/2,yc+=o*(u+t)/2,xc+=o,o=u*n-r*t,Mc+=o*(r+n),_c+=o*(u+t),bc+=3*o,Ve(r=n,u=t)}var t,e,r,u;Rc.point=function(i,o){Rc.point=n,Ve(t=r=i,e=u=o)},Rc.lineEnd=function(){n(t,e)}}function We(n){function t(t,e){n.moveTo(t,e),n.arc(t,e,o,0,wa)}function e(t,e){n.moveTo(t,e),a.point=r}function r(t,e){n.lineTo(t,e)}function u(){a.point=t}function i(){n.closePath()}var o=4.5,a={point:t,lineStart:function(){a.point=e},lineEnd:u,polygonStart:function(){a.lineEnd=i},polygonEnd:function(){a.lineEnd=u,a.point=t},pointRadius:function(n){return o=n,a},result:v};return a}function Je(n){function t(n){return(a?r:e)(n)}function e(t){return Qe(t,function(e,r){e=n(e,r),t.point(e[0],e[1])})}function r(t){function e(e,r){e=n(e,r),t.point(e[0],e[1])}function r(){x=0/0,S.point=i,t.lineStart()}function i(e,r){var i=le([e,r]),o=n(e,r);u(x,M,y,_,b,w,x=o[0],M=o[1],y=e,_=i[0],b=i[1],w=i[2],a,t),t.point(x,M)}function o(){S.point=e,t.lineEnd()}function c(){r(),S.point=s,S.lineEnd=l}function s(n,t){i(f=n,h=t),g=x,p=M,v=_,d=b,m=w,S.point=i}function l(){u(x,M,y,_,b,w,g,p,f,v,d,m,a,t),S.lineEnd=o,o()}var f,h,g,p,v,d,m,y,x,M,_,b,w,S={point:e,lineStart:r,lineEnd:o,polygonStart:function(){t.polygonStart(),S.lineStart=c},polygonEnd:function(){t.polygonEnd(),S.lineStart=r}};return S}function u(t,e,r,a,c,s,l,f,h,g,p,v,d,m){var y=l-t,x=f-e,M=y*y+x*x;if(M>4*i&&d--){var _=a+g,b=c+p,w=s+v,S=Math.sqrt(_*_+b*b+w*w),k=Math.asin(w/=S),E=ua(ua(w)-1)i||ua((y*z+x*L)/M-.5)>.3||o>a*g+c*p+s*v)&&(u(t,e,r,a,c,s,C,N,E,_/=S,b/=S,w,d,m),m.point(C,N),u(C,N,E,_,b,w,l,f,h,g,p,v,d,m))}}var i=.5,o=Math.cos(30*Aa),a=16; -return t.precision=function(n){return arguments.length?(a=(i=n*n)>0&&16,t):Math.sqrt(i)},t}function Ge(n){var t=Je(function(t,e){return n([t*Ca,e*Ca])});return function(n){return er(t(n))}}function Ke(n){this.stream=n}function Qe(n,t){return{point:t,sphere:function(){n.sphere()},lineStart:function(){n.lineStart()},lineEnd:function(){n.lineEnd()},polygonStart:function(){n.polygonStart()},polygonEnd:function(){n.polygonEnd()}}}function nr(n){return tr(function(){return n})()}function tr(n){function t(n){return n=a(n[0]*Aa,n[1]*Aa),[n[0]*h+c,s-n[1]*h]}function e(n){return n=a.invert((n[0]-c)/h,(s-n[1])/h),n&&[n[0]*Ca,n[1]*Ca]}function r(){a=je(o=ir(m,y,x),i);var n=i(v,d);return c=g-n[0]*h,s=p+n[1]*h,u()}function u(){return l&&(l.valid=!1,l=null),t}var i,o,a,c,s,l,f=Je(function(n,t){return n=i(n,t),[n[0]*h+c,s-n[1]*h]}),h=150,g=480,p=250,v=0,d=0,m=0,y=0,x=0,M=Sc,_=wt,b=null,w=null;return t.stream=function(n){return l&&(l.valid=!1),l=er(M(o,f(_(n)))),l.valid=!0,l},t.clipAngle=function(n){return arguments.length?(M=null==n?(b=n,Sc):De((b=+n)*Aa),u()):b},t.clipExtent=function(n){return arguments.length?(w=n,_=n?Ue(n[0][0],n[0][1],n[1][0],n[1][1]):wt,u()):w},t.scale=function(n){return arguments.length?(h=+n,r()):h},t.translate=function(n){return arguments.length?(g=+n[0],p=+n[1],r()):[g,p]},t.center=function(n){return arguments.length?(v=n[0]%360*Aa,d=n[1]%360*Aa,r()):[v*Ca,d*Ca]},t.rotate=function(n){return arguments.length?(m=n[0]%360*Aa,y=n[1]%360*Aa,x=n.length>2?n[2]%360*Aa:0,r()):[m*Ca,y*Ca,x*Ca]},Zo.rebind(t,f,"precision"),function(){return i=n.apply(this,arguments),t.invert=i.invert&&e,r()}}function er(n){return Qe(n,function(t,e){n.point(t*Aa,e*Aa)})}function rr(n,t){return[n,t]}function ur(n,t){return[n>ba?n-wa:-ba>n?n+wa:n,t]}function ir(n,t,e){return n?t||e?je(ar(n),cr(t,e)):ar(n):t||e?cr(t,e):ur}function or(n){return function(t,e){return t+=n,[t>ba?t-wa:-ba>t?t+wa:t,e]}}function ar(n){var t=or(n);return t.invert=or(-n),t}function cr(n,t){function e(n,t){var e=Math.cos(t),a=Math.cos(n)*e,c=Math.sin(n)*e,s=Math.sin(t),l=s*r+a*u;return[Math.atan2(c*i-l*o,a*r-s*u),G(l*i+c*o)]}var r=Math.cos(n),u=Math.sin(n),i=Math.cos(t),o=Math.sin(t);return e.invert=function(n,t){var e=Math.cos(t),a=Math.cos(n)*e,c=Math.sin(n)*e,s=Math.sin(t),l=s*i-c*o;return[Math.atan2(c*i+s*o,a*r+l*u),G(l*r-a*u)]},e}function sr(n,t){var e=Math.cos(n),r=Math.sin(n);return function(u,i,o,a){var c=o*t;null!=u?(u=lr(e,u),i=lr(e,i),(o>0?i>u:u>i)&&(u+=o*wa)):(u=n+o*wa,i=n-.5*c);for(var s,l=u;o>0?l>i:i>l;l-=c)a.point((s=de([e,-r*Math.cos(l),-r*Math.sin(l)]))[0],s[1])}}function lr(n,t){var e=le(t);e[0]-=n,ve(e);var r=J(-e[1]);return((-e[2]<0?-r:r)+2*Math.PI-ka)%(2*Math.PI)}function fr(n,t,e){var r=Zo.range(n,t-ka,e).concat(t);return function(n){return r.map(function(t){return[n,t]})}}function hr(n,t,e){var r=Zo.range(n,t-ka,e).concat(t);return function(n){return r.map(function(t){return[t,n]})}}function gr(n){return n.source}function pr(n){return n.target}function vr(n,t,e,r){var u=Math.cos(t),i=Math.sin(t),o=Math.cos(r),a=Math.sin(r),c=u*Math.cos(n),s=u*Math.sin(n),l=o*Math.cos(e),f=o*Math.sin(e),h=2*Math.asin(Math.sqrt(tt(r-t)+u*o*tt(e-n))),g=1/Math.sin(h),p=h?function(n){var t=Math.sin(n*=h)*g,e=Math.sin(h-n)*g,r=e*c+t*l,u=e*s+t*f,o=e*i+t*a;return[Math.atan2(u,r)*Ca,Math.atan2(o,Math.sqrt(r*r+u*u))*Ca]}:function(){return[n*Ca,t*Ca]};return p.distance=h,p}function dr(){function n(n,u){var i=Math.sin(u*=Aa),o=Math.cos(u),a=ua((n*=Aa)-t),c=Math.cos(a);Dc+=Math.atan2(Math.sqrt((a=o*Math.sin(a))*a+(a=r*i-e*o*c)*a),e*i+r*o*c),t=n,e=i,r=o}var t,e,r;Pc.point=function(u,i){t=u*Aa,e=Math.sin(i*=Aa),r=Math.cos(i),Pc.point=n},Pc.lineEnd=function(){Pc.point=Pc.lineEnd=v}}function mr(n,t){function e(t,e){var r=Math.cos(t),u=Math.cos(e),i=n(r*u);return[i*u*Math.sin(t),i*Math.sin(e)]}return e.invert=function(n,e){var r=Math.sqrt(n*n+e*e),u=t(r),i=Math.sin(u),o=Math.cos(u);return[Math.atan2(n*i,r*o),Math.asin(r&&e*i/r)]},e}function yr(n,t){function e(n,t){o>0?-Sa+ka>t&&(t=-Sa+ka):t>Sa-ka&&(t=Sa-ka);var e=o/Math.pow(u(t),i);return[e*Math.sin(i*n),o-e*Math.cos(i*n)]}var r=Math.cos(n),u=function(n){return Math.tan(ba/4+n/2)},i=n===t?Math.sin(n):Math.log(r/Math.cos(t))/Math.log(u(t)/u(n)),o=r*Math.pow(u(n),i)/i;return i?(e.invert=function(n,t){var e=o-t,r=B(i)*Math.sqrt(n*n+e*e);return[Math.atan2(n,e)/i,2*Math.atan(Math.pow(o/r,1/i))-Sa]},e):Mr}function xr(n,t){function e(n,t){var e=i-t;return[e*Math.sin(u*n),i-e*Math.cos(u*n)]}var r=Math.cos(n),u=n===t?Math.sin(n):(r-Math.cos(t))/(t-n),i=r/u+n;return ua(u)u;u++){for(;r>1&&W(n[e[r-2]],n[e[r-1]],n[u])<=0;)--r;e[r++]=u}return e.slice(0,r)}function Er(n,t){return n[0]-t[0]||n[1]-t[1]}function Ar(n,t,e){return(e[0]-t[0])*(n[1]-t[1])<(e[1]-t[1])*(n[0]-t[0])}function Cr(n,t,e,r){var u=n[0],i=e[0],o=t[0]-u,a=r[0]-i,c=n[1],s=e[1],l=t[1]-c,f=r[1]-s,h=(a*(c-s)-f*(u-i))/(f*o-a*l);return[u+h*o,c+h*l]}function Nr(n){var t=n[0],e=n[n.length-1];return!(t[0]-e[0]||t[1]-e[1])}function zr(){Gr(this),this.edge=this.site=this.circle=null}function Lr(n){var t=Bc.pop()||new zr;return t.site=n,t}function Tr(n){Yr(n),Vc.remove(n),Bc.push(n),Gr(n)}function qr(n){var t=n.circle,e=t.x,r=t.cy,u={x:e,y:r},i=n.P,o=n.N,a=[n];Tr(n);for(var c=i;c.circle&&ua(e-c.circle.x)l;++l)s=a[l],c=a[l-1],Br(s.edge,c.site,s.site,u);c=a[0],s=a[f-1],s.edge=Xr(c.site,s.site,null,u),Or(c),Or(s)}function Rr(n){for(var t,e,r,u,i=n.x,o=n.y,a=Vc._;a;)if(r=Dr(a,o)-i,r>ka)a=a.L;else{if(u=i-Pr(a,o),!(u>ka)){r>-ka?(t=a.P,e=a):u>-ka?(t=a,e=a.N):t=e=a;break}if(!a.R){t=a;break}a=a.R}var c=Lr(n);if(Vc.insert(t,c),t||e){if(t===e)return Yr(t),e=Lr(t.site),Vc.insert(c,e),c.edge=e.edge=Xr(t.site,c.site),Or(t),Or(e),void 0;if(!e)return c.edge=Xr(t.site,c.site),void 0;Yr(t),Yr(e);var s=t.site,l=s.x,f=s.y,h=n.x-l,g=n.y-f,p=e.site,v=p.x-l,d=p.y-f,m=2*(h*d-g*v),y=h*h+g*g,x=v*v+d*d,M={x:(d*y-g*x)/m+l,y:(h*x-v*y)/m+f};Br(e.edge,s,p,M),c.edge=Xr(s,n,null,M),e.edge=Xr(n,p,null,M),Or(t),Or(e)}}function Dr(n,t){var e=n.site,r=e.x,u=e.y,i=u-t;if(!i)return r;var o=n.P;if(!o)return-1/0;e=o.site;var a=e.x,c=e.y,s=c-t;if(!s)return a;var l=a-r,f=1/i-1/s,h=l/s;return f?(-h+Math.sqrt(h*h-2*f*(l*l/(-2*s)-c+s/2+u-i/2)))/f+r:(r+a)/2}function Pr(n,t){var e=n.N;if(e)return Dr(e,t);var r=n.site;return r.y===t?r.x:1/0}function Ur(n){this.site=n,this.edges=[]}function jr(n){for(var t,e,r,u,i,o,a,c,s,l,f=n[0][0],h=n[1][0],g=n[0][1],p=n[1][1],v=Zc,d=v.length;d--;)if(i=v[d],i&&i.prepare())for(a=i.edges,c=a.length,o=0;c>o;)l=a[o].end(),r=l.x,u=l.y,s=a[++o%c].start(),t=s.x,e=s.y,(ua(r-t)>ka||ua(u-e)>ka)&&(a.splice(o,0,new Wr($r(i.site,l,ua(r-f)ka?{x:f,y:ua(t-f)ka?{x:ua(e-p)ka?{x:h,y:ua(t-h)ka?{x:ua(e-g)=-Ea)){var g=c*c+s*s,p=l*l+f*f,v=(f*g-s*p)/h,d=(c*p-l*g)/h,f=d+a,m=Wc.pop()||new Fr;m.arc=n,m.site=u,m.x=v+o,m.y=f+Math.sqrt(v*v+d*d),m.cy=f,n.circle=m;for(var y=null,x=$c._;x;)if(m.yd||d>=a)return;if(h>p){if(i){if(i.y>=s)return}else i={x:d,y:c};e={x:d,y:s}}else{if(i){if(i.yr||r>1)if(h>p){if(i){if(i.y>=s)return}else i={x:(c-u)/r,y:c};e={x:(s-u)/r,y:s}}else{if(i){if(i.yg){if(i){if(i.x>=a)return}else i={x:o,y:r*o+u};e={x:a,y:r*a+u}}else{if(i){if(i.xi&&(u=t.substring(i,u),a[o]?a[o]+=u:a[++o]=u),(e=e[0])===(r=r[0])?a[o]?a[o]+=r:a[++o]=r:(a[++o]=null,c.push({i:o,x:lu(e,r)})),i=Kc.lastIndex;return ir;++r)a[(e=c[r]).i]=e.x(n);return a.join("")})}function hu(n,t){for(var e,r=Zo.interpolators.length;--r>=0&&!(e=Zo.interpolators[r](n,t)););return e}function gu(n,t){var e,r=[],u=[],i=n.length,o=t.length,a=Math.min(n.length,t.length);for(e=0;a>e;++e)r.push(hu(n[e],t[e]));for(;i>e;++e)u[e]=n[e];for(;o>e;++e)u[e]=t[e];return function(n){for(e=0;a>e;++e)u[e]=r[e](n);return u}}function pu(n){return function(t){return 0>=t?0:t>=1?1:n(t)}}function vu(n){return function(t){return 1-n(1-t)}}function du(n){return function(t){return.5*(.5>t?n(2*t):2-n(2-2*t))}}function mu(n){return n*n}function yu(n){return n*n*n}function xu(n){if(0>=n)return 0;if(n>=1)return 1;var t=n*n,e=t*n;return 4*(.5>n?e:3*(n-t)+e-.75)}function Mu(n){return function(t){return Math.pow(t,n)}}function _u(n){return 1-Math.cos(n*Sa)}function bu(n){return Math.pow(2,10*(n-1))}function wu(n){return 1-Math.sqrt(1-n*n)}function Su(n,t){var e;return arguments.length<2&&(t=.45),arguments.length?e=t/wa*Math.asin(1/n):(n=1,e=t/4),function(r){return 1+n*Math.pow(2,-10*r)*Math.sin((r-e)*wa/t)}}function ku(n){return n||(n=1.70158),function(t){return t*t*((n+1)*t-n)}}function Eu(n){return 1/2.75>n?7.5625*n*n:2/2.75>n?7.5625*(n-=1.5/2.75)*n+.75:2.5/2.75>n?7.5625*(n-=2.25/2.75)*n+.9375:7.5625*(n-=2.625/2.75)*n+.984375}function Au(n,t){n=Zo.hcl(n),t=Zo.hcl(t);var e=n.h,r=n.c,u=n.l,i=t.h-e,o=t.c-r,a=t.l-u;return isNaN(o)&&(o=0,r=isNaN(r)?t.c:r),isNaN(i)?(i=0,e=isNaN(e)?t.h:e):i>180?i-=360:-180>i&&(i+=360),function(n){return ot(e+i*n,r+o*n,u+a*n)+""}}function Cu(n,t){n=Zo.hsl(n),t=Zo.hsl(t);var e=n.h,r=n.s,u=n.l,i=t.h-e,o=t.s-r,a=t.l-u;return isNaN(o)&&(o=0,r=isNaN(r)?t.s:r),isNaN(i)?(i=0,e=isNaN(e)?t.h:e):i>180?i-=360:-180>i&&(i+=360),function(n){return ut(e+i*n,r+o*n,u+a*n)+""}}function Nu(n,t){n=Zo.lab(n),t=Zo.lab(t);var e=n.l,r=n.a,u=n.b,i=t.l-e,o=t.a-r,a=t.b-u;return function(n){return ct(e+i*n,r+o*n,u+a*n)+""}}function zu(n,t){return t-=n,function(e){return Math.round(n+t*e)}}function Lu(n){var t=[n.a,n.b],e=[n.c,n.d],r=qu(t),u=Tu(t,e),i=qu(Ru(e,t,-u))||0;t[0]*e[1]180?l+=360:l-s>180&&(s+=360),u.push({i:r.push(r.pop()+"rotate(",null,")")-2,x:lu(s,l)})):l&&r.push(r.pop()+"rotate("+l+")"),f!=h?u.push({i:r.push(r.pop()+"skewX(",null,")")-2,x:lu(f,h)}):h&&r.push(r.pop()+"skewX("+h+")"),g[0]!=p[0]||g[1]!=p[1]?(e=r.push(r.pop()+"scale(",null,",",null,")"),u.push({i:e-4,x:lu(g[0],p[0])},{i:e-2,x:lu(g[1],p[1])})):(1!=p[0]||1!=p[1])&&r.push(r.pop()+"scale("+p+")"),e=u.length,function(n){for(var t,i=-1;++i=0;)e.push(u[r])}function Bu(n,t){for(var e=[n],r=[];null!=(n=e.pop());)if(r.push(n),(i=n.children)&&(u=i.length))for(var u,i,o=-1;++oe;++e)(t=n[e][1])>u&&(r=e,u=t);return r}function ii(n){return n.reduce(oi,0)}function oi(n,t){return n+t[1]}function ai(n,t){return ci(n,Math.ceil(Math.log(t.length)/Math.LN2+1))}function ci(n,t){for(var e=-1,r=+n[0],u=(n[1]-r)/t,i=[];++e<=t;)i[e]=u*e+r;return i}function si(n){return[Zo.min(n),Zo.max(n)]}function li(n,t){return n.value-t.value}function fi(n,t){var e=n._pack_next;n._pack_next=t,t._pack_prev=n,t._pack_next=e,e._pack_prev=t}function hi(n,t){n._pack_next=t,t._pack_prev=n}function gi(n,t){var e=t.x-n.x,r=t.y-n.y,u=n.r+t.r;return.999*u*u>e*e+r*r}function pi(n){function t(n){l=Math.min(n.x-n.r,l),f=Math.max(n.x+n.r,f),h=Math.min(n.y-n.r,h),g=Math.max(n.y+n.r,g)}if((e=n.children)&&(s=e.length)){var e,r,u,i,o,a,c,s,l=1/0,f=-1/0,h=1/0,g=-1/0;if(e.forEach(vi),r=e[0],r.x=-r.r,r.y=0,t(r),s>1&&(u=e[1],u.x=u.r,u.y=0,t(u),s>2))for(i=e[2],yi(r,u,i),t(i),fi(r,i),r._pack_prev=i,fi(i,u),u=r._pack_next,o=3;s>o;o++){yi(r,u,i=e[o]);var p=0,v=1,d=1;for(a=u._pack_next;a!==u;a=a._pack_next,v++)if(gi(a,i)){p=1;break}if(1==p)for(c=r._pack_prev;c!==a._pack_prev&&!gi(c,i);c=c._pack_prev,d++);p?(d>v||v==d&&u.ro;o++)i=e[o],i.x-=m,i.y-=y,x=Math.max(x,i.r+Math.sqrt(i.x*i.x+i.y*i.y));n.r=x,e.forEach(di)}}function vi(n){n._pack_next=n._pack_prev=n}function di(n){delete n._pack_next,delete n._pack_prev}function mi(n,t,e,r){var u=n.children;if(n.x=t+=r*n.x,n.y=e+=r*n.y,n.r*=r,u)for(var i=-1,o=u.length;++i=0;)t=u[i],t.z+=e,t.m+=e,e+=t.s+(r+=t.c)}function Si(n,t,e){return n.a.parent===t.parent?n.a:e}function ki(n){return 1+Zo.max(n,function(n){return n.y})}function Ei(n){return n.reduce(function(n,t){return n+t.x},0)/n.length}function Ai(n){var t=n.children;return t&&t.length?Ai(t[0]):n}function Ci(n){var t,e=n.children;return e&&(t=e.length)?Ci(e[t-1]):n}function Ni(n){return{x:n.x,y:n.y,dx:n.dx,dy:n.dy}}function zi(n,t){var e=n.x+t[3],r=n.y+t[0],u=n.dx-t[1]-t[3],i=n.dy-t[0]-t[2];return 0>u&&(e+=u/2,u=0),0>i&&(r+=i/2,i=0),{x:e,y:r,dx:u,dy:i}}function Li(n){var t=n[0],e=n[n.length-1];return e>t?[t,e]:[e,t]}function Ti(n){return n.rangeExtent?n.rangeExtent():Li(n.range())}function qi(n,t,e,r){var u=e(n[0],n[1]),i=r(t[0],t[1]);return function(n){return i(u(n))}}function Ri(n,t){var e,r=0,u=n.length-1,i=n[r],o=n[u];return i>o&&(e=r,r=u,u=e,e=i,i=o,o=e),n[r]=t.floor(i),n[u]=t.ceil(o),n}function Di(n){return n?{floor:function(t){return Math.floor(t/n)*n},ceil:function(t){return Math.ceil(t/n)*n}}:ss}function Pi(n,t,e,r){var u=[],i=[],o=0,a=Math.min(n.length,t.length)-1;for(n[a]2?Pi:qi,c=r?Uu:Pu;return o=u(n,t,c,e),a=u(t,n,c,hu),i}function i(n){return o(n)}var o,a;return i.invert=function(n){return a(n)},i.domain=function(t){return arguments.length?(n=t.map(Number),u()):n},i.range=function(n){return arguments.length?(t=n,u()):t},i.rangeRound=function(n){return i.range(n).interpolate(zu)},i.clamp=function(n){return arguments.length?(r=n,u()):r},i.interpolate=function(n){return arguments.length?(e=n,u()):e},i.ticks=function(t){return Oi(n,t)},i.tickFormat=function(t,e){return Yi(n,t,e)},i.nice=function(t){return Hi(n,t),u()},i.copy=function(){return Ui(n,t,e,r)},u()}function ji(n,t){return Zo.rebind(n,t,"range","rangeRound","interpolate","clamp")}function Hi(n,t){return Ri(n,Di(Fi(n,t)[2]))}function Fi(n,t){null==t&&(t=10);var e=Li(n),r=e[1]-e[0],u=Math.pow(10,Math.floor(Math.log(r/t)/Math.LN10)),i=t/r*u;return.15>=i?u*=10:.35>=i?u*=5:.75>=i&&(u*=2),e[0]=Math.ceil(e[0]/u)*u,e[1]=Math.floor(e[1]/u)*u+.5*u,e[2]=u,e}function Oi(n,t){return Zo.range.apply(Zo,Fi(n,t))}function Yi(n,t,e){var r=Fi(n,t);if(e){var u=Ga.exec(e);if(u.shift(),"s"===u[8]){var i=Zo.formatPrefix(Math.max(ua(r[0]),ua(r[1])));return u[7]||(u[7]="."+Ii(i.scale(r[2]))),u[8]="f",e=Zo.format(u.join("")),function(n){return e(i.scale(n))+i.symbol}}u[7]||(u[7]="."+Zi(u[8],r)),e=u.join("")}else e=",."+Ii(r[2])+"f";return Zo.format(e)}function Ii(n){return-Math.floor(Math.log(n)/Math.LN10+.01)}function Zi(n,t){var e=Ii(t[2]);return n in ls?Math.abs(e-Ii(Math.max(ua(t[0]),ua(t[1]))))+ +("e"!==n):e-2*("%"===n)}function Vi(n,t,e,r){function u(n){return(e?Math.log(0>n?0:n):-Math.log(n>0?0:-n))/Math.log(t)}function i(n){return e?Math.pow(t,n):-Math.pow(t,-n)}function o(t){return n(u(t))}return o.invert=function(t){return i(n.invert(t))},o.domain=function(t){return arguments.length?(e=t[0]>=0,n.domain((r=t.map(Number)).map(u)),o):r},o.base=function(e){return arguments.length?(t=+e,n.domain(r.map(u)),o):t},o.nice=function(){var t=Ri(r.map(u),e?Math:hs);return n.domain(t),r=t.map(i),o},o.ticks=function(){var n=Li(r),o=[],a=n[0],c=n[1],s=Math.floor(u(a)),l=Math.ceil(u(c)),f=t%1?2:t;if(isFinite(l-s)){if(e){for(;l>s;s++)for(var h=1;f>h;h++)o.push(i(s)*h);o.push(i(s))}else for(o.push(i(s));s++0;h--)o.push(i(s)*h);for(s=0;o[s]c;l--);o=o.slice(s,l)}return o},o.tickFormat=function(n,t){if(!arguments.length)return fs;arguments.length<2?t=fs:"function"!=typeof t&&(t=Zo.format(t));var r,a=Math.max(.1,n/o.ticks().length),c=e?(r=1e-12,Math.ceil):(r=-1e-12,Math.floor);return function(n){return n/i(c(u(n)+r))<=a?t(n):""}},o.copy=function(){return Vi(n.copy(),t,e,r)},ji(o,n)}function Xi(n,t,e){function r(t){return n(u(t))}var u=$i(t),i=$i(1/t);return r.invert=function(t){return i(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain((e=t.map(Number)).map(u)),r):e},r.ticks=function(n){return Oi(e,n)},r.tickFormat=function(n,t){return Yi(e,n,t)},r.nice=function(n){return r.domain(Hi(e,n))},r.exponent=function(o){return arguments.length?(u=$i(t=o),i=$i(1/t),n.domain(e.map(u)),r):t},r.copy=function(){return Xi(n.copy(),t,e)},ji(r,n)}function $i(n){return function(t){return 0>t?-Math.pow(-t,n):Math.pow(t,n)}}function Bi(n,t){function e(e){return i[((u.get(e)||("range"===t.t?u.set(e,n.push(e)):0/0))-1)%i.length]}function r(t,e){return Zo.range(n.length).map(function(n){return t+e*n})}var u,i,a;return e.domain=function(r){if(!arguments.length)return n;n=[],u=new o;for(var i,a=-1,c=r.length;++an?[0/0,0/0]:[n>0?o[n-1]:e[0],nt?0/0:t/i+n,[t,t+1/i]},r.copy=function(){return Ji(n,t,e)},u()}function Gi(n,t){function e(e){return e>=e?t[Zo.bisect(n,e)]:void 0}return e.domain=function(t){return arguments.length?(n=t,e):n},e.range=function(n){return arguments.length?(t=n,e):t},e.invertExtent=function(e){return e=t.indexOf(e),[n[e-1],n[e]]},e.copy=function(){return Gi(n,t)},e}function Ki(n){function t(n){return+n}return t.invert=t,t.domain=t.range=function(e){return arguments.length?(n=e.map(t),t):n},t.ticks=function(t){return Oi(n,t)},t.tickFormat=function(t,e){return Yi(n,t,e)},t.copy=function(){return Ki(n)},t}function Qi(n){return n.innerRadius}function no(n){return n.outerRadius}function to(n){return n.startAngle}function eo(n){return n.endAngle}function ro(n){function t(t){function o(){s.push("M",i(n(l),a))}for(var c,s=[],l=[],f=-1,h=t.length,g=bt(e),p=bt(r);++f1&&u.push("H",r[0]),u.join("")}function ao(n){for(var t=0,e=n.length,r=n[0],u=[r[0],",",r[1]];++t1){a=t[1],i=n[c],c++,r+="C"+(u[0]+o[0])+","+(u[1]+o[1])+","+(i[0]-a[0])+","+(i[1]-a[1])+","+i[0]+","+i[1];for(var s=2;s9&&(u=3*t/Math.sqrt(u),o[a]=u*e,o[a+1]=u*r));for(a=-1;++a<=c;)u=(n[Math.min(c,a+1)][0]-n[Math.max(0,a-1)][0])/(6*(1+o[a]*o[a])),i.push([u||0,o[a]*u||0]);return i}function So(n){return n.length<3?uo(n):n[0]+ho(n,wo(n))}function ko(n){for(var t,e,r,u=-1,i=n.length;++ue?s():(u.active=e,i.event&&i.event.start.call(n,l,t),i.tween.forEach(function(e,r){(r=r.call(n,l,t))&&v.push(r)}),Zo.timer(function(){return p.c=c(r||1)?we:c,1},0,a),void 0)}function c(r){if(u.active!==e)return s();for(var o=r/g,a=f(o),c=v.length;c>0;)v[--c].call(n,a); -return o>=1?(i.event&&i.event.end.call(n,l,t),s()):void 0}function s(){return--u.count?delete u[e]:delete n.__transition__,1}var l=n.__data__,f=i.ease,h=i.delay,g=i.duration,p=Ba,v=[];return p.t=h+a,r>=h?o(r-h):(p.c=o,void 0)},0,a)}}function Uo(n,t){n.attr("transform",function(n){return"translate("+t(n)+",0)"})}function jo(n,t){n.attr("transform",function(n){return"translate(0,"+t(n)+")"})}function Ho(n){return n.toISOString()}function Fo(n,t,e){function r(t){return n(t)}function u(n,e){var r=n[1]-n[0],u=r/e,i=Zo.bisect(Us,u);return i==Us.length?[t.year,Fi(n.map(function(n){return n/31536e6}),e)[2]]:i?t[u/Us[i-1]1?{floor:function(t){for(;e(t=n.floor(t));)t=Oo(t-1);return t},ceil:function(t){for(;e(t=n.ceil(t));)t=Oo(+t+1);return t}}:n))},r.ticks=function(n,t){var e=Li(r.domain()),i=null==n?u(e,10):"number"==typeof n?u(e,n):!n.range&&[{range:n},t];return i&&(n=i[0],t=i[1]),n.range(e[0],Oo(+e[1]+1),1>t?1:t)},r.tickFormat=function(){return e},r.copy=function(){return Fo(n.copy(),t,e)},ji(r,n)}function Oo(n){return new Date(n)}function Yo(n){return JSON.parse(n.responseText)}function Io(n){var t=$o.createRange();return t.selectNode($o.body),t.createContextualFragment(n.responseText)}var Zo={version:"3.4.11"};Date.now||(Date.now=function(){return+new Date});var Vo=[].slice,Xo=function(n){return Vo.call(n)},$o=document,Bo=$o.documentElement,Wo=window;try{Xo(Bo.childNodes)[0].nodeType}catch(Jo){Xo=function(n){for(var t=n.length,e=new Array(t);t--;)e[t]=n[t];return e}}try{$o.createElement("div").style.setProperty("opacity",0,"")}catch(Go){var Ko=Wo.Element.prototype,Qo=Ko.setAttribute,na=Ko.setAttributeNS,ta=Wo.CSSStyleDeclaration.prototype,ea=ta.setProperty;Ko.setAttribute=function(n,t){Qo.call(this,n,t+"")},Ko.setAttributeNS=function(n,t,e){na.call(this,n,t,e+"")},ta.setProperty=function(n,t,e){ea.call(this,n,t+"",e)}}Zo.ascending=n,Zo.descending=function(n,t){return n>t?-1:t>n?1:t>=n?0:0/0},Zo.min=function(n,t){var e,r,u=-1,i=n.length;if(1===arguments.length){for(;++u=e);)e=void 0;for(;++ur&&(e=r)}else{for(;++u=e);)e=void 0;for(;++ur&&(e=r)}return e},Zo.max=function(n,t){var e,r,u=-1,i=n.length;if(1===arguments.length){for(;++u=e);)e=void 0;for(;++ue&&(e=r)}else{for(;++u=e);)e=void 0;for(;++ue&&(e=r)}return e},Zo.extent=function(n,t){var e,r,u,i=-1,o=n.length;if(1===arguments.length){for(;++i=e);)e=u=void 0;for(;++ir&&(e=r),r>u&&(u=r))}else{for(;++i=e);)e=void 0;for(;++ir&&(e=r),r>u&&(u=r))}return[e,u]},Zo.sum=function(n,t){var e,r=0,u=n.length,i=-1;if(1===arguments.length)for(;++i1&&(e=e.map(r)),e=e.filter(t),e.length?Zo.quantile(e.sort(n),.5):void 0};var ra=e(n);Zo.bisectLeft=ra.left,Zo.bisect=Zo.bisectRight=ra.right,Zo.bisector=function(t){return e(1===t.length?function(e,r){return n(t(e),r)}:t)},Zo.shuffle=function(n){for(var t,e,r=n.length;r;)e=0|Math.random()*r--,t=n[r],n[r]=n[e],n[e]=t;return n},Zo.permute=function(n,t){for(var e=t.length,r=new Array(e);e--;)r[e]=n[t[e]];return r},Zo.pairs=function(n){for(var t,e=0,r=n.length-1,u=n[0],i=new Array(0>r?0:r);r>e;)i[e]=[t=u,u=n[++e]];return i},Zo.zip=function(){if(!(u=arguments.length))return[];for(var n=-1,t=Zo.min(arguments,r),e=new Array(t);++n=0;)for(r=n[u],t=r.length;--t>=0;)e[--o]=r[t];return e};var ua=Math.abs;Zo.range=function(n,t,e){if(arguments.length<3&&(e=1,arguments.length<2&&(t=n,n=0)),1/0===(t-n)/e)throw new Error("infinite range");var r,i=[],o=u(ua(e)),a=-1;if(n*=o,t*=o,e*=o,0>e)for(;(r=n+e*++a)>t;)i.push(r/o);else for(;(r=n+e*++a)=i.length)return r?r.call(u,a):e?a.sort(e):a;for(var s,l,f,h,g=-1,p=a.length,v=i[c++],d=new o;++g=i.length)return n;var r=[],u=a[e++];return n.forEach(function(n,u){r.push({key:n,values:t(u,e)})}),u?r.sort(function(n,t){return u(n.key,t.key)}):r}var e,r,u={},i=[],a=[];return u.map=function(t,e){return n(e,t,0)},u.entries=function(e){return t(n(Zo.map,e,0),0)},u.key=function(n){return i.push(n),u},u.sortKeys=function(n){return a[i.length-1]=n,u},u.sortValues=function(n){return e=n,u},u.rollup=function(n){return r=n,u},u},Zo.set=function(n){var t=new h;if(n)for(var e=0,r=n.length;r>e;++e)t.add(n[e]);return t},i(h,{has:a,add:function(n){return this[ia+n]=!0,n},remove:function(n){return n=ia+n,n in this&&delete this[n]},values:s,size:l,empty:f,forEach:function(n){for(var t in this)t.charCodeAt(0)===oa&&n.call(this,t.substring(1))}}),Zo.behavior={},Zo.rebind=function(n,t){for(var e,r=1,u=arguments.length;++r=0&&(r=n.substring(e+1),n=n.substring(0,e)),n)return arguments.length<2?this[n].on(r):this[n].on(r,t);if(2===arguments.length){if(null==t)for(n in this)this.hasOwnProperty(n)&&this[n].on(r,null);return this}},Zo.event=null,Zo.requote=function(n){return n.replace(ca,"\\$&")};var ca=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g,sa={}.__proto__?function(n,t){n.__proto__=t}:function(n,t){for(var e in t)n[e]=t[e]},la=function(n,t){return t.querySelector(n)},fa=function(n,t){return t.querySelectorAll(n)},ha=Bo.matches||Bo[p(Bo,"matchesSelector")],ga=function(n,t){return ha.call(n,t)};"function"==typeof Sizzle&&(la=function(n,t){return Sizzle(n,t)[0]||null},fa=Sizzle,ga=Sizzle.matchesSelector),Zo.selection=function(){return ma};var pa=Zo.selection.prototype=[];pa.select=function(n){var t,e,r,u,i=[];n=b(n);for(var o=-1,a=this.length;++o=0&&(e=n.substring(0,t),n=n.substring(t+1)),va.hasOwnProperty(e)?{space:va[e],local:n}:n}},pa.attr=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node();return n=Zo.ns.qualify(n),n.local?e.getAttributeNS(n.space,n.local):e.getAttribute(n)}for(t in n)this.each(S(t,n[t]));return this}return this.each(S(n,t))},pa.classed=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node(),r=(n=A(n)).length,u=-1;if(t=e.classList){for(;++ur){if("string"!=typeof n){2>r&&(t="");for(e in n)this.each(z(e,n[e],t));return this}if(2>r)return Wo.getComputedStyle(this.node(),null).getPropertyValue(n);e=""}return this.each(z(n,t,e))},pa.property=function(n,t){if(arguments.length<2){if("string"==typeof n)return this.node()[n];for(t in n)this.each(L(t,n[t]));return this}return this.each(L(n,t))},pa.text=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.textContent=null==t?"":t}:null==n?function(){this.textContent=""}:function(){this.textContent=n}):this.node().textContent},pa.html=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.innerHTML=null==t?"":t}:null==n?function(){this.innerHTML=""}:function(){this.innerHTML=n}):this.node().innerHTML},pa.append=function(n){return n=T(n),this.select(function(){return this.appendChild(n.apply(this,arguments))})},pa.insert=function(n,t){return n=T(n),t=b(t),this.select(function(){return this.insertBefore(n.apply(this,arguments),t.apply(this,arguments)||null)})},pa.remove=function(){return this.each(function(){var n=this.parentNode;n&&n.removeChild(this)})},pa.data=function(n,t){function e(n,e){var r,u,i,a=n.length,f=e.length,h=Math.min(a,f),g=new Array(f),p=new Array(f),v=new Array(a);if(t){var d,m=new o,y=new o,x=[];for(r=-1;++rr;++r)p[r]=q(e[r]);for(;a>r;++r)v[r]=n[r]}p.update=g,p.parentNode=g.parentNode=v.parentNode=n.parentNode,c.push(p),s.push(g),l.push(v)}var r,u,i=-1,a=this.length;if(!arguments.length){for(n=new Array(a=(r=this[0]).length);++ii;i++){u.push(t=[]),t.parentNode=(e=this[i]).parentNode;for(var a=0,c=e.length;c>a;a++)(r=e[a])&&n.call(r,r.__data__,a,i)&&t.push(r)}return _(u)},pa.order=function(){for(var n=-1,t=this.length;++n=0;)(e=r[u])&&(i&&i!==e.nextSibling&&i.parentNode.insertBefore(e,i),i=e);return this},pa.sort=function(n){n=D.apply(this,arguments);for(var t=-1,e=this.length;++tn;n++)for(var e=this[n],r=0,u=e.length;u>r;r++){var i=e[r];if(i)return i}return null},pa.size=function(){var n=0;return this.each(function(){++n}),n};var da=[];Zo.selection.enter=U,Zo.selection.enter.prototype=da,da.append=pa.append,da.empty=pa.empty,da.node=pa.node,da.call=pa.call,da.size=pa.size,da.select=function(n){for(var t,e,r,u,i,o=[],a=-1,c=this.length;++ar){if("string"!=typeof n){2>r&&(t=!1);for(e in n)this.each(F(e,n[e],t));return this}if(2>r)return(r=this.node()["__on"+n])&&r._;e=!1}return this.each(F(n,t,e))};var ya=Zo.map({mouseenter:"mouseover",mouseleave:"mouseout"});ya.forEach(function(n){"on"+n in $o&&ya.remove(n)});var xa="onselectstart"in $o?null:p(Bo.style,"userSelect"),Ma=0;Zo.mouse=function(n){return Z(n,x())};var _a=/WebKit/.test(Wo.navigator.userAgent)?-1:0;Zo.touches=function(n,t){return arguments.length<2&&(t=x().touches),t?Xo(t).map(function(t){var e=Z(n,t);return e.identifier=t.identifier,e}):[]},Zo.behavior.drag=function(){function n(){this.on("mousedown.drag",u).on("touchstart.drag",i)}function t(n,t,u,i,o){return function(){function a(){var n,e,r=t(h,v);r&&(n=r[0]-x[0],e=r[1]-x[1],p|=n|e,x=r,g({type:"drag",x:r[0]+s[0],y:r[1]+s[1],dx:n,dy:e}))}function c(){t(h,v)&&(m.on(i+d,null).on(o+d,null),y(p&&Zo.event.target===f),g({type:"dragend"}))}var s,l=this,f=Zo.event.target,h=l.parentNode,g=e.of(l,arguments),p=0,v=n(),d=".drag"+(null==v?"":"-"+v),m=Zo.select(u()).on(i+d,a).on(o+d,c),y=I(),x=t(h,v);r?(s=r.apply(l,arguments),s=[s.x-x[0],s.y-x[1]]):s=[0,0],g({type:"dragstart"})}}var e=M(n,"drag","dragstart","dragend"),r=null,u=t(v,Zo.mouse,$,"mousemove","mouseup"),i=t(V,Zo.touch,X,"touchmove","touchend");return n.origin=function(t){return arguments.length?(r=t,n):r},Zo.rebind(n,e,"on")};var ba=Math.PI,wa=2*ba,Sa=ba/2,ka=1e-6,Ea=ka*ka,Aa=ba/180,Ca=180/ba,Na=Math.SQRT2,za=2,La=4;Zo.interpolateZoom=function(n,t){function e(n){var t=n*y;if(m){var e=Q(v),o=i/(za*h)*(e*nt(Na*t+v)-K(v));return[r+o*s,u+o*l,i*e/Q(Na*t+v)]}return[r+n*s,u+n*l,i*Math.exp(Na*t)]}var r=n[0],u=n[1],i=n[2],o=t[0],a=t[1],c=t[2],s=o-r,l=a-u,f=s*s+l*l,h=Math.sqrt(f),g=(c*c-i*i+La*f)/(2*i*za*h),p=(c*c-i*i-La*f)/(2*c*za*h),v=Math.log(Math.sqrt(g*g+1)-g),d=Math.log(Math.sqrt(p*p+1)-p),m=d-v,y=(m||Math.log(c/i))/Na;return e.duration=1e3*y,e},Zo.behavior.zoom=function(){function n(n){n.on(A,s).on(Ra+".zoom",f).on("dblclick.zoom",h).on(z,l)}function t(n){return[(n[0]-S.x)/S.k,(n[1]-S.y)/S.k]}function e(n){return[n[0]*S.k+S.x,n[1]*S.k+S.y]}function r(n){S.k=Math.max(E[0],Math.min(E[1],n))}function u(n,t){t=e(t),S.x+=n[0]-t[0],S.y+=n[1]-t[1]}function i(){_&&_.domain(x.range().map(function(n){return(n-S.x)/S.k}).map(x.invert)),w&&w.domain(b.range().map(function(n){return(n-S.y)/S.k}).map(b.invert))}function o(n){n({type:"zoomstart"})}function a(n){i(),n({type:"zoom",scale:S.k,translate:[S.x,S.y]})}function c(n){n({type:"zoomend"})}function s(){function n(){l=1,u(Zo.mouse(r),h),a(s)}function e(){f.on(C,null).on(N,null),g(l&&Zo.event.target===i),c(s)}var r=this,i=Zo.event.target,s=L.of(r,arguments),l=0,f=Zo.select(Wo).on(C,n).on(N,e),h=t(Zo.mouse(r)),g=I();H.call(r),o(s)}function l(){function n(){var n=Zo.touches(g);return h=S.k,n.forEach(function(n){n.identifier in v&&(v[n.identifier]=t(n))}),n}function e(){var t=Zo.event.target;Zo.select(t).on(M,i).on(_,f),b.push(t);for(var e=Zo.event.changedTouches,o=0,c=e.length;c>o;++o)v[e[o].identifier]=null;var s=n(),l=Date.now();if(1===s.length){if(500>l-m){var h=s[0],g=v[h.identifier];r(2*S.k),u(h,g),y(),a(p)}m=l}else if(s.length>1){var h=s[0],x=s[1],w=h[0]-x[0],k=h[1]-x[1];d=w*w+k*k}}function i(){for(var n,t,e,i,o=Zo.touches(g),c=0,s=o.length;s>c;++c,i=null)if(e=o[c],i=v[e.identifier]){if(t)break;n=e,t=i}if(i){var l=(l=e[0]-n[0])*l+(l=e[1]-n[1])*l,f=d&&Math.sqrt(l/d);n=[(n[0]+e[0])/2,(n[1]+e[1])/2],t=[(t[0]+i[0])/2,(t[1]+i[1])/2],r(f*h)}m=null,u(n,t),a(p)}function f(){if(Zo.event.touches.length){for(var t=Zo.event.changedTouches,e=0,r=t.length;r>e;++e)delete v[t[e].identifier];for(var u in v)return void n()}Zo.selectAll(b).on(x,null),w.on(A,s).on(z,l),k(),c(p)}var h,g=this,p=L.of(g,arguments),v={},d=0,x=".zoom-"+Zo.event.changedTouches[0].identifier,M="touchmove"+x,_="touchend"+x,b=[],w=Zo.select(g).on(A,null).on(z,e),k=I();H.call(g),e(),o(p)}function f(){var n=L.of(this,arguments);d?clearTimeout(d):(g=t(p=v||Zo.mouse(this)),H.call(this),o(n)),d=setTimeout(function(){d=null,c(n)},50),y(),r(Math.pow(2,.002*Ta())*S.k),u(p,g),a(n)}function h(){var n=L.of(this,arguments),e=Zo.mouse(this),i=t(e),s=Math.log(S.k)/Math.LN2;o(n),r(Math.pow(2,Zo.event.shiftKey?Math.ceil(s)-1:Math.floor(s)+1)),u(e,i),a(n),c(n)}var g,p,v,d,m,x,_,b,w,S={x:0,y:0,k:1},k=[960,500],E=qa,A="mousedown.zoom",C="mousemove.zoom",N="mouseup.zoom",z="touchstart.zoom",L=M(n,"zoomstart","zoom","zoomend");return n.event=function(n){n.each(function(){var n=L.of(this,arguments),t=S;Ss?Zo.select(this).transition().each("start.zoom",function(){S=this.__chart__||{x:0,y:0,k:1},o(n)}).tween("zoom:zoom",function(){var e=k[0],r=k[1],u=e/2,i=r/2,o=Zo.interpolateZoom([(u-S.x)/S.k,(i-S.y)/S.k,e/S.k],[(u-t.x)/t.k,(i-t.y)/t.k,e/t.k]);return function(t){var r=o(t),c=e/r[2];this.__chart__=S={x:u-r[0]*c,y:i-r[1]*c,k:c},a(n)}}).each("end.zoom",function(){c(n)}):(this.__chart__=S,o(n),a(n),c(n))})},n.translate=function(t){return arguments.length?(S={x:+t[0],y:+t[1],k:S.k},i(),n):[S.x,S.y]},n.scale=function(t){return arguments.length?(S={x:S.x,y:S.y,k:+t},i(),n):S.k},n.scaleExtent=function(t){return arguments.length?(E=null==t?qa:[+t[0],+t[1]],n):E},n.center=function(t){return arguments.length?(v=t&&[+t[0],+t[1]],n):v},n.size=function(t){return arguments.length?(k=t&&[+t[0],+t[1]],n):k},n.x=function(t){return arguments.length?(_=t,x=t.copy(),S={x:0,y:0,k:1},n):_},n.y=function(t){return arguments.length?(w=t,b=t.copy(),S={x:0,y:0,k:1},n):w},Zo.rebind(n,L,"on")};var Ta,qa=[0,1/0],Ra="onwheel"in $o?(Ta=function(){return-Zo.event.deltaY*(Zo.event.deltaMode?120:1)},"wheel"):"onmousewheel"in $o?(Ta=function(){return Zo.event.wheelDelta},"mousewheel"):(Ta=function(){return-Zo.event.detail},"MozMousePixelScroll");Zo.color=et,et.prototype.toString=function(){return this.rgb()+""},Zo.hsl=rt;var Da=rt.prototype=new et;Da.brighter=function(n){return n=Math.pow(.7,arguments.length?n:1),new rt(this.h,this.s,this.l/n)},Da.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new rt(this.h,this.s,n*this.l)},Da.rgb=function(){return ut(this.h,this.s,this.l)},Zo.hcl=it;var Pa=it.prototype=new et;Pa.brighter=function(n){return new it(this.h,this.c,Math.min(100,this.l+Ua*(arguments.length?n:1)))},Pa.darker=function(n){return new it(this.h,this.c,Math.max(0,this.l-Ua*(arguments.length?n:1)))},Pa.rgb=function(){return ot(this.h,this.c,this.l).rgb()},Zo.lab=at;var Ua=18,ja=.95047,Ha=1,Fa=1.08883,Oa=at.prototype=new et;Oa.brighter=function(n){return new at(Math.min(100,this.l+Ua*(arguments.length?n:1)),this.a,this.b)},Oa.darker=function(n){return new at(Math.max(0,this.l-Ua*(arguments.length?n:1)),this.a,this.b)},Oa.rgb=function(){return ct(this.l,this.a,this.b)},Zo.rgb=gt;var Ya=gt.prototype=new et;Ya.brighter=function(n){n=Math.pow(.7,arguments.length?n:1);var t=this.r,e=this.g,r=this.b,u=30;return t||e||r?(t&&u>t&&(t=u),e&&u>e&&(e=u),r&&u>r&&(r=u),new gt(Math.min(255,t/n),Math.min(255,e/n),Math.min(255,r/n))):new gt(u,u,u)},Ya.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new gt(n*this.r,n*this.g,n*this.b)},Ya.hsl=function(){return yt(this.r,this.g,this.b)},Ya.toString=function(){return"#"+dt(this.r)+dt(this.g)+dt(this.b)};var Ia=Zo.map({aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074});Ia.forEach(function(n,t){Ia.set(n,pt(t))}),Zo.functor=bt,Zo.xhr=St(wt),Zo.dsv=function(n,t){function e(n,e,i){arguments.length<3&&(i=e,e=null);var o=kt(n,t,null==e?r:u(e),i);return o.row=function(n){return arguments.length?o.response(null==(e=n)?r:u(n)):e},o}function r(n){return e.parse(n.responseText)}function u(n){return function(t){return e.parse(t.responseText,n)}}function i(t){return t.map(o).join(n)}function o(n){return a.test(n)?'"'+n.replace(/\"/g,'""')+'"':n}var a=new RegExp('["'+n+"\n]"),c=n.charCodeAt(0);return e.parse=function(n,t){var r;return e.parseRows(n,function(n,e){if(r)return r(n,e-1);var u=new Function("d","return {"+n.map(function(n,t){return JSON.stringify(n)+": d["+t+"]"}).join(",")+"}");r=t?function(n,e){return t(u(n),e)}:u})},e.parseRows=function(n,t){function e(){if(l>=s)return o;if(u)return u=!1,i;var t=l;if(34===n.charCodeAt(t)){for(var e=t;e++l;){var r=n.charCodeAt(l++),a=1;if(10===r)u=!0;else if(13===r)u=!0,10===n.charCodeAt(l)&&(++l,++a);else if(r!==c)continue;return n.substring(t,l-a)}return n.substring(t)}for(var r,u,i={},o={},a=[],s=n.length,l=0,f=0;(r=e())!==o;){for(var h=[];r!==i&&r!==o;)h.push(r),r=e();(!t||(h=t(h,f++)))&&a.push(h)}return a},e.format=function(t){if(Array.isArray(t[0]))return e.formatRows(t);var r=new h,u=[];return t.forEach(function(n){for(var t in n)r.has(t)||u.push(r.add(t))}),[u.map(o).join(n)].concat(t.map(function(t){return u.map(function(n){return o(t[n])}).join(n)})).join("\n")},e.formatRows=function(n){return n.map(i).join("\n")},e},Zo.csv=Zo.dsv(",","text/csv"),Zo.tsv=Zo.dsv(" ","text/tab-separated-values"),Zo.touch=function(n,t,e){if(arguments.length<3&&(e=t,t=x().changedTouches),t)for(var r,u=0,i=t.length;i>u;++u)if((r=t[u]).identifier===e)return Z(n,r)};var Za,Va,Xa,$a,Ba,Wa=Wo[p(Wo,"requestAnimationFrame")]||function(n){setTimeout(n,17)};Zo.timer=function(n,t,e){var r=arguments.length;2>r&&(t=0),3>r&&(e=Date.now());var u=e+t,i={c:n,t:u,f:!1,n:null};Va?Va.n=i:Za=i,Va=i,Xa||($a=clearTimeout($a),Xa=1,Wa(At))},Zo.timer.flush=function(){Ct(),Nt()},Zo.round=function(n,t){return t?Math.round(n*(t=Math.pow(10,t)))/t:Math.round(n)};var Ja=["y","z","a","f","p","n","\xb5","m","","k","M","G","T","P","E","Z","Y"].map(Lt);Zo.formatPrefix=function(n,t){var e=0;return n&&(0>n&&(n*=-1),t&&(n=Zo.round(n,zt(n,t))),e=1+Math.floor(1e-12+Math.log(n)/Math.LN10),e=Math.max(-24,Math.min(24,3*Math.floor((e-1)/3)))),Ja[8+e/3]};var Ga=/(?:([^{])?([<>=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i,Ka=Zo.map({b:function(n){return n.toString(2)},c:function(n){return String.fromCharCode(n)},o:function(n){return n.toString(8)},x:function(n){return n.toString(16)},X:function(n){return n.toString(16).toUpperCase()},g:function(n,t){return n.toPrecision(t)},e:function(n,t){return n.toExponential(t)},f:function(n,t){return n.toFixed(t)},r:function(n,t){return(n=Zo.round(n,zt(n,t))).toFixed(Math.max(0,Math.min(20,zt(n*(1+1e-15),t))))}}),Qa=Zo.time={},nc=Date;Rt.prototype={getDate:function(){return this._.getUTCDate()},getDay:function(){return this._.getUTCDay()},getFullYear:function(){return this._.getUTCFullYear()},getHours:function(){return this._.getUTCHours()},getMilliseconds:function(){return this._.getUTCMilliseconds()},getMinutes:function(){return this._.getUTCMinutes()},getMonth:function(){return this._.getUTCMonth()},getSeconds:function(){return this._.getUTCSeconds()},getTime:function(){return this._.getTime()},getTimezoneOffset:function(){return 0},valueOf:function(){return this._.valueOf()},setDate:function(){tc.setUTCDate.apply(this._,arguments)},setDay:function(){tc.setUTCDay.apply(this._,arguments)},setFullYear:function(){tc.setUTCFullYear.apply(this._,arguments)},setHours:function(){tc.setUTCHours.apply(this._,arguments)},setMilliseconds:function(){tc.setUTCMilliseconds.apply(this._,arguments)},setMinutes:function(){tc.setUTCMinutes.apply(this._,arguments)},setMonth:function(){tc.setUTCMonth.apply(this._,arguments)},setSeconds:function(){tc.setUTCSeconds.apply(this._,arguments)},setTime:function(){tc.setTime.apply(this._,arguments)}};var tc=Date.prototype;Qa.year=Dt(function(n){return n=Qa.day(n),n.setMonth(0,1),n},function(n,t){n.setFullYear(n.getFullYear()+t)},function(n){return n.getFullYear()}),Qa.years=Qa.year.range,Qa.years.utc=Qa.year.utc.range,Qa.day=Dt(function(n){var t=new nc(2e3,0);return t.setFullYear(n.getFullYear(),n.getMonth(),n.getDate()),t},function(n,t){n.setDate(n.getDate()+t)},function(n){return n.getDate()-1}),Qa.days=Qa.day.range,Qa.days.utc=Qa.day.utc.range,Qa.dayOfYear=function(n){var t=Qa.year(n);return Math.floor((n-t-6e4*(n.getTimezoneOffset()-t.getTimezoneOffset()))/864e5)},["sunday","monday","tuesday","wednesday","thursday","friday","saturday"].forEach(function(n,t){t=7-t;var e=Qa[n]=Dt(function(n){return(n=Qa.day(n)).setDate(n.getDate()-(n.getDay()+t)%7),n},function(n,t){n.setDate(n.getDate()+7*Math.floor(t))},function(n){var e=Qa.year(n).getDay();return Math.floor((Qa.dayOfYear(n)+(e+t)%7)/7)-(e!==t)});Qa[n+"s"]=e.range,Qa[n+"s"].utc=e.utc.range,Qa[n+"OfYear"]=function(n){var e=Qa.year(n).getDay();return Math.floor((Qa.dayOfYear(n)+(e+t)%7)/7)}}),Qa.week=Qa.sunday,Qa.weeks=Qa.sunday.range,Qa.weeks.utc=Qa.sunday.utc.range,Qa.weekOfYear=Qa.sundayOfYear;var ec={"-":"",_:" ",0:"0"},rc=/^\s*\d+/,uc=/^%/;Zo.locale=function(n){return{numberFormat:Tt(n),timeFormat:Ut(n)}};var ic=Zo.locale({decimal:".",thousands:",",grouping:[3],currency:["$",""],dateTime:"%a %b %e %X %Y",date:"%m/%d/%Y",time:"%H:%M:%S",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});Zo.format=ic.numberFormat,Zo.geo={},ue.prototype={s:0,t:0,add:function(n){ie(n,this.t,oc),ie(oc.s,this.s,this),this.s?this.t+=oc.t:this.s=oc.t},reset:function(){this.s=this.t=0},valueOf:function(){return this.s}};var oc=new ue;Zo.geo.stream=function(n,t){n&&ac.hasOwnProperty(n.type)?ac[n.type](n,t):oe(n,t)};var ac={Feature:function(n,t){oe(n.geometry,t)},FeatureCollection:function(n,t){for(var e=n.features,r=-1,u=e.length;++rn?4*ba+n:n,fc.lineStart=fc.lineEnd=fc.point=v}};Zo.geo.bounds=function(){function n(n,t){x.push(M=[l=n,h=n]),f>t&&(f=t),t>g&&(g=t)}function t(t,e){var r=le([t*Aa,e*Aa]);if(m){var u=he(m,r),i=[u[1],-u[0],0],o=he(i,u);ve(o),o=de(o);var c=t-p,s=c>0?1:-1,v=o[0]*Ca*s,d=ua(c)>180;if(d^(v>s*p&&s*t>v)){var y=o[1]*Ca;y>g&&(g=y)}else if(v=(v+360)%360-180,d^(v>s*p&&s*t>v)){var y=-o[1]*Ca;f>y&&(f=y)}else f>e&&(f=e),e>g&&(g=e);d?p>t?a(l,t)>a(l,h)&&(h=t):a(t,h)>a(l,h)&&(l=t):h>=l?(l>t&&(l=t),t>h&&(h=t)):t>p?a(l,t)>a(l,h)&&(h=t):a(t,h)>a(l,h)&&(l=t)}else n(t,e);m=r,p=t}function e(){_.point=t}function r(){M[0]=l,M[1]=h,_.point=n,m=null}function u(n,e){if(m){var r=n-p;y+=ua(r)>180?r+(r>0?360:-360):r}else v=n,d=e;fc.point(n,e),t(n,e)}function i(){fc.lineStart()}function o(){u(v,d),fc.lineEnd(),ua(y)>ka&&(l=-(h=180)),M[0]=l,M[1]=h,m=null}function a(n,t){return(t-=n)<0?t+360:t}function c(n,t){return n[0]-t[0]}function s(n,t){return t[0]<=t[1]?t[0]<=n&&n<=t[1]:nlc?(l=-(h=180),f=-(g=90)):y>ka?g=90:-ka>y&&(f=-90),M[0]=l,M[1]=h}};return function(n){g=h=-(l=f=1/0),x=[],Zo.geo.stream(n,_);var t=x.length;if(t){x.sort(c);for(var e,r=1,u=x[0],i=[u];t>r;++r)e=x[r],s(e[0],u)||s(e[1],u)?(a(u[0],e[1])>a(u[0],u[1])&&(u[1]=e[1]),a(e[0],u[1])>a(u[0],u[1])&&(u[0]=e[0])):i.push(u=e); -for(var o,e,p=-1/0,t=i.length-1,r=0,u=i[t];t>=r;u=e,++r)e=i[r],(o=a(u[1],e[0]))>p&&(p=o,l=e[0],h=u[1])}return x=M=null,1/0===l||1/0===f?[[0/0,0/0],[0/0,0/0]]:[[l,f],[h,g]]}}(),Zo.geo.centroid=function(n){hc=gc=pc=vc=dc=mc=yc=xc=Mc=_c=bc=0,Zo.geo.stream(n,wc);var t=Mc,e=_c,r=bc,u=t*t+e*e+r*r;return Ea>u&&(t=mc,e=yc,r=xc,ka>gc&&(t=pc,e=vc,r=dc),u=t*t+e*e+r*r,Ea>u)?[0/0,0/0]:[Math.atan2(e,t)*Ca,G(r/Math.sqrt(u))*Ca]};var hc,gc,pc,vc,dc,mc,yc,xc,Mc,_c,bc,wc={sphere:v,point:ye,lineStart:Me,lineEnd:_e,polygonStart:function(){wc.lineStart=be},polygonEnd:function(){wc.lineStart=Me}},Sc=Ae(we,Te,Re,[-ba,-ba/2]),kc=1e9;Zo.geo.clipExtent=function(){var n,t,e,r,u,i,o={stream:function(n){return u&&(u.valid=!1),u=i(n),u.valid=!0,u},extent:function(a){return arguments.length?(i=Ue(n=+a[0][0],t=+a[0][1],e=+a[1][0],r=+a[1][1]),u&&(u.valid=!1,u=null),o):[[n,t],[e,r]]}};return o.extent([[0,0],[960,500]])},(Zo.geo.conicEqualArea=function(){return He(Fe)}).raw=Fe,Zo.geo.albers=function(){return Zo.geo.conicEqualArea().rotate([96,0]).center([-.6,38.7]).parallels([29.5,45.5]).scale(1070)},Zo.geo.albersUsa=function(){function n(n){var i=n[0],o=n[1];return t=null,e(i,o),t||(r(i,o),t)||u(i,o),t}var t,e,r,u,i=Zo.geo.albers(),o=Zo.geo.conicEqualArea().rotate([154,0]).center([-2,58.5]).parallels([55,65]),a=Zo.geo.conicEqualArea().rotate([157,0]).center([-3,19.9]).parallels([8,18]),c={point:function(n,e){t=[n,e]}};return n.invert=function(n){var t=i.scale(),e=i.translate(),r=(n[0]-e[0])/t,u=(n[1]-e[1])/t;return(u>=.12&&.234>u&&r>=-.425&&-.214>r?o:u>=.166&&.234>u&&r>=-.214&&-.115>r?a:i).invert(n)},n.stream=function(n){var t=i.stream(n),e=o.stream(n),r=a.stream(n);return{point:function(n,u){t.point(n,u),e.point(n,u),r.point(n,u)},sphere:function(){t.sphere(),e.sphere(),r.sphere()},lineStart:function(){t.lineStart(),e.lineStart(),r.lineStart()},lineEnd:function(){t.lineEnd(),e.lineEnd(),r.lineEnd()},polygonStart:function(){t.polygonStart(),e.polygonStart(),r.polygonStart()},polygonEnd:function(){t.polygonEnd(),e.polygonEnd(),r.polygonEnd()}}},n.precision=function(t){return arguments.length?(i.precision(t),o.precision(t),a.precision(t),n):i.precision()},n.scale=function(t){return arguments.length?(i.scale(t),o.scale(.35*t),a.scale(t),n.translate(i.translate())):i.scale()},n.translate=function(t){if(!arguments.length)return i.translate();var s=i.scale(),l=+t[0],f=+t[1];return e=i.translate(t).clipExtent([[l-.455*s,f-.238*s],[l+.455*s,f+.238*s]]).stream(c).point,r=o.translate([l-.307*s,f+.201*s]).clipExtent([[l-.425*s+ka,f+.12*s+ka],[l-.214*s-ka,f+.234*s-ka]]).stream(c).point,u=a.translate([l-.205*s,f+.212*s]).clipExtent([[l-.214*s+ka,f+.166*s+ka],[l-.115*s-ka,f+.234*s-ka]]).stream(c).point,n},n.scale(1070)};var Ec,Ac,Cc,Nc,zc,Lc,Tc={point:v,lineStart:v,lineEnd:v,polygonStart:function(){Ac=0,Tc.lineStart=Oe},polygonEnd:function(){Tc.lineStart=Tc.lineEnd=Tc.point=v,Ec+=ua(Ac/2)}},qc={point:Ye,lineStart:v,lineEnd:v,polygonStart:v,polygonEnd:v},Rc={point:Ve,lineStart:Xe,lineEnd:$e,polygonStart:function(){Rc.lineStart=Be},polygonEnd:function(){Rc.point=Ve,Rc.lineStart=Xe,Rc.lineEnd=$e}};Zo.geo.path=function(){function n(n){return n&&("function"==typeof a&&i.pointRadius(+a.apply(this,arguments)),o&&o.valid||(o=u(i)),Zo.geo.stream(n,o)),i.result()}function t(){return o=null,n}var e,r,u,i,o,a=4.5;return n.area=function(n){return Ec=0,Zo.geo.stream(n,u(Tc)),Ec},n.centroid=function(n){return pc=vc=dc=mc=yc=xc=Mc=_c=bc=0,Zo.geo.stream(n,u(Rc)),bc?[Mc/bc,_c/bc]:xc?[mc/xc,yc/xc]:dc?[pc/dc,vc/dc]:[0/0,0/0]},n.bounds=function(n){return zc=Lc=-(Cc=Nc=1/0),Zo.geo.stream(n,u(qc)),[[Cc,Nc],[zc,Lc]]},n.projection=function(n){return arguments.length?(u=(e=n)?n.stream||Ge(n):wt,t()):e},n.context=function(n){return arguments.length?(i=null==(r=n)?new Ie:new We(n),"function"!=typeof a&&i.pointRadius(a),t()):r},n.pointRadius=function(t){return arguments.length?(a="function"==typeof t?t:(i.pointRadius(+t),+t),n):a},n.projection(Zo.geo.albersUsa()).context(null)},Zo.geo.transform=function(n){return{stream:function(t){var e=new Ke(t);for(var r in n)e[r]=n[r];return e}}},Ke.prototype={point:function(n,t){this.stream.point(n,t)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}},Zo.geo.projection=nr,Zo.geo.projectionMutator=tr,(Zo.geo.equirectangular=function(){return nr(rr)}).raw=rr.invert=rr,Zo.geo.rotation=function(n){function t(t){return t=n(t[0]*Aa,t[1]*Aa),t[0]*=Ca,t[1]*=Ca,t}return n=ir(n[0]%360*Aa,n[1]*Aa,n.length>2?n[2]*Aa:0),t.invert=function(t){return t=n.invert(t[0]*Aa,t[1]*Aa),t[0]*=Ca,t[1]*=Ca,t},t},ur.invert=rr,Zo.geo.circle=function(){function n(){var n="function"==typeof r?r.apply(this,arguments):r,t=ir(-n[0]*Aa,-n[1]*Aa,0).invert,u=[];return e(null,null,1,{point:function(n,e){u.push(n=t(n,e)),n[0]*=Ca,n[1]*=Ca}}),{type:"Polygon",coordinates:[u]}}var t,e,r=[0,0],u=6;return n.origin=function(t){return arguments.length?(r=t,n):r},n.angle=function(r){return arguments.length?(e=sr((t=+r)*Aa,u*Aa),n):t},n.precision=function(r){return arguments.length?(e=sr(t*Aa,(u=+r)*Aa),n):u},n.angle(90)},Zo.geo.distance=function(n,t){var e,r=(t[0]-n[0])*Aa,u=n[1]*Aa,i=t[1]*Aa,o=Math.sin(r),a=Math.cos(r),c=Math.sin(u),s=Math.cos(u),l=Math.sin(i),f=Math.cos(i);return Math.atan2(Math.sqrt((e=f*o)*e+(e=s*l-c*f*a)*e),c*l+s*f*a)},Zo.geo.graticule=function(){function n(){return{type:"MultiLineString",coordinates:t()}}function t(){return Zo.range(Math.ceil(i/d)*d,u,d).map(h).concat(Zo.range(Math.ceil(s/m)*m,c,m).map(g)).concat(Zo.range(Math.ceil(r/p)*p,e,p).filter(function(n){return ua(n%d)>ka}).map(l)).concat(Zo.range(Math.ceil(a/v)*v,o,v).filter(function(n){return ua(n%m)>ka}).map(f))}var e,r,u,i,o,a,c,s,l,f,h,g,p=10,v=p,d=90,m=360,y=2.5;return n.lines=function(){return t().map(function(n){return{type:"LineString",coordinates:n}})},n.outline=function(){return{type:"Polygon",coordinates:[h(i).concat(g(c).slice(1),h(u).reverse().slice(1),g(s).reverse().slice(1))]}},n.extent=function(t){return arguments.length?n.majorExtent(t).minorExtent(t):n.minorExtent()},n.majorExtent=function(t){return arguments.length?(i=+t[0][0],u=+t[1][0],s=+t[0][1],c=+t[1][1],i>u&&(t=i,i=u,u=t),s>c&&(t=s,s=c,c=t),n.precision(y)):[[i,s],[u,c]]},n.minorExtent=function(t){return arguments.length?(r=+t[0][0],e=+t[1][0],a=+t[0][1],o=+t[1][1],r>e&&(t=r,r=e,e=t),a>o&&(t=a,a=o,o=t),n.precision(y)):[[r,a],[e,o]]},n.step=function(t){return arguments.length?n.majorStep(t).minorStep(t):n.minorStep()},n.majorStep=function(t){return arguments.length?(d=+t[0],m=+t[1],n):[d,m]},n.minorStep=function(t){return arguments.length?(p=+t[0],v=+t[1],n):[p,v]},n.precision=function(t){return arguments.length?(y=+t,l=fr(a,o,90),f=hr(r,e,y),h=fr(s,c,90),g=hr(i,u,y),n):y},n.majorExtent([[-180,-90+ka],[180,90-ka]]).minorExtent([[-180,-80-ka],[180,80+ka]])},Zo.geo.greatArc=function(){function n(){return{type:"LineString",coordinates:[t||r.apply(this,arguments),e||u.apply(this,arguments)]}}var t,e,r=gr,u=pr;return n.distance=function(){return Zo.geo.distance(t||r.apply(this,arguments),e||u.apply(this,arguments))},n.source=function(e){return arguments.length?(r=e,t="function"==typeof e?null:e,n):r},n.target=function(t){return arguments.length?(u=t,e="function"==typeof t?null:t,n):u},n.precision=function(){return arguments.length?n:0},n},Zo.geo.interpolate=function(n,t){return vr(n[0]*Aa,n[1]*Aa,t[0]*Aa,t[1]*Aa)},Zo.geo.length=function(n){return Dc=0,Zo.geo.stream(n,Pc),Dc};var Dc,Pc={sphere:v,point:v,lineStart:dr,lineEnd:v,polygonStart:v,polygonEnd:v},Uc=mr(function(n){return Math.sqrt(2/(1+n))},function(n){return 2*Math.asin(n/2)});(Zo.geo.azimuthalEqualArea=function(){return nr(Uc)}).raw=Uc;var jc=mr(function(n){var t=Math.acos(n);return t&&t/Math.sin(t)},wt);(Zo.geo.azimuthalEquidistant=function(){return nr(jc)}).raw=jc,(Zo.geo.conicConformal=function(){return He(yr)}).raw=yr,(Zo.geo.conicEquidistant=function(){return He(xr)}).raw=xr;var Hc=mr(function(n){return 1/n},Math.atan);(Zo.geo.gnomonic=function(){return nr(Hc)}).raw=Hc,Mr.invert=function(n,t){return[n,2*Math.atan(Math.exp(t))-Sa]},(Zo.geo.mercator=function(){return _r(Mr)}).raw=Mr;var Fc=mr(function(){return 1},Math.asin);(Zo.geo.orthographic=function(){return nr(Fc)}).raw=Fc;var Oc=mr(function(n){return 1/(1+n)},function(n){return 2*Math.atan(n)});(Zo.geo.stereographic=function(){return nr(Oc)}).raw=Oc,br.invert=function(n,t){return[-t,2*Math.atan(Math.exp(n))-Sa]},(Zo.geo.transverseMercator=function(){var n=_r(br),t=n.center,e=n.rotate;return n.center=function(n){return n?t([-n[1],n[0]]):(n=t(),[n[1],-n[0]])},n.rotate=function(n){return n?e([n[0],n[1],n.length>2?n[2]+90:90]):(n=e(),[n[0],n[1],n[2]-90])},e([0,0,90])}).raw=br,Zo.geom={},Zo.geom.hull=function(n){function t(n){if(n.length<3)return[];var t,u=bt(e),i=bt(r),o=n.length,a=[],c=[];for(t=0;o>t;t++)a.push([+u.call(this,n[t],t),+i.call(this,n[t],t),t]);for(a.sort(Er),t=0;o>t;t++)c.push([a[t][0],-a[t][1]]);var s=kr(a),l=kr(c),f=l[0]===s[0],h=l[l.length-1]===s[s.length-1],g=[];for(t=s.length-1;t>=0;--t)g.push(n[a[s[t]][2]]);for(t=+f;t=r&&s.x<=i&&s.y>=u&&s.y<=o?[[r,o],[i,o],[i,u],[r,u]]:[];l.point=n[a]}),t}function e(n){return n.map(function(n,t){return{x:Math.round(i(n,t)/ka)*ka,y:Math.round(o(n,t)/ka)*ka,i:t}})}var r=wr,u=Sr,i=r,o=u,a=Jc;return n?t(n):(t.links=function(n){return tu(e(n)).edges.filter(function(n){return n.l&&n.r}).map(function(t){return{source:n[t.l.i],target:n[t.r.i]}})},t.triangles=function(n){var t=[];return tu(e(n)).cells.forEach(function(e,r){for(var u,i,o=e.site,a=e.edges.sort(Hr),c=-1,s=a.length,l=a[s-1].edge,f=l.l===o?l.r:l.l;++c=s,h=r>=l,g=(h<<1)+f;n.leaf=!1,n=n.nodes[g]||(n.nodes[g]=ou()),f?u=s:a=s,h?o=l:c=l,i(n,t,e,r,u,o,a,c)}var l,f,h,g,p,v,d,m,y,x=bt(a),M=bt(c);if(null!=t)v=t,d=e,m=r,y=u;else if(m=y=-(v=d=1/0),f=[],h=[],p=n.length,o)for(g=0;p>g;++g)l=n[g],l.xm&&(m=l.x),l.y>y&&(y=l.y),f.push(l.x),h.push(l.y);else for(g=0;p>g;++g){var _=+x(l=n[g],g),b=+M(l,g);v>_&&(v=_),d>b&&(d=b),_>m&&(m=_),b>y&&(y=b),f.push(_),h.push(b)}var w=m-v,S=y-d;w>S?y=d+w:m=v+S;var k=ou();if(k.add=function(n){i(k,n,+x(n,++g),+M(n,g),v,d,m,y)},k.visit=function(n){au(n,k,v,d,m,y)},g=-1,null==t){for(;++g=0?n.substring(0,t):n,r=t>=0?n.substring(t+1):"in";return e=ns.get(e)||Qc,r=ts.get(r)||wt,pu(r(e.apply(null,Vo.call(arguments,1))))},Zo.interpolateHcl=Au,Zo.interpolateHsl=Cu,Zo.interpolateLab=Nu,Zo.interpolateRound=zu,Zo.transform=function(n){var t=$o.createElementNS(Zo.ns.prefix.svg,"g");return(Zo.transform=function(n){if(null!=n){t.setAttribute("transform",n);var e=t.transform.baseVal.consolidate()}return new Lu(e?e.matrix:es)})(n)},Lu.prototype.toString=function(){return"translate("+this.translate+")rotate("+this.rotate+")skewX("+this.skew+")scale("+this.scale+")"};var es={a:1,b:0,c:0,d:1,e:0,f:0};Zo.interpolateTransform=Du,Zo.layout={},Zo.layout.bundle=function(){return function(n){for(var t=[],e=-1,r=n.length;++ea*a/d){if(p>c){var s=t.charge/c;n.px-=i*s,n.py-=o*s}return!0}if(t.point&&c&&p>c){var s=t.pointCharge/c;n.px-=i*s,n.py-=o*s}}return!t.charge}}function t(n){n.px=Zo.event.x,n.py=Zo.event.y,a.resume()}var e,r,u,i,o,a={},c=Zo.dispatch("start","tick","end"),s=[1,1],l=.9,f=rs,h=us,g=-30,p=is,v=.1,d=.64,m=[],y=[];return a.tick=function(){if((r*=.99)<.005)return c.end({type:"end",alpha:r=0}),!0;var t,e,a,f,h,p,d,x,M,_=m.length,b=y.length;for(e=0;b>e;++e)a=y[e],f=a.source,h=a.target,x=h.x-f.x,M=h.y-f.y,(p=x*x+M*M)&&(p=r*i[e]*((p=Math.sqrt(p))-u[e])/p,x*=p,M*=p,h.x-=x*(d=f.weight/(h.weight+f.weight)),h.y-=M*d,f.x+=x*(d=1-d),f.y+=M*d);if((d=r*v)&&(x=s[0]/2,M=s[1]/2,e=-1,d))for(;++e<_;)a=m[e],a.x+=(x-a.x)*d,a.y+=(M-a.y)*d;if(g)for(Vu(t=Zo.geom.quadtree(m),r,o),e=-1;++e<_;)(a=m[e]).fixed||t.visit(n(a));for(e=-1;++e<_;)a=m[e],a.fixed?(a.x=a.px,a.y=a.py):(a.x-=(a.px-(a.px=a.x))*l,a.y-=(a.py-(a.py=a.y))*l);c.tick({type:"tick",alpha:r})},a.nodes=function(n){return arguments.length?(m=n,a):m},a.links=function(n){return arguments.length?(y=n,a):y},a.size=function(n){return arguments.length?(s=n,a):s},a.linkDistance=function(n){return arguments.length?(f="function"==typeof n?n:+n,a):f},a.distance=a.linkDistance,a.linkStrength=function(n){return arguments.length?(h="function"==typeof n?n:+n,a):h},a.friction=function(n){return arguments.length?(l=+n,a):l},a.charge=function(n){return arguments.length?(g="function"==typeof n?n:+n,a):g},a.chargeDistance=function(n){return arguments.length?(p=n*n,a):Math.sqrt(p)},a.gravity=function(n){return arguments.length?(v=+n,a):v},a.theta=function(n){return arguments.length?(d=n*n,a):Math.sqrt(d)},a.alpha=function(n){return arguments.length?(n=+n,r?r=n>0?n:0:n>0&&(c.start({type:"start",alpha:r=n}),Zo.timer(a.tick)),a):r},a.start=function(){function n(n,r){if(!e){for(e=new Array(c),a=0;c>a;++a)e[a]=[];for(a=0;s>a;++a){var u=y[a];e[u.source.index].push(u.target),e[u.target.index].push(u.source)}}for(var i,o=e[t],a=-1,s=o.length;++at;++t)(r=m[t]).index=t,r.weight=0;for(t=0;l>t;++t)r=y[t],"number"==typeof r.source&&(r.source=m[r.source]),"number"==typeof r.target&&(r.target=m[r.target]),++r.source.weight,++r.target.weight;for(t=0;c>t;++t)r=m[t],isNaN(r.x)&&(r.x=n("x",p)),isNaN(r.y)&&(r.y=n("y",v)),isNaN(r.px)&&(r.px=r.x),isNaN(r.py)&&(r.py=r.y);if(u=[],"function"==typeof f)for(t=0;l>t;++t)u[t]=+f.call(this,y[t],t);else for(t=0;l>t;++t)u[t]=f;if(i=[],"function"==typeof h)for(t=0;l>t;++t)i[t]=+h.call(this,y[t],t);else for(t=0;l>t;++t)i[t]=h;if(o=[],"function"==typeof g)for(t=0;c>t;++t)o[t]=+g.call(this,m[t],t);else for(t=0;c>t;++t)o[t]=g;return a.resume()},a.resume=function(){return a.alpha(.1)},a.stop=function(){return a.alpha(0)},a.drag=function(){return e||(e=Zo.behavior.drag().origin(wt).on("dragstart.force",Ou).on("drag.force",t).on("dragend.force",Yu)),arguments.length?(this.on("mouseover.force",Iu).on("mouseout.force",Zu).call(e),void 0):e},Zo.rebind(a,c,"on")};var rs=20,us=1,is=1/0;Zo.layout.hierarchy=function(){function n(u){var i,o=[u],a=[];for(u.depth=0;null!=(i=o.pop());)if(a.push(i),(s=e.call(n,i,i.depth))&&(c=s.length)){for(var c,s,l;--c>=0;)o.push(l=s[c]),l.parent=i,l.depth=i.depth+1;r&&(i.value=0),i.children=s}else r&&(i.value=+r.call(n,i,i.depth)||0),delete i.children;return Bu(u,function(n){var e,u;t&&(e=n.children)&&e.sort(t),r&&(u=n.parent)&&(u.value+=n.value)}),a}var t=Gu,e=Wu,r=Ju;return n.sort=function(e){return arguments.length?(t=e,n):t},n.children=function(t){return arguments.length?(e=t,n):e},n.value=function(t){return arguments.length?(r=t,n):r},n.revalue=function(t){return r&&($u(t,function(n){n.children&&(n.value=0)}),Bu(t,function(t){var e;t.children||(t.value=+r.call(n,t,t.depth)||0),(e=t.parent)&&(e.value+=t.value)})),t},n},Zo.layout.partition=function(){function n(t,e,r,u){var i=t.children;if(t.x=e,t.y=t.depth*u,t.dx=r,t.dy=u,i&&(o=i.length)){var o,a,c,s=-1;for(r=t.value?r/t.value:0;++sg;++g)for(u.call(n,s[0][g],p=v[g],l[0][g][1]),h=1;d>h;++h)u.call(n,s[h][g],p+=l[h-1][g][1],l[h][g][1]);return a}var t=wt,e=ei,r=ri,u=ti,i=Qu,o=ni;return n.values=function(e){return arguments.length?(t=e,n):t},n.order=function(t){return arguments.length?(e="function"==typeof t?t:as.get(t)||ei,n):e},n.offset=function(t){return arguments.length?(r="function"==typeof t?t:cs.get(t)||ri,n):r},n.x=function(t){return arguments.length?(i=t,n):i},n.y=function(t){return arguments.length?(o=t,n):o},n.out=function(t){return arguments.length?(u=t,n):u},n};var as=Zo.map({"inside-out":function(n){var t,e,r=n.length,u=n.map(ui),i=n.map(ii),o=Zo.range(r).sort(function(n,t){return u[n]-u[t]}),a=0,c=0,s=[],l=[];for(t=0;r>t;++t)e=o[t],c>a?(a+=i[e],s.push(e)):(c+=i[e],l.push(e));return l.reverse().concat(s)},reverse:function(n){return Zo.range(n.length).reverse()},"default":ei}),cs=Zo.map({silhouette:function(n){var t,e,r,u=n.length,i=n[0].length,o=[],a=0,c=[];for(e=0;i>e;++e){for(t=0,r=0;u>t;t++)r+=n[t][e][1];r>a&&(a=r),o.push(r)}for(e=0;i>e;++e)c[e]=(a-o[e])/2;return c},wiggle:function(n){var t,e,r,u,i,o,a,c,s,l=n.length,f=n[0],h=f.length,g=[];for(g[0]=c=s=0,e=1;h>e;++e){for(t=0,u=0;l>t;++t)u+=n[t][e][1];for(t=0,i=0,a=f[e][0]-f[e-1][0];l>t;++t){for(r=0,o=(n[t][e][1]-n[t][e-1][1])/(2*a);t>r;++r)o+=(n[r][e][1]-n[r][e-1][1])/a;i+=o*n[t][e][1]}g[e]=c-=u?i/u*a:0,s>c&&(s=c)}for(e=0;h>e;++e)g[e]-=s;return g},expand:function(n){var t,e,r,u=n.length,i=n[0].length,o=1/u,a=[];for(e=0;i>e;++e){for(t=0,r=0;u>t;t++)r+=n[t][e][1];if(r)for(t=0;u>t;t++)n[t][e][1]/=r;else for(t=0;u>t;t++)n[t][e][1]=o}for(e=0;i>e;++e)a[e]=0;return a},zero:ri});Zo.layout.histogram=function(){function n(n,i){for(var o,a,c=[],s=n.map(e,this),l=r.call(this,s,i),f=u.call(this,l,s,i),i=-1,h=s.length,g=f.length-1,p=t?1:1/h;++i0)for(i=-1;++i=l[0]&&a<=l[1]&&(o=c[Zo.bisect(f,a,1,g)-1],o.y+=p,o.push(n[i]));return c}var t=!0,e=Number,r=si,u=ai;return n.value=function(t){return arguments.length?(e=t,n):e},n.range=function(t){return arguments.length?(r=bt(t),n):r},n.bins=function(t){return arguments.length?(u="number"==typeof t?function(n){return ci(n,t)}:bt(t),n):u},n.frequency=function(e){return arguments.length?(t=!!e,n):t},n},Zo.layout.pack=function(){function n(n,i){var o=e.call(this,n,i),a=o[0],c=u[0],s=u[1],l=null==t?Math.sqrt:"function"==typeof t?t:function(){return t};if(a.x=a.y=0,Bu(a,function(n){n.r=+l(n.value)}),Bu(a,pi),r){var f=r*(t?1:Math.max(2*a.r/c,2*a.r/s))/2;Bu(a,function(n){n.r+=f}),Bu(a,pi),Bu(a,function(n){n.r-=f})}return mi(a,c/2,s/2,t?1:1/Math.max(2*a.r/c,2*a.r/s)),o}var t,e=Zo.layout.hierarchy().sort(li),r=0,u=[1,1];return n.size=function(t){return arguments.length?(u=t,n):u},n.radius=function(e){return arguments.length?(t=null==e||"function"==typeof e?e:+e,n):t},n.padding=function(t){return arguments.length?(r=+t,n):r},Xu(n,e)},Zo.layout.tree=function(){function n(n,u){var l=o.call(this,n,u),f=l[0],h=t(f);if(Bu(h,e),h.parent.m=-h.z,$u(h,r),s)$u(f,i);else{var g=f,p=f,v=f;$u(f,function(n){n.xp.x&&(p=n),n.depth>v.depth&&(v=n)});var d=a(g,p)/2-g.x,m=c[0]/(p.x+a(p,g)/2+d),y=c[1]/(v.depth||1);$u(f,function(n){n.x=(n.x+d)*m,n.y=n.depth*y})}return l}function t(n){for(var t,e={A:null,children:[n]},r=[e];null!=(t=r.pop());)for(var u,i=t.children,o=0,a=i.length;a>o;++o)r.push((i[o]=u={_:i[o],parent:t,children:(u=i[o].children)&&u.slice()||[],A:null,a:null,z:0,m:0,c:0,s:0,t:null,i:o}).a=u);return e.children[0]}function e(n){var t=n.children,e=n.parent.children,r=n.i?e[n.i-1]:null;if(t.length){wi(n);var i=(t[0].z+t[t.length-1].z)/2;r?(n.z=r.z+a(n._,r._),n.m=n.z-i):n.z=i}else r&&(n.z=r.z+a(n._,r._));n.parent.A=u(n,r,n.parent.A||e[0])}function r(n){n._.x=n.z+n.parent.m,n.m+=n.parent.m}function u(n,t,e){if(t){for(var r,u=n,i=n,o=t,c=u.parent.children[0],s=u.m,l=i.m,f=o.m,h=c.m;o=_i(o),u=Mi(u),o&&u;)c=Mi(c),i=_i(i),i.a=n,r=o.z+f-u.z-s+a(o._,u._),r>0&&(bi(Si(o,n,e),n,r),s+=r,l+=r),f+=o.m,s+=u.m,h+=c.m,l+=i.m;o&&!_i(i)&&(i.t=o,i.m+=f-l),u&&!Mi(c)&&(c.t=u,c.m+=s-h,e=n)}return e}function i(n){n.x*=c[0],n.y=n.depth*c[1]}var o=Zo.layout.hierarchy().sort(null).value(null),a=xi,c=[1,1],s=null;return n.separation=function(t){return arguments.length?(a=t,n):a},n.size=function(t){return arguments.length?(s=null==(c=t)?i:null,n):s?null:c},n.nodeSize=function(t){return arguments.length?(s=null==(c=t)?null:i,n):s?c:null},Xu(n,o)},Zo.layout.cluster=function(){function n(n,i){var o,a=t.call(this,n,i),c=a[0],s=0;Bu(c,function(n){var t=n.children;t&&t.length?(n.x=Ei(t),n.y=ki(t)):(n.x=o?s+=e(n,o):0,n.y=0,o=n)});var l=Ai(c),f=Ci(c),h=l.x-e(l,f)/2,g=f.x+e(f,l)/2;return Bu(c,u?function(n){n.x=(n.x-c.x)*r[0],n.y=(c.y-n.y)*r[1]}:function(n){n.x=(n.x-h)/(g-h)*r[0],n.y=(1-(c.y?n.y/c.y:1))*r[1]}),a}var t=Zo.layout.hierarchy().sort(null).value(null),e=xi,r=[1,1],u=!1;return n.separation=function(t){return arguments.length?(e=t,n):e},n.size=function(t){return arguments.length?(u=null==(r=t),n):u?null:r},n.nodeSize=function(t){return arguments.length?(u=null!=(r=t),n):u?r:null},Xu(n,t)},Zo.layout.treemap=function(){function n(n,t){for(var e,r,u=-1,i=n.length;++ut?0:t),e.area=isNaN(r)||0>=r?0:r}function t(e){var i=e.children;if(i&&i.length){var o,a,c,s=f(e),l=[],h=i.slice(),p=1/0,v="slice"===g?s.dx:"dice"===g?s.dy:"slice-dice"===g?1&e.depth?s.dy:s.dx:Math.min(s.dx,s.dy);for(n(h,s.dx*s.dy/e.value),l.area=0;(c=h.length)>0;)l.push(o=h[c-1]),l.area+=o.area,"squarify"!==g||(a=r(l,v))<=p?(h.pop(),p=a):(l.area-=l.pop().area,u(l,v,s,!1),v=Math.min(s.dx,s.dy),l.length=l.area=0,p=1/0);l.length&&(u(l,v,s,!0),l.length=l.area=0),i.forEach(t)}}function e(t){var r=t.children;if(r&&r.length){var i,o=f(t),a=r.slice(),c=[];for(n(a,o.dx*o.dy/t.value),c.area=0;i=a.pop();)c.push(i),c.area+=i.area,null!=i.z&&(u(c,i.z?o.dx:o.dy,o,!a.length),c.length=c.area=0);r.forEach(e)}}function r(n,t){for(var e,r=n.area,u=0,i=1/0,o=-1,a=n.length;++oe&&(i=e),e>u&&(u=e));return r*=r,t*=t,r?Math.max(t*u*p/r,r/(t*i*p)):1/0}function u(n,t,e,r){var u,i=-1,o=n.length,a=e.x,s=e.y,l=t?c(n.area/t):0;if(t==e.dx){for((r||l>e.dy)&&(l=e.dy);++ie.dx)&&(l=e.dx);++ie&&(t=1),1>e&&(n=0),function(){var e,r,u;do e=2*Math.random()-1,r=2*Math.random()-1,u=e*e+r*r;while(!u||u>1);return n+t*e*Math.sqrt(-2*Math.log(u)/u)}},logNormal:function(){var n=Zo.random.normal.apply(Zo,arguments);return function(){return Math.exp(n())}},bates:function(n){var t=Zo.random.irwinHall(n);return function(){return t()/n}},irwinHall:function(n){return function(){for(var t=0,e=0;n>e;e++)t+=Math.random();return t}}},Zo.scale={};var ss={floor:wt,ceil:wt};Zo.scale.linear=function(){return Ui([0,1],[0,1],hu,!1)};var ls={s:1,g:1,p:1,r:1,e:1};Zo.scale.log=function(){return Vi(Zo.scale.linear().domain([0,1]),10,!0,[1,10])};var fs=Zo.format(".0e"),hs={floor:function(n){return-Math.ceil(-n)},ceil:function(n){return-Math.floor(-n)}};Zo.scale.pow=function(){return Xi(Zo.scale.linear(),1,[0,1])},Zo.scale.sqrt=function(){return Zo.scale.pow().exponent(.5)},Zo.scale.ordinal=function(){return Bi([],{t:"range",a:[[]]})},Zo.scale.category10=function(){return Zo.scale.ordinal().range(gs)},Zo.scale.category20=function(){return Zo.scale.ordinal().range(ps)},Zo.scale.category20b=function(){return Zo.scale.ordinal().range(vs)},Zo.scale.category20c=function(){return Zo.scale.ordinal().range(ds)};var gs=[2062260,16744206,2924588,14034728,9725885,9197131,14907330,8355711,12369186,1556175].map(vt),ps=[2062260,11454440,16744206,16759672,2924588,10018698,14034728,16750742,9725885,12955861,9197131,12885140,14907330,16234194,8355711,13092807,12369186,14408589,1556175,10410725].map(vt),vs=[3750777,5395619,7040719,10264286,6519097,9216594,11915115,13556636,9202993,12426809,15186514,15190932,8666169,11356490,14049643,15177372,8077683,10834324,13528509,14589654].map(vt),ds=[3244733,7057110,10406625,13032431,15095053,16616764,16625259,16634018,3253076,7652470,10607003,13101504,7695281,10394312,12369372,14342891,6513507,9868950,12434877,14277081].map(vt);Zo.scale.quantile=function(){return Wi([],[])},Zo.scale.quantize=function(){return Ji(0,1,[0,1])},Zo.scale.threshold=function(){return Gi([.5],[0,1])},Zo.scale.identity=function(){return Ki([0,1])},Zo.svg={},Zo.svg.arc=function(){function n(){var n=t.apply(this,arguments),i=e.apply(this,arguments),o=r.apply(this,arguments)+ms,a=u.apply(this,arguments)+ms,c=(o>a&&(c=o,o=a,a=c),a-o),s=ba>c?"0":"1",l=Math.cos(o),f=Math.sin(o),h=Math.cos(a),g=Math.sin(a); -return c>=ys?n?"M0,"+i+"A"+i+","+i+" 0 1,1 0,"+-i+"A"+i+","+i+" 0 1,1 0,"+i+"M0,"+n+"A"+n+","+n+" 0 1,0 0,"+-n+"A"+n+","+n+" 0 1,0 0,"+n+"Z":"M0,"+i+"A"+i+","+i+" 0 1,1 0,"+-i+"A"+i+","+i+" 0 1,1 0,"+i+"Z":n?"M"+i*l+","+i*f+"A"+i+","+i+" 0 "+s+",1 "+i*h+","+i*g+"L"+n*h+","+n*g+"A"+n+","+n+" 0 "+s+",0 "+n*l+","+n*f+"Z":"M"+i*l+","+i*f+"A"+i+","+i+" 0 "+s+",1 "+i*h+","+i*g+"L0,0"+"Z"}var t=Qi,e=no,r=to,u=eo;return n.innerRadius=function(e){return arguments.length?(t=bt(e),n):t},n.outerRadius=function(t){return arguments.length?(e=bt(t),n):e},n.startAngle=function(t){return arguments.length?(r=bt(t),n):r},n.endAngle=function(t){return arguments.length?(u=bt(t),n):u},n.centroid=function(){var n=(t.apply(this,arguments)+e.apply(this,arguments))/2,i=(r.apply(this,arguments)+u.apply(this,arguments))/2+ms;return[Math.cos(i)*n,Math.sin(i)*n]},n};var ms=-Sa,ys=wa-ka;Zo.svg.line=function(){return ro(wt)};var xs=Zo.map({linear:uo,"linear-closed":io,step:oo,"step-before":ao,"step-after":co,basis:po,"basis-open":vo,"basis-closed":mo,bundle:yo,cardinal:fo,"cardinal-open":so,"cardinal-closed":lo,monotone:So});xs.forEach(function(n,t){t.key=n,t.closed=/-closed$/.test(n)});var Ms=[0,2/3,1/3,0],_s=[0,1/3,2/3,0],bs=[0,1/6,2/3,1/6];Zo.svg.line.radial=function(){var n=ro(ko);return n.radius=n.x,delete n.x,n.angle=n.y,delete n.y,n},ao.reverse=co,co.reverse=ao,Zo.svg.area=function(){return Eo(wt)},Zo.svg.area.radial=function(){var n=Eo(ko);return n.radius=n.x,delete n.x,n.innerRadius=n.x0,delete n.x0,n.outerRadius=n.x1,delete n.x1,n.angle=n.y,delete n.y,n.startAngle=n.y0,delete n.y0,n.endAngle=n.y1,delete n.y1,n},Zo.svg.chord=function(){function n(n,a){var c=t(this,i,n,a),s=t(this,o,n,a);return"M"+c.p0+r(c.r,c.p1,c.a1-c.a0)+(e(c,s)?u(c.r,c.p1,c.r,c.p0):u(c.r,c.p1,s.r,s.p0)+r(s.r,s.p1,s.a1-s.a0)+u(s.r,s.p1,c.r,c.p0))+"Z"}function t(n,t,e,r){var u=t.call(n,e,r),i=a.call(n,u,r),o=c.call(n,u,r)+ms,l=s.call(n,u,r)+ms;return{r:i,a0:o,a1:l,p0:[i*Math.cos(o),i*Math.sin(o)],p1:[i*Math.cos(l),i*Math.sin(l)]}}function e(n,t){return n.a0==t.a0&&n.a1==t.a1}function r(n,t,e){return"A"+n+","+n+" 0 "+ +(e>ba)+",1 "+t}function u(n,t,e,r){return"Q 0,0 "+r}var i=gr,o=pr,a=Ao,c=to,s=eo;return n.radius=function(t){return arguments.length?(a=bt(t),n):a},n.source=function(t){return arguments.length?(i=bt(t),n):i},n.target=function(t){return arguments.length?(o=bt(t),n):o},n.startAngle=function(t){return arguments.length?(c=bt(t),n):c},n.endAngle=function(t){return arguments.length?(s=bt(t),n):s},n},Zo.svg.diagonal=function(){function n(n,u){var i=t.call(this,n,u),o=e.call(this,n,u),a=(i.y+o.y)/2,c=[i,{x:i.x,y:a},{x:o.x,y:a},o];return c=c.map(r),"M"+c[0]+"C"+c[1]+" "+c[2]+" "+c[3]}var t=gr,e=pr,r=Co;return n.source=function(e){return arguments.length?(t=bt(e),n):t},n.target=function(t){return arguments.length?(e=bt(t),n):e},n.projection=function(t){return arguments.length?(r=t,n):r},n},Zo.svg.diagonal.radial=function(){var n=Zo.svg.diagonal(),t=Co,e=n.projection;return n.projection=function(n){return arguments.length?e(No(t=n)):t},n},Zo.svg.symbol=function(){function n(n,r){return(ws.get(t.call(this,n,r))||To)(e.call(this,n,r))}var t=Lo,e=zo;return n.type=function(e){return arguments.length?(t=bt(e),n):t},n.size=function(t){return arguments.length?(e=bt(t),n):e},n};var ws=Zo.map({circle:To,cross:function(n){var t=Math.sqrt(n/5)/2;return"M"+-3*t+","+-t+"H"+-t+"V"+-3*t+"H"+t+"V"+-t+"H"+3*t+"V"+t+"H"+t+"V"+3*t+"H"+-t+"V"+t+"H"+-3*t+"Z"},diamond:function(n){var t=Math.sqrt(n/(2*As)),e=t*As;return"M0,"+-t+"L"+e+",0"+" 0,"+t+" "+-e+",0"+"Z"},square:function(n){var t=Math.sqrt(n)/2;return"M"+-t+","+-t+"L"+t+","+-t+" "+t+","+t+" "+-t+","+t+"Z"},"triangle-down":function(n){var t=Math.sqrt(n/Es),e=t*Es/2;return"M0,"+e+"L"+t+","+-e+" "+-t+","+-e+"Z"},"triangle-up":function(n){var t=Math.sqrt(n/Es),e=t*Es/2;return"M0,"+-e+"L"+t+","+e+" "+-t+","+e+"Z"}});Zo.svg.symbolTypes=ws.keys();var Ss,ks,Es=Math.sqrt(3),As=Math.tan(30*Aa),Cs=[],Ns=0;Cs.call=pa.call,Cs.empty=pa.empty,Cs.node=pa.node,Cs.size=pa.size,Zo.transition=function(n){return arguments.length?Ss?n.transition():n:ma.transition()},Zo.transition.prototype=Cs,Cs.select=function(n){var t,e,r,u=this.id,i=[];n=b(n);for(var o=-1,a=this.length;++oi;i++){u.push(t=[]);for(var e=this[i],a=0,c=e.length;c>a;a++)(r=e[a])&&n.call(r,r.__data__,a,i)&&t.push(r)}return qo(u,this.id)},Cs.tween=function(n,t){var e=this.id;return arguments.length<2?this.node().__transition__[e].tween.get(n):P(this,null==t?function(t){t.__transition__[e].tween.remove(n)}:function(r){r.__transition__[e].tween.set(n,t)})},Cs.attr=function(n,t){function e(){this.removeAttribute(a)}function r(){this.removeAttributeNS(a.space,a.local)}function u(n){return null==n?e:(n+="",function(){var t,e=this.getAttribute(a);return e!==n&&(t=o(e,n),function(n){this.setAttribute(a,t(n))})})}function i(n){return null==n?r:(n+="",function(){var t,e=this.getAttributeNS(a.space,a.local);return e!==n&&(t=o(e,n),function(n){this.setAttributeNS(a.space,a.local,t(n))})})}if(arguments.length<2){for(t in n)this.attr(t,n[t]);return this}var o="transform"==n?Du:hu,a=Zo.ns.qualify(n);return Ro(this,"attr."+n,t,a.local?i:u)},Cs.attrTween=function(n,t){function e(n,e){var r=t.call(this,n,e,this.getAttribute(u));return r&&function(n){this.setAttribute(u,r(n))}}function r(n,e){var r=t.call(this,n,e,this.getAttributeNS(u.space,u.local));return r&&function(n){this.setAttributeNS(u.space,u.local,r(n))}}var u=Zo.ns.qualify(n);return this.tween("attr."+n,u.local?r:e)},Cs.style=function(n,t,e){function r(){this.style.removeProperty(n)}function u(t){return null==t?r:(t+="",function(){var r,u=Wo.getComputedStyle(this,null).getPropertyValue(n);return u!==t&&(r=hu(u,t),function(t){this.style.setProperty(n,r(t),e)})})}var i=arguments.length;if(3>i){if("string"!=typeof n){2>i&&(t="");for(e in n)this.style(e,n[e],t);return this}e=""}return Ro(this,"style."+n,t,u)},Cs.styleTween=function(n,t,e){function r(r,u){var i=t.call(this,r,u,Wo.getComputedStyle(this,null).getPropertyValue(n));return i&&function(t){this.style.setProperty(n,i(t),e)}}return arguments.length<3&&(e=""),this.tween("style."+n,r)},Cs.text=function(n){return Ro(this,"text",n,Do)},Cs.remove=function(){return this.each("end.transition",function(){var n;this.__transition__.count<2&&(n=this.parentNode)&&n.removeChild(this)})},Cs.ease=function(n){var t=this.id;return arguments.length<1?this.node().__transition__[t].ease:("function"!=typeof n&&(n=Zo.ease.apply(Zo,arguments)),P(this,function(e){e.__transition__[t].ease=n}))},Cs.delay=function(n){var t=this.id;return arguments.length<1?this.node().__transition__[t].delay:P(this,"function"==typeof n?function(e,r,u){e.__transition__[t].delay=+n.call(e,e.__data__,r,u)}:(n=+n,function(e){e.__transition__[t].delay=n}))},Cs.duration=function(n){var t=this.id;return arguments.length<1?this.node().__transition__[t].duration:P(this,"function"==typeof n?function(e,r,u){e.__transition__[t].duration=Math.max(1,n.call(e,e.__data__,r,u))}:(n=Math.max(1,n),function(e){e.__transition__[t].duration=n}))},Cs.each=function(n,t){var e=this.id;if(arguments.length<2){var r=ks,u=Ss;Ss=e,P(this,function(t,r,u){ks=t.__transition__[e],n.call(t,t.__data__,r,u)}),ks=r,Ss=u}else P(this,function(r){var u=r.__transition__[e];(u.event||(u.event=Zo.dispatch("start","end"))).on(n,t)});return this},Cs.transition=function(){for(var n,t,e,r,u=this.id,i=++Ns,o=[],a=0,c=this.length;c>a;a++){o.push(n=[]);for(var t=this[a],s=0,l=t.length;l>s;s++)(e=t[s])&&(r=Object.create(e.__transition__[u]),r.delay+=r.duration,Po(e,s,i,r)),n.push(e)}return qo(o,i)},Zo.svg.axis=function(){function n(n){n.each(function(){var n,s=Zo.select(this),l=this.__chart__||e,f=this.__chart__=e.copy(),h=null==c?f.ticks?f.ticks.apply(f,a):f.domain():c,g=null==t?f.tickFormat?f.tickFormat.apply(f,a):wt:t,p=s.selectAll(".tick").data(h,f),v=p.enter().insert("g",".domain").attr("class","tick").style("opacity",ka),d=Zo.transition(p.exit()).style("opacity",ka).remove(),m=Zo.transition(p.order()).style("opacity",1),y=Ti(f),x=s.selectAll(".domain").data([0]),M=(x.enter().append("path").attr("class","domain"),Zo.transition(x));v.append("line"),v.append("text");var _=v.select("line"),b=m.select("line"),w=p.select("text").text(g),S=v.select("text"),k=m.select("text");switch(r){case"bottom":n=Uo,_.attr("y2",u),S.attr("y",Math.max(u,0)+o),b.attr("x2",0).attr("y2",u),k.attr("x",0).attr("y",Math.max(u,0)+o),w.attr("dy",".71em").style("text-anchor","middle"),M.attr("d","M"+y[0]+","+i+"V0H"+y[1]+"V"+i);break;case"top":n=Uo,_.attr("y2",-u),S.attr("y",-(Math.max(u,0)+o)),b.attr("x2",0).attr("y2",-u),k.attr("x",0).attr("y",-(Math.max(u,0)+o)),w.attr("dy","0em").style("text-anchor","middle"),M.attr("d","M"+y[0]+","+-i+"V0H"+y[1]+"V"+-i);break;case"left":n=jo,_.attr("x2",-u),S.attr("x",-(Math.max(u,0)+o)),b.attr("x2",-u).attr("y2",0),k.attr("x",-(Math.max(u,0)+o)).attr("y",0),w.attr("dy",".32em").style("text-anchor","end"),M.attr("d","M"+-i+","+y[0]+"H0V"+y[1]+"H"+-i);break;case"right":n=jo,_.attr("x2",u),S.attr("x",Math.max(u,0)+o),b.attr("x2",u).attr("y2",0),k.attr("x",Math.max(u,0)+o).attr("y",0),w.attr("dy",".32em").style("text-anchor","start"),M.attr("d","M"+i+","+y[0]+"H0V"+y[1]+"H"+i)}if(f.rangeBand){var E=f,A=E.rangeBand()/2;l=f=function(n){return E(n)+A}}else l.rangeBand?l=f:d.call(n,f);v.call(n,l),m.call(n,f)})}var t,e=Zo.scale.linear(),r=zs,u=6,i=6,o=3,a=[10],c=null;return n.scale=function(t){return arguments.length?(e=t,n):e},n.orient=function(t){return arguments.length?(r=t in Ls?t+"":zs,n):r},n.ticks=function(){return arguments.length?(a=arguments,n):a},n.tickValues=function(t){return arguments.length?(c=t,n):c},n.tickFormat=function(e){return arguments.length?(t=e,n):t},n.tickSize=function(t){var e=arguments.length;return e?(u=+t,i=+arguments[e-1],n):u},n.innerTickSize=function(t){return arguments.length?(u=+t,n):u},n.outerTickSize=function(t){return arguments.length?(i=+t,n):i},n.tickPadding=function(t){return arguments.length?(o=+t,n):o},n.tickSubdivide=function(){return arguments.length&&n},n};var zs="bottom",Ls={top:1,right:1,bottom:1,left:1};Zo.svg.brush=function(){function n(i){i.each(function(){var i=Zo.select(this).style("pointer-events","all").style("-webkit-tap-highlight-color","rgba(0,0,0,0)").on("mousedown.brush",u).on("touchstart.brush",u),o=i.selectAll(".background").data([0]);o.enter().append("rect").attr("class","background").style("visibility","hidden").style("cursor","crosshair"),i.selectAll(".extent").data([0]).enter().append("rect").attr("class","extent").style("cursor","move");var a=i.selectAll(".resize").data(p,wt);a.exit().remove(),a.enter().append("g").attr("class",function(n){return"resize "+n}).style("cursor",function(n){return Ts[n]}).append("rect").attr("x",function(n){return/[ew]$/.test(n)?-3:null}).attr("y",function(n){return/^[ns]/.test(n)?-3:null}).attr("width",6).attr("height",6).style("visibility","hidden"),a.style("display",n.empty()?"none":null);var l,f=Zo.transition(i),h=Zo.transition(o);c&&(l=Ti(c),h.attr("x",l[0]).attr("width",l[1]-l[0]),e(f)),s&&(l=Ti(s),h.attr("y",l[0]).attr("height",l[1]-l[0]),r(f)),t(f)})}function t(n){n.selectAll(".resize").attr("transform",function(n){return"translate("+l[+/e$/.test(n)]+","+f[+/^s/.test(n)]+")"})}function e(n){n.select(".extent").attr("x",l[0]),n.selectAll(".extent,.n>rect,.s>rect").attr("width",l[1]-l[0])}function r(n){n.select(".extent").attr("y",f[0]),n.selectAll(".extent,.e>rect,.w>rect").attr("height",f[1]-f[0])}function u(){function u(){32==Zo.event.keyCode&&(C||(x=null,z[0]-=l[1],z[1]-=f[1],C=2),y())}function p(){32==Zo.event.keyCode&&2==C&&(z[0]+=l[1],z[1]+=f[1],C=0,y())}function v(){var n=Zo.mouse(_),u=!1;M&&(n[0]+=M[0],n[1]+=M[1]),C||(Zo.event.altKey?(x||(x=[(l[0]+l[1])/2,(f[0]+f[1])/2]),z[0]=l[+(n[0]p?(u=r,r=p):u=p),v[0]!=r||v[1]!=u?(e?o=null:i=null,v[0]=r,v[1]=u,!0):void 0}function m(){v(),S.style("pointer-events","all").selectAll(".resize").style("display",n.empty()?"none":null),Zo.select("body").style("cursor",null),L.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(),w({type:"brushend"})}var x,M,_=this,b=Zo.select(Zo.event.target),w=a.of(_,arguments),S=Zo.select(_),k=b.datum(),E=!/^(n|s)$/.test(k)&&c,A=!/^(e|w)$/.test(k)&&s,C=b.classed("extent"),N=I(),z=Zo.mouse(_),L=Zo.select(Wo).on("keydown.brush",u).on("keyup.brush",p);if(Zo.event.changedTouches?L.on("touchmove.brush",v).on("touchend.brush",m):L.on("mousemove.brush",v).on("mouseup.brush",m),S.interrupt().selectAll("*").interrupt(),C)z[0]=l[0]-z[0],z[1]=f[0]-z[1];else if(k){var T=+/w$/.test(k),q=+/^n/.test(k);M=[l[1-T]-z[0],f[1-q]-z[1]],z[0]=l[T],z[1]=f[q]}else Zo.event.altKey&&(x=z.slice());S.style("pointer-events","none").selectAll(".resize").style("display",null),Zo.select("body").style("cursor",b.style("cursor")),w({type:"brushstart"}),v()}var i,o,a=M(n,"brushstart","brush","brushend"),c=null,s=null,l=[0,0],f=[0,0],h=!0,g=!0,p=qs[0];return n.event=function(n){n.each(function(){var n=a.of(this,arguments),t={x:l,y:f,i:i,j:o},e=this.__chart__||t;this.__chart__=t,Ss?Zo.select(this).transition().each("start.brush",function(){i=e.i,o=e.j,l=e.x,f=e.y,n({type:"brushstart"})}).tween("brush:brush",function(){var e=gu(l,t.x),r=gu(f,t.y);return i=o=null,function(u){l=t.x=e(u),f=t.y=r(u),n({type:"brush",mode:"resize"})}}).each("end.brush",function(){i=t.i,o=t.j,n({type:"brush",mode:"resize"}),n({type:"brushend"})}):(n({type:"brushstart"}),n({type:"brush",mode:"resize"}),n({type:"brushend"}))})},n.x=function(t){return arguments.length?(c=t,p=qs[!c<<1|!s],n):c},n.y=function(t){return arguments.length?(s=t,p=qs[!c<<1|!s],n):s},n.clamp=function(t){return arguments.length?(c&&s?(h=!!t[0],g=!!t[1]):c?h=!!t:s&&(g=!!t),n):c&&s?[h,g]:c?h:s?g:null},n.extent=function(t){var e,r,u,a,h;return arguments.length?(c&&(e=t[0],r=t[1],s&&(e=e[0],r=r[0]),i=[e,r],c.invert&&(e=c(e),r=c(r)),e>r&&(h=e,e=r,r=h),(e!=l[0]||r!=l[1])&&(l=[e,r])),s&&(u=t[0],a=t[1],c&&(u=u[1],a=a[1]),o=[u,a],s.invert&&(u=s(u),a=s(a)),u>a&&(h=u,u=a,a=h),(u!=f[0]||a!=f[1])&&(f=[u,a])),n):(c&&(i?(e=i[0],r=i[1]):(e=l[0],r=l[1],c.invert&&(e=c.invert(e),r=c.invert(r)),e>r&&(h=e,e=r,r=h))),s&&(o?(u=o[0],a=o[1]):(u=f[0],a=f[1],s.invert&&(u=s.invert(u),a=s.invert(a)),u>a&&(h=u,u=a,a=h))),c&&s?[[e,u],[r,a]]:c?[e,r]:s&&[u,a])},n.clear=function(){return n.empty()||(l=[0,0],f=[0,0],i=o=null),n},n.empty=function(){return!!c&&l[0]==l[1]||!!s&&f[0]==f[1]},Zo.rebind(n,a,"on")};var Ts={n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},qs=[["n","e","s","w","nw","ne","se","sw"],["e","w"],["n","s"],[]],Rs=Qa.format=ic.timeFormat,Ds=Rs.utc,Ps=Ds("%Y-%m-%dT%H:%M:%S.%LZ");Rs.iso=Date.prototype.toISOString&&+new Date("2000-01-01T00:00:00.000Z")?Ho:Ps,Ho.parse=function(n){var t=new Date(n);return isNaN(t)?null:t},Ho.toString=Ps.toString,Qa.second=Dt(function(n){return new nc(1e3*Math.floor(n/1e3))},function(n,t){n.setTime(n.getTime()+1e3*Math.floor(t))},function(n){return n.getSeconds()}),Qa.seconds=Qa.second.range,Qa.seconds.utc=Qa.second.utc.range,Qa.minute=Dt(function(n){return new nc(6e4*Math.floor(n/6e4))},function(n,t){n.setTime(n.getTime()+6e4*Math.floor(t))},function(n){return n.getMinutes()}),Qa.minutes=Qa.minute.range,Qa.minutes.utc=Qa.minute.utc.range,Qa.hour=Dt(function(n){var t=n.getTimezoneOffset()/60;return new nc(36e5*(Math.floor(n/36e5-t)+t))},function(n,t){n.setTime(n.getTime()+36e5*Math.floor(t))},function(n){return n.getHours()}),Qa.hours=Qa.hour.range,Qa.hours.utc=Qa.hour.utc.range,Qa.month=Dt(function(n){return n=Qa.day(n),n.setDate(1),n},function(n,t){n.setMonth(n.getMonth()+t)},function(n){return n.getMonth()}),Qa.months=Qa.month.range,Qa.months.utc=Qa.month.utc.range;var Us=[1e3,5e3,15e3,3e4,6e4,3e5,9e5,18e5,36e5,108e5,216e5,432e5,864e5,1728e5,6048e5,2592e6,7776e6,31536e6],js=[[Qa.second,1],[Qa.second,5],[Qa.second,15],[Qa.second,30],[Qa.minute,1],[Qa.minute,5],[Qa.minute,15],[Qa.minute,30],[Qa.hour,1],[Qa.hour,3],[Qa.hour,6],[Qa.hour,12],[Qa.day,1],[Qa.day,2],[Qa.week,1],[Qa.month,1],[Qa.month,3],[Qa.year,1]],Hs=Rs.multi([[".%L",function(n){return n.getMilliseconds()}],[":%S",function(n){return n.getSeconds()}],["%I:%M",function(n){return n.getMinutes()}],["%I %p",function(n){return n.getHours()}],["%a %d",function(n){return n.getDay()&&1!=n.getDate()}],["%b %d",function(n){return 1!=n.getDate()}],["%B",function(n){return n.getMonth()}],["%Y",we]]),Fs={range:function(n,t,e){return Zo.range(Math.ceil(n/e)*e,+t,e).map(Oo)},floor:wt,ceil:wt};js.year=Qa.year,Qa.scale=function(){return Fo(Zo.scale.linear(),js,Hs)};var Os=js.map(function(n){return[n[0].utc,n[1]]}),Ys=Ds.multi([[".%L",function(n){return n.getUTCMilliseconds()}],[":%S",function(n){return n.getUTCSeconds()}],["%I:%M",function(n){return n.getUTCMinutes()}],["%I %p",function(n){return n.getUTCHours()}],["%a %d",function(n){return n.getUTCDay()&&1!=n.getUTCDate()}],["%b %d",function(n){return 1!=n.getUTCDate()}],["%B",function(n){return n.getUTCMonth()}],["%Y",we]]);Os.year=Qa.year.utc,Qa.scale.utc=function(){return Fo(Zo.scale.linear(),Os,Ys)},Zo.text=St(function(n){return n.responseText}),Zo.json=function(n,t){return kt(n,"application/json",Yo,t)},Zo.html=function(n,t){return kt(n,"text/html",Io,t)},Zo.xml=St(function(n){return n.responseXML}),"function"==typeof define&&define.amd?define(Zo):"object"==typeof module&&module.exports&&(module.exports=Zo),this.d3=Zo}(); \ No newline at end of file +!function(){function n(n){return n&&(n.ownerDocument||n.document||n).documentElement}function t(n){return n&&(n.ownerDocument&&n.ownerDocument.defaultView||n.document&&n||n.defaultView)}function e(n,t){return nt?1:n>=t?0:NaN}function r(n){return null===n?NaN:+n}function i(n){return!isNaN(n)}function u(n){return{left:function(t,e,r,i){for(arguments.length<3&&(r=0),arguments.length<4&&(i=t.length);r>>1;n(t[u],e)<0?r=u+1:i=u}return r},right:function(t,e,r,i){for(arguments.length<3&&(r=0),arguments.length<4&&(i=t.length);r>>1;n(t[u],e)>0?i=u:r=u+1}return r}}}function o(n){return n.length}function a(n){for(var t=1;n*t%1;)t*=10;return t}function l(n,t){for(var e in t)Object.defineProperty(n.prototype,e,{value:t[e],enumerable:!1})}function c(){this._=Object.create(null)}function f(n){return(n+="")===bo||n[0]===_o?_o+n:n}function s(n){return(n+="")[0]===_o?n.slice(1):n}function h(n){return f(n)in this._}function p(n){return(n=f(n))in this._&&delete this._[n]}function g(){var n=[];for(var t in this._)n.push(s(t));return n}function v(){var n=0;for(var t in this._)++n;return n}function d(){for(var n in this._)return!1;return!0}function y(){this._=Object.create(null)}function m(n){return n}function M(n,t,e){return function(){var r=e.apply(t,arguments);return r===t?n:r}}function x(n,t){if(t in n)return t;t=t.charAt(0).toUpperCase()+t.slice(1);for(var e=0,r=wo.length;e=t&&(t=i+1);!(o=a[t])&&++t0&&(n=n.slice(0,a));var c=To.get(n);return c&&(n=c,l=B),a?t?i:r:t?b:u}function $(n,t){return function(e){var r=ao.event;ao.event=e,t[0]=this.__data__;try{n.apply(this,t)}finally{ao.event=r}}}function B(n,t){var e=$(n,t);return function(n){var t=this,r=n.relatedTarget;r&&(r===t||8&r.compareDocumentPosition(t))||e.call(t,n)}}function W(e){var r=".dragsuppress-"+ ++Do,i="click"+r,u=ao.select(t(e)).on("touchmove"+r,S).on("dragstart"+r,S).on("selectstart"+r,S);if(null==Ro&&(Ro=!("onselectstart"in e)&&x(e.style,"userSelect")),Ro){var o=n(e).style,a=o[Ro];o[Ro]="none"}return function(n){if(u.on(r,null),Ro&&(o[Ro]=a),n){var t=function(){u.on(i,null)};u.on(i,function(){S(),t()},!0),setTimeout(t,0)}}}function J(n,e){e.changedTouches&&(e=e.changedTouches[0]);var r=n.ownerSVGElement||n;if(r.createSVGPoint){var i=r.createSVGPoint();if(Po<0){var u=t(n);if(u.scrollX||u.scrollY){r=ao.select("body").append("svg").style({position:"absolute",top:0,left:0,margin:0,padding:0,border:"none"},"important");var o=r[0][0].getScreenCTM();Po=!(o.f||o.e),r.remove()}}return Po?(i.x=e.pageX,i.y=e.pageY):(i.x=e.clientX,i.y=e.clientY),i=i.matrixTransform(n.getScreenCTM().inverse()),[i.x,i.y]}var a=n.getBoundingClientRect();return[e.clientX-a.left-n.clientLeft,e.clientY-a.top-n.clientTop]}function G(){return ao.event.changedTouches[0].identifier}function K(n){return n>0?1:n<0?-1:0}function Q(n,t,e){return(t[0]-n[0])*(e[1]-n[1])-(t[1]-n[1])*(e[0]-n[0])}function nn(n){return n>1?0:n<-1?Fo:Math.acos(n)}function tn(n){return n>1?Io:n<-1?-Io:Math.asin(n)}function en(n){return((n=Math.exp(n))-1/n)/2}function rn(n){return((n=Math.exp(n))+1/n)/2}function un(n){return((n=Math.exp(2*n))-1)/(n+1)}function on(n){return(n=Math.sin(n/2))*n}function an(){}function ln(n,t,e){return this instanceof ln?(this.h=+n,this.s=+t,void(this.l=+e)):arguments.length<2?n instanceof ln?new ln(n.h,n.s,n.l):_n(""+n,wn,ln):new ln(n,t,e)}function cn(n,t,e){function r(n){return n>360?n-=360:n<0&&(n+=360),n<60?u+(o-u)*n/60:n<180?o:n<240?u+(o-u)*(240-n)/60:u}function i(n){return Math.round(255*r(n))}var u,o;return n=isNaN(n)?0:(n%=360)<0?n+360:n,t=isNaN(t)?0:t<0?0:t>1?1:t,e=e<0?0:e>1?1:e,o=e<=.5?e*(1+t):e+t-e*t,u=2*e-o,new mn(i(n+120),i(n),i(n-120))}function fn(n,t,e){return this instanceof fn?(this.h=+n,this.c=+t,void(this.l=+e)):arguments.length<2?n instanceof fn?new fn(n.h,n.c,n.l):n instanceof hn?gn(n.l,n.a,n.b):gn((n=Sn((n=ao.rgb(n)).r,n.g,n.b)).l,n.a,n.b):new fn(n,t,e)}function sn(n,t,e){return isNaN(n)&&(n=0),isNaN(t)&&(t=0),new hn(e,Math.cos(n*=Yo)*t,Math.sin(n)*t)}function hn(n,t,e){return this instanceof hn?(this.l=+n,this.a=+t,void(this.b=+e)):arguments.length<2?n instanceof hn?new hn(n.l,n.a,n.b):n instanceof fn?sn(n.h,n.c,n.l):Sn((n=mn(n)).r,n.g,n.b):new hn(n,t,e)}function pn(n,t,e){var r=(n+16)/116,i=r+t/500,u=r-e/200;return i=vn(i)*na,r=vn(r)*ta,u=vn(u)*ea,new mn(yn(3.2404542*i-1.5371385*r-.4985314*u),yn(-.969266*i+1.8760108*r+.041556*u),yn(.0556434*i-.2040259*r+1.0572252*u))}function gn(n,t,e){return n>0?new fn(Math.atan2(e,t)*Zo,Math.sqrt(t*t+e*e),n):new fn(NaN,NaN,n)}function vn(n){return n>.206893034?n*n*n:(n-4/29)/7.787037}function dn(n){return n>.008856?Math.pow(n,1/3):7.787037*n+4/29}function yn(n){return Math.round(255*(n<=.00304?12.92*n:1.055*Math.pow(n,1/2.4)-.055))}function mn(n,t,e){return this instanceof mn?(this.r=~~n,this.g=~~t,void(this.b=~~e)):arguments.length<2?n instanceof mn?new mn(n.r,n.g,n.b):_n(""+n,mn,cn):new mn(n,t,e)}function Mn(n){return new mn(n>>16,n>>8&255,255&n)}function xn(n){return Mn(n)+""}function bn(n){return n<16?"0"+Math.max(0,n).toString(16):Math.min(255,n).toString(16)}function _n(n,t,e){var r,i,u,o=0,a=0,l=0;if(r=/([a-z]+)\((.*)\)/.exec(n=n.toLowerCase()))switch(i=r[2].split(","),r[1]){case"hsl":return e(parseFloat(i[0]),parseFloat(i[1])/100,parseFloat(i[2])/100);case"rgb":return t(Nn(i[0]),Nn(i[1]),Nn(i[2]))}return(u=ua.get(n))?t(u.r,u.g,u.b):(null==n||"#"!==n.charAt(0)||isNaN(u=parseInt(n.slice(1),16))||(4===n.length?(o=(3840&u)>>4,o=o>>4|o,a=240&u,a=a>>4|a,l=15&u,l=l<<4|l):7===n.length&&(o=(16711680&u)>>16,a=(65280&u)>>8,l=255&u)),t(o,a,l))}function wn(n,t,e){var r,i,u=Math.min(n/=255,t/=255,e/=255),o=Math.max(n,t,e),a=o-u,l=(o+u)/2;return a?(i=l<.5?a/(o+u):a/(2-o-u),r=n==o?(t-e)/a+(t0&&l<1?0:r),new ln(r,i,l)}function Sn(n,t,e){n=kn(n),t=kn(t),e=kn(e);var r=dn((.4124564*n+.3575761*t+.1804375*e)/na),i=dn((.2126729*n+.7151522*t+.072175*e)/ta),u=dn((.0193339*n+.119192*t+.9503041*e)/ea);return hn(116*i-16,500*(r-i),200*(i-u))}function kn(n){return(n/=255)<=.04045?n/12.92:Math.pow((n+.055)/1.055,2.4)}function Nn(n){var t=parseFloat(n);return"%"===n.charAt(n.length-1)?Math.round(2.55*t):t}function En(n){return"function"==typeof n?n:function(){return n}}function An(n){return function(t,e,r){return 2===arguments.length&&"function"==typeof e&&(r=e,e=null),Cn(t,e,n,r)}}function Cn(n,t,e,r){function i(){var n,t=l.status;if(!t&&Ln(l)||t>=200&&t<300||304===t){try{n=e.call(u,l)}catch(r){return void o.error.call(u,r)}o.load.call(u,n)}else o.error.call(u,l)}var u={},o=ao.dispatch("beforesend","progress","load","error"),a={},l=new XMLHttpRequest,c=null;return!this.XDomainRequest||"withCredentials"in l||!/^(http(s)?:)?\/\//.test(n)||(l=new XDomainRequest),"onload"in l?l.onload=l.onerror=i:l.onreadystatechange=function(){l.readyState>3&&i()},l.onprogress=function(n){var t=ao.event;ao.event=n;try{o.progress.call(u,l)}finally{ao.event=t}},u.header=function(n,t){return n=(n+"").toLowerCase(),arguments.length<2?a[n]:(null==t?delete a[n]:a[n]=t+"",u)},u.mimeType=function(n){return arguments.length?(t=null==n?null:n+"",u):t},u.responseType=function(n){return arguments.length?(c=n,u):c},u.response=function(n){return e=n,u},["get","post"].forEach(function(n){u[n]=function(){return u.send.apply(u,[n].concat(co(arguments)))}}),u.send=function(e,r,i){if(2===arguments.length&&"function"==typeof r&&(i=r,r=null),l.open(e,n,!0),null==t||"accept"in a||(a.accept=t+",*/*"),l.setRequestHeader)for(var f in a)l.setRequestHeader(f,a[f]);return null!=t&&l.overrideMimeType&&l.overrideMimeType(t),null!=c&&(l.responseType=c),null!=i&&u.on("error",i).on("load",function(n){i(null,n)}),o.beforesend.call(u,l),l.send(null==r?null:r),u},u.abort=function(){return l.abort(),u},ao.rebind(u,o,"on"),null==r?u:u.get(zn(r))}function zn(n){return 1===n.length?function(t,e){n(null==t?e:null)}:n}function Ln(n){var t=n.responseType;return t&&"text"!==t?n.response:n.responseText}function qn(n,t,e){var r=arguments.length;r<2&&(t=0),r<3&&(e=Date.now());var i=e+t,u={c:n,t:i,n:null};return aa?aa.n=u:oa=u,aa=u,la||(ca=clearTimeout(ca),la=1,fa(Tn)),u}function Tn(){var n=Rn(),t=Dn()-n;t>24?(isFinite(t)&&(clearTimeout(ca),ca=setTimeout(Tn,t)),la=0):(la=1,fa(Tn))}function Rn(){for(var n=Date.now(),t=oa;t;)n>=t.t&&t.c(n-t.t)&&(t.c=null),t=t.n;return n}function Dn(){for(var n,t=oa,e=1/0;t;)t.c?(t.t8?function(n){return n/e}:function(n){return n*e},symbol:n}}function jn(n){var t=n.decimal,e=n.thousands,r=n.grouping,i=n.currency,u=r&&e?function(n,t){for(var i=n.length,u=[],o=0,a=r[0],l=0;i>0&&a>0&&(l+a+1>t&&(a=Math.max(1,t-l)),u.push(n.substring(i-=a,i+a)),!((l+=a+1)>t));)a=r[o=(o+1)%r.length];return u.reverse().join(e)}:m;return function(n){var e=ha.exec(n),r=e[1]||" ",o=e[2]||">",a=e[3]||"-",l=e[4]||"",c=e[5],f=+e[6],s=e[7],h=e[8],p=e[9],g=1,v="",d="",y=!1,m=!0;switch(h&&(h=+h.substring(1)),(c||"0"===r&&"="===o)&&(c=r="0",o="="),p){case"n":s=!0,p="g";break;case"%":g=100,d="%",p="f";break;case"p":g=100,d="%",p="r";break;case"b":case"o":case"x":case"X":"#"===l&&(v="0"+p.toLowerCase());case"c":m=!1;case"d":y=!0,h=0;break;case"s":g=-1,p="r"}"$"===l&&(v=i[0],d=i[1]),"r"!=p||h||(p="g"),null!=h&&("g"==p?h=Math.max(1,Math.min(21,h)):"e"!=p&&"f"!=p||(h=Math.max(0,Math.min(20,h)))),p=pa.get(p)||Fn;var M=c&&s;return function(n){var e=d;if(y&&n%1)return"";var i=n<0||0===n&&1/n<0?(n=-n,"-"):"-"===a?"":a;if(g<0){var l=ao.formatPrefix(n,h);n=l.scale(n),e=l.symbol+d}else n*=g;n=p(n,h);var x,b,_=n.lastIndexOf(".");if(_<0){var w=m?n.lastIndexOf("e"):-1;w<0?(x=n,b=""):(x=n.substring(0,w),b=n.substring(w))}else x=n.substring(0,_),b=t+n.substring(_+1);!c&&s&&(x=u(x,1/0));var S=v.length+x.length+b.length+(M?0:i.length),k=S"===o?k+i+n:"^"===o?k.substring(0,S>>=1)+i+n+k.substring(S):i+(M?n:k+n))+e}}}function Fn(n){return n+""}function Hn(){this._=new Date(arguments.length>1?Date.UTC.apply(this,arguments):arguments[0])}function On(n,t,e){function r(t){var e=n(t),r=u(e,1);return t-e1)for(;o=c)return-1;if(i=t.charCodeAt(a++),37===i){if(o=t.charAt(a++),u=C[o in ya?t.charAt(a++):o],!u||(r=u(n,e,r))<0)return-1}else if(i!=e.charCodeAt(r++))return-1}return r}function r(n,t,e){_.lastIndex=0;var r=_.exec(t.slice(e));return r?(n.w=w.get(r[0].toLowerCase()),e+r[0].length):-1}function i(n,t,e){x.lastIndex=0;var r=x.exec(t.slice(e));return r?(n.w=b.get(r[0].toLowerCase()),e+r[0].length):-1}function u(n,t,e){N.lastIndex=0;var r=N.exec(t.slice(e));return r?(n.m=E.get(r[0].toLowerCase()),e+r[0].length):-1}function o(n,t,e){S.lastIndex=0;var r=S.exec(t.slice(e));return r?(n.m=k.get(r[0].toLowerCase()),e+r[0].length):-1}function a(n,t,r){return e(n,A.c.toString(),t,r)}function l(n,t,r){return e(n,A.x.toString(),t,r)}function c(n,t,r){return e(n,A.X.toString(),t,r)}function f(n,t,e){var r=M.get(t.slice(e,e+=2).toLowerCase());return null==r?-1:(n.p=r,e)}var s=n.dateTime,h=n.date,p=n.time,g=n.periods,v=n.days,d=n.shortDays,y=n.months,m=n.shortMonths;t.utc=function(n){function e(n){try{va=Hn;var t=new va;return t._=n,r(t)}finally{va=Date}}var r=t(n);return e.parse=function(n){try{va=Hn;var t=r.parse(n);return t&&t._}finally{va=Date}},e.toString=r.toString,e},t.multi=t.utc.multi=ct;var M=ao.map(),x=Vn(v),b=Xn(v),_=Vn(d),w=Xn(d),S=Vn(y),k=Xn(y),N=Vn(m),E=Xn(m);g.forEach(function(n,t){M.set(n.toLowerCase(),t)});var A={a:function(n){return d[n.getDay()]},A:function(n){return v[n.getDay()]},b:function(n){return m[n.getMonth()]},B:function(n){return y[n.getMonth()]},c:t(s),d:function(n,t){return Zn(n.getDate(),t,2)},e:function(n,t){return Zn(n.getDate(),t,2)},H:function(n,t){return Zn(n.getHours(),t,2)},I:function(n,t){return Zn(n.getHours()%12||12,t,2)},j:function(n,t){return Zn(1+ga.dayOfYear(n),t,3)},L:function(n,t){return Zn(n.getMilliseconds(),t,3)},m:function(n,t){return Zn(n.getMonth()+1,t,2)},M:function(n,t){return Zn(n.getMinutes(),t,2)},p:function(n){return g[+(n.getHours()>=12)]},S:function(n,t){return Zn(n.getSeconds(),t,2)},U:function(n,t){return Zn(ga.sundayOfYear(n),t,2)},w:function(n){return n.getDay()},W:function(n,t){return Zn(ga.mondayOfYear(n),t,2)},x:t(h),X:t(p),y:function(n,t){return Zn(n.getFullYear()%100,t,2)},Y:function(n,t){return Zn(n.getFullYear()%1e4,t,4)},Z:at,"%":function(){return"%"}},C={a:r,A:i,b:u,B:o,c:a,d:tt,e:tt,H:rt,I:rt,j:et,L:ot,m:nt,M:it,p:f,S:ut,U:Bn,w:$n,W:Wn,x:l,X:c,y:Gn,Y:Jn,Z:Kn,"%":lt};return t}function Zn(n,t,e){var r=n<0?"-":"",i=(r?-n:n)+"",u=i.length;return r+(u68?1900:2e3)}function nt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.m=r[0]-1,e+r[0].length):-1}function tt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.d=+r[0],e+r[0].length):-1}function et(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+3));return r?(n.j=+r[0],e+r[0].length):-1}function rt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.H=+r[0],e+r[0].length):-1}function it(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.M=+r[0],e+r[0].length):-1}function ut(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.S=+r[0],e+r[0].length):-1}function ot(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+3));return r?(n.L=+r[0],e+r[0].length):-1}function at(n){var t=n.getTimezoneOffset(),e=t>0?"-":"+",r=xo(t)/60|0,i=xo(t)%60;return e+Zn(r,"0",2)+Zn(i,"0",2)}function lt(n,t,e){Ma.lastIndex=0;var r=Ma.exec(t.slice(e,e+1));return r?e+r[0].length:-1}function ct(n){for(var t=n.length,e=-1;++e=0?1:-1,a=o*e,l=Math.cos(t),c=Math.sin(t),f=u*c,s=i*l+f*Math.cos(a),h=f*o*Math.sin(a);ka.add(Math.atan2(h,s)),r=n,i=l,u=c}var t,e,r,i,u;Na.point=function(o,a){Na.point=n,r=(t=o)*Yo,i=Math.cos(a=(e=a)*Yo/2+Fo/4),u=Math.sin(a)},Na.lineEnd=function(){n(t,e)}}function dt(n){var t=n[0],e=n[1],r=Math.cos(e);return[r*Math.cos(t),r*Math.sin(t),Math.sin(e)]}function yt(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]}function mt(n,t){return[n[1]*t[2]-n[2]*t[1],n[2]*t[0]-n[0]*t[2],n[0]*t[1]-n[1]*t[0]]}function Mt(n,t){n[0]+=t[0],n[1]+=t[1],n[2]+=t[2]}function xt(n,t){return[n[0]*t,n[1]*t,n[2]*t]}function bt(n){var t=Math.sqrt(n[0]*n[0]+n[1]*n[1]+n[2]*n[2]);n[0]/=t,n[1]/=t,n[2]/=t}function _t(n){return[Math.atan2(n[1],n[0]),tn(n[2])]}function wt(n,t){return xo(n[0]-t[0])=0;--a)i.point((s=f[a])[0],s[1])}else r(p.x,p.p.x,-1,i);p=p.p}p=p.o,f=p.z,g=!g}while(!p.v);i.lineEnd()}}}function qt(n){if(t=n.length){for(var t,e,r=0,i=n[0];++r0){for(b||(u.polygonStart(),b=!0),u.lineStart();++o1&&2&t&&e.push(e.pop().concat(e.shift())),p.push(e.filter(Dt))}var p,g,v,d=t(u),y=i.invert(r[0],r[1]),m={point:o,lineStart:l,lineEnd:c,polygonStart:function(){m.point=f,m.lineStart=s,m.lineEnd=h,p=[],g=[]},polygonEnd:function(){m.point=o,m.lineStart=l,m.lineEnd=c,p=ao.merge(p);var n=Ot(y,g);p.length?(b||(u.polygonStart(),b=!0),Lt(p,Ut,n,e,u)):n&&(b||(u.polygonStart(),b=!0),u.lineStart(),e(null,null,1,u),u.lineEnd()),b&&(u.polygonEnd(),b=!1),p=g=null},sphere:function(){u.polygonStart(),u.lineStart(),e(null,null,1,u),u.lineEnd(),u.polygonEnd()}},M=Pt(),x=t(M),b=!1;return m}}function Dt(n){return n.length>1}function Pt(){var n,t=[];return{lineStart:function(){t.push(n=[])},point:function(t,e){n.push([t,e])},lineEnd:b,buffer:function(){var e=t;return t=[],n=null,e},rejoin:function(){t.length>1&&t.push(t.pop().concat(t.shift()))}}}function Ut(n,t){return((n=n.x)[0]<0?n[1]-Io-Uo:Io-n[1])-((t=t.x)[0]<0?t[1]-Io-Uo:Io-t[1])}function jt(n){var t,e=NaN,r=NaN,i=NaN;return{lineStart:function(){n.lineStart(),t=1},point:function(u,o){var a=u>0?Fo:-Fo,l=xo(u-e);xo(l-Fo)0?Io:-Io),n.point(i,r),n.lineEnd(),n.lineStart(),n.point(a,r),n.point(u,r),t=0):i!==a&&l>=Fo&&(xo(e-i)Uo?Math.atan((Math.sin(t)*(u=Math.cos(r))*Math.sin(e)-Math.sin(r)*(i=Math.cos(t))*Math.sin(n))/(i*u*o)):(t+r)/2}function Ht(n,t,e,r){var i;if(null==n)i=e*Io,r.point(-Fo,i),r.point(0,i),r.point(Fo,i),r.point(Fo,0),r.point(Fo,-i),r.point(0,-i),r.point(-Fo,-i),r.point(-Fo,0),r.point(-Fo,i);else if(xo(n[0]-t[0])>Uo){var u=n[0]=0?1:-1,w=_*b,S=w>Fo,k=g*M;if(ka.add(Math.atan2(k*_*Math.sin(w),v*x+k*Math.cos(w))),u+=S?b+_*Ho:b,S^h>=e^y>=e){var N=mt(dt(s),dt(n));bt(N);var E=mt(i,N);bt(E);var A=(S^b>=0?-1:1)*tn(E[2]);(r>A||r===A&&(N[0]||N[1]))&&(o+=S^b>=0?1:-1)}if(!d++)break;h=y,g=M,v=x,s=n}}return(u<-Uo||uu}function e(n){var e,u,l,c,f;return{lineStart:function(){c=l=!1,f=1},point:function(s,h){var p,g=[s,h],v=t(s,h),d=o?v?0:i(s,h):v?i(s+(s<0?Fo:-Fo),h):0;if(!e&&(c=l=v)&&n.lineStart(),v!==l&&(p=r(e,g),(wt(e,p)||wt(g,p))&&(g[0]+=Uo,g[1]+=Uo,v=t(g[0],g[1]))),v!==l)f=0,v?(n.lineStart(),p=r(g,e),n.point(p[0],p[1])):(p=r(e,g),n.point(p[0],p[1]),n.lineEnd()),e=p;else if(a&&e&&o^v){var y;d&u||!(y=r(g,e,!0))||(f=0,o?(n.lineStart(),n.point(y[0][0],y[0][1]),n.point(y[1][0],y[1][1]),n.lineEnd()):(n.point(y[1][0],y[1][1]),n.lineEnd(),n.lineStart(),n.point(y[0][0],y[0][1])))}!v||e&&wt(e,g)||n.point(g[0],g[1]),e=g,l=v,u=d},lineEnd:function(){l&&n.lineEnd(),e=null},clean:function(){return f|(c&&l)<<1}}}function r(n,t,e){var r=dt(n),i=dt(t),o=[1,0,0],a=mt(r,i),l=yt(a,a),c=a[0],f=l-c*c;if(!f)return!e&&n;var s=u*l/f,h=-u*c/f,p=mt(o,a),g=xt(o,s),v=xt(a,h);Mt(g,v);var d=p,y=yt(g,d),m=yt(d,d),M=y*y-m*(yt(g,g)-1);if(!(M<0)){var x=Math.sqrt(M),b=xt(d,(-y-x)/m);if(Mt(b,g),b=_t(b),!e)return b;var _,w=n[0],S=t[0],k=n[1],N=t[1];S0^b[1]<(xo(b[0]-w)Fo^(w<=b[0]&&b[0]<=S)){var z=xt(d,(-y+x)/m);return Mt(z,g),[b,_t(z)]}}}function i(t,e){var r=o?n:Fo-n,i=0;return t<-r?i|=1:t>r&&(i|=2),e<-r?i|=4:e>r&&(i|=8),i}var u=Math.cos(n),o=u>0,a=xo(u)>Uo,l=ve(n,6*Yo);return Rt(t,e,l,o?[0,-n]:[-Fo,n-Fo])}function Yt(n,t,e,r){return function(i){var u,o=i.a,a=i.b,l=o.x,c=o.y,f=a.x,s=a.y,h=0,p=1,g=f-l,v=s-c;if(u=n-l,g||!(u>0)){if(u/=g,g<0){if(u0){if(u>p)return;u>h&&(h=u)}if(u=e-l,g||!(u<0)){if(u/=g,g<0){if(u>p)return;u>h&&(h=u)}else if(g>0){if(u0)){if(u/=v,v<0){if(u0){if(u>p)return;u>h&&(h=u)}if(u=r-c,v||!(u<0)){if(u/=v,v<0){if(u>p)return;u>h&&(h=u)}else if(v>0){if(u0&&(i.a={x:l+h*g,y:c+h*v}),p<1&&(i.b={x:l+p*g,y:c+p*v}),i}}}}}}function Zt(n,t,e,r){function i(r,i){return xo(r[0]-n)0?0:3:xo(r[0]-e)0?2:1:xo(r[1]-t)0?1:0:i>0?3:2}function u(n,t){return o(n.x,t.x)}function o(n,t){var e=i(n,1),r=i(t,1);return e!==r?e-r:0===e?t[1]-n[1]:1===e?n[0]-t[0]:2===e?n[1]-t[1]:t[0]-n[0]}return function(a){function l(n){for(var t=0,e=d.length,r=n[1],i=0;ir&&Q(c,u,n)>0&&++t:u[1]<=r&&Q(c,u,n)<0&&--t,c=u;return 0!==t}function c(u,a,l,c){var f=0,s=0;if(null==u||(f=i(u,l))!==(s=i(a,l))||o(u,a)<0^l>0){do c.point(0===f||3===f?n:e,f>1?r:t);while((f=(f+l+4)%4)!==s)}else c.point(a[0],a[1])}function f(i,u){return n<=i&&i<=e&&t<=u&&u<=r}function s(n,t){f(n,t)&&a.point(n,t)}function h(){C.point=g,d&&d.push(y=[]),S=!0,w=!1,b=_=NaN}function p(){v&&(g(m,M),x&&w&&E.rejoin(),v.push(E.buffer())),C.point=s,w&&a.lineEnd()}function g(n,t){n=Math.max(-Ha,Math.min(Ha,n)),t=Math.max(-Ha,Math.min(Ha,t));var e=f(n,t);if(d&&y.push([n,t]),S)m=n,M=t,x=e,S=!1,e&&(a.lineStart(),a.point(n,t));else if(e&&w)a.point(n,t);else{var r={a:{x:b,y:_},b:{x:n,y:t}};A(r)?(w||(a.lineStart(),a.point(r.a.x,r.a.y)),a.point(r.b.x,r.b.y),e||a.lineEnd(),k=!1):e&&(a.lineStart(),a.point(n,t),k=!1)}b=n,_=t,w=e}var v,d,y,m,M,x,b,_,w,S,k,N=a,E=Pt(),A=Yt(n,t,e,r),C={point:s,lineStart:h,lineEnd:p,polygonStart:function(){a=E,v=[],d=[],k=!0},polygonEnd:function(){a=N,v=ao.merge(v);var t=l([n,r]),e=k&&t,i=v.length;(e||i)&&(a.polygonStart(),e&&(a.lineStart(),c(null,null,1,a),a.lineEnd()),i&&Lt(v,u,t,c,a),a.polygonEnd()),v=d=y=null}};return C}}function Vt(n){var t=0,e=Fo/3,r=ae(n),i=r(t,e);return i.parallels=function(n){return arguments.length?r(t=n[0]*Fo/180,e=n[1]*Fo/180):[t/Fo*180,e/Fo*180]},i}function Xt(n,t){function e(n,t){var e=Math.sqrt(u-2*i*Math.sin(t))/i;return[e*Math.sin(n*=i),o-e*Math.cos(n)]}var r=Math.sin(n),i=(r+Math.sin(t))/2,u=1+r*(2*i-r),o=Math.sqrt(u)/i;return e.invert=function(n,t){var e=o-t;return[Math.atan2(n,e)/i,tn((u-(n*n+e*e)*i*i)/(2*i))]},e}function $t(){function n(n,t){Ia+=i*n-r*t,r=n,i=t}var t,e,r,i;$a.point=function(u,o){$a.point=n,t=r=u,e=i=o},$a.lineEnd=function(){n(t,e)}}function Bt(n,t){nVa&&(Va=n),tXa&&(Xa=t)}function Wt(){function n(n,t){o.push("M",n,",",t,u)}function t(n,t){o.push("M",n,",",t),a.point=e}function e(n,t){o.push("L",n,",",t)}function r(){a.point=n}function i(){o.push("Z")}var u=Jt(4.5),o=[],a={point:n,lineStart:function(){a.point=t},lineEnd:r,polygonStart:function(){a.lineEnd=i},polygonEnd:function(){a.lineEnd=r,a.point=n},pointRadius:function(n){return u=Jt(n),a},result:function(){if(o.length){var n=o.join("");return o=[],n}}};return a}function Jt(n){return"m0,"+n+"a"+n+","+n+" 0 1,1 0,"+-2*n+"a"+n+","+n+" 0 1,1 0,"+2*n+"z"}function Gt(n,t){Ca+=n,za+=t,++La}function Kt(){function n(n,r){var i=n-t,u=r-e,o=Math.sqrt(i*i+u*u);qa+=o*(t+n)/2,Ta+=o*(e+r)/2,Ra+=o,Gt(t=n,e=r)}var t,e;Wa.point=function(r,i){Wa.point=n,Gt(t=r,e=i)}}function Qt(){Wa.point=Gt}function ne(){function n(n,t){var e=n-r,u=t-i,o=Math.sqrt(e*e+u*u);qa+=o*(r+n)/2,Ta+=o*(i+t)/2,Ra+=o,o=i*n-r*t,Da+=o*(r+n),Pa+=o*(i+t),Ua+=3*o,Gt(r=n,i=t)}var t,e,r,i;Wa.point=function(u,o){Wa.point=n,Gt(t=r=u,e=i=o)},Wa.lineEnd=function(){n(t,e)}}function te(n){function t(t,e){n.moveTo(t+o,e),n.arc(t,e,o,0,Ho)}function e(t,e){n.moveTo(t,e),a.point=r}function r(t,e){n.lineTo(t,e)}function i(){a.point=t}function u(){n.closePath()}var o=4.5,a={point:t,lineStart:function(){a.point=e},lineEnd:i,polygonStart:function(){a.lineEnd=u},polygonEnd:function(){a.lineEnd=i,a.point=t},pointRadius:function(n){return o=n,a},result:b};return a}function ee(n){function t(n){return(a?r:e)(n)}function e(t){return ue(t,function(e,r){e=n(e,r),t.point(e[0],e[1])})}function r(t){function e(e,r){e=n(e,r),t.point(e[0],e[1])}function r(){M=NaN,S.point=u,t.lineStart()}function u(e,r){var u=dt([e,r]),o=n(e,r);i(M,x,m,b,_,w,M=o[0],x=o[1],m=e,b=u[0],_=u[1],w=u[2],a,t),t.point(M,x)}function o(){S.point=e, +t.lineEnd()}function l(){r(),S.point=c,S.lineEnd=f}function c(n,t){u(s=n,h=t),p=M,g=x,v=b,d=_,y=w,S.point=u}function f(){i(M,x,m,b,_,w,p,g,s,v,d,y,a,t),S.lineEnd=o,o()}var s,h,p,g,v,d,y,m,M,x,b,_,w,S={point:e,lineStart:r,lineEnd:o,polygonStart:function(){t.polygonStart(),S.lineStart=l},polygonEnd:function(){t.polygonEnd(),S.lineStart=r}};return S}function i(t,e,r,a,l,c,f,s,h,p,g,v,d,y){var m=f-t,M=s-e,x=m*m+M*M;if(x>4*u&&d--){var b=a+p,_=l+g,w=c+v,S=Math.sqrt(b*b+_*_+w*w),k=Math.asin(w/=S),N=xo(xo(w)-1)u||xo((m*z+M*L)/x-.5)>.3||a*p+l*g+c*v0&&16,t):Math.sqrt(u)},t}function re(n){var t=ee(function(t,e){return n([t*Zo,e*Zo])});return function(n){return le(t(n))}}function ie(n){this.stream=n}function ue(n,t){return{point:t,sphere:function(){n.sphere()},lineStart:function(){n.lineStart()},lineEnd:function(){n.lineEnd()},polygonStart:function(){n.polygonStart()},polygonEnd:function(){n.polygonEnd()}}}function oe(n){return ae(function(){return n})()}function ae(n){function t(n){return n=a(n[0]*Yo,n[1]*Yo),[n[0]*h+l,c-n[1]*h]}function e(n){return n=a.invert((n[0]-l)/h,(c-n[1])/h),n&&[n[0]*Zo,n[1]*Zo]}function r(){a=Ct(o=se(y,M,x),u);var n=u(v,d);return l=p-n[0]*h,c=g+n[1]*h,i()}function i(){return f&&(f.valid=!1,f=null),t}var u,o,a,l,c,f,s=ee(function(n,t){return n=u(n,t),[n[0]*h+l,c-n[1]*h]}),h=150,p=480,g=250,v=0,d=0,y=0,M=0,x=0,b=Fa,_=m,w=null,S=null;return t.stream=function(n){return f&&(f.valid=!1),f=le(b(o,s(_(n)))),f.valid=!0,f},t.clipAngle=function(n){return arguments.length?(b=null==n?(w=n,Fa):It((w=+n)*Yo),i()):w},t.clipExtent=function(n){return arguments.length?(S=n,_=n?Zt(n[0][0],n[0][1],n[1][0],n[1][1]):m,i()):S},t.scale=function(n){return arguments.length?(h=+n,r()):h},t.translate=function(n){return arguments.length?(p=+n[0],g=+n[1],r()):[p,g]},t.center=function(n){return arguments.length?(v=n[0]%360*Yo,d=n[1]%360*Yo,r()):[v*Zo,d*Zo]},t.rotate=function(n){return arguments.length?(y=n[0]%360*Yo,M=n[1]%360*Yo,x=n.length>2?n[2]%360*Yo:0,r()):[y*Zo,M*Zo,x*Zo]},ao.rebind(t,s,"precision"),function(){return u=n.apply(this,arguments),t.invert=u.invert&&e,r()}}function le(n){return ue(n,function(t,e){n.point(t*Yo,e*Yo)})}function ce(n,t){return[n,t]}function fe(n,t){return[n>Fo?n-Ho:n<-Fo?n+Ho:n,t]}function se(n,t,e){return n?t||e?Ct(pe(n),ge(t,e)):pe(n):t||e?ge(t,e):fe}function he(n){return function(t,e){return t+=n,[t>Fo?t-Ho:t<-Fo?t+Ho:t,e]}}function pe(n){var t=he(n);return t.invert=he(-n),t}function ge(n,t){function e(n,t){var e=Math.cos(t),a=Math.cos(n)*e,l=Math.sin(n)*e,c=Math.sin(t),f=c*r+a*i;return[Math.atan2(l*u-f*o,a*r-c*i),tn(f*u+l*o)]}var r=Math.cos(n),i=Math.sin(n),u=Math.cos(t),o=Math.sin(t);return e.invert=function(n,t){var e=Math.cos(t),a=Math.cos(n)*e,l=Math.sin(n)*e,c=Math.sin(t),f=c*u-l*o;return[Math.atan2(l*u+c*o,a*r+f*i),tn(f*r-a*i)]},e}function ve(n,t){var e=Math.cos(n),r=Math.sin(n);return function(i,u,o,a){var l=o*t;null!=i?(i=de(e,i),u=de(e,u),(o>0?iu)&&(i+=o*Ho)):(i=n+o*Ho,u=n-.5*l);for(var c,f=i;o>0?f>u:f0?t<-Io+Uo&&(t=-Io+Uo):t>Io-Uo&&(t=Io-Uo);var e=o/Math.pow(i(t),u);return[e*Math.sin(u*n),o-e*Math.cos(u*n)]}var r=Math.cos(n),i=function(n){return Math.tan(Fo/4+n/2)},u=n===t?Math.sin(n):Math.log(r/Math.cos(t))/Math.log(i(t)/i(n)),o=r*Math.pow(i(n),u)/u;return u?(e.invert=function(n,t){var e=o-t,r=K(u)*Math.sqrt(n*n+e*e);return[Math.atan2(n,e)/u,2*Math.atan(Math.pow(o/r,1/u))-Io]},e):Ne}function ke(n,t){function e(n,t){var e=u-t;return[e*Math.sin(i*n),u-e*Math.cos(i*n)]}var r=Math.cos(n),i=n===t?Math.sin(n):(r-Math.cos(t))/(t-n),u=r/i+n;return xo(i)1&&Q(n[e[r-2]],n[e[r-1]],n[i])<=0;)--r;e[r++]=i}return e.slice(0,r)}function qe(n,t){return n[0]-t[0]||n[1]-t[1]}function Te(n,t,e){return(e[0]-t[0])*(n[1]-t[1])<(e[1]-t[1])*(n[0]-t[0])}function Re(n,t,e,r){var i=n[0],u=e[0],o=t[0]-i,a=r[0]-u,l=n[1],c=e[1],f=t[1]-l,s=r[1]-c,h=(a*(l-c)-s*(i-u))/(s*o-a*f);return[i+h*o,l+h*f]}function De(n){var t=n[0],e=n[n.length-1];return!(t[0]-e[0]||t[1]-e[1])}function Pe(){rr(this),this.edge=this.site=this.circle=null}function Ue(n){var t=cl.pop()||new Pe;return t.site=n,t}function je(n){Be(n),ol.remove(n),cl.push(n),rr(n)}function Fe(n){var t=n.circle,e=t.x,r=t.cy,i={x:e,y:r},u=n.P,o=n.N,a=[n];je(n);for(var l=u;l.circle&&xo(e-l.circle.x)Uo)a=a.L;else{if(i=u-Ie(a,o),!(i>Uo)){r>-Uo?(t=a.P,e=a):i>-Uo?(t=a,e=a.N):t=e=a;break}if(!a.R){t=a;break}a=a.R}var l=Ue(n);if(ol.insert(t,l),t||e){if(t===e)return Be(t),e=Ue(t.site),ol.insert(l,e),l.edge=e.edge=Ke(t.site,l.site),$e(t),void $e(e);if(!e)return void(l.edge=Ke(t.site,l.site));Be(t),Be(e);var c=t.site,f=c.x,s=c.y,h=n.x-f,p=n.y-s,g=e.site,v=g.x-f,d=g.y-s,y=2*(h*d-p*v),m=h*h+p*p,M=v*v+d*d,x={x:(d*m-p*M)/y+f,y:(h*M-v*m)/y+s};nr(e.edge,c,g,x),l.edge=Ke(c,n,null,x),e.edge=Ke(n,g,null,x),$e(t),$e(e)}}function Oe(n,t){var e=n.site,r=e.x,i=e.y,u=i-t;if(!u)return r;var o=n.P;if(!o)return-(1/0);e=o.site;var a=e.x,l=e.y,c=l-t;if(!c)return a;var f=a-r,s=1/u-1/c,h=f/c;return s?(-h+Math.sqrt(h*h-2*s*(f*f/(-2*c)-l+c/2+i-u/2)))/s+r:(r+a)/2}function Ie(n,t){var e=n.N;if(e)return Oe(e,t);var r=n.site;return r.y===t?r.x:1/0}function Ye(n){this.site=n,this.edges=[]}function Ze(n){for(var t,e,r,i,u,o,a,l,c,f,s=n[0][0],h=n[1][0],p=n[0][1],g=n[1][1],v=ul,d=v.length;d--;)if(u=v[d],u&&u.prepare())for(a=u.edges,l=a.length,o=0;oUo||xo(i-e)>Uo)&&(a.splice(o,0,new tr(Qe(u.site,f,xo(r-s)Uo?{x:s,y:xo(t-s)Uo?{x:xo(e-g)Uo?{x:h,y:xo(t-h)Uo?{x:xo(e-p)=-jo)){var p=l*l+c*c,g=f*f+s*s,v=(s*p-c*g)/h,d=(l*g-f*p)/h,s=d+a,y=fl.pop()||new Xe;y.arc=n,y.site=i,y.x=v+o,y.y=s+Math.sqrt(v*v+d*d),y.cy=s,n.circle=y;for(var m=null,M=ll._;M;)if(y.y=a)return;if(h>g){if(u){if(u.y>=c)return}else u={x:d,y:l};e={x:d,y:c}}else{if(u){if(u.y1)if(h>g){if(u){if(u.y>=c)return}else u={x:(l-i)/r,y:l};e={x:(c-i)/r,y:c}}else{if(u){if(u.y=a)return}else u={x:o,y:r*o+i};e={x:a,y:r*a+i}}else{if(u){if(u.xu||s>o||h=x,w=e>=b,S=w<<1|_,k=S+4;Su&&(i=t.slice(u,i),a[o]?a[o]+=i:a[++o]=i),(e=e[0])===(r=r[0])?a[o]?a[o]+=r:a[++o]=r:(a[++o]=null,l.push({i:o,x:yr(e,r)})),u=pl.lastIndex;return u=0&&!(e=ao.interpolators[r](n,t)););return e}function xr(n,t){var e,r=[],i=[],u=n.length,o=t.length,a=Math.min(n.length,t.length);for(e=0;e=1?1:n(t)}}function _r(n){return function(t){return 1-n(1-t)}}function wr(n){return function(t){return.5*(t<.5?n(2*t):2-n(2-2*t))}}function Sr(n){return n*n}function kr(n){return n*n*n}function Nr(n){if(n<=0)return 0;if(n>=1)return 1;var t=n*n,e=t*n;return 4*(n<.5?e:3*(n-t)+e-.75)}function Er(n){return function(t){return Math.pow(t,n)}}function Ar(n){return 1-Math.cos(n*Io)}function Cr(n){return Math.pow(2,10*(n-1))}function zr(n){return 1-Math.sqrt(1-n*n)}function Lr(n,t){var e;return arguments.length<2&&(t=.45),arguments.length?e=t/Ho*Math.asin(1/n):(n=1,e=t/4),function(r){return 1+n*Math.pow(2,-10*r)*Math.sin((r-e)*Ho/t)}}function qr(n){return n||(n=1.70158),function(t){return t*t*((n+1)*t-n)}}function Tr(n){return n<1/2.75?7.5625*n*n:n<2/2.75?7.5625*(n-=1.5/2.75)*n+.75:n<2.5/2.75?7.5625*(n-=2.25/2.75)*n+.9375:7.5625*(n-=2.625/2.75)*n+.984375}function Rr(n,t){n=ao.hcl(n),t=ao.hcl(t);var e=n.h,r=n.c,i=n.l,u=t.h-e,o=t.c-r,a=t.l-i;return isNaN(o)&&(o=0,r=isNaN(r)?t.c:r),isNaN(u)?(u=0,e=isNaN(e)?t.h:e):u>180?u-=360:u<-180&&(u+=360),function(n){return sn(e+u*n,r+o*n,i+a*n)+""}}function Dr(n,t){n=ao.hsl(n),t=ao.hsl(t);var e=n.h,r=n.s,i=n.l,u=t.h-e,o=t.s-r,a=t.l-i;return isNaN(o)&&(o=0,r=isNaN(r)?t.s:r),isNaN(u)?(u=0,e=isNaN(e)?t.h:e):u>180?u-=360:u<-180&&(u+=360),function(n){return cn(e+u*n,r+o*n,i+a*n)+""}}function Pr(n,t){n=ao.lab(n),t=ao.lab(t);var e=n.l,r=n.a,i=n.b,u=t.l-e,o=t.a-r,a=t.b-i;return function(n){return pn(e+u*n,r+o*n,i+a*n)+""}}function Ur(n,t){return t-=n,function(e){return Math.round(n+t*e)}}function jr(n){var t=[n.a,n.b],e=[n.c,n.d],r=Hr(t),i=Fr(t,e),u=Hr(Or(e,t,-i))||0;t[0]*e[1]180?t+=360:t-n>180&&(n+=360),r.push({i:e.push(Ir(e)+"rotate(",null,")")-2,x:yr(n,t)})):t&&e.push(Ir(e)+"rotate("+t+")")}function Vr(n,t,e,r){n!==t?r.push({i:e.push(Ir(e)+"skewX(",null,")")-2,x:yr(n,t)}):t&&e.push(Ir(e)+"skewX("+t+")")}function Xr(n,t,e,r){if(n[0]!==t[0]||n[1]!==t[1]){var i=e.push(Ir(e)+"scale(",null,",",null,")");r.push({i:i-4,x:yr(n[0],t[0])},{i:i-2,x:yr(n[1],t[1])})}else 1===t[0]&&1===t[1]||e.push(Ir(e)+"scale("+t+")")}function $r(n,t){var e=[],r=[];return n=ao.transform(n),t=ao.transform(t),Yr(n.translate,t.translate,e,r),Zr(n.rotate,t.rotate,e,r),Vr(n.skew,t.skew,e,r),Xr(n.scale,t.scale,e,r),n=t=null,function(n){for(var t,i=-1,u=r.length;++i=0;)e.push(i[r])}function oi(n,t){for(var e=[n],r=[];null!=(n=e.pop());)if(r.push(n),(u=n.children)&&(i=u.length))for(var i,u,o=-1;++oi&&(r=e,i=t);return r}function yi(n){return n.reduce(mi,0)}function mi(n,t){return n+t[1]}function Mi(n,t){return xi(n,Math.ceil(Math.log(t.length)/Math.LN2+1))}function xi(n,t){for(var e=-1,r=+n[0],i=(n[1]-r)/t,u=[];++e<=t;)u[e]=i*e+r;return u}function bi(n){return[ao.min(n),ao.max(n)]}function _i(n,t){return n.value-t.value}function wi(n,t){var e=n._pack_next;n._pack_next=t,t._pack_prev=n,t._pack_next=e,e._pack_prev=t}function Si(n,t){n._pack_next=t,t._pack_prev=n}function ki(n,t){var e=t.x-n.x,r=t.y-n.y,i=n.r+t.r;return.999*i*i>e*e+r*r}function Ni(n){function t(n){f=Math.min(n.x-n.r,f),s=Math.max(n.x+n.r,s),h=Math.min(n.y-n.r,h),p=Math.max(n.y+n.r,p)}if((e=n.children)&&(c=e.length)){var e,r,i,u,o,a,l,c,f=1/0,s=-(1/0),h=1/0,p=-(1/0);if(e.forEach(Ei),r=e[0],r.x=-r.r,r.y=0,t(r),c>1&&(i=e[1],i.x=i.r,i.y=0,t(i),c>2))for(u=e[2],zi(r,i,u),t(u),wi(r,u),r._pack_prev=u,wi(u,i),i=r._pack_next,o=3;o=0;)t=i[u],t.z+=e,t.m+=e,e+=t.s+(r+=t.c)}function Pi(n,t,e){return n.a.parent===t.parent?n.a:e}function Ui(n){return 1+ao.max(n,function(n){return n.y})}function ji(n){return n.reduce(function(n,t){return n+t.x},0)/n.length}function Fi(n){var t=n.children;return t&&t.length?Fi(t[0]):n}function Hi(n){var t,e=n.children;return e&&(t=e.length)?Hi(e[t-1]):n}function Oi(n){return{x:n.x,y:n.y,dx:n.dx,dy:n.dy}}function Ii(n,t){var e=n.x+t[3],r=n.y+t[0],i=n.dx-t[1]-t[3],u=n.dy-t[0]-t[2];return i<0&&(e+=i/2,i=0),u<0&&(r+=u/2,u=0),{x:e,y:r,dx:i,dy:u}}function Yi(n){var t=n[0],e=n[n.length-1];return t2?Bi:Vi,l=r?Wr:Br;return o=i(n,t,l,e),a=i(t,n,l,Mr),u}function u(n){return o(n)}var o,a;return u.invert=function(n){return a(n)},u.domain=function(t){return arguments.length?(n=t.map(Number),i()):n},u.range=function(n){return arguments.length?(t=n,i()):t},u.rangeRound=function(n){return u.range(n).interpolate(Ur)},u.clamp=function(n){return arguments.length?(r=n,i()):r},u.interpolate=function(n){return arguments.length?(e=n,i()):e},u.ticks=function(t){return Qi(n,t)},u.tickFormat=function(t,e){return nu(n,t,e)},u.nice=function(t){return Gi(n,t),i()},u.copy=function(){return Wi(n,t,e,r)},i()}function Ji(n,t){return ao.rebind(n,t,"range","rangeRound","interpolate","clamp")}function Gi(n,t){return Xi(n,$i(Ki(n,t)[2])),Xi(n,$i(Ki(n,t)[2])),n}function Ki(n,t){null==t&&(t=10);var e=Yi(n),r=e[1]-e[0],i=Math.pow(10,Math.floor(Math.log(r/t)/Math.LN10)),u=t/r*i;return u<=.15?i*=10:u<=.35?i*=5:u<=.75&&(i*=2),e[0]=Math.ceil(e[0]/i)*i,e[1]=Math.floor(e[1]/i)*i+.5*i,e[2]=i,e}function Qi(n,t){return ao.range.apply(ao,Ki(n,t))}function nu(n,t,e){var r=Ki(n,t);if(e){var i=ha.exec(e);if(i.shift(),"s"===i[8]){var u=ao.formatPrefix(Math.max(xo(r[0]),xo(r[1])));return i[7]||(i[7]="."+tu(u.scale(r[2]))),i[8]="f",e=ao.format(i.join("")),function(n){return e(u.scale(n))+u.symbol}}i[7]||(i[7]="."+eu(i[8],r)),e=i.join("")}else e=",."+tu(r[2])+"f";return ao.format(e)}function tu(n){return-Math.floor(Math.log(n)/Math.LN10+.01)}function eu(n,t){var e=tu(t[2]);return n in kl?Math.abs(e-tu(Math.max(xo(t[0]),xo(t[1]))))+ +("e"!==n):e-2*("%"===n)}function ru(n,t,e,r){function i(n){return(e?Math.log(n<0?0:n):-Math.log(n>0?0:-n))/Math.log(t)}function u(n){return e?Math.pow(t,n):-Math.pow(t,-n)}function o(t){return n(i(t))}return o.invert=function(t){return u(n.invert(t))},o.domain=function(t){return arguments.length?(e=t[0]>=0,n.domain((r=t.map(Number)).map(i)),o):r},o.base=function(e){return arguments.length?(t=+e,n.domain(r.map(i)),o):t},o.nice=function(){var t=Xi(r.map(i),e?Math:El);return n.domain(t),r=t.map(u),o},o.ticks=function(){var n=Yi(r),o=[],a=n[0],l=n[1],c=Math.floor(i(a)),f=Math.ceil(i(l)),s=t%1?2:t;if(isFinite(f-c)){if(e){for(;c0;h--)o.push(u(c)*h);for(c=0;o[c]l;f--);o=o.slice(c,f)}return o},o.tickFormat=function(n,e){if(!arguments.length)return Nl;arguments.length<2?e=Nl:"function"!=typeof e&&(e=ao.format(e));var r=Math.max(1,t*n/o.ticks().length);return function(n){var o=n/u(Math.round(i(n)));return o*t0?a[e-1]:n[0],e0?0:1}function mu(n,t,e,r,i){var u=n[0]-t[0],o=n[1]-t[1],a=(i?r:-r)/Math.sqrt(u*u+o*o),l=a*o,c=-a*u,f=n[0]+l,s=n[1]+c,h=t[0]+l,p=t[1]+c,g=(f+h)/2,v=(s+p)/2,d=h-f,y=p-s,m=d*d+y*y,M=e-r,x=f*p-h*s,b=(y<0?-1:1)*Math.sqrt(Math.max(0,M*M*m-x*x)),_=(x*y-d*b)/m,w=(-x*d-y*b)/m,S=(x*y+d*b)/m,k=(-x*d+y*b)/m,N=_-g,E=w-v,A=S-g,C=k-v;return N*N+E*E>A*A+C*C&&(_=S,w=k),[[_-l,w-c],[_*e/M,w*e/M]]}function Mu(n){function t(t){function o(){c.push("M",u(n(f),a))}for(var l,c=[],f=[],s=-1,h=t.length,p=En(e),g=En(r);++s1?n.join("L"):n+"Z"}function bu(n){return n.join("L")+"Z"}function _u(n){for(var t=0,e=n.length,r=n[0],i=[r[0],",",r[1]];++t1&&i.push("H",r[0]),i.join("")}function wu(n){for(var t=0,e=n.length,r=n[0],i=[r[0],",",r[1]];++t1){a=t[1],u=n[l],l++,r+="C"+(i[0]+o[0])+","+(i[1]+o[1])+","+(u[0]-a[0])+","+(u[1]-a[1])+","+u[0]+","+u[1];for(var c=2;c9&&(i=3*t/Math.sqrt(i),o[a]=i*e,o[a+1]=i*r));for(a=-1;++a<=l;)i=(n[Math.min(l,a+1)][0]-n[Math.max(0,a-1)][0])/(6*(1+o[a]*o[a])),u.push([i||0,o[a]*i||0]);return u}function Fu(n){return n.length<3?xu(n):n[0]+Au(n,ju(n))}function Hu(n){for(var t,e,r,i=-1,u=n.length;++i0;)p[--a].call(n,o);if(u>=1)return v.event&&v.event.end.call(n,n.__data__,t),--g.count?delete g[r]:delete n[e],1}var l,f,s,h,p,g=n[e]||(n[e]={active:0,count:0}),v=g[r];v||(l=i.time,f=qn(u,0,l),v=g[r]={tween:new c,time:l,timer:f,delay:i.delay,duration:i.duration,ease:i.ease,index:t},i=null,++g.count)}function no(n,t,e){n.attr("transform",function(n){var r=t(n);return"translate("+(isFinite(r)?r:e(n))+",0)"})}function to(n,t,e){n.attr("transform",function(n){var r=t(n);return"translate(0,"+(isFinite(r)?r:e(n))+")"})}function eo(n){return n.toISOString()}function ro(n,t,e){function r(t){return n(t)}function i(n,e){var r=n[1]-n[0],i=r/e,u=ao.bisect(Kl,i);return u==Kl.length?[t.year,Ki(n.map(function(n){return n/31536e6}),e)[2]]:u?t[i/Kl[u-1]1?{floor:function(t){for(;e(t=n.floor(t));)t=io(t-1);return t},ceil:function(t){for(;e(t=n.ceil(t));)t=io(+t+1);return t}}:n))},r.ticks=function(n,t){var e=Yi(r.domain()),u=null==n?i(e,10):"number"==typeof n?i(e,n):!n.range&&[{range:n},t];return u&&(n=u[0],t=u[1]),n.range(e[0],io(+e[1]+1),t<1?1:t)},r.tickFormat=function(){return e},r.copy=function(){return ro(n.copy(),t,e)},Ji(r,n)}function io(n){return new Date(n)}function uo(n){return JSON.parse(n.responseText)}function oo(n){var t=fo.createRange();return t.selectNode(fo.body),t.createContextualFragment(n.responseText)}var ao={version:"3.5.17"},lo=[].slice,co=function(n){return lo.call(n)},fo=this.document;if(fo)try{co(fo.documentElement.childNodes)[0].nodeType}catch(so){co=function(n){for(var t=n.length,e=new Array(t);t--;)e[t]=n[t];return e}}if(Date.now||(Date.now=function(){return+new Date}),fo)try{fo.createElement("DIV").style.setProperty("opacity",0,"")}catch(ho){var po=this.Element.prototype,go=po.setAttribute,vo=po.setAttributeNS,yo=this.CSSStyleDeclaration.prototype,mo=yo.setProperty;po.setAttribute=function(n,t){go.call(this,n,t+"")},po.setAttributeNS=function(n,t,e){vo.call(this,n,t,e+"")},yo.setProperty=function(n,t,e){mo.call(this,n,t+"",e)}}ao.ascending=e,ao.descending=function(n,t){return tn?1:t>=n?0:NaN},ao.min=function(n,t){var e,r,i=-1,u=n.length;if(1===arguments.length){for(;++i=r){e=r;break}for(;++ir&&(e=r)}else{for(;++i=r){e=r;break}for(;++ir&&(e=r)}return e},ao.max=function(n,t){var e,r,i=-1,u=n.length;if(1===arguments.length){for(;++i=r){e=r;break}for(;++ie&&(e=r)}else{for(;++i=r){e=r;break}for(;++ie&&(e=r)}return e},ao.extent=function(n,t){var e,r,i,u=-1,o=n.length;if(1===arguments.length){for(;++u=r){e=i=r;break}for(;++ur&&(e=r),i=r){e=i=r;break}for(;++ur&&(e=r),i1)return l/(f-1)},ao.deviation=function(){var n=ao.variance.apply(this,arguments);return n?Math.sqrt(n):n};var Mo=u(e);ao.bisectLeft=Mo.left,ao.bisect=ao.bisectRight=Mo.right,ao.bisector=function(n){return u(1===n.length?function(t,r){return e(n(t),r)}:n)},ao.shuffle=function(n,t,e){(u=arguments.length)<3&&(e=n.length,u<2&&(t=0));for(var r,i,u=e-t;u;)i=Math.random()*u--|0,r=n[u+t],n[u+t]=n[i+t],n[i+t]=r;return n},ao.permute=function(n,t){for(var e=t.length,r=new Array(e);e--;)r[e]=n[t[e]];return r},ao.pairs=function(n){for(var t,e=0,r=n.length-1,i=n[0],u=new Array(r<0?0:r);e=0;)for(r=n[i],t=r.length;--t>=0;)e[--o]=r[t];return e};var xo=Math.abs;ao.range=function(n,t,e){if(arguments.length<3&&(e=1,arguments.length<2&&(t=n,n=0)),(t-n)/e===1/0)throw new Error("infinite range");var r,i=[],u=a(xo(e)),o=-1;if(n*=u,t*=u,e*=u,e<0)for(;(r=n+e*++o)>t;)i.push(r/u);else for(;(r=n+e*++o)=u.length)return r?r.call(i,o):e?o.sort(e):o;for(var l,f,s,h,p=-1,g=o.length,v=u[a++],d=new c;++p=u.length)return n;var r=[],i=o[e++];return n.forEach(function(n,i){r.push({key:n,values:t(i,e)})}),i?r.sort(function(n,t){return i(n.key,t.key)}):r}var e,r,i={},u=[],o=[];return i.map=function(t,e){return n(e,t,0)},i.entries=function(e){return t(n(ao.map,e,0),0)},i.key=function(n){return u.push(n),i},i.sortKeys=function(n){return o[u.length-1]=n,i},i.sortValues=function(n){return e=n,i},i.rollup=function(n){return r=n,i},i},ao.set=function(n){var t=new y;if(n)for(var e=0,r=n.length;e=0&&(r=n.slice(e+1),n=n.slice(0,e)),n)return arguments.length<2?this[n].on(r):this[n].on(r,t);if(2===arguments.length){if(null==t)for(n in this)this.hasOwnProperty(n)&&this[n].on(r,null);return this}},ao.event=null,ao.requote=function(n){return n.replace(So,"\\$&")};var So=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g,ko={}.__proto__?function(n,t){n.__proto__=t}:function(n,t){for(var e in t)n[e]=t[e]},No=function(n,t){return t.querySelector(n)},Eo=function(n,t){return t.querySelectorAll(n)},Ao=function(n,t){var e=n.matches||n[x(n,"matchesSelector")];return(Ao=function(n,t){return e.call(n,t)})(n,t)};"function"==typeof Sizzle&&(No=function(n,t){return Sizzle(n,t)[0]||null},Eo=Sizzle,Ao=Sizzle.matchesSelector),ao.selection=function(){return ao.select(fo.documentElement)};var Co=ao.selection.prototype=[];Co.select=function(n){var t,e,r,i,u=[];n=A(n);for(var o=-1,a=this.length;++o=0&&"xmlns"!==(e=n.slice(0,t))&&(n=n.slice(t+1)),Lo.hasOwnProperty(e)?{space:Lo[e],local:n}:n}},Co.attr=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node();return n=ao.ns.qualify(n),n.local?e.getAttributeNS(n.space,n.local):e.getAttribute(n)}for(t in n)this.each(z(t,n[t]));return this}return this.each(z(n,t))},Co.classed=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node(),r=(n=T(n)).length,i=-1;if(t=e.classList){for(;++i=0;)(e=r[i])&&(u&&u!==e.nextSibling&&u.parentNode.insertBefore(e,u),u=e);return this},Co.sort=function(n){n=I.apply(this,arguments);for(var t=-1,e=this.length;++t0&&(t=t.transition().duration(C)),t.call(n.event)}function a(){b&&b.domain(x.range().map(function(n){return(n-k.x)/k.k}).map(x.invert)),w&&w.domain(_.range().map(function(n){return(n-k.y)/k.k}).map(_.invert))}function l(n){z++||n({type:"zoomstart"})}function c(n){a(),n({type:"zoom",scale:k.k,translate:[k.x,k.y]})}function f(n){--z||(n({type:"zoomend"}),d=null)}function s(){function n(){a=1,u(ao.mouse(i),h),c(o)}function r(){s.on(q,null).on(T,null),p(a),f(o)}var i=this,o=D.of(i,arguments),a=0,s=ao.select(t(i)).on(q,n).on(T,r),h=e(ao.mouse(i)),p=W(i);Il.call(i),l(o)}function h(){function n(){var n=ao.touches(g);return p=k.k,n.forEach(function(n){n.identifier in d&&(d[n.identifier]=e(n))}),n}function t(){var t=ao.event.target;ao.select(t).on(x,r).on(b,a),_.push(t);for(var e=ao.event.changedTouches,i=0,u=e.length;i1){var f=l[0],s=l[1],h=f[0]-s[0],p=f[1]-s[1];y=h*h+p*p}}function r(){var n,t,e,r,o=ao.touches(g);Il.call(g);for(var a=0,l=o.length;a=c)return o;if(i)return i=!1,u;var t=f;if(34===n.charCodeAt(t)){for(var e=t;e++=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i,pa=ao.map({b:function(n){return n.toString(2)},c:function(n){return String.fromCharCode(n)},o:function(n){return n.toString(8)},x:function(n){return n.toString(16)},X:function(n){return n.toString(16).toUpperCase()},g:function(n,t){return n.toPrecision(t)},e:function(n,t){return n.toExponential(t)},f:function(n,t){return n.toFixed(t)},r:function(n,t){return(n=ao.round(n,Pn(n,t))).toFixed(Math.max(0,Math.min(20,Pn(n*(1+1e-15),t))))}}),ga=ao.time={},va=Date;Hn.prototype={getDate:function(){return this._.getUTCDate()},getDay:function(){return this._.getUTCDay()},getFullYear:function(){return this._.getUTCFullYear()},getHours:function(){return this._.getUTCHours()},getMilliseconds:function(){return this._.getUTCMilliseconds()},getMinutes:function(){return this._.getUTCMinutes()},getMonth:function(){return this._.getUTCMonth()},getSeconds:function(){return this._.getUTCSeconds()},getTime:function(){return this._.getTime()},getTimezoneOffset:function(){return 0},valueOf:function(){return this._.valueOf()},setDate:function(){da.setUTCDate.apply(this._,arguments)},setDay:function(){da.setUTCDay.apply(this._,arguments)},setFullYear:function(){da.setUTCFullYear.apply(this._,arguments)},setHours:function(){da.setUTCHours.apply(this._,arguments)},setMilliseconds:function(){da.setUTCMilliseconds.apply(this._,arguments)},setMinutes:function(){da.setUTCMinutes.apply(this._,arguments)},setMonth:function(){da.setUTCMonth.apply(this._,arguments)},setSeconds:function(){da.setUTCSeconds.apply(this._,arguments)},setTime:function(){da.setTime.apply(this._,arguments)}};var da=Date.prototype;ga.year=On(function(n){return n=ga.day(n),n.setMonth(0,1),n},function(n,t){n.setFullYear(n.getFullYear()+t)},function(n){return n.getFullYear()}),ga.years=ga.year.range,ga.years.utc=ga.year.utc.range,ga.day=On(function(n){var t=new va(2e3,0);return t.setFullYear(n.getFullYear(),n.getMonth(),n.getDate()),t},function(n,t){n.setDate(n.getDate()+t)},function(n){return n.getDate()-1}),ga.days=ga.day.range,ga.days.utc=ga.day.utc.range,ga.dayOfYear=function(n){var t=ga.year(n);return Math.floor((n-t-6e4*(n.getTimezoneOffset()-t.getTimezoneOffset()))/864e5)},["sunday","monday","tuesday","wednesday","thursday","friday","saturday"].forEach(function(n,t){t=7-t;var e=ga[n]=On(function(n){return(n=ga.day(n)).setDate(n.getDate()-(n.getDay()+t)%7),n},function(n,t){n.setDate(n.getDate()+7*Math.floor(t))},function(n){var e=ga.year(n).getDay();return Math.floor((ga.dayOfYear(n)+(e+t)%7)/7)-(e!==t)});ga[n+"s"]=e.range,ga[n+"s"].utc=e.utc.range,ga[n+"OfYear"]=function(n){var e=ga.year(n).getDay();return Math.floor((ga.dayOfYear(n)+(e+t)%7)/7)}}),ga.week=ga.sunday,ga.weeks=ga.sunday.range,ga.weeks.utc=ga.sunday.utc.range,ga.weekOfYear=ga.sundayOfYear;var ya={"-":"",_:" ",0:"0"},ma=/^\s*\d+/,Ma=/^%/;ao.locale=function(n){return{numberFormat:jn(n),timeFormat:Yn(n)}};var xa=ao.locale({decimal:".",thousands:",",grouping:[3],currency:["$",""],dateTime:"%a %b %e %X %Y",date:"%m/%d/%Y",time:"%H:%M:%S",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"], +shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});ao.format=xa.numberFormat,ao.geo={},ft.prototype={s:0,t:0,add:function(n){st(n,this.t,ba),st(ba.s,this.s,this),this.s?this.t+=ba.t:this.s=ba.t},reset:function(){this.s=this.t=0},valueOf:function(){return this.s}};var ba=new ft;ao.geo.stream=function(n,t){n&&_a.hasOwnProperty(n.type)?_a[n.type](n,t):ht(n,t)};var _a={Feature:function(n,t){ht(n.geometry,t)},FeatureCollection:function(n,t){for(var e=n.features,r=-1,i=e.length;++rp&&(p=t)}function t(t,e){var r=dt([t*Yo,e*Yo]);if(y){var i=mt(y,r),u=[i[1],-i[0],0],o=mt(u,i);bt(o),o=_t(o);var l=t-g,c=l>0?1:-1,v=o[0]*Zo*c,d=xo(l)>180;if(d^(c*gp&&(p=m)}else if(v=(v+360)%360-180,d^(c*gp&&(p=e);d?ta(f,h)&&(h=t):a(t,h)>a(f,h)&&(f=t):h>=f?(th&&(h=t)):t>g?a(f,t)>a(f,h)&&(h=t):a(t,h)>a(f,h)&&(f=t)}else n(t,e);y=r,g=t}function e(){b.point=t}function r(){x[0]=f,x[1]=h,b.point=n,y=null}function i(n,e){if(y){var r=n-g;m+=xo(r)>180?r+(r>0?360:-360):r}else v=n,d=e;Na.point(n,e),t(n,e)}function u(){Na.lineStart()}function o(){i(v,d),Na.lineEnd(),xo(m)>Uo&&(f=-(h=180)),x[0]=f,x[1]=h,y=null}function a(n,t){return(t-=n)<0?t+360:t}function l(n,t){return n[0]-t[0]}function c(n,t){return t[0]<=t[1]?t[0]<=n&&n<=t[1]:nUo?p=90:m<-Uo&&(s=-90),x[0]=f,x[1]=h}};return function(n){p=h=-(f=s=1/0),M=[],ao.geo.stream(n,b);var t=M.length;if(t){M.sort(l);for(var e,r=1,i=M[0],u=[i];ra(i[0],i[1])&&(i[1]=e[1]),a(e[0],i[1])>a(i[0],i[1])&&(i[0]=e[0])):u.push(i=e);for(var o,e,g=-(1/0),t=u.length-1,r=0,i=u[t];r<=t;i=e,++r)e=u[r],(o=a(i[1],e[0]))>g&&(g=o,f=e[0],h=i[1])}return M=x=null,f===1/0||s===1/0?[[NaN,NaN],[NaN,NaN]]:[[f,s],[h,p]]}}(),ao.geo.centroid=function(n){Ea=Aa=Ca=za=La=qa=Ta=Ra=Da=Pa=Ua=0,ao.geo.stream(n,ja);var t=Da,e=Pa,r=Ua,i=t*t+e*e+r*r;return i=.12&&i<.234&&r>=-.425&&r<-.214?o:i>=.166&&i<.234&&r>=-.214&&r<-.115?a:u).invert(n)},n.stream=function(n){var t=u.stream(n),e=o.stream(n),r=a.stream(n);return{point:function(n,i){t.point(n,i),e.point(n,i),r.point(n,i)},sphere:function(){t.sphere(),e.sphere(),r.sphere()},lineStart:function(){t.lineStart(),e.lineStart(),r.lineStart()},lineEnd:function(){t.lineEnd(),e.lineEnd(),r.lineEnd()},polygonStart:function(){t.polygonStart(),e.polygonStart(),r.polygonStart()},polygonEnd:function(){t.polygonEnd(),e.polygonEnd(),r.polygonEnd()}}},n.precision=function(t){return arguments.length?(u.precision(t),o.precision(t),a.precision(t),n):u.precision()},n.scale=function(t){return arguments.length?(u.scale(t),o.scale(.35*t),a.scale(t),n.translate(u.translate())):u.scale()},n.translate=function(t){if(!arguments.length)return u.translate();var c=u.scale(),f=+t[0],s=+t[1];return e=u.translate(t).clipExtent([[f-.455*c,s-.238*c],[f+.455*c,s+.238*c]]).stream(l).point,r=o.translate([f-.307*c,s+.201*c]).clipExtent([[f-.425*c+Uo,s+.12*c+Uo],[f-.214*c-Uo,s+.234*c-Uo]]).stream(l).point,i=a.translate([f-.205*c,s+.212*c]).clipExtent([[f-.214*c+Uo,s+.166*c+Uo],[f-.115*c-Uo,s+.234*c-Uo]]).stream(l).point,n},n.scale(1070)};var Oa,Ia,Ya,Za,Va,Xa,$a={point:b,lineStart:b,lineEnd:b,polygonStart:function(){Ia=0,$a.lineStart=$t},polygonEnd:function(){$a.lineStart=$a.lineEnd=$a.point=b,Oa+=xo(Ia/2)}},Ba={point:Bt,lineStart:b,lineEnd:b,polygonStart:b,polygonEnd:b},Wa={point:Gt,lineStart:Kt,lineEnd:Qt,polygonStart:function(){Wa.lineStart=ne},polygonEnd:function(){Wa.point=Gt,Wa.lineStart=Kt,Wa.lineEnd=Qt}};ao.geo.path=function(){function n(n){return n&&("function"==typeof a&&u.pointRadius(+a.apply(this,arguments)),o&&o.valid||(o=i(u)),ao.geo.stream(n,o)),u.result()}function t(){return o=null,n}var e,r,i,u,o,a=4.5;return n.area=function(n){return Oa=0,ao.geo.stream(n,i($a)),Oa},n.centroid=function(n){return Ca=za=La=qa=Ta=Ra=Da=Pa=Ua=0,ao.geo.stream(n,i(Wa)),Ua?[Da/Ua,Pa/Ua]:Ra?[qa/Ra,Ta/Ra]:La?[Ca/La,za/La]:[NaN,NaN]},n.bounds=function(n){return Va=Xa=-(Ya=Za=1/0),ao.geo.stream(n,i(Ba)),[[Ya,Za],[Va,Xa]]},n.projection=function(n){return arguments.length?(i=(e=n)?n.stream||re(n):m,t()):e},n.context=function(n){return arguments.length?(u=null==(r=n)?new Wt:new te(n),"function"!=typeof a&&u.pointRadius(a),t()):r},n.pointRadius=function(t){return arguments.length?(a="function"==typeof t?t:(u.pointRadius(+t),+t),n):a},n.projection(ao.geo.albersUsa()).context(null)},ao.geo.transform=function(n){return{stream:function(t){var e=new ie(t);for(var r in n)e[r]=n[r];return e}}},ie.prototype={point:function(n,t){this.stream.point(n,t)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}},ao.geo.projection=oe,ao.geo.projectionMutator=ae,(ao.geo.equirectangular=function(){return oe(ce)}).raw=ce.invert=ce,ao.geo.rotation=function(n){function t(t){return t=n(t[0]*Yo,t[1]*Yo),t[0]*=Zo,t[1]*=Zo,t}return n=se(n[0]%360*Yo,n[1]*Yo,n.length>2?n[2]*Yo:0),t.invert=function(t){return t=n.invert(t[0]*Yo,t[1]*Yo),t[0]*=Zo,t[1]*=Zo,t},t},fe.invert=ce,ao.geo.circle=function(){function n(){var n="function"==typeof r?r.apply(this,arguments):r,t=se(-n[0]*Yo,-n[1]*Yo,0).invert,i=[];return e(null,null,1,{point:function(n,e){i.push(n=t(n,e)),n[0]*=Zo,n[1]*=Zo}}),{type:"Polygon",coordinates:[i]}}var t,e,r=[0,0],i=6;return n.origin=function(t){return arguments.length?(r=t,n):r},n.angle=function(r){return arguments.length?(e=ve((t=+r)*Yo,i*Yo),n):t},n.precision=function(r){return arguments.length?(e=ve(t*Yo,(i=+r)*Yo),n):i},n.angle(90)},ao.geo.distance=function(n,t){var e,r=(t[0]-n[0])*Yo,i=n[1]*Yo,u=t[1]*Yo,o=Math.sin(r),a=Math.cos(r),l=Math.sin(i),c=Math.cos(i),f=Math.sin(u),s=Math.cos(u);return Math.atan2(Math.sqrt((e=s*o)*e+(e=c*f-l*s*a)*e),l*f+c*s*a)},ao.geo.graticule=function(){function n(){return{type:"MultiLineString",coordinates:t()}}function t(){return ao.range(Math.ceil(u/d)*d,i,d).map(h).concat(ao.range(Math.ceil(c/y)*y,l,y).map(p)).concat(ao.range(Math.ceil(r/g)*g,e,g).filter(function(n){return xo(n%d)>Uo}).map(f)).concat(ao.range(Math.ceil(a/v)*v,o,v).filter(function(n){return xo(n%y)>Uo}).map(s))}var e,r,i,u,o,a,l,c,f,s,h,p,g=10,v=g,d=90,y=360,m=2.5;return n.lines=function(){return t().map(function(n){return{type:"LineString",coordinates:n}})},n.outline=function(){return{type:"Polygon",coordinates:[h(u).concat(p(l).slice(1),h(i).reverse().slice(1),p(c).reverse().slice(1))]}},n.extent=function(t){return arguments.length?n.majorExtent(t).minorExtent(t):n.minorExtent()},n.majorExtent=function(t){return arguments.length?(u=+t[0][0],i=+t[1][0],c=+t[0][1],l=+t[1][1],u>i&&(t=u,u=i,i=t),c>l&&(t=c,c=l,l=t),n.precision(m)):[[u,c],[i,l]]},n.minorExtent=function(t){return arguments.length?(r=+t[0][0],e=+t[1][0],a=+t[0][1],o=+t[1][1],r>e&&(t=r,r=e,e=t),a>o&&(t=a,a=o,o=t),n.precision(m)):[[r,a],[e,o]]},n.step=function(t){return arguments.length?n.majorStep(t).minorStep(t):n.minorStep()},n.majorStep=function(t){return arguments.length?(d=+t[0],y=+t[1],n):[d,y]},n.minorStep=function(t){return arguments.length?(g=+t[0],v=+t[1],n):[g,v]},n.precision=function(t){return arguments.length?(m=+t,f=ye(a,o,90),s=me(r,e,m),h=ye(c,l,90),p=me(u,i,m),n):m},n.majorExtent([[-180,-90+Uo],[180,90-Uo]]).minorExtent([[-180,-80-Uo],[180,80+Uo]])},ao.geo.greatArc=function(){function n(){return{type:"LineString",coordinates:[t||r.apply(this,arguments),e||i.apply(this,arguments)]}}var t,e,r=Me,i=xe;return n.distance=function(){return ao.geo.distance(t||r.apply(this,arguments),e||i.apply(this,arguments))},n.source=function(e){return arguments.length?(r=e,t="function"==typeof e?null:e,n):r},n.target=function(t){return arguments.length?(i=t,e="function"==typeof t?null:t,n):i},n.precision=function(){return arguments.length?n:0},n},ao.geo.interpolate=function(n,t){return be(n[0]*Yo,n[1]*Yo,t[0]*Yo,t[1]*Yo)},ao.geo.length=function(n){return Ja=0,ao.geo.stream(n,Ga),Ja};var Ja,Ga={sphere:b,point:b,lineStart:_e,lineEnd:b,polygonStart:b,polygonEnd:b},Ka=we(function(n){return Math.sqrt(2/(1+n))},function(n){return 2*Math.asin(n/2)});(ao.geo.azimuthalEqualArea=function(){return oe(Ka)}).raw=Ka;var Qa=we(function(n){var t=Math.acos(n);return t&&t/Math.sin(t)},m);(ao.geo.azimuthalEquidistant=function(){return oe(Qa)}).raw=Qa,(ao.geo.conicConformal=function(){return Vt(Se)}).raw=Se,(ao.geo.conicEquidistant=function(){return Vt(ke)}).raw=ke;var nl=we(function(n){return 1/n},Math.atan);(ao.geo.gnomonic=function(){return oe(nl)}).raw=nl,Ne.invert=function(n,t){return[n,2*Math.atan(Math.exp(t))-Io]},(ao.geo.mercator=function(){return Ee(Ne)}).raw=Ne;var tl=we(function(){return 1},Math.asin);(ao.geo.orthographic=function(){return oe(tl)}).raw=tl;var el=we(function(n){return 1/(1+n)},function(n){return 2*Math.atan(n)});(ao.geo.stereographic=function(){return oe(el)}).raw=el,Ae.invert=function(n,t){return[-t,2*Math.atan(Math.exp(n))-Io]},(ao.geo.transverseMercator=function(){var n=Ee(Ae),t=n.center,e=n.rotate;return n.center=function(n){return n?t([-n[1],n[0]]):(n=t(),[n[1],-n[0]])},n.rotate=function(n){return n?e([n[0],n[1],n.length>2?n[2]+90:90]):(n=e(),[n[0],n[1],n[2]-90])},e([0,0,90])}).raw=Ae,ao.geom={},ao.geom.hull=function(n){function t(n){if(n.length<3)return[];var t,i=En(e),u=En(r),o=n.length,a=[],l=[];for(t=0;t=0;--t)p.push(n[a[c[t]][2]]);for(t=+s;t=r&&c.x<=u&&c.y>=i&&c.y<=o?[[r,o],[u,o],[u,i],[r,i]]:[];f.point=n[a]}),t}function e(n){return n.map(function(n,t){return{x:Math.round(u(n,t)/Uo)*Uo,y:Math.round(o(n,t)/Uo)*Uo,i:t}})}var r=Ce,i=ze,u=r,o=i,a=sl;return n?t(n):(t.links=function(n){return ar(e(n)).edges.filter(function(n){return n.l&&n.r}).map(function(t){return{source:n[t.l.i],target:n[t.r.i]}})},t.triangles=function(n){var t=[];return ar(e(n)).cells.forEach(function(e,r){for(var i,u,o=e.site,a=e.edges.sort(Ve),l=-1,c=a.length,f=a[c-1].edge,s=f.l===o?f.r:f.l;++l=c,h=r>=f,p=h<<1|s;n.leaf=!1,n=n.nodes[p]||(n.nodes[p]=hr()),s?i=c:a=c,h?o=f:l=f,u(n,t,e,r,i,o,a,l)}var f,s,h,p,g,v,d,y,m,M=En(a),x=En(l);if(null!=t)v=t,d=e,y=r,m=i;else if(y=m=-(v=d=1/0),s=[],h=[],g=n.length,o)for(p=0;py&&(y=f.x),f.y>m&&(m=f.y),s.push(f.x),h.push(f.y);else for(p=0;py&&(y=b),_>m&&(m=_),s.push(b),h.push(_)}var w=y-v,S=m-d;w>S?m=d+w:y=v+S;var k=hr();if(k.add=function(n){u(k,n,+M(n,++p),+x(n,p),v,d,y,m)},k.visit=function(n){pr(n,k,v,d,y,m)},k.find=function(n){return gr(k,n[0],n[1],v,d,y,m)},p=-1,null==t){for(;++p=0?n.slice(0,t):n,r=t>=0?n.slice(t+1):"in";return e=vl.get(e)||gl,r=dl.get(r)||m,br(r(e.apply(null,lo.call(arguments,1))))},ao.interpolateHcl=Rr,ao.interpolateHsl=Dr,ao.interpolateLab=Pr,ao.interpolateRound=Ur,ao.transform=function(n){var t=fo.createElementNS(ao.ns.prefix.svg,"g");return(ao.transform=function(n){if(null!=n){t.setAttribute("transform",n);var e=t.transform.baseVal.consolidate()}return new jr(e?e.matrix:yl)})(n)},jr.prototype.toString=function(){return"translate("+this.translate+")rotate("+this.rotate+")skewX("+this.skew+")scale("+this.scale+")"};var yl={a:1,b:0,c:0,d:1,e:0,f:0};ao.interpolateTransform=$r,ao.layout={},ao.layout.bundle=function(){return function(n){for(var t=[],e=-1,r=n.length;++e0?i=n:(e.c=null,e.t=NaN,e=null,c.end({type:"end",alpha:i=0})):n>0&&(c.start({type:"start",alpha:i=n}),e=qn(l.tick)),l):i},l.start=function(){function n(n,r){if(!e){for(e=new Array(i),l=0;l=0;)o.push(f=c[l]),f.parent=u,f.depth=u.depth+1;r&&(u.value=0),u.children=c}else r&&(u.value=+r.call(n,u,u.depth)||0),delete u.children;return oi(i,function(n){var e,i;t&&(e=n.children)&&e.sort(t),r&&(i=n.parent)&&(i.value+=n.value)}),a}var t=ci,e=ai,r=li;return n.sort=function(e){return arguments.length?(t=e,n):t},n.children=function(t){return arguments.length?(e=t,n):e},n.value=function(t){return arguments.length?(r=t,n):r},n.revalue=function(t){return r&&(ui(t,function(n){n.children&&(n.value=0)}),oi(t,function(t){var e;t.children||(t.value=+r.call(n,t,t.depth)||0),(e=t.parent)&&(e.value+=t.value)})),t},n},ao.layout.partition=function(){function n(t,e,r,i){var u=t.children;if(t.x=e,t.y=t.depth*i,t.dx=r,t.dy=i,u&&(o=u.length)){var o,a,l,c=-1;for(r=t.value?r/t.value:0;++ca&&(a=r),o.push(r)}for(e=0;e0)for(u=-1;++u=f[0]&&a<=f[1]&&(o=l[ao.bisect(s,a,1,p)-1],o.y+=g,o.push(n[u]));return l}var t=!0,e=Number,r=bi,i=Mi;return n.value=function(t){return arguments.length?(e=t,n):e},n.range=function(t){return arguments.length?(r=En(t),n):r},n.bins=function(t){return arguments.length?(i="number"==typeof t?function(n){return xi(n,t)}:En(t),n):i},n.frequency=function(e){return arguments.length?(t=!!e,n):t},n},ao.layout.pack=function(){function n(n,u){var o=e.call(this,n,u),a=o[0],l=i[0],c=i[1],f=null==t?Math.sqrt:"function"==typeof t?t:function(){return t};if(a.x=a.y=0,oi(a,function(n){n.r=+f(n.value)}),oi(a,Ni),r){var s=r*(t?1:Math.max(2*a.r/l,2*a.r/c))/2;oi(a,function(n){n.r+=s}),oi(a,Ni),oi(a,function(n){n.r-=s})}return Ci(a,l/2,c/2,t?1:1/Math.max(2*a.r/l,2*a.r/c)),o}var t,e=ao.layout.hierarchy().sort(_i),r=0,i=[1,1];return n.size=function(t){return arguments.length?(i=t,n):i},n.radius=function(e){return arguments.length?(t=null==e||"function"==typeof e?e:+e,n):t},n.padding=function(t){return arguments.length?(r=+t,n):r},ii(n,e)},ao.layout.tree=function(){function n(n,i){var f=o.call(this,n,i),s=f[0],h=t(s);if(oi(h,e),h.parent.m=-h.z,ui(h,r),c)ui(s,u);else{var p=s,g=s,v=s;ui(s,function(n){n.xg.x&&(g=n),n.depth>v.depth&&(v=n)});var d=a(p,g)/2-p.x,y=l[0]/(g.x+a(g,p)/2+d),m=l[1]/(v.depth||1);ui(s,function(n){n.x=(n.x+d)*y,n.y=n.depth*m})}return f}function t(n){for(var t,e={A:null,children:[n]},r=[e];null!=(t=r.pop());)for(var i,u=t.children,o=0,a=u.length;o0&&(Ri(Pi(o,n,e),n,r),c+=r,f+=r),s+=o.m,c+=i.m,h+=l.m,f+=u.m;o&&!Ti(u)&&(u.t=o,u.m+=s-f),i&&!qi(l)&&(l.t=i,l.m+=c-h,e=n)}return e}function u(n){n.x*=l[0],n.y=n.depth*l[1]}var o=ao.layout.hierarchy().sort(null).value(null),a=Li,l=[1,1],c=null;return n.separation=function(t){return arguments.length?(a=t,n):a},n.size=function(t){return arguments.length?(c=null==(l=t)?u:null,n):c?null:l},n.nodeSize=function(t){return arguments.length?(c=null==(l=t)?null:u,n):c?l:null},ii(n,o)},ao.layout.cluster=function(){function n(n,u){var o,a=t.call(this,n,u),l=a[0],c=0;oi(l,function(n){var t=n.children;t&&t.length?(n.x=ji(t),n.y=Ui(t)):(n.x=o?c+=e(n,o):0,n.y=0,o=n)});var f=Fi(l),s=Hi(l),h=f.x-e(f,s)/2,p=s.x+e(s,f)/2;return oi(l,i?function(n){n.x=(n.x-l.x)*r[0],n.y=(l.y-n.y)*r[1]}:function(n){n.x=(n.x-h)/(p-h)*r[0],n.y=(1-(l.y?n.y/l.y:1))*r[1]}),a}var t=ao.layout.hierarchy().sort(null).value(null),e=Li,r=[1,1],i=!1;return n.separation=function(t){return arguments.length?(e=t,n):e},n.size=function(t){return arguments.length?(i=null==(r=t),n):i?null:r},n.nodeSize=function(t){return arguments.length?(i=null!=(r=t),n):i?r:null},ii(n,t)},ao.layout.treemap=function(){function n(n,t){for(var e,r,i=-1,u=n.length;++i0;)f.push(o=h[l-1]),f.area+=o.area,"squarify"!==p||(a=r(f,v))<=g?(h.pop(),g=a):(f.area-=f.pop().area,i(f,v,c,!1),v=Math.min(c.dx,c.dy),f.length=f.area=0,g=1/0);f.length&&(i(f,v,c,!0),f.length=f.area=0),u.forEach(t)}}function e(t){var r=t.children;if(r&&r.length){var u,o=s(t),a=r.slice(),l=[];for(n(a,o.dx*o.dy/t.value),l.area=0;u=a.pop();)l.push(u),l.area+=u.area,null!=u.z&&(i(l,u.z?o.dx:o.dy,o,!a.length),l.length=l.area=0);r.forEach(e)}}function r(n,t){for(var e,r=n.area,i=0,u=1/0,o=-1,a=n.length;++oi&&(i=e));return r*=r,t*=t,r?Math.max(t*i*g/r,r/(t*u*g)):1/0}function i(n,t,e,r){var i,u=-1,o=n.length,a=e.x,c=e.y,f=t?l(n.area/t):0; +if(t==e.dx){for((r||f>e.dy)&&(f=e.dy);++ue.dx)&&(f=e.dx);++u1);return n+t*e*Math.sqrt(-2*Math.log(i)/i)}},logNormal:function(){var n=ao.random.normal.apply(ao,arguments);return function(){return Math.exp(n())}},bates:function(n){var t=ao.random.irwinHall(n);return function(){return t()/n}},irwinHall:function(n){return function(){for(var t=0,e=0;es?0:1;if(c=Oo)return t(c,p)+(n?t(n,1-p):"")+"Z";var g,v,d,y,m,M,x,b,_,w,S,k,N=0,E=0,A=[];if((y=(+l.apply(this,arguments)||0)/2)&&(d=u===ql?Math.sqrt(n*n+c*c):+u.apply(this,arguments),p||(E*=-1),c&&(E=tn(d/c*Math.sin(y))),n&&(N=tn(d/n*Math.sin(y)))),c){m=c*Math.cos(f+E),M=c*Math.sin(f+E),x=c*Math.cos(s-E),b=c*Math.sin(s-E);var C=Math.abs(s-f-2*E)<=Fo?0:1;if(E&&yu(m,M,x,b)===p^C){var z=(f+s)/2;m=c*Math.cos(z),M=c*Math.sin(z),x=b=null}}else m=M=0;if(n){_=n*Math.cos(s-N),w=n*Math.sin(s-N),S=n*Math.cos(f+N),k=n*Math.sin(f+N);var L=Math.abs(f-s+2*N)<=Fo?0:1;if(N&&yu(_,w,S,k)===1-p^L){var q=(f+s)/2;_=n*Math.cos(q),w=n*Math.sin(q),S=k=null}}else _=w=0;if(h>Uo&&(g=Math.min(Math.abs(c-n)/2,+i.apply(this,arguments)))>.001){v=nFo)+",1 "+t}function i(n,t,e,r){return"Q 0,0 "+r}var u=Me,o=xe,a=Iu,l=gu,c=vu;return n.radius=function(t){return arguments.length?(a=En(t),n):a},n.source=function(t){return arguments.length?(u=En(t),n):u},n.target=function(t){return arguments.length?(o=En(t),n):o},n.startAngle=function(t){return arguments.length?(l=En(t),n):l},n.endAngle=function(t){return arguments.length?(c=En(t),n):c},n},ao.svg.diagonal=function(){function n(n,i){var u=t.call(this,n,i),o=e.call(this,n,i),a=(u.y+o.y)/2,l=[u,{x:u.x,y:a},{x:o.x,y:a},o];return l=l.map(r),"M"+l[0]+"C"+l[1]+" "+l[2]+" "+l[3]}var t=Me,e=xe,r=Yu;return n.source=function(e){return arguments.length?(t=En(e),n):t},n.target=function(t){return arguments.length?(e=En(t),n):e},n.projection=function(t){return arguments.length?(r=t,n):r},n},ao.svg.diagonal.radial=function(){var n=ao.svg.diagonal(),t=Yu,e=n.projection;return n.projection=function(n){return arguments.length?e(Zu(t=n)):t},n},ao.svg.symbol=function(){function n(n,r){return(Ul.get(t.call(this,n,r))||$u)(e.call(this,n,r))}var t=Xu,e=Vu;return n.type=function(e){return arguments.length?(t=En(e),n):t},n.size=function(t){return arguments.length?(e=En(t),n):e},n};var Ul=ao.map({circle:$u,cross:function(n){var t=Math.sqrt(n/5)/2;return"M"+-3*t+","+-t+"H"+-t+"V"+-3*t+"H"+t+"V"+-t+"H"+3*t+"V"+t+"H"+t+"V"+3*t+"H"+-t+"V"+t+"H"+-3*t+"Z"},diamond:function(n){var t=Math.sqrt(n/(2*Fl)),e=t*Fl;return"M0,"+-t+"L"+e+",0 0,"+t+" "+-e+",0Z"},square:function(n){var t=Math.sqrt(n)/2;return"M"+-t+","+-t+"L"+t+","+-t+" "+t+","+t+" "+-t+","+t+"Z"},"triangle-down":function(n){var t=Math.sqrt(n/jl),e=t*jl/2;return"M0,"+e+"L"+t+","+-e+" "+-t+","+-e+"Z"},"triangle-up":function(n){var t=Math.sqrt(n/jl),e=t*jl/2;return"M0,"+-e+"L"+t+","+e+" "+-t+","+e+"Z"}});ao.svg.symbolTypes=Ul.keys();var jl=Math.sqrt(3),Fl=Math.tan(30*Yo);Co.transition=function(n){for(var t,e,r=Hl||++Zl,i=Ku(n),u=[],o=Ol||{time:Date.now(),ease:Nr,delay:0,duration:250},a=-1,l=this.length;++arect,.s>rect").attr("width",s[1]-s[0])}function i(n){n.select(".extent").attr("y",h[0]),n.selectAll(".extent,.e>rect,.w>rect").attr("height",h[1]-h[0])}function u(){function u(){32==ao.event.keyCode&&(C||(M=null,L[0]-=s[1],L[1]-=h[1],C=2),S())}function v(){32==ao.event.keyCode&&2==C&&(L[0]+=s[1],L[1]+=h[1],C=0,S())}function d(){var n=ao.mouse(b),t=!1;x&&(n[0]+=x[0],n[1]+=x[1]),C||(ao.event.altKey?(M||(M=[(s[0]+s[1])/2,(h[0]+h[1])/2]),L[0]=s[+(n[0] 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 && !((a = array[i]) != null && a <= a)) a = undefined;\n while (++i < n) if ((b = array[i]) != null && a > b) a = b;\n } else {\n while (++i < n && !((a = f.call(array, array[i], i)) != null && a <= a)) a = undefined;\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 && !((a = array[i]) != null && a <= a)) a = undefined;\n while (++i < n) if ((b = array[i]) != null && b > a) a = b;\n } else {\n while (++i < n && !((a = f.call(array, array[i], i)) != null && a <= a)) a = undefined;\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 && !((a = c = array[i]) != null && a <= a)) a = c = undefined;\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 && !((a = c = f.call(array, array[i], i)) != null && a <= a)) a = undefined;\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 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 (!isNaN(a = +array[i])) s += a;\n } else {\n while (++i < n) if (!isNaN(a = +f.call(array, array[i], i))) s += a;\n }\n return s;\n };\n function d3_number(x) {\n return x != null && !isNaN(x);\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_number(a = array[i])) s += a; else --j;\n } else {\n while (++i < n) if (d3_number(a = f.call(array, array[i], i))) s += a; else --j;\n }\n return j ? s / j : undefined;\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 if (arguments.length > 1) array = array.map(f);\n array = array.filter(d3_number);\n return array.length ? d3.quantile(array.sort(d3_ascending), .5) : undefined;\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) {\n var m = array.length, t, i;\n while (m) {\n i = Math.random() * m-- | 0;\n t = array[m], array[m] = array[i], array[i] = 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.zip = function() {\n if (!(n = arguments.length)) return [];\n for (var i = -1, m = d3.min(arguments, d3_zipLength), zips = new Array(m); ++i < m; ) {\n for (var j = -1, n, zip = zips[i] = new Array(n); ++j < n; ) {\n zip[j] = arguments[j][i];\n }\n }\n return zips;\n };\n function d3_zipLength(d) {\n return d.length;\n }\n d3.transpose = function(matrix) {\n return d3.zip.apply(d3, matrix);\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 try {\n for (var key in properties) {\n Object.defineProperty(ctor.prototype, key, {\n value: properties[key],\n enumerable: false\n });\n }\n } catch (e) {\n ctor.prototype = properties;\n }\n }\n d3.map = function(object) {\n var map = new d3_Map();\n if (object instanceof d3_Map) object.forEach(function(key, value) {\n map.set(key, value);\n }); else for (var key in object) map.set(key, object[key]);\n return map;\n };\n function d3_Map() {}\n d3_class(d3_Map, {\n has: d3_map_has,\n get: function(key) {\n return this[d3_map_prefix + key];\n },\n set: function(key, value) {\n return this[d3_map_prefix + key] = value;\n },\n remove: d3_map_remove,\n keys: d3_map_keys,\n values: function() {\n var values = [];\n this.forEach(function(key, value) {\n values.push(value);\n });\n return values;\n },\n entries: function() {\n var entries = [];\n this.forEach(function(key, value) {\n entries.push({\n key: key,\n value: value\n });\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) if (key.charCodeAt(0) === d3_map_prefixCode) f.call(this, key.substring(1), this[key]);\n }\n });\n var d3_map_prefix = \"\\x00\", d3_map_prefixCode = d3_map_prefix.charCodeAt(0);\n function d3_map_has(key) {\n return d3_map_prefix + key in this;\n }\n function d3_map_remove(key) {\n key = d3_map_prefix + key;\n return key in this && delete this[key];\n }\n function d3_map_keys() {\n var keys = [];\n this.forEach(function(key) {\n keys.push(key);\n });\n return keys;\n }\n function d3_map_size() {\n var size = 0;\n for (var key in this) if (key.charCodeAt(0) === d3_map_prefixCode) ++size;\n return size;\n }\n function d3_map_empty() {\n for (var key in this) if (key.charCodeAt(0) === d3_map_prefixCode) 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 d3_class(d3_Set, {\n has: d3_map_has,\n add: function(value) {\n this[d3_map_prefix + value] = true;\n return value;\n },\n remove: function(value) {\n value = d3_map_prefix + value;\n return value in this && delete this[value];\n },\n values: d3_map_keys,\n size: d3_map_size,\n empty: d3_map_empty,\n forEach: function(f) {\n for (var value in this) if (value.charCodeAt(0) === d3_map_prefixCode) f.call(this, value.substring(1));\n }\n });\n d3.behavior = {};\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.substring(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.substring(i + 1);\n type = type.substring(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_selectMatcher = d3_documentElement.matches || d3_documentElement[d3_vendorSymbol(d3_documentElement, \"matchesSelector\")], d3_selectMatches = function(n, s) {\n return d3_selectMatcher.call(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_selectionRoot;\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_nsPrefix = {\n svg: \"http://www.w3.org/2000/svg\",\n xhtml: \"http://www.w3.org/1999/xhtml\",\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n };\n d3.ns = {\n prefix: d3_nsPrefix,\n qualify: function(name) {\n var i = name.indexOf(\":\"), prefix = name;\n if (i >= 0) {\n prefix = name.substring(0, i);\n name = name.substring(i + 1);\n }\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) return d3_window.getComputedStyle(this.node(), null).getPropertyValue(name);\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 return typeof name === \"function\" ? name : (name = d3.ns.qualify(name)).local ? function() {\n return this.ownerDocument.createElementNS(name.space, name.local);\n } : function() {\n return this.ownerDocument.createElementNS(this.namespaceURI, name);\n };\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(function() {\n var parent = this.parentNode;\n if (parent) parent.removeChild(this);\n });\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(), dataByKeyValue = new d3_Map(), keyValues = [], keyValue;\n for (i = -1; ++i < n; ) {\n keyValue = key.call(node = group[i], node.__data__, i);\n if (nodeByKeyValue.has(keyValue)) {\n exitNodes[i] = node;\n } else {\n nodeByKeyValue.set(keyValue, node);\n }\n keyValues.push(keyValue);\n }\n for (i = -1; ++i < m; ) {\n keyValue = key.call(groupData, nodeData = groupData[i], i);\n if (node = nodeByKeyValue.get(keyValue)) {\n updateNodes[i] = node;\n node.__data__ = nodeData;\n } else if (!dataByKeyValue.has(keyValue)) {\n enterNodes[i] = d3_selection_dataNode(nodeData);\n }\n dataByKeyValue.set(keyValue, nodeData);\n nodeByKeyValue.remove(keyValue);\n }\n for (i = -1; ++i < n; ) {\n if (nodeByKeyValue.has(keyValues[i])) {\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 this.each(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_selectionPrototype.transition = function() {\n var id = d3_transitionInheritId || ++d3_transitionId, 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, id, transition);\n subgroup.push(node);\n }\n }\n return d3_transition(subgroups, id);\n };\n d3_selectionPrototype.interrupt = function() {\n return this.each(d3_selection_interrupt);\n };\n function d3_selection_interrupt() {\n var lock = this.__transition__;\n if (lock) ++lock.active;\n }\n d3.select = function(node) {\n var group = [ typeof node === \"string\" ? d3_select(node, d3_document) : node ];\n group.parentNode = d3_documentElement;\n return d3_selection([ group ]);\n };\n d3.selectAll = function(nodes) {\n var group = d3_array(typeof nodes === \"string\" ? d3_selectAll(nodes, d3_document) : nodes);\n group.parentNode = d3_documentElement;\n return d3_selection([ group ]);\n };\n var d3_selectionRoot = d3.select(d3_documentElement);\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.substring(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 d3_selection_onFilters.forEach(function(k) {\n if (\"on\" + k in d3_document) d3_selection_onFilters.remove(k);\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 = \"onselectstart\" in d3_document ? null : d3_vendorSymbol(d3_documentElement.style, \"userSelect\"), d3_event_dragId = 0;\n function d3_event_dragSuppress() {\n var name = \".dragsuppress-\" + ++d3_event_dragId, click = \"click\" + name, w = d3.select(d3_window).on(\"touchmove\" + name, d3_eventPreventDefault).on(\"dragstart\" + name, d3_eventPreventDefault).on(\"selectstart\" + name, d3_eventPreventDefault);\n if (d3_event_dragSelect) {\n var style = d3_documentElement.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 function off() {\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 = /WebKit/.test(d3_window.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 && (d3_window.scrollX || d3_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 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.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 d3.behavior.drag = function() {\n var event = d3_eventDispatch(drag, \"drag\", \"dragstart\", \"dragend\"), origin = null, mousedown = dragstart(d3_noop, d3.mouse, d3_behavior_dragMouseSubject, \"mousemove\", \"mouseup\"), touchstart = dragstart(d3_behavior_dragTouchId, d3.touch, d3_behavior_dragTouchSubject, \"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, parent = that.parentNode, dispatch = event.of(that, arguments), dragged = 0, dragId = id(), dragName = \".drag\" + (dragId == null ? \"\" : \"-\" + dragId), dragOffset, dragSubject = d3.select(subject()).on(move + dragName, moved).on(end + dragName, ended), dragRestore = d3_event_dragSuppress(), 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 && d3.event.target === target);\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 function d3_behavior_dragTouchSubject() {\n return d3.event.target;\n }\n function d3_behavior_dragMouseSubject() {\n return d3_window;\n }\n var π = Math.PI, τ = 2 * π, halfπ = π / 2, ε = 1e-6, ε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];\n var dx = ux1 - ux0, dy = uy1 - uy0, d2 = dx * dx + dy * dy, 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), dr = r1 - r0, S = (dr || Math.log(w1 / w0)) / ρ;\n function interpolate(t) {\n var s = t * S;\n if (dr) {\n var 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 return [ ux0 + t * dx, uy0 + t * dy, w0 * Math.exp(ρ * s) ];\n }\n interpolate.duration = S * 1e3;\n return interpolate;\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, 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 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 = dx / 2, cy = 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(\"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: +_\n };\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.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 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 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 dispatch({\n type: \"zoomend\"\n });\n }\n function mousedowned() {\n var that = this, target = d3.event.target, dispatch = event.of(that, arguments), dragged = 0, subject = d3.select(d3_window).on(mousemove, moved).on(mouseup, ended), location0 = location(d3.mouse(that)), dragRestore = d3_event_dragSuppress();\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 && d3.event.target === target);\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).on(mousedown, null).on(touchstart, started), dragRestore = d3_event_dragSuppress();\n d3_selection_interrupt.call(that);\n started();\n zoomstarted(dispatch);\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], l = locations0[p.identifier];\n scaleTo(view.k * 2);\n translateTo(p, l);\n d3_eventPreventDefault();\n zoomed(dispatch);\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 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 translate0 = location(center0 = center || d3.mouse(this)), \n d3_selection_interrupt.call(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 dispatch = event.of(this, arguments), p = d3.mouse(this), l = location(p), k = Math.log(view.k) / Math.LN2;\n zoomstarted(dispatch);\n scaleTo(Math.pow(2, d3.event.shiftKey ? Math.ceil(k) - 1 : Math.floor(k) + 1));\n translateTo(p, l);\n zoomed(dispatch);\n zoomended(dispatch);\n }\n return d3.rebind(zoom, event, \"on\");\n };\n var d3_behavior_zoomInfinity = [ 0, Infinity ];\n var d3_behavior_zoomDelta, 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 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.l, l.c, l.h) : 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]+)\\((.*)\\)/i.exec(format);\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)) return rgb(color.r, color.g, color.b);\n if (format != null && format.charAt(0) === \"#\" && !isNaN(color = parseInt(format.substring(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 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 function d3_identity(d) {\n return d;\n }\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 (d3_window.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 && request.responseText || 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 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.substring(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.substring(j, I - k);\n }\n return text.substring(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++))) 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 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 var d3_timer_queueHead, d3_timer_queueTail, d3_timer_interval, d3_timer_timeout, d3_timer_active, d3_timer_frame = d3_window[d3_vendorSymbol(d3_window, \"requestAnimationFrame\")] || function(callback) {\n setTimeout(callback, 17);\n };\n d3.timer = function(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 f: false,\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 };\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();\n d3_timer_active = d3_timer_queueHead;\n while (d3_timer_active) {\n if (now >= d3_timer_active.t) d3_timer_active.f = d3_timer_active.c(now - d3_timer_active.t);\n d3_timer_active = d3_timer_active.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.f) {\n t1 = t0 ? t0.n = t1.n : d3_timer_queueHead = t1.n;\n } else {\n if (t1.t < time) time = t1.t;\n t1 = (t0 = 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) {\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 ? function(value) {\n var i = value.length, t = [], j = 0, g = locale_grouping[0];\n while (i > 0 && g > 0) {\n t.push(value.substring(i -= g, i + g));\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;\n if (precision) precision = +precision.substring(1);\n if (zfill || fill === \"0\" && align === \"=\") {\n zfill = fill = \"0\";\n align = \"=\";\n if (comma) width -= Math.floor((width - 1) / 4);\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 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;\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 = i < 0 ? value : value.substring(0, i), after = i < 0 ? \"\" : locale_decimal + value.substring(i + 1);\n if (!zfill && comma) before = formatGroup(before);\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);\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.substring(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.substring(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 && (\"W\" in d || \"U\" in d)) {\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 + Math.floor(d.Z / 100), 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.substring(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.substring(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.substring(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.substring(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.substring(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.substring(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.substring(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.substring(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.substring(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.substring(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.substring(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.substring(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.substring(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.substring(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.substring(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.substring(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.substring(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.substring(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), 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.substring(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_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 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 < 0) ^ winding & 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_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_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_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, 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 sx = (x1 + x2) * .5, sy = (y1 + y2) * .5, right = x >= sx, bottom = y >= sy, i = (bottom << 1) + right;\n n.leaf = false;\n n = n.nodes[i] || (n.nodes[i] = d3_geom_quadtreeNode());\n if (right) x1 = sx; else x2 = sx;\n if (bottom) y1 = sy; else y2 = sy;\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 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 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 b -= a = +a;\n return function(t) {\n return a + 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.substring(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.substring(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) || /^(#|rgb\\(|hsl\\()/.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.substring(0, i) : name, m = i >= 0 ? name.substring(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_interpolateTransform(a, b) {\n var s = [], q = [], n, A = d3.transform(a), B = d3.transform(b), ta = A.translate, tb = B.translate, ra = A.rotate, rb = B.rotate, wa = A.skew, wb = B.skew, ka = A.scale, kb = B.scale;\n if (ta[0] != tb[0] || ta[1] != tb[1]) {\n s.push(\"translate(\", null, \",\", null, \")\");\n q.push({\n i: 1,\n x: d3_interpolateNumber(ta[0], tb[0])\n }, {\n i: 3,\n x: d3_interpolateNumber(ta[1], tb[1])\n });\n } else if (tb[0] || tb[1]) {\n s.push(\"translate(\" + tb + \")\");\n } else {\n s.push(\"\");\n }\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(s.pop() + \"rotate(\", null, \")\") - 2,\n x: d3_interpolateNumber(ra, rb)\n });\n } else if (rb) {\n s.push(s.pop() + \"rotate(\" + rb + \")\");\n }\n if (wa != wb) {\n q.push({\n i: s.push(s.pop() + \"skewX(\", null, \")\") - 2,\n x: d3_interpolateNumber(wa, wb)\n });\n } else if (wb) {\n s.push(s.pop() + \"skewX(\" + wb + \")\");\n }\n if (ka[0] != kb[0] || ka[1] != kb[1]) {\n n = s.push(s.pop() + \"scale(\", null, \",\", null, \")\");\n q.push({\n i: n - 4,\n x: d3_interpolateNumber(ka[0], kb[0])\n }, {\n i: n - 2,\n x: d3_interpolateNumber(ka[1], kb[1])\n });\n } else if (kb[0] != 1 || kb[1] != 1) {\n s.push(s.pop() + \"scale(\" + kb + \")\");\n }\n n = q.length;\n return function(t) {\n var i = -1, 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 - a) : 0;\n return function(x) {\n return (x - a) * b;\n };\n }\n function d3_uninterpolateClamp(a, b) {\n b = b - (a = +a) ? 1 / (b - a) : 0;\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: (x - x0) / k\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\"), 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 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));\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) alpha = x; else alpha = 0;\n } else if (x > 0) {\n event.start({\n type: \"start\",\n alpha: alpha = x\n });\n 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, m = candidates.length, x;\n while (++j < m) 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 = τ;\n function pie(data) {\n var values = data.map(function(d, i) {\n return +value.call(pie, d, i);\n });\n var a = +(typeof startAngle === \"function\" ? startAngle.apply(this, arguments) : startAngle);\n var k = ((typeof endAngle === \"function\" ? endAngle.apply(this, arguments) : endAngle) - a) / d3.sum(values);\n var index = d3.range(data.length);\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 var arcs = [];\n index.forEach(function(i) {\n var d;\n arcs[i] = {\n data: data[i],\n value: d = values[i],\n startAngle: a,\n endAngle: a += d * k\n };\n });\n return arcs;\n }\n pie.value = function(x) {\n if (!arguments.length) return value;\n value = x;\n return pie;\n };\n pie.sort = function(x) {\n if (!arguments.length) return sort;\n sort = x;\n return pie;\n };\n pie.startAngle = function(x) {\n if (!arguments.length) return startAngle;\n startAngle = x;\n return pie;\n };\n pie.endAngle = function(x) {\n if (!arguments.length) return endAngle;\n endAngle = x;\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 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 n = series.length, m = series[0].length, 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 = 0;\n root.y = 0;\n root.dx = size[0];\n root.dy = size[1];\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 return d3_scale_nice(domain, d3_scale_niceStep(d3_scale_linearTickRange(domain, m)[2]));\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, n / scale.ticks().length), f = positive ? (e = 1e-12, Math.ceil) : (e = -1e-12, \n Math.floor), e;\n return function(d) {\n return d / pow(f(log(d) + e)) <= 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 = (stop - start) / (Math.max(1, domain.length - 1) + padding);\n range = steps(domain.length < 2 ? (start + stop) / 2 : start + step * padding / 2, step);\n rangeBand = 0;\n ranger = {\n t: \"rangePoints\",\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)), error = stop - start - (domain.length - padding) * step;\n range = steps(start + Math.round(error / 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.filter(d3_number).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 d3.svg.arc = function() {\n var innerRadius = d3_svg_arcInnerRadius, outerRadius = d3_svg_arcOuterRadius, startAngle = d3_svg_arcStartAngle, endAngle = d3_svg_arcEndAngle;\n function arc() {\n var r0 = innerRadius.apply(this, arguments), r1 = outerRadius.apply(this, arguments), a0 = startAngle.apply(this, arguments) + d3_svg_arcOffset, a1 = endAngle.apply(this, arguments) + d3_svg_arcOffset, da = (a1 < a0 && (da = a0, \n a0 = a1, a1 = da), a1 - a0), df = da < π ? \"0\" : \"1\", c0 = Math.cos(a0), s0 = Math.sin(a0), c1 = Math.cos(a1), s1 = Math.sin(a1);\n return da >= d3_svg_arcMax ? r0 ? \"M0,\" + r1 + \"A\" + r1 + \",\" + r1 + \" 0 1,1 0,\" + -r1 + \"A\" + r1 + \",\" + r1 + \" 0 1,1 0,\" + r1 + \"M0,\" + r0 + \"A\" + r0 + \",\" + r0 + \" 0 1,0 0,\" + -r0 + \"A\" + r0 + \",\" + r0 + \" 0 1,0 0,\" + r0 + \"Z\" : \"M0,\" + r1 + \"A\" + r1 + \",\" + r1 + \" 0 1,1 0,\" + -r1 + \"A\" + r1 + \",\" + r1 + \" 0 1,1 0,\" + r1 + \"Z\" : r0 ? \"M\" + r1 * c0 + \",\" + r1 * s0 + \"A\" + r1 + \",\" + r1 + \" 0 \" + df + \",1 \" + r1 * c1 + \",\" + r1 * s1 + \"L\" + r0 * c1 + \",\" + r0 * s1 + \"A\" + r0 + \",\" + r0 + \" 0 \" + df + \",0 \" + r0 * c0 + \",\" + r0 * s0 + \"Z\" : \"M\" + r1 * c0 + \",\" + r1 * s0 + \"A\" + r1 + \",\" + r1 + \" 0 \" + df + \",1 \" + r1 * c1 + \",\" + r1 * s1 + \"L0,0\" + \"Z\";\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.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.centroid = function() {\n var r = (innerRadius.apply(this, arguments) + outerRadius.apply(this, arguments)) / 2, a = (startAngle.apply(this, arguments) + endAngle.apply(this, arguments)) / 2 + d3_svg_arcOffset;\n return [ Math.cos(a) * r, Math.sin(a) * r ];\n };\n return arc;\n };\n var d3_svg_arcOffset = -halfπ, d3_svg_arcMax = τ - ε;\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_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.join(\"L\");\n }\n function d3_svg_lineLinearClosed(points) {\n return d3_svg_lineLinear(points) + \"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, points.length - 1), d3_svg_lineCardinalTangents(points, tension));\n }\n function d3_svg_lineCardinalClosed(points, tension) {\n return points.length < 3 ? d3_svg_lineLinear(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] + d3_svg_arcOffset;\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) + d3_svg_arcOffset, a1 = endAngle.call(self, subgroup, i) + d3_svg_arcOffset;\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] + d3_svg_arcOffset;\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 function d3_transition(groups, id) {\n d3_subclass(groups, d3_transitionPrototype);\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) {\n return arguments.length ? d3_transitionInheritId ? selection.transition() : selection : d3_selectionRoot.transition();\n };\n d3.transition.prototype = d3_transitionPrototype;\n d3_transitionPrototype.select = function(selector) {\n var id = this.id, 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, id, node.__transition__[id]);\n subgroup.push(subnode);\n } else {\n subgroup.push(null);\n }\n }\n }\n return d3_transition(subgroups, id);\n };\n d3_transitionPrototype.selectAll = function(selector) {\n var id = this.id, 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.__transition__[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, id, transition);\n subgroup.push(subnode);\n }\n }\n }\n }\n return d3_transition(subgroups, 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.id);\n };\n d3_transitionPrototype.tween = function(name, tween) {\n var id = this.id;\n if (arguments.length < 2) return this.node().__transition__[id].tween.get(name);\n return d3_selection_each(this, tween == null ? function(node) {\n node.__transition__[id].tween.remove(name);\n } : function(node) {\n node.__transition__[id].tween.set(name, tween);\n });\n };\n function d3_transition_tween(groups, name, value, tween) {\n var id = groups.id;\n return d3_selection_each(groups, typeof value === \"function\" ? function(node, i, j) {\n node.__transition__[id].tween.set(name, tween(value.call(node, node.__data__, i, j)));\n } : (value = tween(value), function(node) {\n node.__transition__[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.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.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 return this.each(\"end.transition\", function() {\n var p;\n if (this.__transition__.count < 2 && (p = this.parentNode)) p.removeChild(this);\n });\n };\n d3_transitionPrototype.ease = function(value) {\n var id = this.id;\n if (arguments.length < 1) return this.node().__transition__[id].ease;\n if (typeof value !== \"function\") value = d3.ease.apply(d3, arguments);\n return d3_selection_each(this, function(node) {\n node.__transition__[id].ease = value;\n });\n };\n d3_transitionPrototype.delay = function(value) {\n var id = this.id;\n if (arguments.length < 1) return this.node().__transition__[id].delay;\n return d3_selection_each(this, typeof value === \"function\" ? function(node, i, j) {\n node.__transition__[id].delay = +value.call(node, node.__data__, i, j);\n } : (value = +value, function(node) {\n node.__transition__[id].delay = value;\n }));\n };\n d3_transitionPrototype.duration = function(value) {\n var id = this.id;\n if (arguments.length < 1) return this.node().__transition__[id].duration;\n return d3_selection_each(this, typeof value === \"function\" ? function(node, i, j) {\n node.__transition__[id].duration = Math.max(1, value.call(node, node.__data__, i, j));\n } : (value = Math.max(1, value), function(node) {\n node.__transition__[id].duration = value;\n }));\n };\n d3_transitionPrototype.each = function(type, listener) {\n var id = this.id;\n if (arguments.length < 2) {\n var inherit = d3_transitionInherit, inheritId = d3_transitionInheritId;\n d3_transitionInheritId = id;\n d3_selection_each(this, function(node, i, j) {\n d3_transitionInherit = node.__transition__[id];\n type.call(node, node.__data__, i, j);\n });\n d3_transitionInherit = inherit;\n d3_transitionInheritId = inheritId;\n } else {\n d3_selection_each(this, function(node) {\n var transition = node.__transition__[id];\n (transition.event || (transition.event = d3.dispatch(\"start\", \"end\"))).on(type, listener);\n });\n }\n return this;\n };\n d3_transitionPrototype.transition = function() {\n var id0 = this.id, id1 = ++d3_transitionId, 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 = Object.create(node.__transition__[id0]);\n transition.delay += transition.duration;\n d3_transitionNode(node, i, id1, transition);\n }\n subgroup.push(node);\n }\n }\n return d3_transition(subgroups, id1);\n };\n function d3_transitionNode(node, i, id, inherit) {\n var lock = node.__transition__ || (node.__transition__ = {\n active: 0,\n count: 0\n }), transition = lock[id];\n if (!transition) {\n var time = inherit.time;\n transition = lock[id] = {\n tween: new d3_Map(),\n time: time,\n ease: inherit.ease,\n delay: inherit.delay,\n duration: inherit.duration\n };\n ++lock.count;\n d3.timer(function(elapsed) {\n var d = node.__data__, ease = transition.ease, delay = transition.delay, duration = transition.duration, timer = d3_timer_active, tweened = [];\n timer.t = delay + time;\n if (delay <= elapsed) return start(elapsed - delay);\n timer.c = start;\n function start(elapsed) {\n if (lock.active > id) return stop();\n lock.active = id;\n transition.event && transition.event.start.call(node, d, i);\n transition.tween.forEach(function(key, value) {\n if (value = value.call(node, d, i)) {\n tweened.push(value);\n }\n });\n d3.timer(function() {\n timer.c = tick(elapsed || 1) ? d3_true : tick;\n return 1;\n }, 0, time);\n }\n function tick(elapsed) {\n if (lock.active !== id) return stop();\n var t = elapsed / duration, e = ease(t), n = tweened.length;\n while (n > 0) {\n tweened[--n].call(node, e);\n }\n if (t >= 1) {\n transition.event && transition.event.end.call(node, d, i);\n return stop();\n }\n }\n function stop() {\n if (--lock.count) delete lock[id]; else delete node.__transition__;\n return 1;\n }\n }, 0, time);\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), 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\");\n switch (orient) {\n case \"bottom\":\n {\n tickTransform = d3_svg_axisX;\n lineEnter.attr(\"y2\", innerTickSize);\n textEnter.attr(\"y\", Math.max(innerTickSize, 0) + tickPadding);\n lineUpdate.attr(\"x2\", 0).attr(\"y2\", innerTickSize);\n textUpdate.attr(\"x\", 0).attr(\"y\", Math.max(innerTickSize, 0) + tickPadding);\n text.attr(\"dy\", \".71em\").style(\"text-anchor\", \"middle\");\n pathUpdate.attr(\"d\", \"M\" + range[0] + \",\" + outerTickSize + \"V0H\" + range[1] + \"V\" + outerTickSize);\n break;\n }\n\n case \"top\":\n {\n tickTransform = d3_svg_axisX;\n lineEnter.attr(\"y2\", -innerTickSize);\n textEnter.attr(\"y\", -(Math.max(innerTickSize, 0) + tickPadding));\n lineUpdate.attr(\"x2\", 0).attr(\"y2\", -innerTickSize);\n textUpdate.attr(\"x\", 0).attr(\"y\", -(Math.max(innerTickSize, 0) + tickPadding));\n text.attr(\"dy\", \"0em\").style(\"text-anchor\", \"middle\");\n pathUpdate.attr(\"d\", \"M\" + range[0] + \",\" + -outerTickSize + \"V0H\" + range[1] + \"V\" + -outerTickSize);\n break;\n }\n\n case \"left\":\n {\n tickTransform = d3_svg_axisY;\n lineEnter.attr(\"x2\", -innerTickSize);\n textEnter.attr(\"x\", -(Math.max(innerTickSize, 0) + tickPadding));\n lineUpdate.attr(\"x2\", -innerTickSize).attr(\"y2\", 0);\n textUpdate.attr(\"x\", -(Math.max(innerTickSize, 0) + tickPadding)).attr(\"y\", 0);\n text.attr(\"dy\", \".32em\").style(\"text-anchor\", \"end\");\n pathUpdate.attr(\"d\", \"M\" + -outerTickSize + \",\" + range[0] + \"H0V\" + range[1] + \"H\" + -outerTickSize);\n break;\n }\n\n case \"right\":\n {\n tickTransform = d3_svg_axisY;\n lineEnter.attr(\"x2\", innerTickSize);\n textEnter.attr(\"x\", Math.max(innerTickSize, 0) + tickPadding);\n lineUpdate.attr(\"x2\", innerTickSize).attr(\"y2\", 0);\n textUpdate.attr(\"x\", Math.max(innerTickSize, 0) + tickPadding).attr(\"y\", 0);\n text.attr(\"dy\", \".32em\").style(\"text-anchor\", \"start\");\n pathUpdate.attr(\"d\", \"M\" + outerTickSize + \",\" + range[0] + \"H0V\" + range[1] + \"H\" + outerTickSize);\n break;\n }\n }\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);\n }\n tickEnter.call(tickTransform, scale0);\n tickUpdate.call(tickTransform, 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_ = 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, x) {\n selection.attr(\"transform\", function(d) {\n return \"translate(\" + x(d) + \",0)\";\n });\n }\n function d3_svg_axisY(selection, y) {\n selection.attr(\"transform\", function(d) {\n return \"translate(0,\" + y(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(), center, origin = d3.mouse(target), offset;\n var w = d3.select(d3_window).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) define(d3); else if (typeof module === \"object\" && module.exports) module.exports = d3;\n this.d3 = d3;\n}();"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["d3.js"],"names":["d3_documentElement","node","ownerDocument","document","documentElement","d3_window","defaultView","d3_ascending","a","b","NaN","d3_number","x","d3_numeric","isNaN","d3_bisector","compare","left","lo","hi","arguments","length","mid","right","d3_transposeLength","d","d3_range_integerScale","k","d3_class","ctor","properties","key","Object","defineProperty","prototype","value","enumerable","d3_Map","this","_","create","d3_map_escape","d3_map_proto","d3_map_zero","d3_map_unescape","slice","d3_map_has","d3_map_remove","d3_map_keys","keys","push","d3_map_size","size","d3_map_empty","d3_Set","d3_identity","d3_rebind","target","source","method","apply","d3_vendorSymbol","object","name","charAt","toUpperCase","i","n","d3_vendorPrefixes","prefixName","d3_noop","d3_dispatch","d3_dispatch_event","dispatch","event","l","z","listeners","on","listenerByName","listener","get","indexOf","concat","remove","set","d3_eventPreventDefault","d3","preventDefault","d3_eventSource","s","e","sourceEvent","d3_eventDispatch","of","thiz","argumentz","e1","e0","type","d3_selection","groups","d3_subclass","d3_selectionPrototype","d3_selection_selector","selector","d3_select","d3_selection_selectorAll","d3_selectAll","d3_selection_attr","attrNull","removeAttribute","attrNullNS","removeAttributeNS","space","local","attrConstant","setAttribute","attrConstantNS","setAttributeNS","attrFunction","attrFunctionNS","ns","qualify","d3_collapse","trim","replace","d3_selection_classedRe","RegExp","requote","d3_selection_classes","split","d3_selection_classed","classedConstant","classedFunction","map","d3_selection_classedName","re","c","classList","add","getAttribute","lastIndex","test","d3_selection_style","priority","styleNull","style","removeProperty","styleConstant","setProperty","styleFunction","d3_selection_property","propertyNull","propertyConstant","propertyFunction","d3_selection_creator","namespace","namespaceURI","d3_nsXhtml","createElement","createElementNS","createNS","d3_selectionRemove","parent","parentNode","removeChild","d3_selection_dataNode","data","__data__","d3_selection_filter","d3_selectMatches","d3_selection_sortComparator","comparator","d3_selection_each","callback","j","m","group","d3_selection_enter","selection","d3_selection_enterPrototype","d3_selection_enterInsertBefore","enter","i0","j0","update","d3_selection_on","capture","onRemove","removeEventListener","$","onAdd","wrap","d3_array","call","addEventListener","removeAll","match","d3_selection_onListener","filter","d3_selection_onFilters","d3_selection_onFilter","o","related","relatedTarget","compareDocumentPosition","d3_event_dragSuppress","d3_event_dragId","click","w","select","d3_event_dragSelect","suppressClick","off","setTimeout","d3_mousePoint","container","changedTouches","svg","ownerSVGElement","createSVGPoint","point","d3_mouse_bug44083","window","scrollX","scrollY","append","position","top","margin","padding","border","ctm","getScreenCTM","f","pageX","y","pageY","clientX","clientY","matrixTransform","inverse","rect","getBoundingClientRect","clientLeft","clientTop","d3_behavior_dragTouchId","identifier","d3_sgn","d3_cross2d","d3_acos","π","Math","acos","d3_asin","halfπ","asin","d3_sinh","exp","d3_cosh","d3_tanh","d3_haversin","sin","d3_color","d3_hsl","h","d3_rgb_parse","d3_rgb_hsl","d3_hsl_rgb","v","m1","m2","vv","round","d3_rgb","d3_hcl","d3_lab","d3_lab_hcl","d3_rgb_lab","rgb","r","g","d3_hcl_lab","cos","d3_radians","d3_lab_rgb","d3_lab_xyz","d3_lab_X","d3_lab_Y","d3_lab_Z","d3_xyz_rgb","atan2","d3_degrees","sqrt","d3_xyz_lab","pow","d3_rgbNumber","d3_rgbString","d3_rgb_hex","max","toString","min","format","hsl","color","exec","toLowerCase","parseFloat","d3_rgb_parseNumber","d3_rgb_names","parseInt","d3_rgb_xyz","d3_functor","d3_xhrType","response","url","mimeType","d3_xhr","respond","result","status","request","d3_xhrHasResponse","xhr","error","load","headers","XMLHttpRequest","responseType","XDomainRequest","onload","onerror","onreadystatechange","readyState","onprogress","progress","header","forEach","send","open","setRequestHeader","overrideMimeType","beforesend","abort","rebind","d3_xhr_fixCallback","responseText","d3_timer","delay","then","Date","now","time","timer","t","d3_timer_queueTail","d3_timer_queueHead","d3_timer_interval","d3_timer_timeout","clearTimeout","d3_timer_frame","d3_timer_step","d3_timer_mark","d3_timer_sweep","isFinite","t0","t1","Infinity","d3_format_precision","p","ceil","log","LN10","d3_formatPrefix","abs","scale","symbol","d3_locale_numberFormat","locale","locale_decimal","decimal","locale_thousands","thousands","locale_grouping","grouping","locale_currency","currency","formatGroup","width","substring","reverse","join","specifier","d3_format_re","fill","align","sign","zfill","comma","precision","prefix","suffix","integer","exponent","d3_format_types","d3_format_typeDefault","zcomma","fullSuffix","negative","unit","formatPrefix","before","after","lastIndexOf","Array","d3_date_utc","UTC","d3_time_interval","step","number","date","d0","d1","offset","d3_date","range","dt","times","range_utc","utc","floor","d3_time_interval_utc","d3_locale_timeFormat","d3_time_format","template","string","charCodeAt","d3_time_formatPads","d3_time_formats","parse","H","M","S","L","Z","d3_time_parse","localZ","setFullYear","W","getDay","U","setHours","d3_time_parsers","d3_time_parseWeekdayAbbrev","d3_time_dayAbbrevRe","d3_time_dayAbbrevLookup","d3_time_parseWeekday","d3_time_dayRe","d3_time_dayLookup","d3_time_parseMonthAbbrev","d3_time_monthAbbrevRe","d3_time_monthAbbrevLookup","d3_time_parseMonth","d3_time_monthRe","d3_time_monthLookup","d3_time_parseLocaleFull","d3_time_parseLocaleDate","d3_time_parseLocaleTime","X","d3_time_parseAmPm","d3_time_periodLookup","locale_dateTime","dateTime","locale_date","locale_time","locale_periods","periods","locale_days","days","locale_shortDays","shortDays","locale_months","months","locale_shortMonths","shortMonths","multi","d3_time_formatMulti","d3_time_formatRe","d3_time_formatLookup","A","getMonth","B","d3_time_formatPad","getDate","getHours","I","d3_time","dayOfYear","getMilliseconds","getMinutes","getSeconds","sundayOfYear","mondayOfYear","getFullYear","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","names","d3_time_numberRe","d3_time_expandYear","getTimezoneOffset","zs","zh","zm","d3_time_percentRe","formats","d3_adder","d3_adderSum","bv","av","d3_geo_streamGeometry","geometry","d3_geo_streamGeometryType","hasOwnProperty","d3_geo_streamLine","coordinates","closed","coordinate","lineStart","lineEnd","d3_geo_streamPolygon","polygonStart","polygonEnd","d3_geo_areaRingStart","nextPoint","λ","φ","dλ","λ0","sdλ","adλ","cosφ","sinφ","sinφ0","u","cosφ0","d3_geo_areaRingSum","λ00","φ00","d3_geo_area","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","ε","d3_geo_centroidPoint","d3_geo_centroidPointXYZ","d3_geo_centroidW0","d3_geo_centroidX0","d3_geo_centroidY0","d3_geo_centroidZ0","d3_geo_centroidLineStart","y0","z0","x0","d3_geo_centroidW1","d3_geo_centroidX1","d3_geo_centroidY1","d3_geo_centroidZ1","d3_geo_centroid","d3_geo_centroidLineEnd","d3_geo_centroidRingStart","cx","cy","cz","d3_geo_centroidX2","d3_geo_centroidY2","d3_geo_centroidZ2","d3_geo_compose","compose","invert","d3_true","d3_geo_clipPolygon","segments","clipStartInside","interpolate","subject","clip","segment","p0","p1","d3_geo_clipPolygonIntersection","sort","d3_geo_clipPolygonLinkCircular","entry","points","start","current","isSubject","array","other","d3_geo_clip","pointVisible","clipLine","clipStart","rotate","pointLine","line","pointRing","ring","ringListener","ringStart","ringEnd","clean","ringSegments","buffer","pop","polygon","polygonStarted","shift","d3_geo_clipSegmentLength1","rotatedClipStart","merge","d3_geo_pointInPolygon","d3_geo_clipSort","sphere","d3_geo_clipBufferListener","lines","rejoin","d3_geo_clipAntimeridianLine","φ0","sλ0","λ1","φ1","sλ1","d3_geo_clipAntimeridianIntersect","cosφ1","sinλ0_λ1","atan","d3_geo_clipAntimeridianInterpolate","from","to","direction","meridian","parallel","meridianNormal","polarAngle","winding","reset","point0","antimeridian","τ","arc","intersection","φarc","d3_geo_clipCircle","radius","visible","cr","c0","v0","v00","point2","point1","smallRadius","code","intersect","notHemisphere","two","pa","pb","n1","n2","n2n2","n1n2","determinant","c1","c2","n1xn2","uu","t2","q","δλ","polar","q1","d3_geo_circleInterpolate","d3_geom_clipLine","x1","y1","ax","ay","bx","by","dx","dy","d3_geo_clipExtent","corner","comparePoints","ca","cb","insidePolygon","wn","a1","linePoint","first","v_","x_","y_","x__","y__","v__","bufferListener","d3_geo_clipExtentMAX","listener_","inside","d3_geo_conic","projectAt","d3_geo_projectionMutator","parallels","d3_geo_conicEqualArea","forward","ρ","C","ρ0","ρ0_y","d3_geo_pathAreaRingStart","d3_geo_pathAreaPolygon","x00","y00","d3_geo_pathArea","d3_geo_pathBoundsPoint","d3_geo_pathBoundsX0","d3_geo_pathBoundsX1","d3_geo_pathBoundsY0","d3_geo_pathBoundsY1","d3_geo_pathBuffer","pointCircle","pointLineStart","stream","lineEndPolygon","d3_geo_pathBufferCircle","pointRadius","d3_geo_pathCentroidPoint","d3_geo_pathCentroidLineStart","d3_geo_pathCentroid","d3_geo_pathCentroidLineEnd","d3_geo_pathCentroidRingStart","d3_geo_pathContext","context","moveTo","lineTo","closePath","d3_geo_resample","project","resample","maxDepth","resampleRecursive","resampleNone","d3_geo_transformPoint","resampleLineTo","a0","b0","ringPoint","a00","b00","c00","b1","depth","d2","δ2","φ2","λ2","x2","y2","dx2","dy2","dz","cosMinDistance","d3_geo_pathProjectStream","d3_geo_projectionRadians","d3_geo_transform","d3_geo_projection","projection","projectRotate","δx","δy","d3_geo_rotation","δφ","δγ","center","invalidate","valid","projectResample","preclip","d3_geo_clipAntimeridian","postclip","clipAngle","clipExtent","output","translate","d3_geo_equirectangular","d3_geo_identityRotation","d3_geo_rotationλ","d3_geo_rotationφγ","d3_geo_forwardRotationλ","rotation","cosδφ","sinδφ","cosδγ","sinδγ","sr","d3_geo_circleAngle","angle","PI","d3_geo_graticuleX","d3_geo_graticuleY","d3_source","d3_target","d3_geo_interpolate","cy0","sy0","cy1","sy1","kx0","ky0","kx1","ky1","distance","d3_geo_lengthLineStart","cosΔλ","d3_geo_lengthSum","d3_geo_length","d3_geo_azimuthal","azimuthal","cosλ","sinc","cosc","d3_geo_conicConformal","F","tan","d3_geo_mercator","d3_geo_conicEquidistant","G","d3_geo_mercatorProjection","clipAuto","d3_geo_transverseMercator","d3_geom_pointX","d3_geom_pointY","d3_geom_hullUpper","hull","hs","d3_geom_hullOrder","d3_geom_polygonInside","d3_geom_polygonIntersect","x3","x21","x43","y3","y21","y43","ua","d3_geom_polygonClosed","d3_geom_voronoiBeach","d3_geom_voronoiRedBlackNode","edge","site","circle","d3_geom_voronoiCreateBeach","beach","d3_geom_voronoiBeachPool","d3_geom_voronoiDetachBeach","d3_geom_voronoiDetachCircle","d3_geom_voronoiBeaches","d3_geom_voronoiRemoveBeach","vertex","previous","P","next","N","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","insert","lSite","rSite","hb","hc","rfocx","rfocy","pby2","lfocx","lfocy","plby2","hl","aby2","d3_geom_voronoiCell","edges","d3_geom_voronoiCloseCells","extent","cell","iHalfEdge","halfEdges","nHalfEdges","end","cells","d3_geom_voronoiCells","iCell","prepare","splice","d3_geom_voronoiHalfEdge","d3_geom_voronoiCreateBorderEdge","d3_geom_voronoiHalfEdgeOrder","d3_geom_voronoiCircle","cSite","ε2","ha","d3_geom_voronoiCirclePool","d3_geom_voronoiCircles","d3_geom_voronoiFirstCircle","d3_geom_voronoiClipEdges","d3_geom_voronoiEdges","d3_geom_voronoiConnectEdge","vb","fm","fb","va","lx","ly","rx","ry","fx","fy","d3_geom_voronoiEdge","d3_geom_voronoiRedBlackTree","d3_geom_voronoiRedBlackRotateLeft","tree","d3_geom_voronoiRedBlackRotateRight","d3_geom_voronoiRedBlackFirst","d3_geom_voronoi","sites","bbox","d3_geom_voronoiVertexOrder","diagram","d3_geom_voronoiTriangleArea","d3_geom_quadtreeCompatX","d3_geom_quadtreeCompatY","d3_geom_quadtreeNode","leaf","nodes","d3_geom_quadtreeVisit","sx","sy","children","d3_geom_quadtreeFind","root","closestPoint","minDistance2","find","distance2","xm","ym","below","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","interpolators","d3_interpolateArray","na","nb","n0","d3_ease_clamp","d3_ease_reverse","d3_ease_reflect","d3_ease_quad","d3_ease_cubic","d3_ease_cubicInOut","t3","d3_ease_poly","d3_ease_sin","d3_ease_exp","d3_ease_circle","d3_ease_elastic","d3_ease_back","d3_ease_bounce","d3_interpolateHcl","hcl","ah","ac","al","bh","bc","bl","d3_interpolateHsl","as","d3_interpolateLab","lab","aa","ba","d3_interpolateRound","d3_transform","r0","r1","kx","d3_transformNormalize","kz","d3_transformDot","ky","d3_transformCombine","skew","d3_interpolateTransformPop","d3_interpolateTranslate","ta","tb","d3_interpolateRotate","ra","rb","d3_interpolateSkew","wa","wb","d3_interpolateScale","ka","kb","d3_interpolateTransform","transform","d3_uninterpolateNumber","d3_uninterpolateClamp","d3_layout_bundlePath","link","lca","d3_layout_bundleLeastCommonAncestor","d3_layout_bundleAncestors","ancestors","aNodes","bNodes","aNode","bNode","sharedNode","d3_layout_forceDragstart","fixed","d3_layout_forceDragend","d3_layout_forceMouseover","px","py","d3_layout_forceMouseout","d3_layout_forceAccumulate","quad","alpha","charges","charge","random","pointCharge","d3_layout_hierarchyRebind","hierarchy","links","d3_layout_hierarchyLinks","d3_layout_hierarchyVisitBefore","d3_layout_hierarchyVisitAfter","nodes2","d3_layout_hierarchyChildren","d3_layout_hierarchyValue","d3_layout_hierarchySort","child","d3_layout_stackX","d3_layout_stackY","d3_layout_stackOut","d3_layout_stackOrderDefault","d3_layout_stackOffsetZero","d3_layout_stackMaxIndex","d3_layout_stackReduceSum","reduce","d3_layout_stackSum","d3_layout_histogramBinSturges","values","d3_layout_histogramBinFixed","LN2","d3_layout_histogramRange","d3_layout_packSort","d3_layout_packInsert","_pack_next","_pack_prev","d3_layout_packSplice","d3_layout_packIntersects","dr","d3_layout_packSiblings","bound","xMin","xMax","yMin","yMax","d3_layout_packLink","d3_layout_packPlace","isect","s1","s2","d3_layout_packUnlink","d3_layout_packTransform","db","da","dc","d3_layout_treeSeparation","d3_layout_treeLeft","d3_layout_treeRight","d3_layout_treeMove","wm","wp","change","d3_layout_treeShift","d3_layout_treeAncestor","vim","ancestor","d3_layout_clusterY","d3_layout_clusterX","d3_layout_clusterLeft","d3_layout_clusterRight","d3_layout_treemapPadNull","d3_layout_treemapPad","d3_scaleExtent","domain","stop","d3_scaleRange","rangeExtent","d3_scale_bilinear","uninterpolate","d3_scale_nice","nice","i1","d3_scale_niceStep","d3_scale_niceIdentity","d3_scale_polylinear","bisect","d3_scale_linear","clamp","rescale","linear","input","Number","rangeRound","ticks","d3_scale_linearTicks","tickFormat","d3_scale_linearTickFormat","d3_scale_linearNice","copy","d3_scale_linearRebind","d3_scale_linearTickRange","span","err","d3_scale_linearPrecision","d3_scale_linearFormatPrecision","d3_scale_linearFormatSignificant","d3_scale_log","base","positive","niced","d3_scale_logNiceNegative","d3_scale_logFormat","d3_scale_pow","powp","d3_scale_powPow","powb","d3_scale_ordinal","ranger","steps","rangeBand","xi","has","rangePoints","rangeRoundPoints","rangeBands","outerPadding","rangeRoundBands","d3_scale_quantile","thresholds","quantile","quantiles","invertExtent","d3_scale_quantize","d3_scale_threshold","d3_scale_identity","identity","d3_zero","d3_svg_arcInnerRadius","innerRadius","d3_svg_arcOuterRadius","outerRadius","d3_svg_arcStartAngle","startAngle","d3_svg_arcEndAngle","endAngle","d3_svg_arcPadAngle","padAngle","d3_svg_arcSweep","d3_svg_arcCornerTangents","rc","cw","x01","y01","ox","oy","D","cx0","cx1","dx0","dy0","dx1","dy1","d3_svg_line","tension","defined","d3_svg_lineLinear","interpolateKey","d3_svg_lineInterpolators","d3_svg_lineLinearClosed","d3_svg_lineStep","path","d3_svg_lineStepBefore","d3_svg_lineStepAfter","d3_svg_lineCardinalOpen","d3_svg_lineHermite","d3_svg_lineCardinalTangents","d3_svg_lineCardinalClosed","d3_svg_lineCardinal","tangents","pi","lp","p2","d3_svg_lineBasis","d3_svg_lineDot4","d3_svg_lineBasisBezier3","d3_svg_lineBasisBezier","d3_svg_lineBasisOpen","d3_svg_lineBasisClosed","d3_svg_lineBundle","d3_svg_lineBasisBezier1","d3_svg_lineBasisBezier2","d3_svg_lineSlope","d3_svg_lineFiniteDifferences","d3_svg_lineMonotoneTangents","d3_svg_lineMonotone","d3_svg_lineRadial","d3_svg_area","area","points1","interpolateReverse","points0","fx0","fy0","fx1","fy1","d3_svg_chordRadius","d3_svg_diagonalProjection","d3_svg_diagonalRadialProjection","d3_svg_symbolSize","d3_svg_symbolType","d3_svg_symbolCircle","d3_selection_interruptNS","lock","activeId","active","count","interrupt","d3_transition","id","d3_transitionPrototype","d3_transition_tween","tween","d3_transition_text","textContent","d3_transitionNamespace","d3_transitionNode","inherit","schedule","elapsed","transition","cancelId","cancel","tick","tweens","ease","duration","d3_svg_axisX","attr","d3_svg_axisY","d3_time_formatIsoNative","toISOString","d3_time_scale","methods","tickMethod","d3_time_scaleSteps","year","d3_time_scaleMilliseconds","d3_time_scaleDate","interval","skip","skipped","d3_json","JSON","d3_html","d3_document","createRange","selectNode","body","createContextualFragment","version","d3_arraySlice","list","childNodes","nodeType","d3_element_prototype","Element","d3_element_setAttribute","d3_element_setAttributeNS","d3_style_prototype","CSSStyleDeclaration","d3_style_setProperty","ascending","descending","sum","mean","median","numbers","variance","deviation","d3_bisect","bisectLeft","bisectRight","bisector","shuffle","permute","indexes","permutes","pairs","transpose","matrix","row","zip","entries","arrays","merged","Error","isArray","empty","nest","mapType","rollup","sortValues","keyValue","setter","valuesByKey","sortKey","sortKeys","keyMap","order","behavior","d3_requote_re","__proto__","property","querySelector","querySelectorAll","d3_selectMatcher","matches","Sizzle","matchesSelector","subgroup","subnode","subgroups","selectAll","d3_nsPrefix","xhtml","xlink","xml","xmlns","getAttributeNS","each","classed","contains","getComputedStyle","getPropertyValue","text","html","innerHTML","appendChild","insertBefore","bind","groupData","nodeData","updateNodes","enterNodes","exitNodes","nodeByKeyValue","keyValues","exit","datum","nextSibling","args","upgroup","mouseenter","mouseleave","mouse","navigator","userAgent","touch","touches","drag","mousedown","touchstart","dragstart","move","moved","position1","dragId","position0","dragged","dragOffset","ended","dragSubject","dragName","dragRestore","that","correspondingElement","origin","τε","SQRT2","ρ2","ρ4","interpolateZoom","ux0","uy0","w0","ux1","uy1","w1","coshr0","zoom","mousedowned","d3_behavior_zoomWheel","mousewheeled","dblclicked","touchstarted","location","view","scaleTo","scaleExtent","translateTo","zoomTo","__chart__","center0","zoomstarted","zooming","zoomed","zoomended","location0","mousemove","mouseup","d3_selection_interrupt","relocate","scale0","locations0","started","touchmove","touchend","targets","changed","touchtime","distance0","l0","l1","distance1","scale1","zoomName","mousewheelTimer","translate0","d3_behavior_zoomDelta","shiftKey","d3_behavior_zoomInfinity","deltaY","deltaMode","wheelDelta","detail","view1","d3_transitionInheritId","d3_hslPrototype","brighter","darker","d3_hclPrototype","d3_lab_K","d3_labPrototype","d3_rgbPrototype","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","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","functor","dsv","delimiter","typedResponse","formatRow","formatValue","reFormat","delimiterCode","parseRows","Function","stringify","token","EOF","eol","EOL","rows","formatRows","fieldSet","fields","field","csv","tsv","flush","d3_formatPrefixes","String","fromCharCode","toPrecision","toExponential","toFixed","getUTCDate","getUTCDay","getUTCFullYear","getUTCHours","getUTCMilliseconds","getUTCMinutes","getUTCMonth","getUTCSeconds","getTime","valueOf","setDate","d3_time_prototype","setUTCDate","setDay","setUTCDay","setUTCFullYear","setUTCHours","setMilliseconds","setUTCMilliseconds","setMinutes","setUTCMinutes","setMonth","setUTCMonth","setSeconds","setUTCSeconds","setTime","day","years","week","sunday","weeks","weekOfYear","-","0","numberFormat","timeFormat","d3_locale_enUS","geo","d3_adderTemp","d3_geo_streamObjectType","Feature","feature","FeatureCollection","features","Sphere","Point","MultiPoint","LineString","MultiLineString","Polygon","MultiPolygon","GeometryCollection","geometries","d3_geo_areaSum","bounds","ranges","normal","equatorial","inflection","λ_","λi","φi","dλSum","λ__","φ__","compareRanges","withinRange","best","centroid","conicEqualArea","raw","albers","albersUsa","lower48Point","alaskaPoint","hawaiiPoint","lower48","alaska","hawaii","pointStream","lower48Stream","alaskaStream","hawaiiStream","d3_geo_pathAreaSum","d3_geo_pathBounds","contextStream","cacheStream","projectStream","projectionMutator","equirectangular","Δλ","sinΔλ","sinφ1","graticule","X0","DX","X1","Y0","DY","Y1","outline","majorExtent","minorExtent","majorStep","minorStep","greatArc","source_","target_","d3_geo_azimuthalEqualArea","cosλcosφ","azimuthalEqualArea","d3_geo_azimuthalEquidistant","azimuthalEquidistant","conicConformal","conicEquidistant","d3_geo_gnomonic","gnomonic","mercator","d3_geo_orthographic","orthographic","d3_geo_stereographic","stereographic","transverseMercator","geom","vertices","flippedPoints","upper","lower","skipLeft","skipRight","d3_geom_polygonPrototype","grandpa","uncle","sibling","voronoi","polygons","d3_geom_voronoiClipExtent","triangles","s0","delaunay","quadtree","nx","ny","insertChild","nPoint","xs","ys","x1_","y1_","x2_","y2_","compat","visit","interpolateRgb","interpolateObject","interpolateNumber","interpolateString","interpolateArray","d3_ease_default","d3_ease","poly","cubic","elastic","back","bounce","d3_ease_mode","in","out","in-out","out-in","interpolateHcl","interpolateHsl","interpolateLab","interpolateRound","baseVal","consolidate","d3_transformIdentity","interpolateTransform","layout","bundle","paths","chord","relayout","groupSums","groupIndex","subgroupIndex","chords","sortGroups","sortSubgroups","di","dj","subindex","sortChords","resort","force","repulse","dw","dn","theta2","chargeDistance2","dragmove","resume","distances","strengths","friction","linkDistance","d3_layout_forceLinkDistance","linkStrength","d3_layout_forceLinkStrength","d3_layout_forceChargeDistance2","gravity","weight","chargeDistance","theta","dimension","neighbors","candidates","stack","childs","revalue","partition","pie","arcs","d3_layout_pieSortByValue","series","orders","offsets","d3_layout_stackOrders","d3_layout_stackOffsets","inside-out","sums","bottom","tops","bottoms","default","silhouette","wiggle","s3","o0","expand","zero","histogram","bin","bins","valuer","binner","frequency","pack","root0","root1","wrapTree","firstWalk","secondWalk","nodeSize","sizeNode","tx","separation","node1","queue","siblings","midpoint","apportion","vip","vop","vom","sip","sop","sim","som","cluster","previousNode","treemap","squarify","score","pad","remaining","mode","worst","stickify","rmax","rmin","ratio","stickies","sticky","padFunction","padConstant","µ","σ","logNormal","bates","irwinHall","ordinal","category10","d3_category10","category20","d3_category20","category20b","d3_category20b","category20c","d3_category20c","quantize","threshold","circleSegment","rp","ap","padRadius","d3_svg_arcAuto","h1","h0","cornerRadius","rc1","rc0","oc","kc","lc","t30","t12","t03","t21","linear-closed","step-before","step-after","basis","basis-open","basis-closed","cardinal","cardinal-open","cardinal-closed","monotone","radial","equals","curve","self","diagonal","p3","projection_","d3_svg_symbols","cross","diamond","d3_svg_symbolTan30","square","triangle-down","d3_svg_symbolSqrt3","triangle-up","symbolTypes","d3_transitionId","d3_transitionInherit","subnodes","nameNS","attrTween","attrTweenNS","styleString","styleTween","inheritId","id0","id1","axis","tickTransform","tickValues","tickArguments_","tickFormat_","tickEnter","tickExit","tickUpdate","tickSpacing","innerTickSize","tickPadding","pathUpdate","lineEnter","lineUpdate","textEnter","textUpdate","orient","outerTickSize","d3_svg_axisDefaultOrient","d3_svg_axisOrients","tickSize","tickSubdivide","brush","brushstart","background","resize","resizes","d3_svg_brushCursor","gUpdate","backgroundUpdate","redrawX","redrawY","redraw","xExtent","yExtent","keydown","keyCode","dragging","keyup","brushmove","altKey","resizingX","move1","resizingY","event_","yClamp","xClamp","yExtentDomain","xExtentDomain","brushend","eventTarget","resizing","ex","ey","d3_svg_brushResizes","extent1","extent0","yi","clear","nw","ne","se","sw","d3_time_formatUtc","d3_time_formatIso","iso","second","seconds","minute","minutes","hour","timezone","hours","month","d3_time_scaleLocalMethods","d3_time_scaleLocalFormat","d3_time_scaleUtcMethods","d3_time_scaleUtcFormat","json","responseXML","define","amd","module","exports"],"mappings":"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","file":"d3.min.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":"/source/"} \ No newline at end of file diff --git a/resources/assets/js/d3.js b/resources/assets/js/d3.js new file mode 100644 index 000000000000..aded45c440ce --- /dev/null +++ b/resources/assets/js/d3.js @@ -0,0 +1,9554 @@ +!function() { + var d3 = { + version: "3.5.17" + }; + var d3_arraySlice = [].slice, d3_array = function(list) { + return d3_arraySlice.call(list); + }; + var d3_document = this.document; + function d3_documentElement(node) { + return node && (node.ownerDocument || node.document || node).documentElement; + } + function d3_window(node) { + return node && (node.ownerDocument && node.ownerDocument.defaultView || node.document && node || node.defaultView); + } + if (d3_document) { + try { + d3_array(d3_document.documentElement.childNodes)[0].nodeType; + } catch (e) { + d3_array = function(list) { + var i = list.length, array = new Array(i); + while (i--) array[i] = list[i]; + return array; + }; + } + } + if (!Date.now) Date.now = function() { + return +new Date(); + }; + if (d3_document) { + try { + d3_document.createElement("DIV").style.setProperty("opacity", 0, ""); + } catch (error) { + 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; + d3_element_prototype.setAttribute = function(name, value) { + d3_element_setAttribute.call(this, name, value + ""); + }; + d3_element_prototype.setAttributeNS = function(space, local, value) { + d3_element_setAttributeNS.call(this, space, local, value + ""); + }; + d3_style_prototype.setProperty = function(name, value, priority) { + d3_style_setProperty.call(this, name, value + "", priority); + }; + } + } + d3.ascending = d3_ascending; + function d3_ascending(a, b) { + return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN; + } + d3.descending = function(a, b) { + return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN; + }; + d3.min = function(array, f) { + var i = -1, n = array.length, a, b; + if (arguments.length === 1) { + while (++i < n) if ((b = array[i]) != null && b >= b) { + a = b; + break; + } + while (++i < n) if ((b = array[i]) != null && a > b) a = b; + } else { + while (++i < n) if ((b = f.call(array, array[i], i)) != null && b >= b) { + a = b; + break; + } + while (++i < n) if ((b = f.call(array, array[i], i)) != null && a > b) a = b; + } + return a; + }; + d3.max = function(array, f) { + var i = -1, n = array.length, a, b; + if (arguments.length === 1) { + while (++i < n) if ((b = array[i]) != null && b >= b) { + a = b; + break; + } + while (++i < n) if ((b = array[i]) != null && b > a) a = b; + } else { + while (++i < n) if ((b = f.call(array, array[i], i)) != null && b >= b) { + a = b; + break; + } + while (++i < n) if ((b = f.call(array, array[i], i)) != null && b > a) a = b; + } + return a; + }; + d3.extent = function(array, f) { + var i = -1, n = array.length, a, b, c; + if (arguments.length === 1) { + while (++i < n) if ((b = array[i]) != null && b >= b) { + a = c = b; + break; + } + while (++i < n) if ((b = array[i]) != null) { + if (a > b) a = b; + if (c < b) c = b; + } + } else { + while (++i < n) if ((b = f.call(array, array[i], i)) != null && b >= b) { + a = c = b; + break; + } + while (++i < n) if ((b = f.call(array, array[i], i)) != null) { + if (a > b) a = b; + if (c < b) c = b; + } + } + return [ a, c ]; + }; + function d3_number(x) { + return x === null ? NaN : +x; + } + function d3_numeric(x) { + return !isNaN(x); + } + d3.sum = function(array, f) { + var s = 0, n = array.length, a, i = -1; + if (arguments.length === 1) { + while (++i < n) if (d3_numeric(a = +array[i])) s += a; + } else { + while (++i < n) if (d3_numeric(a = +f.call(array, array[i], i))) s += a; + } + return s; + }; + d3.mean = function(array, f) { + var s = 0, n = array.length, a, i = -1, j = n; + if (arguments.length === 1) { + while (++i < n) if (d3_numeric(a = d3_number(array[i]))) s += a; else --j; + } else { + while (++i < n) if (d3_numeric(a = d3_number(f.call(array, array[i], i)))) s += a; else --j; + } + if (j) return s / j; + }; + d3.quantile = function(values, p) { + var H = (values.length - 1) * p + 1, h = Math.floor(H), v = +values[h - 1], e = H - h; + return e ? v + e * (values[h] - v) : v; + }; + d3.median = function(array, f) { + var numbers = [], n = array.length, a, i = -1; + if (arguments.length === 1) { + while (++i < n) if (d3_numeric(a = d3_number(array[i]))) numbers.push(a); + } else { + while (++i < n) if (d3_numeric(a = d3_number(f.call(array, array[i], i)))) numbers.push(a); + } + if (numbers.length) return d3.quantile(numbers.sort(d3_ascending), .5); + }; + d3.variance = function(array, f) { + var n = array.length, m = 0, a, d, s = 0, i = -1, j = 0; + if (arguments.length === 1) { + while (++i < n) { + if (d3_numeric(a = d3_number(array[i]))) { + d = a - m; + m += d / ++j; + s += d * (a - m); + } + } + } else { + while (++i < n) { + if (d3_numeric(a = d3_number(f.call(array, array[i], i)))) { + d = a - m; + m += d / ++j; + s += d * (a - m); + } + } + } + if (j > 1) return s / (j - 1); + }; + d3.deviation = function() { + var v = d3.variance.apply(this, arguments); + return v ? Math.sqrt(v) : v; + }; + function d3_bisector(compare) { + return { + left: function(a, x, lo, hi) { + if (arguments.length < 3) lo = 0; + if (arguments.length < 4) hi = a.length; + while (lo < hi) { + var mid = lo + hi >>> 1; + if (compare(a[mid], x) < 0) lo = mid + 1; else hi = mid; + } + return lo; + }, + right: function(a, x, lo, hi) { + if (arguments.length < 3) lo = 0; + if (arguments.length < 4) hi = a.length; + while (lo < hi) { + var mid = lo + hi >>> 1; + if (compare(a[mid], x) > 0) hi = mid; else lo = mid + 1; + } + return lo; + } + }; + } + var d3_bisect = d3_bisector(d3_ascending); + d3.bisectLeft = d3_bisect.left; + d3.bisect = d3.bisectRight = d3_bisect.right; + d3.bisector = function(f) { + return d3_bisector(f.length === 1 ? function(d, x) { + return d3_ascending(f(d), x); + } : f); + }; + d3.shuffle = function(array, i0, i1) { + if ((m = arguments.length) < 3) { + i1 = array.length; + if (m < 2) i0 = 0; + } + var m = i1 - i0, t, i; + while (m) { + i = Math.random() * m-- | 0; + t = array[m + i0], array[m + i0] = array[i + i0], array[i + i0] = t; + } + return array; + }; + d3.permute = function(array, indexes) { + var i = indexes.length, permutes = new Array(i); + while (i--) permutes[i] = array[indexes[i]]; + return permutes; + }; + d3.pairs = function(array) { + var i = 0, n = array.length - 1, p0, p1 = array[0], pairs = new Array(n < 0 ? 0 : n); + while (i < n) pairs[i] = [ p0 = p1, p1 = array[++i] ]; + return pairs; + }; + d3.transpose = function(matrix) { + if (!(n = matrix.length)) return []; + for (var i = -1, m = d3.min(matrix, d3_transposeLength), transpose = new Array(m); ++i < m; ) { + for (var j = -1, n, row = transpose[i] = new Array(n); ++j < n; ) { + row[j] = matrix[j][i]; + } + } + return transpose; + }; + function d3_transposeLength(d) { + return d.length; + } + d3.zip = function() { + return d3.transpose(arguments); + }; + d3.keys = function(map) { + var keys = []; + for (var key in map) keys.push(key); + return keys; + }; + d3.values = function(map) { + var values = []; + for (var key in map) values.push(map[key]); + return values; + }; + d3.entries = function(map) { + var entries = []; + for (var key in map) entries.push({ + key: key, + value: map[key] + }); + return entries; + }; + d3.merge = function(arrays) { + var n = arrays.length, m, i = -1, j = 0, merged, array; + while (++i < n) j += arrays[i].length; + merged = new Array(j); + while (--n >= 0) { + array = arrays[n]; + m = array.length; + while (--m >= 0) { + merged[--j] = array[m]; + } + } + return merged; + }; + var abs = Math.abs; + d3.range = function(start, stop, step) { + if (arguments.length < 3) { + step = 1; + if (arguments.length < 2) { + stop = start; + start = 0; + } + } + if ((stop - start) / step === Infinity) throw new Error("infinite range"); + var range = [], k = d3_range_integerScale(abs(step)), i = -1, j; + start *= k, stop *= k, step *= k; + if (step < 0) while ((j = start + step * ++i) > stop) range.push(j / k); else while ((j = start + step * ++i) < stop) range.push(j / k); + return range; + }; + function d3_range_integerScale(x) { + var k = 1; + while (x * k % 1) k *= 10; + return k; + } + function d3_class(ctor, properties) { + for (var key in properties) { + Object.defineProperty(ctor.prototype, key, { + value: properties[key], + enumerable: false + }); + } + } + d3.map = function(object, f) { + var map = new d3_Map(); + if (object instanceof d3_Map) { + object.forEach(function(key, value) { + map.set(key, value); + }); + } else if (Array.isArray(object)) { + var i = -1, n = object.length, o; + 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); + } else { + for (var key in object) map.set(key, object[key]); + } + return map; + }; + function d3_Map() { + this._ = Object.create(null); + } + var d3_map_proto = "__proto__", d3_map_zero = "\x00"; + d3_class(d3_Map, { + has: d3_map_has, + get: function(key) { + return this._[d3_map_escape(key)]; + }, + set: function(key, value) { + return this._[d3_map_escape(key)] = value; + }, + remove: d3_map_remove, + keys: d3_map_keys, + values: function() { + var values = []; + for (var key in this._) values.push(this._[key]); + return values; + }, + entries: function() { + var entries = []; + for (var key in this._) entries.push({ + key: d3_map_unescape(key), + value: this._[key] + }); + return entries; + }, + size: d3_map_size, + empty: d3_map_empty, + forEach: function(f) { + for (var key in this._) f.call(this, d3_map_unescape(key), this._[key]); + } + }); + function d3_map_escape(key) { + return (key += "") === d3_map_proto || key[0] === d3_map_zero ? d3_map_zero + key : key; + } + function d3_map_unescape(key) { + return (key += "")[0] === d3_map_zero ? key.slice(1) : key; + } + function d3_map_has(key) { + return d3_map_escape(key) in this._; + } + function d3_map_remove(key) { + return (key = d3_map_escape(key)) in this._ && delete this._[key]; + } + function d3_map_keys() { + var keys = []; + for (var key in this._) keys.push(d3_map_unescape(key)); + return keys; + } + function d3_map_size() { + var size = 0; + for (var key in this._) ++size; + return size; + } + function d3_map_empty() { + for (var key in this._) return false; + return true; + } + d3.nest = function() { + var nest = {}, keys = [], sortKeys = [], sortValues, rollup; + function map(mapType, array, depth) { + if (depth >= keys.length) return rollup ? rollup.call(nest, array) : sortValues ? array.sort(sortValues) : array; + var i = -1, n = array.length, key = keys[depth++], keyValue, object, setter, valuesByKey = new d3_Map(), values; + while (++i < n) { + if (values = valuesByKey.get(keyValue = key(object = array[i]))) { + values.push(object); + } else { + valuesByKey.set(keyValue, [ object ]); + } + } + if (mapType) { + object = mapType(); + setter = function(keyValue, values) { + object.set(keyValue, map(mapType, values, depth)); + }; + } else { + object = {}; + setter = function(keyValue, values) { + object[keyValue] = map(mapType, values, depth); + }; + } + valuesByKey.forEach(setter); + return object; + } + function entries(map, depth) { + if (depth >= keys.length) return map; + var array = [], sortKey = sortKeys[depth++]; + map.forEach(function(key, keyMap) { + array.push({ + key: key, + values: entries(keyMap, depth) + }); + }); + return sortKey ? array.sort(function(a, b) { + return sortKey(a.key, b.key); + }) : array; + } + nest.map = function(array, mapType) { + return map(mapType, array, 0); + }; + nest.entries = function(array) { + return entries(map(d3.map, array, 0), 0); + }; + nest.key = function(d) { + keys.push(d); + return nest; + }; + nest.sortKeys = function(order) { + sortKeys[keys.length - 1] = order; + return nest; + }; + nest.sortValues = function(order) { + sortValues = order; + return nest; + }; + nest.rollup = function(f) { + rollup = f; + return nest; + }; + return nest; + }; + d3.set = function(array) { + var set = new d3_Set(); + if (array) for (var i = 0, n = array.length; i < n; ++i) set.add(array[i]); + return set; + }; + function d3_Set() { + this._ = Object.create(null); + } + d3_class(d3_Set, { + has: d3_map_has, + add: function(key) { + this._[d3_map_escape(key += "")] = true; + return key; + }, + remove: d3_map_remove, + values: d3_map_keys, + size: d3_map_size, + empty: d3_map_empty, + forEach: function(f) { + for (var key in this._) f.call(this, d3_map_unescape(key)); + } + }); + d3.behavior = {}; + function d3_identity(d) { + return d; + } + d3.rebind = function(target, source) { + var i = 1, n = arguments.length, method; + while (++i < n) target[method = arguments[i]] = d3_rebind(target, source, source[method]); + return target; + }; + function d3_rebind(target, source, method) { + return function() { + var value = method.apply(source, arguments); + return value === source ? target : value; + }; + } + function d3_vendorSymbol(object, name) { + if (name in object) return name; + name = name.charAt(0).toUpperCase() + name.slice(1); + for (var i = 0, n = d3_vendorPrefixes.length; i < n; ++i) { + var prefixName = d3_vendorPrefixes[i] + name; + if (prefixName in object) return prefixName; + } + } + var d3_vendorPrefixes = [ "webkit", "ms", "moz", "Moz", "o", "O" ]; + function d3_noop() {} + d3.dispatch = function() { + var dispatch = new d3_dispatch(), i = -1, n = arguments.length; + while (++i < n) dispatch[arguments[i]] = d3_dispatch_event(dispatch); + return dispatch; + }; + function d3_dispatch() {} + d3_dispatch.prototype.on = function(type, listener) { + var i = type.indexOf("."), name = ""; + if (i >= 0) { + name = type.slice(i + 1); + type = type.slice(0, i); + } + if (type) return arguments.length < 2 ? this[type].on(name) : this[type].on(name, listener); + if (arguments.length === 2) { + if (listener == null) for (type in this) { + if (this.hasOwnProperty(type)) this[type].on(name, null); + } + return this; + } + }; + function d3_dispatch_event(dispatch) { + var listeners = [], listenerByName = new d3_Map(); + function event() { + var z = listeners, i = -1, n = z.length, l; + while (++i < n) if (l = z[i].on) l.apply(this, arguments); + return dispatch; + } + event.on = function(name, listener) { + var l = listenerByName.get(name), i; + if (arguments.length < 2) return l && l.on; + if (l) { + l.on = null; + listeners = listeners.slice(0, i = listeners.indexOf(l)).concat(listeners.slice(i + 1)); + listenerByName.remove(name); + } + if (listener) listeners.push(listenerByName.set(name, { + on: listener + })); + return dispatch; + }; + return event; + } + d3.event = null; + function d3_eventPreventDefault() { + d3.event.preventDefault(); + } + function d3_eventSource() { + var e = d3.event, s; + while (s = e.sourceEvent) e = s; + return e; + } + function d3_eventDispatch(target) { + var dispatch = new d3_dispatch(), i = 0, n = arguments.length; + while (++i < n) dispatch[arguments[i]] = d3_dispatch_event(dispatch); + dispatch.of = function(thiz, argumentz) { + return function(e1) { + try { + var e0 = e1.sourceEvent = d3.event; + e1.target = target; + d3.event = e1; + dispatch[e1.type].apply(thiz, argumentz); + } finally { + d3.event = e0; + } + }; + }; + return dispatch; + } + d3.requote = function(s) { + return s.replace(d3_requote_re, "\\$&"); + }; + var d3_requote_re = /[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g; + var d3_subclass = {}.__proto__ ? function(object, prototype) { + object.__proto__ = prototype; + } : function(object, prototype) { + for (var property in prototype) object[property] = prototype[property]; + }; + function d3_selection(groups) { + d3_subclass(groups, d3_selectionPrototype); + return groups; + } + var d3_select = function(s, n) { + return n.querySelector(s); + }, d3_selectAll = function(s, n) { + return n.querySelectorAll(s); + }, d3_selectMatches = function(n, s) { + var d3_selectMatcher = n.matches || n[d3_vendorSymbol(n, "matchesSelector")]; + d3_selectMatches = function(n, s) { + return d3_selectMatcher.call(n, s); + }; + return d3_selectMatches(n, s); + }; + if (typeof Sizzle === "function") { + d3_select = function(s, n) { + return Sizzle(s, n)[0] || null; + }; + d3_selectAll = Sizzle; + d3_selectMatches = Sizzle.matchesSelector; + } + d3.selection = function() { + return d3.select(d3_document.documentElement); + }; + var d3_selectionPrototype = d3.selection.prototype = []; + d3_selectionPrototype.select = function(selector) { + var subgroups = [], subgroup, subnode, group, node; + selector = d3_selection_selector(selector); + for (var j = -1, m = this.length; ++j < m; ) { + subgroups.push(subgroup = []); + subgroup.parentNode = (group = this[j]).parentNode; + for (var i = -1, n = group.length; ++i < n; ) { + if (node = group[i]) { + subgroup.push(subnode = selector.call(node, node.__data__, i, j)); + if (subnode && "__data__" in node) subnode.__data__ = node.__data__; + } else { + subgroup.push(null); + } + } + } + return d3_selection(subgroups); + }; + function d3_selection_selector(selector) { + return typeof selector === "function" ? selector : function() { + return d3_select(selector, this); + }; + } + d3_selectionPrototype.selectAll = function(selector) { + var subgroups = [], subgroup, node; + selector = d3_selection_selectorAll(selector); + for (var j = -1, m = this.length; ++j < m; ) { + for (var group = this[j], i = -1, n = group.length; ++i < n; ) { + if (node = group[i]) { + subgroups.push(subgroup = d3_array(selector.call(node, node.__data__, i, j))); + subgroup.parentNode = node; + } + } + } + return d3_selection(subgroups); + }; + function d3_selection_selectorAll(selector) { + return typeof selector === "function" ? selector : function() { + return d3_selectAll(selector, this); + }; + } + var d3_nsXhtml = "http://www.w3.org/1999/xhtml"; + var d3_nsPrefix = { + svg: "http://www.w3.org/2000/svg", + xhtml: d3_nsXhtml, + xlink: "http://www.w3.org/1999/xlink", + xml: "http://www.w3.org/XML/1998/namespace", + xmlns: "http://www.w3.org/2000/xmlns/" + }; + d3.ns = { + prefix: d3_nsPrefix, + qualify: function(name) { + var i = name.indexOf(":"), prefix = name; + if (i >= 0 && (prefix = name.slice(0, i)) !== "xmlns") name = name.slice(i + 1); + return d3_nsPrefix.hasOwnProperty(prefix) ? { + space: d3_nsPrefix[prefix], + local: name + } : name; + } + }; + d3_selectionPrototype.attr = function(name, value) { + if (arguments.length < 2) { + if (typeof name === "string") { + var node = this.node(); + name = d3.ns.qualify(name); + return name.local ? node.getAttributeNS(name.space, name.local) : node.getAttribute(name); + } + for (value in name) this.each(d3_selection_attr(value, name[value])); + return this; + } + return this.each(d3_selection_attr(name, value)); + }; + function d3_selection_attr(name, value) { + name = d3.ns.qualify(name); + function attrNull() { + this.removeAttribute(name); + } + function attrNullNS() { + this.removeAttributeNS(name.space, name.local); + } + function attrConstant() { + this.setAttribute(name, value); + } + function attrConstantNS() { + this.setAttributeNS(name.space, name.local, value); + } + function attrFunction() { + var x = value.apply(this, arguments); + if (x == null) this.removeAttribute(name); else this.setAttribute(name, x); + } + function attrFunctionNS() { + var x = value.apply(this, arguments); + if (x == null) this.removeAttributeNS(name.space, name.local); else this.setAttributeNS(name.space, name.local, x); + } + return value == null ? name.local ? attrNullNS : attrNull : typeof value === "function" ? name.local ? attrFunctionNS : attrFunction : name.local ? attrConstantNS : attrConstant; + } + function d3_collapse(s) { + return s.trim().replace(/\s+/g, " "); + } + d3_selectionPrototype.classed = function(name, value) { + if (arguments.length < 2) { + if (typeof name === "string") { + var node = this.node(), n = (name = d3_selection_classes(name)).length, i = -1; + if (value = node.classList) { + while (++i < n) if (!value.contains(name[i])) return false; + } else { + value = node.getAttribute("class"); + while (++i < n) if (!d3_selection_classedRe(name[i]).test(value)) return false; + } + return true; + } + for (value in name) this.each(d3_selection_classed(value, name[value])); + return this; + } + return this.each(d3_selection_classed(name, value)); + }; + function d3_selection_classedRe(name) { + return new RegExp("(?:^|\\s+)" + d3.requote(name) + "(?:\\s+|$)", "g"); + } + function d3_selection_classes(name) { + return (name + "").trim().split(/^|\s+/); + } + function d3_selection_classed(name, value) { + name = d3_selection_classes(name).map(d3_selection_classedName); + var n = name.length; + function classedConstant() { + var i = -1; + while (++i < n) name[i](this, value); + } + function classedFunction() { + var i = -1, x = value.apply(this, arguments); + while (++i < n) name[i](this, x); + } + return typeof value === "function" ? classedFunction : classedConstant; + } + function d3_selection_classedName(name) { + var re = d3_selection_classedRe(name); + return function(node, value) { + if (c = node.classList) return value ? c.add(name) : c.remove(name); + var c = node.getAttribute("class") || ""; + if (value) { + re.lastIndex = 0; + if (!re.test(c)) node.setAttribute("class", d3_collapse(c + " " + name)); + } else { + node.setAttribute("class", d3_collapse(c.replace(re, " "))); + } + }; + } + d3_selectionPrototype.style = function(name, value, priority) { + var n = arguments.length; + if (n < 3) { + if (typeof name !== "string") { + if (n < 2) value = ""; + for (priority in name) this.each(d3_selection_style(priority, name[priority], value)); + return this; + } + if (n < 2) { + var node = this.node(); + return d3_window(node).getComputedStyle(node, null).getPropertyValue(name); + } + priority = ""; + } + return this.each(d3_selection_style(name, value, priority)); + }; + function d3_selection_style(name, value, priority) { + function styleNull() { + this.style.removeProperty(name); + } + function styleConstant() { + this.style.setProperty(name, value, priority); + } + function styleFunction() { + var x = value.apply(this, arguments); + if (x == null) this.style.removeProperty(name); else this.style.setProperty(name, x, priority); + } + return value == null ? styleNull : typeof value === "function" ? styleFunction : styleConstant; + } + d3_selectionPrototype.property = function(name, value) { + if (arguments.length < 2) { + if (typeof name === "string") return this.node()[name]; + for (value in name) this.each(d3_selection_property(value, name[value])); + return this; + } + return this.each(d3_selection_property(name, value)); + }; + function d3_selection_property(name, value) { + function propertyNull() { + delete this[name]; + } + function propertyConstant() { + this[name] = value; + } + function propertyFunction() { + var x = value.apply(this, arguments); + if (x == null) delete this[name]; else this[name] = x; + } + return value == null ? propertyNull : typeof value === "function" ? propertyFunction : propertyConstant; + } + d3_selectionPrototype.text = function(value) { + return arguments.length ? this.each(typeof value === "function" ? function() { + var v = value.apply(this, arguments); + this.textContent = v == null ? "" : v; + } : value == null ? function() { + this.textContent = ""; + } : function() { + this.textContent = value; + }) : this.node().textContent; + }; + d3_selectionPrototype.html = function(value) { + return arguments.length ? this.each(typeof value === "function" ? function() { + var v = value.apply(this, arguments); + this.innerHTML = v == null ? "" : v; + } : value == null ? function() { + this.innerHTML = ""; + } : function() { + this.innerHTML = value; + }) : this.node().innerHTML; + }; + d3_selectionPrototype.append = function(name) { + name = d3_selection_creator(name); + return this.select(function() { + return this.appendChild(name.apply(this, arguments)); + }); + }; + function d3_selection_creator(name) { + function create() { + var document = this.ownerDocument, namespace = this.namespaceURI; + return namespace === d3_nsXhtml && document.documentElement.namespaceURI === d3_nsXhtml ? document.createElement(name) : document.createElementNS(namespace, name); + } + function createNS() { + return this.ownerDocument.createElementNS(name.space, name.local); + } + return typeof name === "function" ? name : (name = d3.ns.qualify(name)).local ? createNS : create; + } + d3_selectionPrototype.insert = function(name, before) { + name = d3_selection_creator(name); + before = d3_selection_selector(before); + return this.select(function() { + return this.insertBefore(name.apply(this, arguments), before.apply(this, arguments) || null); + }); + }; + d3_selectionPrototype.remove = function() { + return this.each(d3_selectionRemove); + }; + function d3_selectionRemove() { + var parent = this.parentNode; + if (parent) parent.removeChild(this); + } + d3_selectionPrototype.data = function(value, key) { + var i = -1, n = this.length, group, node; + if (!arguments.length) { + value = new Array(n = (group = this[0]).length); + while (++i < n) { + if (node = group[i]) { + value[i] = node.__data__; + } + } + return value; + } + function bind(group, groupData) { + 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; + if (key) { + var nodeByKeyValue = new d3_Map(), keyValues = new Array(n), keyValue; + for (i = -1; ++i < n; ) { + if (node = group[i]) { + if (nodeByKeyValue.has(keyValue = key.call(node, node.__data__, i))) { + exitNodes[i] = node; + } else { + nodeByKeyValue.set(keyValue, node); + } + keyValues[i] = keyValue; + } + } + for (i = -1; ++i < m; ) { + if (!(node = nodeByKeyValue.get(keyValue = key.call(groupData, nodeData = groupData[i], i)))) { + enterNodes[i] = d3_selection_dataNode(nodeData); + } else if (node !== true) { + updateNodes[i] = node; + node.__data__ = nodeData; + } + nodeByKeyValue.set(keyValue, true); + } + for (i = -1; ++i < n; ) { + if (i in keyValues && nodeByKeyValue.get(keyValues[i]) !== true) { + exitNodes[i] = group[i]; + } + } + } else { + for (i = -1; ++i < n0; ) { + node = group[i]; + nodeData = groupData[i]; + if (node) { + node.__data__ = nodeData; + updateNodes[i] = node; + } else { + enterNodes[i] = d3_selection_dataNode(nodeData); + } + } + for (;i < m; ++i) { + enterNodes[i] = d3_selection_dataNode(groupData[i]); + } + for (;i < n; ++i) { + exitNodes[i] = group[i]; + } + } + enterNodes.update = updateNodes; + enterNodes.parentNode = updateNodes.parentNode = exitNodes.parentNode = group.parentNode; + enter.push(enterNodes); + update.push(updateNodes); + exit.push(exitNodes); + } + var enter = d3_selection_enter([]), update = d3_selection([]), exit = d3_selection([]); + if (typeof value === "function") { + while (++i < n) { + bind(group = this[i], value.call(group, group.parentNode.__data__, i)); + } + } else { + while (++i < n) { + bind(group = this[i], value); + } + } + update.enter = function() { + return enter; + }; + update.exit = function() { + return exit; + }; + return update; + }; + function d3_selection_dataNode(data) { + return { + __data__: data + }; + } + d3_selectionPrototype.datum = function(value) { + return arguments.length ? this.property("__data__", value) : this.property("__data__"); + }; + d3_selectionPrototype.filter = function(filter) { + var subgroups = [], subgroup, group, node; + if (typeof filter !== "function") filter = d3_selection_filter(filter); + for (var j = 0, m = this.length; j < m; j++) { + subgroups.push(subgroup = []); + subgroup.parentNode = (group = this[j]).parentNode; + for (var i = 0, n = group.length; i < n; i++) { + if ((node = group[i]) && filter.call(node, node.__data__, i, j)) { + subgroup.push(node); + } + } + } + return d3_selection(subgroups); + }; + function d3_selection_filter(selector) { + return function() { + return d3_selectMatches(this, selector); + }; + } + d3_selectionPrototype.order = function() { + for (var j = -1, m = this.length; ++j < m; ) { + for (var group = this[j], i = group.length - 1, next = group[i], node; --i >= 0; ) { + if (node = group[i]) { + if (next && next !== node.nextSibling) next.parentNode.insertBefore(node, next); + next = node; + } + } + } + return this; + }; + d3_selectionPrototype.sort = function(comparator) { + comparator = d3_selection_sortComparator.apply(this, arguments); + for (var j = -1, m = this.length; ++j < m; ) this[j].sort(comparator); + return this.order(); + }; + function d3_selection_sortComparator(comparator) { + if (!arguments.length) comparator = d3_ascending; + return function(a, b) { + return a && b ? comparator(a.__data__, b.__data__) : !a - !b; + }; + } + d3_selectionPrototype.each = function(callback) { + return d3_selection_each(this, function(node, i, j) { + callback.call(node, node.__data__, i, j); + }); + }; + function d3_selection_each(groups, callback) { + for (var j = 0, m = groups.length; j < m; j++) { + for (var group = groups[j], i = 0, n = group.length, node; i < n; i++) { + if (node = group[i]) callback(node, i, j); + } + } + return groups; + } + d3_selectionPrototype.call = function(callback) { + var args = d3_array(arguments); + callback.apply(args[0] = this, args); + return this; + }; + d3_selectionPrototype.empty = function() { + return !this.node(); + }; + d3_selectionPrototype.node = function() { + for (var j = 0, m = this.length; j < m; j++) { + for (var group = this[j], i = 0, n = group.length; i < n; i++) { + var node = group[i]; + if (node) return node; + } + } + return null; + }; + d3_selectionPrototype.size = function() { + var n = 0; + d3_selection_each(this, function() { + ++n; + }); + return n; + }; + function d3_selection_enter(selection) { + d3_subclass(selection, d3_selection_enterPrototype); + return selection; + } + var d3_selection_enterPrototype = []; + d3.selection.enter = d3_selection_enter; + d3.selection.enter.prototype = d3_selection_enterPrototype; + d3_selection_enterPrototype.append = d3_selectionPrototype.append; + d3_selection_enterPrototype.empty = d3_selectionPrototype.empty; + d3_selection_enterPrototype.node = d3_selectionPrototype.node; + d3_selection_enterPrototype.call = d3_selectionPrototype.call; + d3_selection_enterPrototype.size = d3_selectionPrototype.size; + d3_selection_enterPrototype.select = function(selector) { + var subgroups = [], subgroup, subnode, upgroup, group, node; + for (var j = -1, m = this.length; ++j < m; ) { + upgroup = (group = this[j]).update; + subgroups.push(subgroup = []); + subgroup.parentNode = group.parentNode; + for (var i = -1, n = group.length; ++i < n; ) { + if (node = group[i]) { + subgroup.push(upgroup[i] = subnode = selector.call(group.parentNode, node.__data__, i, j)); + subnode.__data__ = node.__data__; + } else { + subgroup.push(null); + } + } + } + return d3_selection(subgroups); + }; + d3_selection_enterPrototype.insert = function(name, before) { + if (arguments.length < 2) before = d3_selection_enterInsertBefore(this); + return d3_selectionPrototype.insert.call(this, name, before); + }; + function d3_selection_enterInsertBefore(enter) { + var i0, j0; + return function(d, i, j) { + var group = enter[j].update, n = group.length, node; + if (j != j0) j0 = j, i0 = 0; + if (i >= i0) i0 = i + 1; + while (!(node = group[i0]) && ++i0 < n) ; + return node; + }; + } + d3.select = function(node) { + var group; + if (typeof node === "string") { + group = [ d3_select(node, d3_document) ]; + group.parentNode = d3_document.documentElement; + } else { + group = [ node ]; + group.parentNode = d3_documentElement(node); + } + return d3_selection([ group ]); + }; + d3.selectAll = function(nodes) { + var group; + if (typeof nodes === "string") { + group = d3_array(d3_selectAll(nodes, d3_document)); + group.parentNode = d3_document.documentElement; + } else { + group = d3_array(nodes); + group.parentNode = null; + } + return d3_selection([ group ]); + }; + d3_selectionPrototype.on = function(type, listener, capture) { + var n = arguments.length; + if (n < 3) { + if (typeof type !== "string") { + if (n < 2) listener = false; + for (capture in type) this.each(d3_selection_on(capture, type[capture], listener)); + return this; + } + if (n < 2) return (n = this.node()["__on" + type]) && n._; + capture = false; + } + return this.each(d3_selection_on(type, listener, capture)); + }; + function d3_selection_on(type, listener, capture) { + var name = "__on" + type, i = type.indexOf("."), wrap = d3_selection_onListener; + if (i > 0) type = type.slice(0, i); + var filter = d3_selection_onFilters.get(type); + if (filter) type = filter, wrap = d3_selection_onFilter; + function onRemove() { + var l = this[name]; + if (l) { + this.removeEventListener(type, l, l.$); + delete this[name]; + } + } + function onAdd() { + var l = wrap(listener, d3_array(arguments)); + onRemove.call(this); + this.addEventListener(type, this[name] = l, l.$ = capture); + l._ = listener; + } + function removeAll() { + var re = new RegExp("^__on([^.]+)" + d3.requote(type) + "$"), match; + for (var name in this) { + if (match = name.match(re)) { + var l = this[name]; + this.removeEventListener(match[1], l, l.$); + delete this[name]; + } + } + } + return i ? listener ? onAdd : onRemove : listener ? d3_noop : removeAll; + } + var d3_selection_onFilters = d3.map({ + mouseenter: "mouseover", + mouseleave: "mouseout" + }); + if (d3_document) { + d3_selection_onFilters.forEach(function(k) { + if ("on" + k in d3_document) d3_selection_onFilters.remove(k); + }); + } + function d3_selection_onListener(listener, argumentz) { + return function(e) { + var o = d3.event; + d3.event = e; + argumentz[0] = this.__data__; + try { + listener.apply(this, argumentz); + } finally { + d3.event = o; + } + }; + } + function d3_selection_onFilter(listener, argumentz) { + var l = d3_selection_onListener(listener, argumentz); + return function(e) { + var target = this, related = e.relatedTarget; + if (!related || related !== target && !(related.compareDocumentPosition(target) & 8)) { + l.call(target, e); + } + }; + } + var d3_event_dragSelect, d3_event_dragId = 0; + function d3_event_dragSuppress(node) { + 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); + if (d3_event_dragSelect == null) { + d3_event_dragSelect = "onselectstart" in node ? false : d3_vendorSymbol(node.style, "userSelect"); + } + if (d3_event_dragSelect) { + var style = d3_documentElement(node).style, select = style[d3_event_dragSelect]; + style[d3_event_dragSelect] = "none"; + } + return function(suppressClick) { + w.on(name, null); + if (d3_event_dragSelect) style[d3_event_dragSelect] = select; + if (suppressClick) { + var off = function() { + w.on(click, null); + }; + w.on(click, function() { + d3_eventPreventDefault(); + off(); + }, true); + setTimeout(off, 0); + } + }; + } + d3.mouse = function(container) { + return d3_mousePoint(container, d3_eventSource()); + }; + var d3_mouse_bug44083 = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0; + function d3_mousePoint(container, e) { + if (e.changedTouches) e = e.changedTouches[0]; + var svg = container.ownerSVGElement || container; + if (svg.createSVGPoint) { + var point = svg.createSVGPoint(); + if (d3_mouse_bug44083 < 0) { + var window = d3_window(container); + if (window.scrollX || window.scrollY) { + svg = d3.select("body").append("svg").style({ + position: "absolute", + top: 0, + left: 0, + margin: 0, + padding: 0, + border: "none" + }, "important"); + var ctm = svg[0][0].getScreenCTM(); + d3_mouse_bug44083 = !(ctm.f || ctm.e); + svg.remove(); + } + } + if (d3_mouse_bug44083) point.x = e.pageX, point.y = e.pageY; else point.x = e.clientX, + point.y = e.clientY; + point = point.matrixTransform(container.getScreenCTM().inverse()); + return [ point.x, point.y ]; + } + var rect = container.getBoundingClientRect(); + return [ e.clientX - rect.left - container.clientLeft, e.clientY - rect.top - container.clientTop ]; + } + d3.touch = function(container, touches, identifier) { + if (arguments.length < 3) identifier = touches, touches = d3_eventSource().changedTouches; + if (touches) for (var i = 0, n = touches.length, touch; i < n; ++i) { + if ((touch = touches[i]).identifier === identifier) { + return d3_mousePoint(container, touch); + } + } + }; + d3.behavior.drag = function() { + 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"); + function drag() { + this.on("mousedown.drag", mousedown).on("touchstart.drag", touchstart); + } + function dragstart(id, position, subject, move, end) { + return function() { + 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); + if (origin) { + dragOffset = origin.apply(that, arguments); + dragOffset = [ dragOffset.x - position0[0], dragOffset.y - position0[1] ]; + } else { + dragOffset = [ 0, 0 ]; + } + dispatch({ + type: "dragstart" + }); + function moved() { + var position1 = position(parent, dragId), dx, dy; + if (!position1) return; + dx = position1[0] - position0[0]; + dy = position1[1] - position0[1]; + dragged |= dx | dy; + position0 = position1; + dispatch({ + type: "drag", + x: position1[0] + dragOffset[0], + y: position1[1] + dragOffset[1], + dx: dx, + dy: dy + }); + } + function ended() { + if (!position(parent, dragId)) return; + dragSubject.on(move + dragName, null).on(end + dragName, null); + dragRestore(dragged); + dispatch({ + type: "dragend" + }); + } + }; + } + drag.origin = function(x) { + if (!arguments.length) return origin; + origin = x; + return drag; + }; + return d3.rebind(drag, event, "on"); + }; + function d3_behavior_dragTouchId() { + return d3.event.changedTouches[0].identifier; + } + d3.touches = function(container, touches) { + if (arguments.length < 2) touches = d3_eventSource().touches; + return touches ? d3_array(touches).map(function(touch) { + var point = d3_mousePoint(container, touch); + point.identifier = touch.identifier; + return point; + }) : []; + }; + var ε = 1e-6, ε2 = ε * ε, π = Math.PI, τ = 2 * π, τε = τ - ε, halfπ = π / 2, d3_radians = π / 180, d3_degrees = 180 / π; + function d3_sgn(x) { + return x > 0 ? 1 : x < 0 ? -1 : 0; + } + function d3_cross2d(a, b, c) { + return (b[0] - a[0]) * (c[1] - a[1]) - (b[1] - a[1]) * (c[0] - a[0]); + } + function d3_acos(x) { + return x > 1 ? 0 : x < -1 ? π : Math.acos(x); + } + function d3_asin(x) { + return x > 1 ? halfπ : x < -1 ? -halfπ : Math.asin(x); + } + function d3_sinh(x) { + return ((x = Math.exp(x)) - 1 / x) / 2; + } + function d3_cosh(x) { + return ((x = Math.exp(x)) + 1 / x) / 2; + } + function d3_tanh(x) { + return ((x = Math.exp(2 * x)) - 1) / (x + 1); + } + function d3_haversin(x) { + return (x = Math.sin(x / 2)) * x; + } + var ρ = Math.SQRT2, ρ2 = 2, ρ4 = 4; + d3.interpolateZoom = function(p0, p1) { + 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; + if (d2 < ε2) { + S = Math.log(w1 / w0) / ρ; + i = function(t) { + return [ ux0 + t * dx, uy0 + t * dy, w0 * Math.exp(ρ * t * S) ]; + }; + } else { + 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); + S = (r1 - r0) / ρ; + i = function(t) { + var s = t * S, coshr0 = d3_cosh(r0), u = w0 / (ρ2 * d1) * (coshr0 * d3_tanh(ρ * s + r0) - d3_sinh(r0)); + return [ ux0 + u * dx, uy0 + u * dy, w0 * coshr0 / d3_cosh(ρ * s + r0) ]; + }; + } + i.duration = S * 1e3; + return i; + }; + d3.behavior.zoom = function() { + var view = { + x: 0, + y: 0, + k: 1 + }, 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; + if (!d3_behavior_zoomWheel) { + d3_behavior_zoomWheel = "onwheel" in d3_document ? (d3_behavior_zoomDelta = function() { + return -d3.event.deltaY * (d3.event.deltaMode ? 120 : 1); + }, "wheel") : "onmousewheel" in d3_document ? (d3_behavior_zoomDelta = function() { + return d3.event.wheelDelta; + }, "mousewheel") : (d3_behavior_zoomDelta = function() { + return -d3.event.detail; + }, "MozMousePixelScroll"); + } + function zoom(g) { + g.on(mousedown, mousedowned).on(d3_behavior_zoomWheel + ".zoom", mousewheeled).on("dblclick.zoom", dblclicked).on(touchstart, touchstarted); + } + zoom.event = function(g) { + g.each(function() { + var dispatch = event.of(this, arguments), view1 = view; + if (d3_transitionInheritId) { + d3.select(this).transition().each("start.zoom", function() { + view = this.__chart__ || { + x: 0, + y: 0, + k: 1 + }; + zoomstarted(dispatch); + }).tween("zoom:zoom", function() { + 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 ]); + return function(t) { + var l = i(t), k = dx / l[2]; + this.__chart__ = view = { + x: cx - l[0] * k, + y: cy - l[1] * k, + k: k + }; + zoomed(dispatch); + }; + }).each("interrupt.zoom", function() { + zoomended(dispatch); + }).each("end.zoom", function() { + zoomended(dispatch); + }); + } else { + this.__chart__ = view; + zoomstarted(dispatch); + zoomed(dispatch); + zoomended(dispatch); + } + }); + }; + zoom.translate = function(_) { + if (!arguments.length) return [ view.x, view.y ]; + view = { + x: +_[0], + y: +_[1], + k: view.k + }; + rescale(); + return zoom; + }; + zoom.scale = function(_) { + if (!arguments.length) return view.k; + view = { + x: view.x, + y: view.y, + k: null + }; + scaleTo(+_); + rescale(); + return zoom; + }; + zoom.scaleExtent = function(_) { + if (!arguments.length) return scaleExtent; + scaleExtent = _ == null ? d3_behavior_zoomInfinity : [ +_[0], +_[1] ]; + return zoom; + }; + zoom.center = function(_) { + if (!arguments.length) return center; + center = _ && [ +_[0], +_[1] ]; + return zoom; + }; + zoom.size = function(_) { + if (!arguments.length) return size; + size = _ && [ +_[0], +_[1] ]; + return zoom; + }; + zoom.duration = function(_) { + if (!arguments.length) return duration; + duration = +_; + return zoom; + }; + zoom.x = function(z) { + if (!arguments.length) return x1; + x1 = z; + x0 = z.copy(); + view = { + x: 0, + y: 0, + k: 1 + }; + return zoom; + }; + zoom.y = function(z) { + if (!arguments.length) return y1; + y1 = z; + y0 = z.copy(); + view = { + x: 0, + y: 0, + k: 1 + }; + return zoom; + }; + function location(p) { + return [ (p[0] - view.x) / view.k, (p[1] - view.y) / view.k ]; + } + function point(l) { + return [ l[0] * view.k + view.x, l[1] * view.k + view.y ]; + } + function scaleTo(s) { + view.k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], s)); + } + function translateTo(p, l) { + l = point(l); + view.x += p[0] - l[0]; + view.y += p[1] - l[1]; + } + function zoomTo(that, p, l, k) { + that.__chart__ = { + x: view.x, + y: view.y, + k: view.k + }; + scaleTo(Math.pow(2, k)); + translateTo(center0 = p, l); + that = d3.select(that); + if (duration > 0) that = that.transition().duration(duration); + that.call(zoom.event); + } + function rescale() { + if (x1) x1.domain(x0.range().map(function(x) { + return (x - view.x) / view.k; + }).map(x0.invert)); + if (y1) y1.domain(y0.range().map(function(y) { + return (y - view.y) / view.k; + }).map(y0.invert)); + } + function zoomstarted(dispatch) { + if (!zooming++) dispatch({ + type: "zoomstart" + }); + } + function zoomed(dispatch) { + rescale(); + dispatch({ + type: "zoom", + scale: view.k, + translate: [ view.x, view.y ] + }); + } + function zoomended(dispatch) { + if (!--zooming) dispatch({ + type: "zoomend" + }), center0 = null; + } + function mousedowned() { + 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); + d3_selection_interrupt.call(that); + zoomstarted(dispatch); + function moved() { + dragged = 1; + translateTo(d3.mouse(that), location0); + zoomed(dispatch); + } + function ended() { + subject.on(mousemove, null).on(mouseup, null); + dragRestore(dragged); + zoomended(dispatch); + } + } + function touchstarted() { + 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); + started(); + zoomstarted(dispatch); + subject.on(mousedown, null).on(touchstart, started); + function relocate() { + var touches = d3.touches(that); + scale0 = view.k; + touches.forEach(function(t) { + if (t.identifier in locations0) locations0[t.identifier] = location(t); + }); + return touches; + } + function started() { + var target = d3.event.target; + d3.select(target).on(touchmove, moved).on(touchend, ended); + targets.push(target); + var changed = d3.event.changedTouches; + for (var i = 0, n = changed.length; i < n; ++i) { + locations0[changed[i].identifier] = null; + } + var touches = relocate(), now = Date.now(); + if (touches.length === 1) { + if (now - touchtime < 500) { + var p = touches[0]; + zoomTo(that, p, locations0[p.identifier], Math.floor(Math.log(view.k) / Math.LN2) + 1); + d3_eventPreventDefault(); + } + touchtime = now; + } else if (touches.length > 1) { + var p = touches[0], q = touches[1], dx = p[0] - q[0], dy = p[1] - q[1]; + distance0 = dx * dx + dy * dy; + } + } + function moved() { + var touches = d3.touches(that), p0, l0, p1, l1; + d3_selection_interrupt.call(that); + for (var i = 0, n = touches.length; i < n; ++i, l1 = null) { + p1 = touches[i]; + if (l1 = locations0[p1.identifier]) { + if (l0) break; + p0 = p1, l0 = l1; + } + } + if (l1) { + var distance1 = (distance1 = p1[0] - p0[0]) * distance1 + (distance1 = p1[1] - p0[1]) * distance1, scale1 = distance0 && Math.sqrt(distance1 / distance0); + p0 = [ (p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2 ]; + l0 = [ (l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2 ]; + scaleTo(scale1 * scale0); + } + touchtime = null; + translateTo(p0, l0); + zoomed(dispatch); + } + function ended() { + if (d3.event.touches.length) { + var changed = d3.event.changedTouches; + for (var i = 0, n = changed.length; i < n; ++i) { + delete locations0[changed[i].identifier]; + } + for (var identifier in locations0) { + return void relocate(); + } + } + d3.selectAll(targets).on(zoomName, null); + subject.on(mousedown, mousedowned).on(touchstart, touchstarted); + dragRestore(); + zoomended(dispatch); + } + } + function mousewheeled() { + var dispatch = event.of(this, arguments); + if (mousewheelTimer) clearTimeout(mousewheelTimer); else d3_selection_interrupt.call(this), + translate0 = location(center0 = center || d3.mouse(this)), zoomstarted(dispatch); + mousewheelTimer = setTimeout(function() { + mousewheelTimer = null; + zoomended(dispatch); + }, 50); + d3_eventPreventDefault(); + scaleTo(Math.pow(2, d3_behavior_zoomDelta() * .002) * view.k); + translateTo(center0, translate0); + zoomed(dispatch); + } + function dblclicked() { + var p = d3.mouse(this), k = Math.log(view.k) / Math.LN2; + zoomTo(this, p, location(p), d3.event.shiftKey ? Math.ceil(k) - 1 : Math.floor(k) + 1); + } + return d3.rebind(zoom, event, "on"); + }; + var d3_behavior_zoomInfinity = [ 0, Infinity ], d3_behavior_zoomDelta, d3_behavior_zoomWheel; + d3.color = d3_color; + function d3_color() {} + d3_color.prototype.toString = function() { + return this.rgb() + ""; + }; + d3.hsl = d3_hsl; + function d3_hsl(h, s, l) { + 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); + } + var d3_hslPrototype = d3_hsl.prototype = new d3_color(); + d3_hslPrototype.brighter = function(k) { + k = Math.pow(.7, arguments.length ? k : 1); + return new d3_hsl(this.h, this.s, this.l / k); + }; + d3_hslPrototype.darker = function(k) { + k = Math.pow(.7, arguments.length ? k : 1); + return new d3_hsl(this.h, this.s, k * this.l); + }; + d3_hslPrototype.rgb = function() { + return d3_hsl_rgb(this.h, this.s, this.l); + }; + function d3_hsl_rgb(h, s, l) { + var m1, m2; + h = isNaN(h) ? 0 : (h %= 360) < 0 ? h + 360 : h; + s = isNaN(s) ? 0 : s < 0 ? 0 : s > 1 ? 1 : s; + l = l < 0 ? 0 : l > 1 ? 1 : l; + m2 = l <= .5 ? l * (1 + s) : l + s - l * s; + m1 = 2 * l - m2; + function v(h) { + if (h > 360) h -= 360; else if (h < 0) h += 360; + if (h < 60) return m1 + (m2 - m1) * h / 60; + if (h < 180) return m2; + if (h < 240) return m1 + (m2 - m1) * (240 - h) / 60; + return m1; + } + function vv(h) { + return Math.round(v(h) * 255); + } + return new d3_rgb(vv(h + 120), vv(h), vv(h - 120)); + } + d3.hcl = d3_hcl; + function d3_hcl(h, c, l) { + 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); + } + var d3_hclPrototype = d3_hcl.prototype = new d3_color(); + d3_hclPrototype.brighter = function(k) { + return new d3_hcl(this.h, this.c, Math.min(100, this.l + d3_lab_K * (arguments.length ? k : 1))); + }; + d3_hclPrototype.darker = function(k) { + return new d3_hcl(this.h, this.c, Math.max(0, this.l - d3_lab_K * (arguments.length ? k : 1))); + }; + d3_hclPrototype.rgb = function() { + return d3_hcl_lab(this.h, this.c, this.l).rgb(); + }; + function d3_hcl_lab(h, c, l) { + if (isNaN(h)) h = 0; + if (isNaN(c)) c = 0; + return new d3_lab(l, Math.cos(h *= d3_radians) * c, Math.sin(h) * c); + } + d3.lab = d3_lab; + function d3_lab(l, a, b) { + 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); + } + var d3_lab_K = 18; + var d3_lab_X = .95047, d3_lab_Y = 1, d3_lab_Z = 1.08883; + var d3_labPrototype = d3_lab.prototype = new d3_color(); + d3_labPrototype.brighter = function(k) { + return new d3_lab(Math.min(100, this.l + d3_lab_K * (arguments.length ? k : 1)), this.a, this.b); + }; + d3_labPrototype.darker = function(k) { + return new d3_lab(Math.max(0, this.l - d3_lab_K * (arguments.length ? k : 1)), this.a, this.b); + }; + d3_labPrototype.rgb = function() { + return d3_lab_rgb(this.l, this.a, this.b); + }; + function d3_lab_rgb(l, a, b) { + var y = (l + 16) / 116, x = y + a / 500, z = y - b / 200; + x = d3_lab_xyz(x) * d3_lab_X; + y = d3_lab_xyz(y) * d3_lab_Y; + z = d3_lab_xyz(z) * d3_lab_Z; + 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)); + } + function d3_lab_hcl(l, a, b) { + 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); + } + function d3_lab_xyz(x) { + return x > .206893034 ? x * x * x : (x - 4 / 29) / 7.787037; + } + function d3_xyz_lab(x) { + return x > .008856 ? Math.pow(x, 1 / 3) : 7.787037 * x + 4 / 29; + } + function d3_xyz_rgb(r) { + return Math.round(255 * (r <= .00304 ? 12.92 * r : 1.055 * Math.pow(r, 1 / 2.4) - .055)); + } + d3.rgb = d3_rgb; + function d3_rgb(r, g, b) { + 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); + } + function d3_rgbNumber(value) { + return new d3_rgb(value >> 16, value >> 8 & 255, value & 255); + } + function d3_rgbString(value) { + return d3_rgbNumber(value) + ""; + } + var d3_rgbPrototype = d3_rgb.prototype = new d3_color(); + d3_rgbPrototype.brighter = function(k) { + k = Math.pow(.7, arguments.length ? k : 1); + var r = this.r, g = this.g, b = this.b, i = 30; + if (!r && !g && !b) return new d3_rgb(i, i, i); + if (r && r < i) r = i; + if (g && g < i) g = i; + if (b && b < i) b = i; + return new d3_rgb(Math.min(255, r / k), Math.min(255, g / k), Math.min(255, b / k)); + }; + d3_rgbPrototype.darker = function(k) { + k = Math.pow(.7, arguments.length ? k : 1); + return new d3_rgb(k * this.r, k * this.g, k * this.b); + }; + d3_rgbPrototype.hsl = function() { + return d3_rgb_hsl(this.r, this.g, this.b); + }; + d3_rgbPrototype.toString = function() { + return "#" + d3_rgb_hex(this.r) + d3_rgb_hex(this.g) + d3_rgb_hex(this.b); + }; + function d3_rgb_hex(v) { + return v < 16 ? "0" + Math.max(0, v).toString(16) : Math.min(255, v).toString(16); + } + function d3_rgb_parse(format, rgb, hsl) { + var r = 0, g = 0, b = 0, m1, m2, color; + m1 = /([a-z]+)\((.*)\)/.exec(format = format.toLowerCase()); + if (m1) { + m2 = m1[2].split(","); + switch (m1[1]) { + case "hsl": + { + return hsl(parseFloat(m2[0]), parseFloat(m2[1]) / 100, parseFloat(m2[2]) / 100); + } + + case "rgb": + { + return rgb(d3_rgb_parseNumber(m2[0]), d3_rgb_parseNumber(m2[1]), d3_rgb_parseNumber(m2[2])); + } + } + } + if (color = d3_rgb_names.get(format)) { + return rgb(color.r, color.g, color.b); + } + if (format != null && format.charAt(0) === "#" && !isNaN(color = parseInt(format.slice(1), 16))) { + if (format.length === 4) { + r = (color & 3840) >> 4; + r = r >> 4 | r; + g = color & 240; + g = g >> 4 | g; + b = color & 15; + b = b << 4 | b; + } else if (format.length === 7) { + r = (color & 16711680) >> 16; + g = (color & 65280) >> 8; + b = color & 255; + } + } + return rgb(r, g, b); + } + function d3_rgb_hsl(r, g, b) { + var min = Math.min(r /= 255, g /= 255, b /= 255), max = Math.max(r, g, b), d = max - min, h, s, l = (max + min) / 2; + if (d) { + s = l < .5 ? d / (max + min) : d / (2 - max - min); + if (r == max) h = (g - b) / d + (g < b ? 6 : 0); else if (g == max) h = (b - r) / d + 2; else h = (r - g) / d + 4; + h *= 60; + } else { + h = NaN; + s = l > 0 && l < 1 ? 0 : h; + } + return new d3_hsl(h, s, l); + } + function d3_rgb_lab(r, g, b) { + r = d3_rgb_xyz(r); + g = d3_rgb_xyz(g); + b = d3_rgb_xyz(b); + 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); + return d3_lab(116 * y - 16, 500 * (x - y), 200 * (y - z)); + } + function d3_rgb_xyz(r) { + return (r /= 255) <= .04045 ? r / 12.92 : Math.pow((r + .055) / 1.055, 2.4); + } + function d3_rgb_parseNumber(c) { + var f = parseFloat(c); + return c.charAt(c.length - 1) === "%" ? Math.round(f * 2.55) : f; + } + var d3_rgb_names = d3.map({ + aliceblue: 15792383, + antiquewhite: 16444375, + aqua: 65535, + aquamarine: 8388564, + azure: 15794175, + beige: 16119260, + bisque: 16770244, + black: 0, + blanchedalmond: 16772045, + blue: 255, + blueviolet: 9055202, + brown: 10824234, + burlywood: 14596231, + cadetblue: 6266528, + chartreuse: 8388352, + chocolate: 13789470, + coral: 16744272, + cornflowerblue: 6591981, + cornsilk: 16775388, + crimson: 14423100, + cyan: 65535, + darkblue: 139, + darkcyan: 35723, + darkgoldenrod: 12092939, + darkgray: 11119017, + darkgreen: 25600, + darkgrey: 11119017, + darkkhaki: 12433259, + darkmagenta: 9109643, + darkolivegreen: 5597999, + darkorange: 16747520, + darkorchid: 10040012, + darkred: 9109504, + darksalmon: 15308410, + darkseagreen: 9419919, + darkslateblue: 4734347, + darkslategray: 3100495, + darkslategrey: 3100495, + darkturquoise: 52945, + darkviolet: 9699539, + deeppink: 16716947, + deepskyblue: 49151, + dimgray: 6908265, + dimgrey: 6908265, + dodgerblue: 2003199, + firebrick: 11674146, + floralwhite: 16775920, + forestgreen: 2263842, + fuchsia: 16711935, + gainsboro: 14474460, + ghostwhite: 16316671, + gold: 16766720, + goldenrod: 14329120, + gray: 8421504, + green: 32768, + greenyellow: 11403055, + grey: 8421504, + honeydew: 15794160, + hotpink: 16738740, + indianred: 13458524, + indigo: 4915330, + ivory: 16777200, + khaki: 15787660, + lavender: 15132410, + lavenderblush: 16773365, + lawngreen: 8190976, + lemonchiffon: 16775885, + lightblue: 11393254, + lightcoral: 15761536, + lightcyan: 14745599, + lightgoldenrodyellow: 16448210, + lightgray: 13882323, + lightgreen: 9498256, + lightgrey: 13882323, + lightpink: 16758465, + lightsalmon: 16752762, + lightseagreen: 2142890, + lightskyblue: 8900346, + lightslategray: 7833753, + lightslategrey: 7833753, + lightsteelblue: 11584734, + lightyellow: 16777184, + lime: 65280, + limegreen: 3329330, + linen: 16445670, + magenta: 16711935, + maroon: 8388608, + mediumaquamarine: 6737322, + mediumblue: 205, + mediumorchid: 12211667, + mediumpurple: 9662683, + mediumseagreen: 3978097, + mediumslateblue: 8087790, + mediumspringgreen: 64154, + mediumturquoise: 4772300, + mediumvioletred: 13047173, + midnightblue: 1644912, + mintcream: 16121850, + mistyrose: 16770273, + moccasin: 16770229, + navajowhite: 16768685, + navy: 128, + oldlace: 16643558, + olive: 8421376, + olivedrab: 7048739, + orange: 16753920, + orangered: 16729344, + orchid: 14315734, + palegoldenrod: 15657130, + palegreen: 10025880, + paleturquoise: 11529966, + palevioletred: 14381203, + papayawhip: 16773077, + peachpuff: 16767673, + peru: 13468991, + pink: 16761035, + plum: 14524637, + powderblue: 11591910, + purple: 8388736, + rebeccapurple: 6697881, + red: 16711680, + rosybrown: 12357519, + royalblue: 4286945, + saddlebrown: 9127187, + salmon: 16416882, + sandybrown: 16032864, + seagreen: 3050327, + seashell: 16774638, + sienna: 10506797, + silver: 12632256, + skyblue: 8900331, + slateblue: 6970061, + slategray: 7372944, + slategrey: 7372944, + snow: 16775930, + springgreen: 65407, + steelblue: 4620980, + tan: 13808780, + teal: 32896, + thistle: 14204888, + tomato: 16737095, + turquoise: 4251856, + violet: 15631086, + wheat: 16113331, + white: 16777215, + whitesmoke: 16119285, + yellow: 16776960, + yellowgreen: 10145074 + }); + d3_rgb_names.forEach(function(key, value) { + d3_rgb_names.set(key, d3_rgbNumber(value)); + }); + function d3_functor(v) { + return typeof v === "function" ? v : function() { + return v; + }; + } + d3.functor = d3_functor; + d3.xhr = d3_xhrType(d3_identity); + function d3_xhrType(response) { + return function(url, mimeType, callback) { + if (arguments.length === 2 && typeof mimeType === "function") callback = mimeType, + mimeType = null; + return d3_xhr(url, mimeType, response, callback); + }; + } + function d3_xhr(url, mimeType, response, callback) { + var xhr = {}, dispatch = d3.dispatch("beforesend", "progress", "load", "error"), headers = {}, request = new XMLHttpRequest(), responseType = null; + if (this.XDomainRequest && !("withCredentials" in request) && /^(http(s)?:)?\/\//.test(url)) request = new XDomainRequest(); + "onload" in request ? request.onload = request.onerror = respond : request.onreadystatechange = function() { + request.readyState > 3 && respond(); + }; + function respond() { + var status = request.status, result; + if (!status && d3_xhrHasResponse(request) || status >= 200 && status < 300 || status === 304) { + try { + result = response.call(xhr, request); + } catch (e) { + dispatch.error.call(xhr, e); + return; + } + dispatch.load.call(xhr, result); + } else { + dispatch.error.call(xhr, request); + } + } + request.onprogress = function(event) { + var o = d3.event; + d3.event = event; + try { + dispatch.progress.call(xhr, request); + } finally { + d3.event = o; + } + }; + xhr.header = function(name, value) { + name = (name + "").toLowerCase(); + if (arguments.length < 2) return headers[name]; + if (value == null) delete headers[name]; else headers[name] = value + ""; + return xhr; + }; + xhr.mimeType = function(value) { + if (!arguments.length) return mimeType; + mimeType = value == null ? null : value + ""; + return xhr; + }; + xhr.responseType = function(value) { + if (!arguments.length) return responseType; + responseType = value; + return xhr; + }; + xhr.response = function(value) { + response = value; + return xhr; + }; + [ "get", "post" ].forEach(function(method) { + xhr[method] = function() { + return xhr.send.apply(xhr, [ method ].concat(d3_array(arguments))); + }; + }); + xhr.send = function(method, data, callback) { + if (arguments.length === 2 && typeof data === "function") callback = data, data = null; + request.open(method, url, true); + if (mimeType != null && !("accept" in headers)) headers["accept"] = mimeType + ",*/*"; + if (request.setRequestHeader) for (var name in headers) request.setRequestHeader(name, headers[name]); + if (mimeType != null && request.overrideMimeType) request.overrideMimeType(mimeType); + if (responseType != null) request.responseType = responseType; + if (callback != null) xhr.on("error", callback).on("load", function(request) { + callback(null, request); + }); + dispatch.beforesend.call(xhr, request); + request.send(data == null ? null : data); + return xhr; + }; + xhr.abort = function() { + request.abort(); + return xhr; + }; + d3.rebind(xhr, dispatch, "on"); + return callback == null ? xhr : xhr.get(d3_xhr_fixCallback(callback)); + } + function d3_xhr_fixCallback(callback) { + return callback.length === 1 ? function(error, request) { + callback(error == null ? request : null); + } : callback; + } + function d3_xhrHasResponse(request) { + var type = request.responseType; + return type && type !== "text" ? request.response : request.responseText; + } + d3.dsv = function(delimiter, mimeType) { + var reFormat = new RegExp('["' + delimiter + "\n]"), delimiterCode = delimiter.charCodeAt(0); + function dsv(url, row, callback) { + if (arguments.length < 3) callback = row, row = null; + var xhr = d3_xhr(url, mimeType, row == null ? response : typedResponse(row), callback); + xhr.row = function(_) { + return arguments.length ? xhr.response((row = _) == null ? response : typedResponse(_)) : row; + }; + return xhr; + } + function response(request) { + return dsv.parse(request.responseText); + } + function typedResponse(f) { + return function(request) { + return dsv.parse(request.responseText, f); + }; + } + dsv.parse = function(text, f) { + var o; + return dsv.parseRows(text, function(row, i) { + if (o) return o(row, i - 1); + var a = new Function("d", "return {" + row.map(function(name, i) { + return JSON.stringify(name) + ": d[" + i + "]"; + }).join(",") + "}"); + o = f ? function(row, i) { + return f(a(row), i); + } : a; + }); + }; + dsv.parseRows = function(text, f) { + var EOL = {}, EOF = {}, rows = [], N = text.length, I = 0, n = 0, t, eol; + function token() { + if (I >= N) return EOF; + if (eol) return eol = false, EOL; + var j = I; + if (text.charCodeAt(j) === 34) { + var i = j; + while (i++ < N) { + if (text.charCodeAt(i) === 34) { + if (text.charCodeAt(i + 1) !== 34) break; + ++i; + } + } + I = i + 2; + var c = text.charCodeAt(i + 1); + if (c === 13) { + eol = true; + if (text.charCodeAt(i + 2) === 10) ++I; + } else if (c === 10) { + eol = true; + } + return text.slice(j + 1, i).replace(/""/g, '"'); + } + while (I < N) { + var c = text.charCodeAt(I++), k = 1; + if (c === 10) eol = true; else if (c === 13) { + eol = true; + if (text.charCodeAt(I) === 10) ++I, ++k; + } else if (c !== delimiterCode) continue; + return text.slice(j, I - k); + } + return text.slice(j); + } + while ((t = token()) !== EOF) { + var a = []; + while (t !== EOL && t !== EOF) { + a.push(t); + t = token(); + } + if (f && (a = f(a, n++)) == null) continue; + rows.push(a); + } + return rows; + }; + dsv.format = function(rows) { + if (Array.isArray(rows[0])) return dsv.formatRows(rows); + var fieldSet = new d3_Set(), fields = []; + rows.forEach(function(row) { + for (var field in row) { + if (!fieldSet.has(field)) { + fields.push(fieldSet.add(field)); + } + } + }); + return [ fields.map(formatValue).join(delimiter) ].concat(rows.map(function(row) { + return fields.map(function(field) { + return formatValue(row[field]); + }).join(delimiter); + })).join("\n"); + }; + dsv.formatRows = function(rows) { + return rows.map(formatRow).join("\n"); + }; + function formatRow(row) { + return row.map(formatValue).join(delimiter); + } + function formatValue(text) { + return reFormat.test(text) ? '"' + text.replace(/\"/g, '""') + '"' : text; + } + return dsv; + }; + d3.csv = d3.dsv(",", "text/csv"); + d3.tsv = d3.dsv(" ", "text/tab-separated-values"); + var d3_timer_queueHead, d3_timer_queueTail, d3_timer_interval, d3_timer_timeout, d3_timer_frame = this[d3_vendorSymbol(this, "requestAnimationFrame")] || function(callback) { + setTimeout(callback, 17); + }; + d3.timer = function() { + d3_timer.apply(this, arguments); + }; + function d3_timer(callback, delay, then) { + var n = arguments.length; + if (n < 2) delay = 0; + if (n < 3) then = Date.now(); + var time = then + delay, timer = { + c: callback, + t: time, + n: null + }; + if (d3_timer_queueTail) d3_timer_queueTail.n = timer; else d3_timer_queueHead = timer; + d3_timer_queueTail = timer; + if (!d3_timer_interval) { + d3_timer_timeout = clearTimeout(d3_timer_timeout); + d3_timer_interval = 1; + d3_timer_frame(d3_timer_step); + } + return timer; + } + function d3_timer_step() { + var now = d3_timer_mark(), delay = d3_timer_sweep() - now; + if (delay > 24) { + if (isFinite(delay)) { + clearTimeout(d3_timer_timeout); + d3_timer_timeout = setTimeout(d3_timer_step, delay); + } + d3_timer_interval = 0; + } else { + d3_timer_interval = 1; + d3_timer_frame(d3_timer_step); + } + } + d3.timer.flush = function() { + d3_timer_mark(); + d3_timer_sweep(); + }; + function d3_timer_mark() { + var now = Date.now(), timer = d3_timer_queueHead; + while (timer) { + if (now >= timer.t && timer.c(now - timer.t)) timer.c = null; + timer = timer.n; + } + return now; + } + function d3_timer_sweep() { + var t0, t1 = d3_timer_queueHead, time = Infinity; + while (t1) { + if (t1.c) { + if (t1.t < time) time = t1.t; + t1 = (t0 = t1).n; + } else { + t1 = t0 ? t0.n = t1.n : d3_timer_queueHead = t1.n; + } + } + d3_timer_queueTail = t0; + return time; + } + function d3_format_precision(x, p) { + return p - (x ? Math.ceil(Math.log(x) / Math.LN10) : 1); + } + d3.round = function(x, n) { + return n ? Math.round(x * (n = Math.pow(10, n))) / n : Math.round(x); + }; + var d3_formatPrefixes = [ "y", "z", "a", "f", "p", "n", "µ", "m", "", "k", "M", "G", "T", "P", "E", "Z", "Y" ].map(d3_formatPrefix); + d3.formatPrefix = function(value, precision) { + var i = 0; + if (value = +value) { + if (value < 0) value *= -1; + if (precision) value = d3.round(value, d3_format_precision(value, precision)); + i = 1 + Math.floor(1e-12 + Math.log(value) / Math.LN10); + i = Math.max(-24, Math.min(24, Math.floor((i - 1) / 3) * 3)); + } + return d3_formatPrefixes[8 + i / 3]; + }; + function d3_formatPrefix(d, i) { + var k = Math.pow(10, abs(8 - i) * 3); + return { + scale: i > 8 ? function(d) { + return d / k; + } : function(d) { + return d * k; + }, + symbol: d + }; + } + function d3_locale_numberFormat(locale) { + 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) { + var i = value.length, t = [], j = 0, g = locale_grouping[0], length = 0; + while (i > 0 && g > 0) { + if (length + g + 1 > width) g = Math.max(1, width - length); + t.push(value.substring(i -= g, i + g)); + if ((length += g + 1) > width) break; + g = locale_grouping[j = (j + 1) % locale_grouping.length]; + } + return t.reverse().join(locale_thousands); + } : d3_identity; + return function(specifier) { + 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; + if (precision) precision = +precision.substring(1); + if (zfill || fill === "0" && align === "=") { + zfill = fill = "0"; + align = "="; + } + switch (type) { + case "n": + comma = true; + type = "g"; + break; + + case "%": + scale = 100; + suffix = "%"; + type = "f"; + break; + + case "p": + scale = 100; + suffix = "%"; + type = "r"; + break; + + case "b": + case "o": + case "x": + case "X": + if (symbol === "#") prefix = "0" + type.toLowerCase(); + + case "c": + exponent = false; + + case "d": + integer = true; + precision = 0; + break; + + case "s": + scale = -1; + type = "r"; + break; + } + if (symbol === "$") prefix = locale_currency[0], suffix = locale_currency[1]; + if (type == "r" && !precision) type = "g"; + if (precision != null) { + 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)); + } + type = d3_format_types.get(type) || d3_format_typeDefault; + var zcomma = zfill && comma; + return function(value) { + var fullSuffix = suffix; + if (integer && value % 1) return ""; + var negative = value < 0 || value === 0 && 1 / value < 0 ? (value = -value, "-") : sign === "-" ? "" : sign; + if (scale < 0) { + var unit = d3.formatPrefix(value, precision); + value = unit.scale(value); + fullSuffix = unit.symbol + suffix; + } else { + value *= scale; + } + value = type(value, precision); + var i = value.lastIndexOf("."), before, after; + if (i < 0) { + var j = exponent ? value.lastIndexOf("e") : -1; + if (j < 0) before = value, after = ""; else before = value.substring(0, j), after = value.substring(j); + } else { + before = value.substring(0, i); + after = locale_decimal + value.substring(i + 1); + } + if (!zfill && comma) before = formatGroup(before, Infinity); + var length = prefix.length + before.length + after.length + (zcomma ? 0 : negative.length), padding = length < width ? new Array(length = width - length + 1).join(fill) : ""; + if (zcomma) before = formatGroup(padding + before, padding.length ? width - after.length : Infinity); + negative += prefix; + value = before + after; + 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; + }; + }; + } + var d3_format_re = /(?:([^{])?([<>=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i; + var d3_format_types = d3.map({ + b: function(x) { + return x.toString(2); + }, + c: function(x) { + return String.fromCharCode(x); + }, + o: function(x) { + return x.toString(8); + }, + x: function(x) { + return x.toString(16); + }, + X: function(x) { + return x.toString(16).toUpperCase(); + }, + g: function(x, p) { + return x.toPrecision(p); + }, + e: function(x, p) { + return x.toExponential(p); + }, + f: function(x, p) { + return x.toFixed(p); + }, + r: function(x, p) { + 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)))); + } + }); + function d3_format_typeDefault(x) { + return x + ""; + } + var d3_time = d3.time = {}, d3_date = Date; + function d3_date_utc() { + this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0]); + } + d3_date_utc.prototype = { + getDate: function() { + return this._.getUTCDate(); + }, + getDay: function() { + return this._.getUTCDay(); + }, + getFullYear: function() { + return this._.getUTCFullYear(); + }, + getHours: function() { + return this._.getUTCHours(); + }, + getMilliseconds: function() { + return this._.getUTCMilliseconds(); + }, + getMinutes: function() { + return this._.getUTCMinutes(); + }, + getMonth: function() { + return this._.getUTCMonth(); + }, + getSeconds: function() { + return this._.getUTCSeconds(); + }, + getTime: function() { + return this._.getTime(); + }, + getTimezoneOffset: function() { + return 0; + }, + valueOf: function() { + return this._.valueOf(); + }, + setDate: function() { + d3_time_prototype.setUTCDate.apply(this._, arguments); + }, + setDay: function() { + d3_time_prototype.setUTCDay.apply(this._, arguments); + }, + setFullYear: function() { + d3_time_prototype.setUTCFullYear.apply(this._, arguments); + }, + setHours: function() { + d3_time_prototype.setUTCHours.apply(this._, arguments); + }, + setMilliseconds: function() { + d3_time_prototype.setUTCMilliseconds.apply(this._, arguments); + }, + setMinutes: function() { + d3_time_prototype.setUTCMinutes.apply(this._, arguments); + }, + setMonth: function() { + d3_time_prototype.setUTCMonth.apply(this._, arguments); + }, + setSeconds: function() { + d3_time_prototype.setUTCSeconds.apply(this._, arguments); + }, + setTime: function() { + d3_time_prototype.setTime.apply(this._, arguments); + } + }; + var d3_time_prototype = Date.prototype; + function d3_time_interval(local, step, number) { + function round(date) { + var d0 = local(date), d1 = offset(d0, 1); + return date - d0 < d1 - date ? d0 : d1; + } + function ceil(date) { + step(date = local(new d3_date(date - 1)), 1); + return date; + } + function offset(date, k) { + step(date = new d3_date(+date), k); + return date; + } + function range(t0, t1, dt) { + var time = ceil(t0), times = []; + if (dt > 1) { + while (time < t1) { + if (!(number(time) % dt)) times.push(new Date(+time)); + step(time, 1); + } + } else { + while (time < t1) times.push(new Date(+time)), step(time, 1); + } + return times; + } + function range_utc(t0, t1, dt) { + try { + d3_date = d3_date_utc; + var utc = new d3_date_utc(); + utc._ = t0; + return range(utc, t1, dt); + } finally { + d3_date = Date; + } + } + local.floor = local; + local.round = round; + local.ceil = ceil; + local.offset = offset; + local.range = range; + var utc = local.utc = d3_time_interval_utc(local); + utc.floor = utc; + utc.round = d3_time_interval_utc(round); + utc.ceil = d3_time_interval_utc(ceil); + utc.offset = d3_time_interval_utc(offset); + utc.range = range_utc; + return local; + } + function d3_time_interval_utc(method) { + return function(date, k) { + try { + d3_date = d3_date_utc; + var utc = new d3_date_utc(); + utc._ = date; + return method(utc, k)._; + } finally { + d3_date = Date; + } + }; + } + d3_time.year = d3_time_interval(function(date) { + date = d3_time.day(date); + date.setMonth(0, 1); + return date; + }, function(date, offset) { + date.setFullYear(date.getFullYear() + offset); + }, function(date) { + return date.getFullYear(); + }); + d3_time.years = d3_time.year.range; + d3_time.years.utc = d3_time.year.utc.range; + d3_time.day = d3_time_interval(function(date) { + var day = new d3_date(2e3, 0); + day.setFullYear(date.getFullYear(), date.getMonth(), date.getDate()); + return day; + }, function(date, offset) { + date.setDate(date.getDate() + offset); + }, function(date) { + return date.getDate() - 1; + }); + d3_time.days = d3_time.day.range; + d3_time.days.utc = d3_time.day.utc.range; + d3_time.dayOfYear = function(date) { + var year = d3_time.year(date); + return Math.floor((date - year - (date.getTimezoneOffset() - year.getTimezoneOffset()) * 6e4) / 864e5); + }; + [ "sunday", "monday", "tuesday", "wednesday", "thursday", "friday", "saturday" ].forEach(function(day, i) { + i = 7 - i; + var interval = d3_time[day] = d3_time_interval(function(date) { + (date = d3_time.day(date)).setDate(date.getDate() - (date.getDay() + i) % 7); + return date; + }, function(date, offset) { + date.setDate(date.getDate() + Math.floor(offset) * 7); + }, function(date) { + var day = d3_time.year(date).getDay(); + return Math.floor((d3_time.dayOfYear(date) + (day + i) % 7) / 7) - (day !== i); + }); + d3_time[day + "s"] = interval.range; + d3_time[day + "s"].utc = interval.utc.range; + d3_time[day + "OfYear"] = function(date) { + var day = d3_time.year(date).getDay(); + return Math.floor((d3_time.dayOfYear(date) + (day + i) % 7) / 7); + }; + }); + d3_time.week = d3_time.sunday; + d3_time.weeks = d3_time.sunday.range; + d3_time.weeks.utc = d3_time.sunday.utc.range; + d3_time.weekOfYear = d3_time.sundayOfYear; + function d3_locale_timeFormat(locale) { + 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; + function d3_time_format(template) { + var n = template.length; + function format(date) { + var string = [], i = -1, j = 0, c, p, f; + while (++i < n) { + if (template.charCodeAt(i) === 37) { + string.push(template.slice(j, i)); + if ((p = d3_time_formatPads[c = template.charAt(++i)]) != null) c = template.charAt(++i); + if (f = d3_time_formats[c]) c = f(date, p == null ? c === "e" ? " " : "0" : p); + string.push(c); + j = i + 1; + } + } + string.push(template.slice(j, i)); + return string.join(""); + } + format.parse = function(string) { + var d = { + y: 1900, + m: 0, + d: 1, + H: 0, + M: 0, + S: 0, + L: 0, + Z: null + }, i = d3_time_parse(d, template, string, 0); + if (i != string.length) return null; + if ("p" in d) d.H = d.H % 12 + d.p * 12; + var localZ = d.Z != null && d3_date !== d3_date_utc, date = new (localZ ? d3_date_utc : d3_date)(); + if ("j" in d) date.setFullYear(d.y, 0, d.j); else if ("W" in d || "U" in d) { + if (!("w" in d)) d.w = "W" in d ? 1 : 0; + date.setFullYear(d.y, 0, 1); + 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); + } else date.setFullYear(d.y, d.m, d.d); + date.setHours(d.H + (d.Z / 100 | 0), d.M + d.Z % 100, d.S, d.L); + return localZ ? date._ : date; + }; + format.toString = function() { + return template; + }; + return format; + } + function d3_time_parse(date, template, string, j) { + var c, p, t, i = 0, n = template.length, m = string.length; + while (i < n) { + if (j >= m) return -1; + c = template.charCodeAt(i++); + if (c === 37) { + t = template.charAt(i++); + p = d3_time_parsers[t in d3_time_formatPads ? template.charAt(i++) : t]; + if (!p || (j = p(date, string, j)) < 0) return -1; + } else if (c != string.charCodeAt(j++)) { + return -1; + } + } + return j; + } + d3_time_format.utc = function(template) { + var local = d3_time_format(template); + function format(date) { + try { + d3_date = d3_date_utc; + var utc = new d3_date(); + utc._ = date; + return local(utc); + } finally { + d3_date = Date; + } + } + format.parse = function(string) { + try { + d3_date = d3_date_utc; + var date = local.parse(string); + return date && date._; + } finally { + d3_date = Date; + } + }; + format.toString = local.toString; + return format; + }; + d3_time_format.multi = d3_time_format.utc.multi = d3_time_formatMulti; + 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); + locale_periods.forEach(function(p, i) { + d3_time_periodLookup.set(p.toLowerCase(), i); + }); + var d3_time_formats = { + a: function(d) { + return locale_shortDays[d.getDay()]; + }, + A: function(d) { + return locale_days[d.getDay()]; + }, + b: function(d) { + return locale_shortMonths[d.getMonth()]; + }, + B: function(d) { + return locale_months[d.getMonth()]; + }, + c: d3_time_format(locale_dateTime), + d: function(d, p) { + return d3_time_formatPad(d.getDate(), p, 2); + }, + e: function(d, p) { + return d3_time_formatPad(d.getDate(), p, 2); + }, + H: function(d, p) { + return d3_time_formatPad(d.getHours(), p, 2); + }, + I: function(d, p) { + return d3_time_formatPad(d.getHours() % 12 || 12, p, 2); + }, + j: function(d, p) { + return d3_time_formatPad(1 + d3_time.dayOfYear(d), p, 3); + }, + L: function(d, p) { + return d3_time_formatPad(d.getMilliseconds(), p, 3); + }, + m: function(d, p) { + return d3_time_formatPad(d.getMonth() + 1, p, 2); + }, + M: function(d, p) { + return d3_time_formatPad(d.getMinutes(), p, 2); + }, + p: function(d) { + return locale_periods[+(d.getHours() >= 12)]; + }, + S: function(d, p) { + return d3_time_formatPad(d.getSeconds(), p, 2); + }, + U: function(d, p) { + return d3_time_formatPad(d3_time.sundayOfYear(d), p, 2); + }, + w: function(d) { + return d.getDay(); + }, + W: function(d, p) { + return d3_time_formatPad(d3_time.mondayOfYear(d), p, 2); + }, + x: d3_time_format(locale_date), + X: d3_time_format(locale_time), + y: function(d, p) { + return d3_time_formatPad(d.getFullYear() % 100, p, 2); + }, + Y: function(d, p) { + return d3_time_formatPad(d.getFullYear() % 1e4, p, 4); + }, + Z: d3_time_zone, + "%": function() { + return "%"; + } + }; + var d3_time_parsers = { + a: d3_time_parseWeekdayAbbrev, + A: d3_time_parseWeekday, + b: d3_time_parseMonthAbbrev, + B: d3_time_parseMonth, + c: d3_time_parseLocaleFull, + d: d3_time_parseDay, + e: d3_time_parseDay, + H: d3_time_parseHour24, + I: d3_time_parseHour24, + j: d3_time_parseDayOfYear, + L: d3_time_parseMilliseconds, + m: d3_time_parseMonthNumber, + M: d3_time_parseMinutes, + p: d3_time_parseAmPm, + S: d3_time_parseSeconds, + U: d3_time_parseWeekNumberSunday, + w: d3_time_parseWeekdayNumber, + W: d3_time_parseWeekNumberMonday, + x: d3_time_parseLocaleDate, + X: d3_time_parseLocaleTime, + y: d3_time_parseYear, + Y: d3_time_parseFullYear, + Z: d3_time_parseZone, + "%": d3_time_parseLiteralPercent + }; + function d3_time_parseWeekdayAbbrev(date, string, i) { + d3_time_dayAbbrevRe.lastIndex = 0; + var n = d3_time_dayAbbrevRe.exec(string.slice(i)); + return n ? (date.w = d3_time_dayAbbrevLookup.get(n[0].toLowerCase()), i + n[0].length) : -1; + } + function d3_time_parseWeekday(date, string, i) { + d3_time_dayRe.lastIndex = 0; + var n = d3_time_dayRe.exec(string.slice(i)); + return n ? (date.w = d3_time_dayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1; + } + function d3_time_parseMonthAbbrev(date, string, i) { + d3_time_monthAbbrevRe.lastIndex = 0; + var n = d3_time_monthAbbrevRe.exec(string.slice(i)); + return n ? (date.m = d3_time_monthAbbrevLookup.get(n[0].toLowerCase()), i + n[0].length) : -1; + } + function d3_time_parseMonth(date, string, i) { + d3_time_monthRe.lastIndex = 0; + var n = d3_time_monthRe.exec(string.slice(i)); + return n ? (date.m = d3_time_monthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1; + } + function d3_time_parseLocaleFull(date, string, i) { + return d3_time_parse(date, d3_time_formats.c.toString(), string, i); + } + function d3_time_parseLocaleDate(date, string, i) { + return d3_time_parse(date, d3_time_formats.x.toString(), string, i); + } + function d3_time_parseLocaleTime(date, string, i) { + return d3_time_parse(date, d3_time_formats.X.toString(), string, i); + } + function d3_time_parseAmPm(date, string, i) { + var n = d3_time_periodLookup.get(string.slice(i, i += 2).toLowerCase()); + return n == null ? -1 : (date.p = n, i); + } + return d3_time_format; + } + var d3_time_formatPads = { + "-": "", + _: " ", + "0": "0" + }, d3_time_numberRe = /^\s*\d+/, d3_time_percentRe = /^%/; + function d3_time_formatPad(value, fill, width) { + var sign = value < 0 ? "-" : "", string = (sign ? -value : value) + "", length = string.length; + return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string); + } + function d3_time_formatRe(names) { + return new RegExp("^(?:" + names.map(d3.requote).join("|") + ")", "i"); + } + function d3_time_formatLookup(names) { + var map = new d3_Map(), i = -1, n = names.length; + while (++i < n) map.set(names[i].toLowerCase(), i); + return map; + } + function d3_time_parseWeekdayNumber(date, string, i) { + d3_time_numberRe.lastIndex = 0; + var n = d3_time_numberRe.exec(string.slice(i, i + 1)); + return n ? (date.w = +n[0], i + n[0].length) : -1; + } + function d3_time_parseWeekNumberSunday(date, string, i) { + d3_time_numberRe.lastIndex = 0; + var n = d3_time_numberRe.exec(string.slice(i)); + return n ? (date.U = +n[0], i + n[0].length) : -1; + } + function d3_time_parseWeekNumberMonday(date, string, i) { + d3_time_numberRe.lastIndex = 0; + var n = d3_time_numberRe.exec(string.slice(i)); + return n ? (date.W = +n[0], i + n[0].length) : -1; + } + function d3_time_parseFullYear(date, string, i) { + d3_time_numberRe.lastIndex = 0; + var n = d3_time_numberRe.exec(string.slice(i, i + 4)); + return n ? (date.y = +n[0], i + n[0].length) : -1; + } + function d3_time_parseYear(date, string, i) { + d3_time_numberRe.lastIndex = 0; + var n = d3_time_numberRe.exec(string.slice(i, i + 2)); + return n ? (date.y = d3_time_expandYear(+n[0]), i + n[0].length) : -1; + } + function d3_time_parseZone(date, string, i) { + return /^[+-]\d{4}$/.test(string = string.slice(i, i + 5)) ? (date.Z = -string, + i + 5) : -1; + } + function d3_time_expandYear(d) { + return d + (d > 68 ? 1900 : 2e3); + } + function d3_time_parseMonthNumber(date, string, i) { + d3_time_numberRe.lastIndex = 0; + var n = d3_time_numberRe.exec(string.slice(i, i + 2)); + return n ? (date.m = n[0] - 1, i + n[0].length) : -1; + } + function d3_time_parseDay(date, string, i) { + d3_time_numberRe.lastIndex = 0; + var n = d3_time_numberRe.exec(string.slice(i, i + 2)); + return n ? (date.d = +n[0], i + n[0].length) : -1; + } + function d3_time_parseDayOfYear(date, string, i) { + d3_time_numberRe.lastIndex = 0; + var n = d3_time_numberRe.exec(string.slice(i, i + 3)); + return n ? (date.j = +n[0], i + n[0].length) : -1; + } + function d3_time_parseHour24(date, string, i) { + d3_time_numberRe.lastIndex = 0; + var n = d3_time_numberRe.exec(string.slice(i, i + 2)); + return n ? (date.H = +n[0], i + n[0].length) : -1; + } + function d3_time_parseMinutes(date, string, i) { + d3_time_numberRe.lastIndex = 0; + var n = d3_time_numberRe.exec(string.slice(i, i + 2)); + return n ? (date.M = +n[0], i + n[0].length) : -1; + } + function d3_time_parseSeconds(date, string, i) { + d3_time_numberRe.lastIndex = 0; + var n = d3_time_numberRe.exec(string.slice(i, i + 2)); + return n ? (date.S = +n[0], i + n[0].length) : -1; + } + function d3_time_parseMilliseconds(date, string, i) { + d3_time_numberRe.lastIndex = 0; + var n = d3_time_numberRe.exec(string.slice(i, i + 3)); + return n ? (date.L = +n[0], i + n[0].length) : -1; + } + function d3_time_zone(d) { + var z = d.getTimezoneOffset(), zs = z > 0 ? "-" : "+", zh = abs(z) / 60 | 0, zm = abs(z) % 60; + return zs + d3_time_formatPad(zh, "0", 2) + d3_time_formatPad(zm, "0", 2); + } + function d3_time_parseLiteralPercent(date, string, i) { + d3_time_percentRe.lastIndex = 0; + var n = d3_time_percentRe.exec(string.slice(i, i + 1)); + return n ? i + n[0].length : -1; + } + function d3_time_formatMulti(formats) { + var n = formats.length, i = -1; + while (++i < n) formats[i][0] = this(formats[i][0]); + return function(date) { + var i = 0, f = formats[i]; + while (!f[1](date)) f = formats[++i]; + return f[0](date); + }; + } + d3.locale = function(locale) { + return { + numberFormat: d3_locale_numberFormat(locale), + timeFormat: d3_locale_timeFormat(locale) + }; + }; + var d3_locale_enUS = d3.locale({ + decimal: ".", + thousands: ",", + grouping: [ 3 ], + currency: [ "$", "" ], + dateTime: "%a %b %e %X %Y", + date: "%m/%d/%Y", + time: "%H:%M:%S", + periods: [ "AM", "PM" ], + days: [ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" ], + shortDays: [ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" ], + months: [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ], + shortMonths: [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ] + }); + d3.format = d3_locale_enUS.numberFormat; + d3.geo = {}; + function d3_adder() {} + d3_adder.prototype = { + s: 0, + t: 0, + add: function(y) { + d3_adderSum(y, this.t, d3_adderTemp); + d3_adderSum(d3_adderTemp.s, this.s, this); + if (this.s) this.t += d3_adderTemp.t; else this.s = d3_adderTemp.t; + }, + reset: function() { + this.s = this.t = 0; + }, + valueOf: function() { + return this.s; + } + }; + var d3_adderTemp = new d3_adder(); + function d3_adderSum(a, b, o) { + var x = o.s = a + b, bv = x - a, av = x - bv; + o.t = a - av + (b - bv); + } + d3.geo.stream = function(object, listener) { + if (object && d3_geo_streamObjectType.hasOwnProperty(object.type)) { + d3_geo_streamObjectType[object.type](object, listener); + } else { + d3_geo_streamGeometry(object, listener); + } + }; + function d3_geo_streamGeometry(geometry, listener) { + if (geometry && d3_geo_streamGeometryType.hasOwnProperty(geometry.type)) { + d3_geo_streamGeometryType[geometry.type](geometry, listener); + } + } + var d3_geo_streamObjectType = { + Feature: function(feature, listener) { + d3_geo_streamGeometry(feature.geometry, listener); + }, + FeatureCollection: function(object, listener) { + var features = object.features, i = -1, n = features.length; + while (++i < n) d3_geo_streamGeometry(features[i].geometry, listener); + } + }; + var d3_geo_streamGeometryType = { + Sphere: function(object, listener) { + listener.sphere(); + }, + Point: function(object, listener) { + object = object.coordinates; + listener.point(object[0], object[1], object[2]); + }, + MultiPoint: function(object, listener) { + var coordinates = object.coordinates, i = -1, n = coordinates.length; + while (++i < n) object = coordinates[i], listener.point(object[0], object[1], object[2]); + }, + LineString: function(object, listener) { + d3_geo_streamLine(object.coordinates, listener, 0); + }, + MultiLineString: function(object, listener) { + var coordinates = object.coordinates, i = -1, n = coordinates.length; + while (++i < n) d3_geo_streamLine(coordinates[i], listener, 0); + }, + Polygon: function(object, listener) { + d3_geo_streamPolygon(object.coordinates, listener); + }, + MultiPolygon: function(object, listener) { + var coordinates = object.coordinates, i = -1, n = coordinates.length; + while (++i < n) d3_geo_streamPolygon(coordinates[i], listener); + }, + GeometryCollection: function(object, listener) { + var geometries = object.geometries, i = -1, n = geometries.length; + while (++i < n) d3_geo_streamGeometry(geometries[i], listener); + } + }; + function d3_geo_streamLine(coordinates, listener, closed) { + var i = -1, n = coordinates.length - closed, coordinate; + listener.lineStart(); + while (++i < n) coordinate = coordinates[i], listener.point(coordinate[0], coordinate[1], coordinate[2]); + listener.lineEnd(); + } + function d3_geo_streamPolygon(coordinates, listener) { + var i = -1, n = coordinates.length; + listener.polygonStart(); + while (++i < n) d3_geo_streamLine(coordinates[i], listener, 1); + listener.polygonEnd(); + } + d3.geo.area = function(object) { + d3_geo_areaSum = 0; + d3.geo.stream(object, d3_geo_area); + return d3_geo_areaSum; + }; + var d3_geo_areaSum, d3_geo_areaRingSum = new d3_adder(); + var d3_geo_area = { + sphere: function() { + d3_geo_areaSum += 4 * π; + }, + point: d3_noop, + lineStart: d3_noop, + lineEnd: d3_noop, + polygonStart: function() { + d3_geo_areaRingSum.reset(); + d3_geo_area.lineStart = d3_geo_areaRingStart; + }, + polygonEnd: function() { + var area = 2 * d3_geo_areaRingSum; + d3_geo_areaSum += area < 0 ? 4 * π + area : area; + d3_geo_area.lineStart = d3_geo_area.lineEnd = d3_geo_area.point = d3_noop; + } + }; + function d3_geo_areaRingStart() { + var λ00, φ00, λ0, cosφ0, sinφ0; + d3_geo_area.point = function(λ, φ) { + d3_geo_area.point = nextPoint; + λ0 = (λ00 = λ) * d3_radians, cosφ0 = Math.cos(φ = (φ00 = φ) * d3_radians / 2 + π / 4), + sinφ0 = Math.sin(φ); + }; + function nextPoint(λ, φ) { + λ *= d3_radians; + φ = φ * d3_radians / 2 + π / 4; + 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λ); + d3_geo_areaRingSum.add(Math.atan2(v, u)); + λ0 = λ, cosφ0 = cosφ, sinφ0 = sinφ; + } + d3_geo_area.lineEnd = function() { + nextPoint(λ00, φ00); + }; + } + function d3_geo_cartesian(spherical) { + var λ = spherical[0], φ = spherical[1], cosφ = Math.cos(φ); + return [ cosφ * Math.cos(λ), cosφ * Math.sin(λ), Math.sin(φ) ]; + } + function d3_geo_cartesianDot(a, b) { + return a[0] * b[0] + a[1] * b[1] + a[2] * b[2]; + } + function d3_geo_cartesianCross(a, b) { + 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] ]; + } + function d3_geo_cartesianAdd(a, b) { + a[0] += b[0]; + a[1] += b[1]; + a[2] += b[2]; + } + function d3_geo_cartesianScale(vector, k) { + return [ vector[0] * k, vector[1] * k, vector[2] * k ]; + } + function d3_geo_cartesianNormalize(d) { + var l = Math.sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]); + d[0] /= l; + d[1] /= l; + d[2] /= l; + } + function d3_geo_spherical(cartesian) { + return [ Math.atan2(cartesian[1], cartesian[0]), d3_asin(cartesian[2]) ]; + } + function d3_geo_sphericalEqual(a, b) { + return abs(a[0] - b[0]) < ε && abs(a[1] - b[1]) < ε; + } + d3.geo.bounds = function() { + var λ0, φ0, λ1, φ1, λ_, λ__, φ__, p0, dλSum, ranges, range; + var bound = { + point: point, + lineStart: lineStart, + lineEnd: lineEnd, + polygonStart: function() { + bound.point = ringPoint; + bound.lineStart = ringStart; + bound.lineEnd = ringEnd; + dλSum = 0; + d3_geo_area.polygonStart(); + }, + polygonEnd: function() { + d3_geo_area.polygonEnd(); + bound.point = point; + bound.lineStart = lineStart; + bound.lineEnd = lineEnd; + if (d3_geo_areaRingSum < 0) λ0 = -(λ1 = 180), φ0 = -(φ1 = 90); else if (dλSum > ε) φ1 = 90; else if (dλSum < -ε) φ0 = -90; + range[0] = λ0, range[1] = λ1; + } + }; + function point(λ, φ) { + ranges.push(range = [ λ0 = λ, λ1 = λ ]); + if (φ < φ0) φ0 = φ; + if (φ > φ1) φ1 = φ; + } + function linePoint(λ, φ) { + var p = d3_geo_cartesian([ λ * d3_radians, φ * d3_radians ]); + if (p0) { + var normal = d3_geo_cartesianCross(p0, p), equatorial = [ normal[1], -normal[0], 0 ], inflection = d3_geo_cartesianCross(equatorial, normal); + d3_geo_cartesianNormalize(inflection); + inflection = d3_geo_spherical(inflection); + var dλ = λ - λ_, s = dλ > 0 ? 1 : -1, λi = inflection[0] * d3_degrees * s, antimeridian = abs(dλ) > 180; + if (antimeridian ^ (s * λ_ < λi && λi < s * λ)) { + var φi = inflection[1] * d3_degrees; + if (φi > φ1) φ1 = φi; + } else if (λi = (λi + 360) % 360 - 180, antimeridian ^ (s * λ_ < λi && λi < s * λ)) { + var φi = -inflection[1] * d3_degrees; + if (φi < φ0) φ0 = φi; + } else { + if (φ < φ0) φ0 = φ; + if (φ > φ1) φ1 = φ; + } + if (antimeridian) { + if (λ < λ_) { + if (angle(λ0, λ) > angle(λ0, λ1)) λ1 = λ; + } else { + if (angle(λ, λ1) > angle(λ0, λ1)) λ0 = λ; + } + } else { + if (λ1 >= λ0) { + if (λ < λ0) λ0 = λ; + if (λ > λ1) λ1 = λ; + } else { + if (λ > λ_) { + if (angle(λ0, λ) > angle(λ0, λ1)) λ1 = λ; + } else { + if (angle(λ, λ1) > angle(λ0, λ1)) λ0 = λ; + } + } + } + } else { + point(λ, φ); + } + p0 = p, λ_ = λ; + } + function lineStart() { + bound.point = linePoint; + } + function lineEnd() { + range[0] = λ0, range[1] = λ1; + bound.point = point; + p0 = null; + } + function ringPoint(λ, φ) { + if (p0) { + var dλ = λ - λ_; + dλSum += abs(dλ) > 180 ? dλ + (dλ > 0 ? 360 : -360) : dλ; + } else λ__ = λ, φ__ = φ; + d3_geo_area.point(λ, φ); + linePoint(λ, φ); + } + function ringStart() { + d3_geo_area.lineStart(); + } + function ringEnd() { + ringPoint(λ__, φ__); + d3_geo_area.lineEnd(); + if (abs(dλSum) > ε) λ0 = -(λ1 = 180); + range[0] = λ0, range[1] = λ1; + p0 = null; + } + function angle(λ0, λ1) { + return (λ1 -= λ0) < 0 ? λ1 + 360 : λ1; + } + function compareRanges(a, b) { + return a[0] - b[0]; + } + function withinRange(x, range) { + return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x; + } + return function(feature) { + φ1 = λ1 = -(λ0 = φ0 = Infinity); + ranges = []; + d3.geo.stream(feature, bound); + var n = ranges.length; + if (n) { + ranges.sort(compareRanges); + for (var i = 1, a = ranges[0], b, merged = [ a ]; i < n; ++i) { + b = ranges[i]; + if (withinRange(b[0], a) || withinRange(b[1], a)) { + if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1]; + if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0]; + } else { + merged.push(a = b); + } + } + var best = -Infinity, dλ; + for (var n = merged.length - 1, i = 0, a = merged[n], b; i <= n; a = b, ++i) { + b = merged[i]; + if ((dλ = angle(a[1], b[0])) > best) best = dλ, λ0 = b[0], λ1 = a[1]; + } + } + ranges = range = null; + return λ0 === Infinity || φ0 === Infinity ? [ [ NaN, NaN ], [ NaN, NaN ] ] : [ [ λ0, φ0 ], [ λ1, φ1 ] ]; + }; + }(); + d3.geo.centroid = function(object) { + 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; + d3.geo.stream(object, d3_geo_centroid); + var x = d3_geo_centroidX2, y = d3_geo_centroidY2, z = d3_geo_centroidZ2, m = x * x + y * y + z * z; + if (m < ε2) { + x = d3_geo_centroidX1, y = d3_geo_centroidY1, z = d3_geo_centroidZ1; + if (d3_geo_centroidW1 < ε) x = d3_geo_centroidX0, y = d3_geo_centroidY0, z = d3_geo_centroidZ0; + m = x * x + y * y + z * z; + if (m < ε2) return [ NaN, NaN ]; + } + return [ Math.atan2(y, x) * d3_degrees, d3_asin(z / Math.sqrt(m)) * d3_degrees ]; + }; + 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; + var d3_geo_centroid = { + sphere: d3_noop, + point: d3_geo_centroidPoint, + lineStart: d3_geo_centroidLineStart, + lineEnd: d3_geo_centroidLineEnd, + polygonStart: function() { + d3_geo_centroid.lineStart = d3_geo_centroidRingStart; + }, + polygonEnd: function() { + d3_geo_centroid.lineStart = d3_geo_centroidLineStart; + } + }; + function d3_geo_centroidPoint(λ, φ) { + λ *= d3_radians; + var cosφ = Math.cos(φ *= d3_radians); + d3_geo_centroidPointXYZ(cosφ * Math.cos(λ), cosφ * Math.sin(λ), Math.sin(φ)); + } + function d3_geo_centroidPointXYZ(x, y, z) { + ++d3_geo_centroidW0; + d3_geo_centroidX0 += (x - d3_geo_centroidX0) / d3_geo_centroidW0; + d3_geo_centroidY0 += (y - d3_geo_centroidY0) / d3_geo_centroidW0; + d3_geo_centroidZ0 += (z - d3_geo_centroidZ0) / d3_geo_centroidW0; + } + function d3_geo_centroidLineStart() { + var x0, y0, z0; + d3_geo_centroid.point = function(λ, φ) { + λ *= d3_radians; + var cosφ = Math.cos(φ *= d3_radians); + x0 = cosφ * Math.cos(λ); + y0 = cosφ * Math.sin(λ); + z0 = Math.sin(φ); + d3_geo_centroid.point = nextPoint; + d3_geo_centroidPointXYZ(x0, y0, z0); + }; + function nextPoint(λ, φ) { + λ *= d3_radians; + 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); + d3_geo_centroidW1 += w; + d3_geo_centroidX1 += w * (x0 + (x0 = x)); + d3_geo_centroidY1 += w * (y0 + (y0 = y)); + d3_geo_centroidZ1 += w * (z0 + (z0 = z)); + d3_geo_centroidPointXYZ(x0, y0, z0); + } + } + function d3_geo_centroidLineEnd() { + d3_geo_centroid.point = d3_geo_centroidPoint; + } + function d3_geo_centroidRingStart() { + var λ00, φ00, x0, y0, z0; + d3_geo_centroid.point = function(λ, φ) { + λ00 = λ, φ00 = φ; + d3_geo_centroid.point = nextPoint; + λ *= d3_radians; + var cosφ = Math.cos(φ *= d3_radians); + x0 = cosφ * Math.cos(λ); + y0 = cosφ * Math.sin(λ); + z0 = Math.sin(φ); + d3_geo_centroidPointXYZ(x0, y0, z0); + }; + d3_geo_centroid.lineEnd = function() { + nextPoint(λ00, φ00); + d3_geo_centroid.lineEnd = d3_geo_centroidLineEnd; + d3_geo_centroid.point = d3_geo_centroidPoint; + }; + function nextPoint(λ, φ) { + λ *= d3_radians; + 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); + d3_geo_centroidX2 += v * cx; + d3_geo_centroidY2 += v * cy; + d3_geo_centroidZ2 += v * cz; + d3_geo_centroidW1 += w; + d3_geo_centroidX1 += w * (x0 + (x0 = x)); + d3_geo_centroidY1 += w * (y0 + (y0 = y)); + d3_geo_centroidZ1 += w * (z0 + (z0 = z)); + d3_geo_centroidPointXYZ(x0, y0, z0); + } + } + function d3_geo_compose(a, b) { + function compose(x, y) { + return x = a(x, y), b(x[0], x[1]); + } + if (a.invert && b.invert) compose.invert = function(x, y) { + return x = b.invert(x, y), x && a.invert(x[0], x[1]); + }; + return compose; + } + function d3_true() { + return true; + } + function d3_geo_clipPolygon(segments, compare, clipStartInside, interpolate, listener) { + var subject = [], clip = []; + segments.forEach(function(segment) { + if ((n = segment.length - 1) <= 0) return; + var n, p0 = segment[0], p1 = segment[n]; + if (d3_geo_sphericalEqual(p0, p1)) { + listener.lineStart(); + for (var i = 0; i < n; ++i) listener.point((p0 = segment[i])[0], p0[1]); + listener.lineEnd(); + return; + } + var a = new d3_geo_clipPolygonIntersection(p0, segment, null, true), b = new d3_geo_clipPolygonIntersection(p0, null, a, false); + a.o = b; + subject.push(a); + clip.push(b); + a = new d3_geo_clipPolygonIntersection(p1, segment, null, false); + b = new d3_geo_clipPolygonIntersection(p1, null, a, true); + a.o = b; + subject.push(a); + clip.push(b); + }); + clip.sort(compare); + d3_geo_clipPolygonLinkCircular(subject); + d3_geo_clipPolygonLinkCircular(clip); + if (!subject.length) return; + for (var i = 0, entry = clipStartInside, n = clip.length; i < n; ++i) { + clip[i].e = entry = !entry; + } + var start = subject[0], points, point; + while (1) { + var current = start, isSubject = true; + while (current.v) if ((current = current.n) === start) return; + points = current.z; + listener.lineStart(); + do { + current.v = current.o.v = true; + if (current.e) { + if (isSubject) { + for (var i = 0, n = points.length; i < n; ++i) listener.point((point = points[i])[0], point[1]); + } else { + interpolate(current.x, current.n.x, 1, listener); + } + current = current.n; + } else { + if (isSubject) { + points = current.p.z; + for (var i = points.length - 1; i >= 0; --i) listener.point((point = points[i])[0], point[1]); + } else { + interpolate(current.x, current.p.x, -1, listener); + } + current = current.p; + } + current = current.o; + points = current.z; + isSubject = !isSubject; + } while (!current.v); + listener.lineEnd(); + } + } + function d3_geo_clipPolygonLinkCircular(array) { + if (!(n = array.length)) return; + var n, i = 0, a = array[0], b; + while (++i < n) { + a.n = b = array[i]; + b.p = a; + a = b; + } + a.n = b = array[0]; + b.p = a; + } + function d3_geo_clipPolygonIntersection(point, points, other, entry) { + this.x = point; + this.z = points; + this.o = other; + this.e = entry; + this.v = false; + this.n = this.p = null; + } + function d3_geo_clip(pointVisible, clipLine, interpolate, clipStart) { + return function(rotate, listener) { + var line = clipLine(listener), rotatedClipStart = rotate.invert(clipStart[0], clipStart[1]); + var clip = { + point: point, + lineStart: lineStart, + lineEnd: lineEnd, + polygonStart: function() { + clip.point = pointRing; + clip.lineStart = ringStart; + clip.lineEnd = ringEnd; + segments = []; + polygon = []; + }, + polygonEnd: function() { + clip.point = point; + clip.lineStart = lineStart; + clip.lineEnd = lineEnd; + segments = d3.merge(segments); + var clipStartInside = d3_geo_pointInPolygon(rotatedClipStart, polygon); + if (segments.length) { + if (!polygonStarted) listener.polygonStart(), polygonStarted = true; + d3_geo_clipPolygon(segments, d3_geo_clipSort, clipStartInside, interpolate, listener); + } else if (clipStartInside) { + if (!polygonStarted) listener.polygonStart(), polygonStarted = true; + listener.lineStart(); + interpolate(null, null, 1, listener); + listener.lineEnd(); + } + if (polygonStarted) listener.polygonEnd(), polygonStarted = false; + segments = polygon = null; + }, + sphere: function() { + listener.polygonStart(); + listener.lineStart(); + interpolate(null, null, 1, listener); + listener.lineEnd(); + listener.polygonEnd(); + } + }; + function point(λ, φ) { + var point = rotate(λ, φ); + if (pointVisible(λ = point[0], φ = point[1])) listener.point(λ, φ); + } + function pointLine(λ, φ) { + var point = rotate(λ, φ); + line.point(point[0], point[1]); + } + function lineStart() { + clip.point = pointLine; + line.lineStart(); + } + function lineEnd() { + clip.point = point; + line.lineEnd(); + } + var segments; + var buffer = d3_geo_clipBufferListener(), ringListener = clipLine(buffer), polygonStarted = false, polygon, ring; + function pointRing(λ, φ) { + ring.push([ λ, φ ]); + var point = rotate(λ, φ); + ringListener.point(point[0], point[1]); + } + function ringStart() { + ringListener.lineStart(); + ring = []; + } + function ringEnd() { + pointRing(ring[0][0], ring[0][1]); + ringListener.lineEnd(); + var clean = ringListener.clean(), ringSegments = buffer.buffer(), segment, n = ringSegments.length; + ring.pop(); + polygon.push(ring); + ring = null; + if (!n) return; + if (clean & 1) { + segment = ringSegments[0]; + var n = segment.length - 1, i = -1, point; + if (n > 0) { + if (!polygonStarted) listener.polygonStart(), polygonStarted = true; + listener.lineStart(); + while (++i < n) listener.point((point = segment[i])[0], point[1]); + listener.lineEnd(); + } + return; + } + if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift())); + segments.push(ringSegments.filter(d3_geo_clipSegmentLength1)); + } + return clip; + }; + } + function d3_geo_clipSegmentLength1(segment) { + return segment.length > 1; + } + function d3_geo_clipBufferListener() { + var lines = [], line; + return { + lineStart: function() { + lines.push(line = []); + }, + point: function(λ, φ) { + line.push([ λ, φ ]); + }, + lineEnd: d3_noop, + buffer: function() { + var buffer = lines; + lines = []; + line = null; + return buffer; + }, + rejoin: function() { + if (lines.length > 1) lines.push(lines.pop().concat(lines.shift())); + } + }; + } + function d3_geo_clipSort(a, b) { + return ((a = a.x)[0] < 0 ? a[1] - halfπ - ε : halfπ - a[1]) - ((b = b.x)[0] < 0 ? b[1] - halfπ - ε : halfπ - b[1]); + } + var d3_geo_clipAntimeridian = d3_geo_clip(d3_true, d3_geo_clipAntimeridianLine, d3_geo_clipAntimeridianInterpolate, [ -π, -π / 2 ]); + function d3_geo_clipAntimeridianLine(listener) { + var λ0 = NaN, φ0 = NaN, sλ0 = NaN, clean; + return { + lineStart: function() { + listener.lineStart(); + clean = 1; + }, + point: function(λ1, φ1) { + var sλ1 = λ1 > 0 ? π : -π, dλ = abs(λ1 - λ0); + if (abs(dλ - π) < ε) { + listener.point(λ0, φ0 = (φ0 + φ1) / 2 > 0 ? halfπ : -halfπ); + listener.point(sλ0, φ0); + listener.lineEnd(); + listener.lineStart(); + listener.point(sλ1, φ0); + listener.point(λ1, φ0); + clean = 0; + } else if (sλ0 !== sλ1 && dλ >= π) { + if (abs(λ0 - sλ0) < ε) λ0 -= sλ0 * ε; + if (abs(λ1 - sλ1) < ε) λ1 -= sλ1 * ε; + φ0 = d3_geo_clipAntimeridianIntersect(λ0, φ0, λ1, φ1); + listener.point(sλ0, φ0); + listener.lineEnd(); + listener.lineStart(); + listener.point(sλ1, φ0); + clean = 0; + } + listener.point(λ0 = λ1, φ0 = φ1); + sλ0 = sλ1; + }, + lineEnd: function() { + listener.lineEnd(); + λ0 = φ0 = NaN; + }, + clean: function() { + return 2 - clean; + } + }; + } + function d3_geo_clipAntimeridianIntersect(λ0, φ0, λ1, φ1) { + var cosφ0, cosφ1, sinλ0_λ1 = Math.sin(λ0 - λ1); + 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; + } + function d3_geo_clipAntimeridianInterpolate(from, to, direction, listener) { + var φ; + if (from == null) { + φ = direction * halfπ; + listener.point(-π, φ); + listener.point(0, φ); + listener.point(π, φ); + listener.point(π, 0); + listener.point(π, -φ); + listener.point(0, -φ); + listener.point(-π, -φ); + listener.point(-π, 0); + listener.point(-π, φ); + } else if (abs(from[0] - to[0]) > ε) { + var s = from[0] < to[0] ? π : -π; + φ = direction * s / 2; + listener.point(-s, φ); + listener.point(0, φ); + listener.point(s, φ); + } else { + listener.point(to[0], to[1]); + } + } + function d3_geo_pointInPolygon(point, polygon) { + var meridian = point[0], parallel = point[1], meridianNormal = [ Math.sin(meridian), -Math.cos(meridian), 0 ], polarAngle = 0, winding = 0; + d3_geo_areaRingSum.reset(); + for (var i = 0, n = polygon.length; i < n; ++i) { + var ring = polygon[i], m = ring.length; + if (!m) continue; + var point0 = ring[0], λ0 = point0[0], φ0 = point0[1] / 2 + π / 4, sinφ0 = Math.sin(φ0), cosφ0 = Math.cos(φ0), j = 1; + while (true) { + if (j === m) j = 0; + point = ring[j]; + 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φ; + d3_geo_areaRingSum.add(Math.atan2(k * sdλ * Math.sin(adλ), cosφ0 * cosφ + k * Math.cos(adλ))); + polarAngle += antimeridian ? dλ + sdλ * τ : dλ; + if (antimeridian ^ λ0 >= meridian ^ λ >= meridian) { + var arc = d3_geo_cartesianCross(d3_geo_cartesian(point0), d3_geo_cartesian(point)); + d3_geo_cartesianNormalize(arc); + var intersection = d3_geo_cartesianCross(meridianNormal, arc); + d3_geo_cartesianNormalize(intersection); + var φarc = (antimeridian ^ dλ >= 0 ? -1 : 1) * d3_asin(intersection[2]); + if (parallel > φarc || parallel === φarc && (arc[0] || arc[1])) { + winding += antimeridian ^ dλ >= 0 ? 1 : -1; + } + } + if (!j++) break; + λ0 = λ, sinφ0 = sinφ, cosφ0 = cosφ, point0 = point; + } + } + return (polarAngle < -ε || polarAngle < ε && d3_geo_areaRingSum < -ε) ^ winding & 1; + } + function d3_geo_clipCircle(radius) { + var cr = Math.cos(radius), smallRadius = cr > 0, notHemisphere = abs(cr) > ε, interpolate = d3_geo_circleInterpolate(radius, 6 * d3_radians); + return d3_geo_clip(visible, clipLine, interpolate, smallRadius ? [ 0, -radius ] : [ -π, radius - π ]); + function visible(λ, φ) { + return Math.cos(λ) * Math.cos(φ) > cr; + } + function clipLine(listener) { + var point0, c0, v0, v00, clean; + return { + lineStart: function() { + v00 = v0 = false; + clean = 1; + }, + point: function(λ, φ) { + var point1 = [ λ, φ ], point2, v = visible(λ, φ), c = smallRadius ? v ? 0 : code(λ, φ) : v ? code(λ + (λ < 0 ? π : -π), φ) : 0; + if (!point0 && (v00 = v0 = v)) listener.lineStart(); + if (v !== v0) { + point2 = intersect(point0, point1); + if (d3_geo_sphericalEqual(point0, point2) || d3_geo_sphericalEqual(point1, point2)) { + point1[0] += ε; + point1[1] += ε; + v = visible(point1[0], point1[1]); + } + } + if (v !== v0) { + clean = 0; + if (v) { + listener.lineStart(); + point2 = intersect(point1, point0); + listener.point(point2[0], point2[1]); + } else { + point2 = intersect(point0, point1); + listener.point(point2[0], point2[1]); + listener.lineEnd(); + } + point0 = point2; + } else if (notHemisphere && point0 && smallRadius ^ v) { + var t; + if (!(c & c0) && (t = intersect(point1, point0, true))) { + clean = 0; + if (smallRadius) { + listener.lineStart(); + listener.point(t[0][0], t[0][1]); + listener.point(t[1][0], t[1][1]); + listener.lineEnd(); + } else { + listener.point(t[1][0], t[1][1]); + listener.lineEnd(); + listener.lineStart(); + listener.point(t[0][0], t[0][1]); + } + } + } + if (v && (!point0 || !d3_geo_sphericalEqual(point0, point1))) { + listener.point(point1[0], point1[1]); + } + point0 = point1, v0 = v, c0 = c; + }, + lineEnd: function() { + if (v0) listener.lineEnd(); + point0 = null; + }, + clean: function() { + return clean | (v00 && v0) << 1; + } + }; + } + function intersect(a, b, two) { + var pa = d3_geo_cartesian(a), pb = d3_geo_cartesian(b); + var n1 = [ 1, 0, 0 ], n2 = d3_geo_cartesianCross(pa, pb), n2n2 = d3_geo_cartesianDot(n2, n2), n1n2 = n2[0], determinant = n2n2 - n1n2 * n1n2; + if (!determinant) return !two && a; + 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); + d3_geo_cartesianAdd(A, B); + 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); + if (t2 < 0) return; + var t = Math.sqrt(t2), q = d3_geo_cartesianScale(u, (-w - t) / uu); + d3_geo_cartesianAdd(q, A); + q = d3_geo_spherical(q); + if (!two) return q; + var λ0 = a[0], λ1 = b[0], φ0 = a[1], φ1 = b[1], z; + if (λ1 < λ0) z = λ0, λ0 = λ1, λ1 = z; + var δλ = λ1 - λ0, polar = abs(δλ - π) < ε, meridian = polar || δλ < ε; + if (!polar && φ1 < φ0) z = φ0, φ0 = φ1, φ1 = z; + 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)) { + var q1 = d3_geo_cartesianScale(u, (-w + t) / uu); + d3_geo_cartesianAdd(q1, A); + return [ q, d3_geo_spherical(q1) ]; + } + } + function code(λ, φ) { + var r = smallRadius ? radius : π - radius, code = 0; + if (λ < -r) code |= 1; else if (λ > r) code |= 2; + if (φ < -r) code |= 4; else if (φ > r) code |= 8; + return code; + } + } + function d3_geom_clipLine(x0, y0, x1, y1) { + return function(line) { + 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; + r = x0 - ax; + if (!dx && r > 0) return; + r /= dx; + if (dx < 0) { + if (r < t0) return; + if (r < t1) t1 = r; + } else if (dx > 0) { + if (r > t1) return; + if (r > t0) t0 = r; + } + r = x1 - ax; + if (!dx && r < 0) return; + r /= dx; + if (dx < 0) { + if (r > t1) return; + if (r > t0) t0 = r; + } else if (dx > 0) { + if (r < t0) return; + if (r < t1) t1 = r; + } + r = y0 - ay; + if (!dy && r > 0) return; + r /= dy; + if (dy < 0) { + if (r < t0) return; + if (r < t1) t1 = r; + } else if (dy > 0) { + if (r > t1) return; + if (r > t0) t0 = r; + } + r = y1 - ay; + if (!dy && r < 0) return; + r /= dy; + if (dy < 0) { + if (r > t1) return; + if (r > t0) t0 = r; + } else if (dy > 0) { + if (r < t0) return; + if (r < t1) t1 = r; + } + if (t0 > 0) line.a = { + x: ax + t0 * dx, + y: ay + t0 * dy + }; + if (t1 < 1) line.b = { + x: ax + t1 * dx, + y: ay + t1 * dy + }; + return line; + }; + } + var d3_geo_clipExtentMAX = 1e9; + d3.geo.clipExtent = function() { + var x0, y0, x1, y1, stream, clip, clipExtent = { + stream: function(output) { + if (stream) stream.valid = false; + stream = clip(output); + stream.valid = true; + return stream; + }, + extent: function(_) { + if (!arguments.length) return [ [ x0, y0 ], [ x1, y1 ] ]; + clip = d3_geo_clipExtent(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]); + if (stream) stream.valid = false, stream = null; + return clipExtent; + } + }; + return clipExtent.extent([ [ 0, 0 ], [ 960, 500 ] ]); + }; + function d3_geo_clipExtent(x0, y0, x1, y1) { + return function(listener) { + var listener_ = listener, bufferListener = d3_geo_clipBufferListener(), clipLine = d3_geom_clipLine(x0, y0, x1, y1), segments, polygon, ring; + var clip = { + point: point, + lineStart: lineStart, + lineEnd: lineEnd, + polygonStart: function() { + listener = bufferListener; + segments = []; + polygon = []; + clean = true; + }, + polygonEnd: function() { + listener = listener_; + segments = d3.merge(segments); + var clipStartInside = insidePolygon([ x0, y1 ]), inside = clean && clipStartInside, visible = segments.length; + if (inside || visible) { + listener.polygonStart(); + if (inside) { + listener.lineStart(); + interpolate(null, null, 1, listener); + listener.lineEnd(); + } + if (visible) { + d3_geo_clipPolygon(segments, compare, clipStartInside, interpolate, listener); + } + listener.polygonEnd(); + } + segments = polygon = ring = null; + } + }; + function insidePolygon(p) { + var wn = 0, n = polygon.length, y = p[1]; + for (var i = 0; i < n; ++i) { + for (var j = 1, v = polygon[i], m = v.length, a = v[0], b; j < m; ++j) { + b = v[j]; + if (a[1] <= y) { + if (b[1] > y && d3_cross2d(a, b, p) > 0) ++wn; + } else { + if (b[1] <= y && d3_cross2d(a, b, p) < 0) --wn; + } + a = b; + } + } + return wn !== 0; + } + function interpolate(from, to, direction, listener) { + var a = 0, a1 = 0; + if (from == null || (a = corner(from, direction)) !== (a1 = corner(to, direction)) || comparePoints(from, to) < 0 ^ direction > 0) { + do { + listener.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0); + } while ((a = (a + direction + 4) % 4) !== a1); + } else { + listener.point(to[0], to[1]); + } + } + function pointVisible(x, y) { + return x0 <= x && x <= x1 && y0 <= y && y <= y1; + } + function point(x, y) { + if (pointVisible(x, y)) listener.point(x, y); + } + var x__, y__, v__, x_, y_, v_, first, clean; + function lineStart() { + clip.point = linePoint; + if (polygon) polygon.push(ring = []); + first = true; + v_ = false; + x_ = y_ = NaN; + } + function lineEnd() { + if (segments) { + linePoint(x__, y__); + if (v__ && v_) bufferListener.rejoin(); + segments.push(bufferListener.buffer()); + } + clip.point = point; + if (v_) listener.lineEnd(); + } + function linePoint(x, y) { + x = Math.max(-d3_geo_clipExtentMAX, Math.min(d3_geo_clipExtentMAX, x)); + y = Math.max(-d3_geo_clipExtentMAX, Math.min(d3_geo_clipExtentMAX, y)); + var v = pointVisible(x, y); + if (polygon) ring.push([ x, y ]); + if (first) { + x__ = x, y__ = y, v__ = v; + first = false; + if (v) { + listener.lineStart(); + listener.point(x, y); + } + } else { + if (v && v_) listener.point(x, y); else { + var l = { + a: { + x: x_, + y: y_ + }, + b: { + x: x, + y: y + } + }; + if (clipLine(l)) { + if (!v_) { + listener.lineStart(); + listener.point(l.a.x, l.a.y); + } + listener.point(l.b.x, l.b.y); + if (!v) listener.lineEnd(); + clean = false; + } else if (v) { + listener.lineStart(); + listener.point(x, y); + clean = false; + } + } + } + x_ = x, y_ = y, v_ = v; + } + return clip; + }; + function corner(p, direction) { + 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; + } + function compare(a, b) { + return comparePoints(a.x, b.x); + } + function comparePoints(a, b) { + var ca = corner(a, 1), cb = corner(b, 1); + 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]; + } + } + function d3_geo_conic(projectAt) { + var φ0 = 0, φ1 = π / 3, m = d3_geo_projectionMutator(projectAt), p = m(φ0, φ1); + p.parallels = function(_) { + if (!arguments.length) return [ φ0 / π * 180, φ1 / π * 180 ]; + return m(φ0 = _[0] * π / 180, φ1 = _[1] * π / 180); + }; + return p; + } + function d3_geo_conicEqualArea(φ0, φ1) { + 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; + function forward(λ, φ) { + var ρ = Math.sqrt(C - 2 * n * Math.sin(φ)) / n; + return [ ρ * Math.sin(λ *= n), ρ0 - ρ * Math.cos(λ) ]; + } + forward.invert = function(x, y) { + var ρ0_y = ρ0 - y; + return [ Math.atan2(x, ρ0_y) / n, d3_asin((C - (x * x + ρ0_y * ρ0_y) * n * n) / (2 * n)) ]; + }; + return forward; + } + (d3.geo.conicEqualArea = function() { + return d3_geo_conic(d3_geo_conicEqualArea); + }).raw = d3_geo_conicEqualArea; + d3.geo.albers = function() { + return d3.geo.conicEqualArea().rotate([ 96, 0 ]).center([ -.6, 38.7 ]).parallels([ 29.5, 45.5 ]).scale(1070); + }; + d3.geo.albersUsa = function() { + var lower48 = d3.geo.albers(); + var alaska = d3.geo.conicEqualArea().rotate([ 154, 0 ]).center([ -2, 58.5 ]).parallels([ 55, 65 ]); + var hawaii = d3.geo.conicEqualArea().rotate([ 157, 0 ]).center([ -3, 19.9 ]).parallels([ 8, 18 ]); + var point, pointStream = { + point: function(x, y) { + point = [ x, y ]; + } + }, lower48Point, alaskaPoint, hawaiiPoint; + function albersUsa(coordinates) { + var x = coordinates[0], y = coordinates[1]; + point = null; + (lower48Point(x, y), point) || (alaskaPoint(x, y), point) || hawaiiPoint(x, y); + return point; + } + albersUsa.invert = function(coordinates) { + var k = lower48.scale(), t = lower48.translate(), x = (coordinates[0] - t[0]) / k, y = (coordinates[1] - t[1]) / k; + return (y >= .12 && y < .234 && x >= -.425 && x < -.214 ? alaska : y >= .166 && y < .234 && x >= -.214 && x < -.115 ? hawaii : lower48).invert(coordinates); + }; + albersUsa.stream = function(stream) { + var lower48Stream = lower48.stream(stream), alaskaStream = alaska.stream(stream), hawaiiStream = hawaii.stream(stream); + return { + point: function(x, y) { + lower48Stream.point(x, y); + alaskaStream.point(x, y); + hawaiiStream.point(x, y); + }, + sphere: function() { + lower48Stream.sphere(); + alaskaStream.sphere(); + hawaiiStream.sphere(); + }, + lineStart: function() { + lower48Stream.lineStart(); + alaskaStream.lineStart(); + hawaiiStream.lineStart(); + }, + lineEnd: function() { + lower48Stream.lineEnd(); + alaskaStream.lineEnd(); + hawaiiStream.lineEnd(); + }, + polygonStart: function() { + lower48Stream.polygonStart(); + alaskaStream.polygonStart(); + hawaiiStream.polygonStart(); + }, + polygonEnd: function() { + lower48Stream.polygonEnd(); + alaskaStream.polygonEnd(); + hawaiiStream.polygonEnd(); + } + }; + }; + albersUsa.precision = function(_) { + if (!arguments.length) return lower48.precision(); + lower48.precision(_); + alaska.precision(_); + hawaii.precision(_); + return albersUsa; + }; + albersUsa.scale = function(_) { + if (!arguments.length) return lower48.scale(); + lower48.scale(_); + alaska.scale(_ * .35); + hawaii.scale(_); + return albersUsa.translate(lower48.translate()); + }; + albersUsa.translate = function(_) { + if (!arguments.length) return lower48.translate(); + var k = lower48.scale(), x = +_[0], y = +_[1]; + lower48Point = lower48.translate(_).clipExtent([ [ x - .455 * k, y - .238 * k ], [ x + .455 * k, y + .238 * k ] ]).stream(pointStream).point; + 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; + 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; + return albersUsa; + }; + return albersUsa.scale(1070); + }; + var d3_geo_pathAreaSum, d3_geo_pathAreaPolygon, d3_geo_pathArea = { + point: d3_noop, + lineStart: d3_noop, + lineEnd: d3_noop, + polygonStart: function() { + d3_geo_pathAreaPolygon = 0; + d3_geo_pathArea.lineStart = d3_geo_pathAreaRingStart; + }, + polygonEnd: function() { + d3_geo_pathArea.lineStart = d3_geo_pathArea.lineEnd = d3_geo_pathArea.point = d3_noop; + d3_geo_pathAreaSum += abs(d3_geo_pathAreaPolygon / 2); + } + }; + function d3_geo_pathAreaRingStart() { + var x00, y00, x0, y0; + d3_geo_pathArea.point = function(x, y) { + d3_geo_pathArea.point = nextPoint; + x00 = x0 = x, y00 = y0 = y; + }; + function nextPoint(x, y) { + d3_geo_pathAreaPolygon += y0 * x - x0 * y; + x0 = x, y0 = y; + } + d3_geo_pathArea.lineEnd = function() { + nextPoint(x00, y00); + }; + } + var d3_geo_pathBoundsX0, d3_geo_pathBoundsY0, d3_geo_pathBoundsX1, d3_geo_pathBoundsY1; + var d3_geo_pathBounds = { + point: d3_geo_pathBoundsPoint, + lineStart: d3_noop, + lineEnd: d3_noop, + polygonStart: d3_noop, + polygonEnd: d3_noop + }; + function d3_geo_pathBoundsPoint(x, y) { + if (x < d3_geo_pathBoundsX0) d3_geo_pathBoundsX0 = x; + if (x > d3_geo_pathBoundsX1) d3_geo_pathBoundsX1 = x; + if (y < d3_geo_pathBoundsY0) d3_geo_pathBoundsY0 = y; + if (y > d3_geo_pathBoundsY1) d3_geo_pathBoundsY1 = y; + } + function d3_geo_pathBuffer() { + var pointCircle = d3_geo_pathBufferCircle(4.5), buffer = []; + var stream = { + point: point, + lineStart: function() { + stream.point = pointLineStart; + }, + lineEnd: lineEnd, + polygonStart: function() { + stream.lineEnd = lineEndPolygon; + }, + polygonEnd: function() { + stream.lineEnd = lineEnd; + stream.point = point; + }, + pointRadius: function(_) { + pointCircle = d3_geo_pathBufferCircle(_); + return stream; + }, + result: function() { + if (buffer.length) { + var result = buffer.join(""); + buffer = []; + return result; + } + } + }; + function point(x, y) { + buffer.push("M", x, ",", y, pointCircle); + } + function pointLineStart(x, y) { + buffer.push("M", x, ",", y); + stream.point = pointLine; + } + function pointLine(x, y) { + buffer.push("L", x, ",", y); + } + function lineEnd() { + stream.point = point; + } + function lineEndPolygon() { + buffer.push("Z"); + } + return stream; + } + function d3_geo_pathBufferCircle(radius) { + return "m0," + radius + "a" + radius + "," + radius + " 0 1,1 0," + -2 * radius + "a" + radius + "," + radius + " 0 1,1 0," + 2 * radius + "z"; + } + var d3_geo_pathCentroid = { + point: d3_geo_pathCentroidPoint, + lineStart: d3_geo_pathCentroidLineStart, + lineEnd: d3_geo_pathCentroidLineEnd, + polygonStart: function() { + d3_geo_pathCentroid.lineStart = d3_geo_pathCentroidRingStart; + }, + polygonEnd: function() { + d3_geo_pathCentroid.point = d3_geo_pathCentroidPoint; + d3_geo_pathCentroid.lineStart = d3_geo_pathCentroidLineStart; + d3_geo_pathCentroid.lineEnd = d3_geo_pathCentroidLineEnd; + } + }; + function d3_geo_pathCentroidPoint(x, y) { + d3_geo_centroidX0 += x; + d3_geo_centroidY0 += y; + ++d3_geo_centroidZ0; + } + function d3_geo_pathCentroidLineStart() { + var x0, y0; + d3_geo_pathCentroid.point = function(x, y) { + d3_geo_pathCentroid.point = nextPoint; + d3_geo_pathCentroidPoint(x0 = x, y0 = y); + }; + function nextPoint(x, y) { + var dx = x - x0, dy = y - y0, z = Math.sqrt(dx * dx + dy * dy); + d3_geo_centroidX1 += z * (x0 + x) / 2; + d3_geo_centroidY1 += z * (y0 + y) / 2; + d3_geo_centroidZ1 += z; + d3_geo_pathCentroidPoint(x0 = x, y0 = y); + } + } + function d3_geo_pathCentroidLineEnd() { + d3_geo_pathCentroid.point = d3_geo_pathCentroidPoint; + } + function d3_geo_pathCentroidRingStart() { + var x00, y00, x0, y0; + d3_geo_pathCentroid.point = function(x, y) { + d3_geo_pathCentroid.point = nextPoint; + d3_geo_pathCentroidPoint(x00 = x0 = x, y00 = y0 = y); + }; + function nextPoint(x, y) { + var dx = x - x0, dy = y - y0, z = Math.sqrt(dx * dx + dy * dy); + d3_geo_centroidX1 += z * (x0 + x) / 2; + d3_geo_centroidY1 += z * (y0 + y) / 2; + d3_geo_centroidZ1 += z; + z = y0 * x - x0 * y; + d3_geo_centroidX2 += z * (x0 + x); + d3_geo_centroidY2 += z * (y0 + y); + d3_geo_centroidZ2 += z * 3; + d3_geo_pathCentroidPoint(x0 = x, y0 = y); + } + d3_geo_pathCentroid.lineEnd = function() { + nextPoint(x00, y00); + }; + } + function d3_geo_pathContext(context) { + var pointRadius = 4.5; + var stream = { + point: point, + lineStart: function() { + stream.point = pointLineStart; + }, + lineEnd: lineEnd, + polygonStart: function() { + stream.lineEnd = lineEndPolygon; + }, + polygonEnd: function() { + stream.lineEnd = lineEnd; + stream.point = point; + }, + pointRadius: function(_) { + pointRadius = _; + return stream; + }, + result: d3_noop + }; + function point(x, y) { + context.moveTo(x + pointRadius, y); + context.arc(x, y, pointRadius, 0, τ); + } + function pointLineStart(x, y) { + context.moveTo(x, y); + stream.point = pointLine; + } + function pointLine(x, y) { + context.lineTo(x, y); + } + function lineEnd() { + stream.point = point; + } + function lineEndPolygon() { + context.closePath(); + } + return stream; + } + function d3_geo_resample(project) { + var δ2 = .5, cosMinDistance = Math.cos(30 * d3_radians), maxDepth = 16; + function resample(stream) { + return (maxDepth ? resampleRecursive : resampleNone)(stream); + } + function resampleNone(stream) { + return d3_geo_transformPoint(stream, function(x, y) { + x = project(x, y); + stream.point(x[0], x[1]); + }); + } + function resampleRecursive(stream) { + var λ00, φ00, x00, y00, a00, b00, c00, λ0, x0, y0, a0, b0, c0; + var resample = { + point: point, + lineStart: lineStart, + lineEnd: lineEnd, + polygonStart: function() { + stream.polygonStart(); + resample.lineStart = ringStart; + }, + polygonEnd: function() { + stream.polygonEnd(); + resample.lineStart = lineStart; + } + }; + function point(x, y) { + x = project(x, y); + stream.point(x[0], x[1]); + } + function lineStart() { + x0 = NaN; + resample.point = linePoint; + stream.lineStart(); + } + function linePoint(λ, φ) { + var c = d3_geo_cartesian([ λ, φ ]), p = project(λ, φ); + 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); + stream.point(x0, y0); + } + function lineEnd() { + resample.point = point; + stream.lineEnd(); + } + function ringStart() { + lineStart(); + resample.point = ringPoint; + resample.lineEnd = ringEnd; + } + function ringPoint(λ, φ) { + linePoint(λ00 = λ, φ00 = φ), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0; + resample.point = linePoint; + } + function ringEnd() { + resampleLineTo(x0, y0, λ0, a0, b0, c0, x00, y00, λ00, a00, b00, c00, maxDepth, stream); + resample.lineEnd = lineEnd; + lineEnd(); + } + return resample; + } + function resampleLineTo(x0, y0, λ0, a0, b0, c0, x1, y1, λ1, a1, b1, c1, depth, stream) { + var dx = x1 - x0, dy = y1 - y0, d2 = dx * dx + dy * dy; + if (d2 > 4 * δ2 && depth--) { + 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; + if (dz * dz / d2 > δ2 || abs((dx * dx2 + dy * dy2) / d2 - .5) > .3 || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { + resampleLineTo(x0, y0, λ0, a0, b0, c0, x2, y2, λ2, a /= m, b /= m, c, depth, stream); + stream.point(x2, y2); + resampleLineTo(x2, y2, λ2, a, b, c, x1, y1, λ1, a1, b1, c1, depth, stream); + } + } + } + resample.precision = function(_) { + if (!arguments.length) return Math.sqrt(δ2); + maxDepth = (δ2 = _ * _) > 0 && 16; + return resample; + }; + return resample; + } + d3.geo.path = function() { + var pointRadius = 4.5, projection, context, projectStream, contextStream, cacheStream; + function path(object) { + if (object) { + if (typeof pointRadius === "function") contextStream.pointRadius(+pointRadius.apply(this, arguments)); + if (!cacheStream || !cacheStream.valid) cacheStream = projectStream(contextStream); + d3.geo.stream(object, cacheStream); + } + return contextStream.result(); + } + path.area = function(object) { + d3_geo_pathAreaSum = 0; + d3.geo.stream(object, projectStream(d3_geo_pathArea)); + return d3_geo_pathAreaSum; + }; + path.centroid = function(object) { + 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; + d3.geo.stream(object, projectStream(d3_geo_pathCentroid)); + 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 ]; + }; + path.bounds = function(object) { + d3_geo_pathBoundsX1 = d3_geo_pathBoundsY1 = -(d3_geo_pathBoundsX0 = d3_geo_pathBoundsY0 = Infinity); + d3.geo.stream(object, projectStream(d3_geo_pathBounds)); + return [ [ d3_geo_pathBoundsX0, d3_geo_pathBoundsY0 ], [ d3_geo_pathBoundsX1, d3_geo_pathBoundsY1 ] ]; + }; + path.projection = function(_) { + if (!arguments.length) return projection; + projectStream = (projection = _) ? _.stream || d3_geo_pathProjectStream(_) : d3_identity; + return reset(); + }; + path.context = function(_) { + if (!arguments.length) return context; + contextStream = (context = _) == null ? new d3_geo_pathBuffer() : new d3_geo_pathContext(_); + if (typeof pointRadius !== "function") contextStream.pointRadius(pointRadius); + return reset(); + }; + path.pointRadius = function(_) { + if (!arguments.length) return pointRadius; + pointRadius = typeof _ === "function" ? _ : (contextStream.pointRadius(+_), +_); + return path; + }; + function reset() { + cacheStream = null; + return path; + } + return path.projection(d3.geo.albersUsa()).context(null); + }; + function d3_geo_pathProjectStream(project) { + var resample = d3_geo_resample(function(x, y) { + return project([ x * d3_degrees, y * d3_degrees ]); + }); + return function(stream) { + return d3_geo_projectionRadians(resample(stream)); + }; + } + d3.geo.transform = function(methods) { + return { + stream: function(stream) { + var transform = new d3_geo_transform(stream); + for (var k in methods) transform[k] = methods[k]; + return transform; + } + }; + }; + function d3_geo_transform(stream) { + this.stream = stream; + } + d3_geo_transform.prototype = { + point: function(x, y) { + this.stream.point(x, y); + }, + sphere: function() { + this.stream.sphere(); + }, + lineStart: function() { + this.stream.lineStart(); + }, + lineEnd: function() { + this.stream.lineEnd(); + }, + polygonStart: function() { + this.stream.polygonStart(); + }, + polygonEnd: function() { + this.stream.polygonEnd(); + } + }; + function d3_geo_transformPoint(stream, point) { + return { + point: point, + sphere: function() { + stream.sphere(); + }, + lineStart: function() { + stream.lineStart(); + }, + lineEnd: function() { + stream.lineEnd(); + }, + polygonStart: function() { + stream.polygonStart(); + }, + polygonEnd: function() { + stream.polygonEnd(); + } + }; + } + d3.geo.projection = d3_geo_projection; + d3.geo.projectionMutator = d3_geo_projectionMutator; + function d3_geo_projection(project) { + return d3_geo_projectionMutator(function() { + return project; + })(); + } + function d3_geo_projectionMutator(projectAt) { + var project, rotate, projectRotate, projectResample = d3_geo_resample(function(x, y) { + x = project(x, y); + return [ x[0] * k + δx, δy - x[1] * k ]; + }), 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; + function projection(point) { + point = projectRotate(point[0] * d3_radians, point[1] * d3_radians); + return [ point[0] * k + δx, δy - point[1] * k ]; + } + function invert(point) { + point = projectRotate.invert((point[0] - δx) / k, (δy - point[1]) / k); + return point && [ point[0] * d3_degrees, point[1] * d3_degrees ]; + } + projection.stream = function(output) { + if (stream) stream.valid = false; + stream = d3_geo_projectionRadians(preclip(rotate, projectResample(postclip(output)))); + stream.valid = true; + return stream; + }; + projection.clipAngle = function(_) { + if (!arguments.length) return clipAngle; + preclip = _ == null ? (clipAngle = _, d3_geo_clipAntimeridian) : d3_geo_clipCircle((clipAngle = +_) * d3_radians); + return invalidate(); + }; + projection.clipExtent = function(_) { + if (!arguments.length) return clipExtent; + clipExtent = _; + postclip = _ ? d3_geo_clipExtent(_[0][0], _[0][1], _[1][0], _[1][1]) : d3_identity; + return invalidate(); + }; + projection.scale = function(_) { + if (!arguments.length) return k; + k = +_; + return reset(); + }; + projection.translate = function(_) { + if (!arguments.length) return [ x, y ]; + x = +_[0]; + y = +_[1]; + return reset(); + }; + projection.center = function(_) { + if (!arguments.length) return [ λ * d3_degrees, φ * d3_degrees ]; + λ = _[0] % 360 * d3_radians; + φ = _[1] % 360 * d3_radians; + return reset(); + }; + projection.rotate = function(_) { + if (!arguments.length) return [ δλ * d3_degrees, δφ * d3_degrees, δγ * d3_degrees ]; + δλ = _[0] % 360 * d3_radians; + δφ = _[1] % 360 * d3_radians; + δγ = _.length > 2 ? _[2] % 360 * d3_radians : 0; + return reset(); + }; + d3.rebind(projection, projectResample, "precision"); + function reset() { + projectRotate = d3_geo_compose(rotate = d3_geo_rotation(δλ, δφ, δγ), project); + var center = project(λ, φ); + δx = x - center[0] * k; + δy = y + center[1] * k; + return invalidate(); + } + function invalidate() { + if (stream) stream.valid = false, stream = null; + return projection; + } + return function() { + project = projectAt.apply(this, arguments); + projection.invert = project.invert && invert; + return reset(); + }; + } + function d3_geo_projectionRadians(stream) { + return d3_geo_transformPoint(stream, function(x, y) { + stream.point(x * d3_radians, y * d3_radians); + }); + } + function d3_geo_equirectangular(λ, φ) { + return [ λ, φ ]; + } + (d3.geo.equirectangular = function() { + return d3_geo_projection(d3_geo_equirectangular); + }).raw = d3_geo_equirectangular.invert = d3_geo_equirectangular; + d3.geo.rotation = function(rotate) { + rotate = d3_geo_rotation(rotate[0] % 360 * d3_radians, rotate[1] * d3_radians, rotate.length > 2 ? rotate[2] * d3_radians : 0); + function forward(coordinates) { + coordinates = rotate(coordinates[0] * d3_radians, coordinates[1] * d3_radians); + return coordinates[0] *= d3_degrees, coordinates[1] *= d3_degrees, coordinates; + } + forward.invert = function(coordinates) { + coordinates = rotate.invert(coordinates[0] * d3_radians, coordinates[1] * d3_radians); + return coordinates[0] *= d3_degrees, coordinates[1] *= d3_degrees, coordinates; + }; + return forward; + }; + function d3_geo_identityRotation(λ, φ) { + return [ λ > π ? λ - τ : λ < -π ? λ + τ : λ, φ ]; + } + d3_geo_identityRotation.invert = d3_geo_equirectangular; + function d3_geo_rotation(δλ, δφ, δγ) { + return δλ ? δφ || δγ ? d3_geo_compose(d3_geo_rotationλ(δλ), d3_geo_rotationφγ(δφ, δγ)) : d3_geo_rotationλ(δλ) : δφ || δγ ? d3_geo_rotationφγ(δφ, δγ) : d3_geo_identityRotation; + } + function d3_geo_forwardRotationλ(δλ) { + return function(λ, φ) { + return λ += δλ, [ λ > π ? λ - τ : λ < -π ? λ + τ : λ, φ ]; + }; + } + function d3_geo_rotationλ(δλ) { + var rotation = d3_geo_forwardRotationλ(δλ); + rotation.invert = d3_geo_forwardRotationλ(-δλ); + return rotation; + } + function d3_geo_rotationφγ(δφ, δγ) { + var cosδφ = Math.cos(δφ), sinδφ = Math.sin(δφ), cosδγ = Math.cos(δγ), sinδγ = Math.sin(δγ); + function rotation(λ, φ) { + var cosφ = Math.cos(φ), x = Math.cos(λ) * cosφ, y = Math.sin(λ) * cosφ, z = Math.sin(φ), k = z * cosδφ + x * sinδφ; + return [ Math.atan2(y * cosδγ - k * sinδγ, x * cosδφ - z * sinδφ), d3_asin(k * cosδγ + y * sinδγ) ]; + } + rotation.invert = function(λ, φ) { + var cosφ = Math.cos(φ), x = Math.cos(λ) * cosφ, y = Math.sin(λ) * cosφ, z = Math.sin(φ), k = z * cosδγ - y * sinδγ; + return [ Math.atan2(y * cosδγ + z * sinδγ, x * cosδφ + k * sinδφ), d3_asin(k * cosδφ - x * sinδφ) ]; + }; + return rotation; + } + d3.geo.circle = function() { + var origin = [ 0, 0 ], angle, precision = 6, interpolate; + function circle() { + 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 = []; + interpolate(null, null, 1, { + point: function(x, y) { + ring.push(x = rotate(x, y)); + x[0] *= d3_degrees, x[1] *= d3_degrees; + } + }); + return { + type: "Polygon", + coordinates: [ ring ] + }; + } + circle.origin = function(x) { + if (!arguments.length) return origin; + origin = x; + return circle; + }; + circle.angle = function(x) { + if (!arguments.length) return angle; + interpolate = d3_geo_circleInterpolate((angle = +x) * d3_radians, precision * d3_radians); + return circle; + }; + circle.precision = function(_) { + if (!arguments.length) return precision; + interpolate = d3_geo_circleInterpolate(angle * d3_radians, (precision = +_) * d3_radians); + return circle; + }; + return circle.angle(90); + }; + function d3_geo_circleInterpolate(radius, precision) { + var cr = Math.cos(radius), sr = Math.sin(radius); + return function(from, to, direction, listener) { + var step = direction * precision; + if (from != null) { + from = d3_geo_circleAngle(cr, from); + to = d3_geo_circleAngle(cr, to); + if (direction > 0 ? from < to : from > to) from += direction * τ; + } else { + from = radius + direction * τ; + to = radius - .5 * step; + } + for (var point, t = from; direction > 0 ? t > to : t < to; t -= step) { + listener.point((point = d3_geo_spherical([ cr, -sr * Math.cos(t), -sr * Math.sin(t) ]))[0], point[1]); + } + }; + } + function d3_geo_circleAngle(cr, point) { + var a = d3_geo_cartesian(point); + a[0] -= cr; + d3_geo_cartesianNormalize(a); + var angle = d3_acos(-a[1]); + return ((-a[2] < 0 ? -angle : angle) + 2 * Math.PI - ε) % (2 * Math.PI); + } + d3.geo.distance = function(a, b) { + 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; + 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Δλ); + }; + d3.geo.graticule = function() { + var x1, x0, X1, X0, y1, y0, Y1, Y0, dx = 10, dy = dx, DX = 90, DY = 360, x, y, X, Y, precision = 2.5; + function graticule() { + return { + type: "MultiLineString", + coordinates: lines() + }; + } + function lines() { + 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) { + return abs(x % DX) > ε; + }).map(x)).concat(d3.range(Math.ceil(y0 / dy) * dy, y1, dy).filter(function(y) { + return abs(y % DY) > ε; + }).map(y)); + } + graticule.lines = function() { + return lines().map(function(coordinates) { + return { + type: "LineString", + coordinates: coordinates + }; + }); + }; + graticule.outline = function() { + return { + type: "Polygon", + coordinates: [ X(X0).concat(Y(Y1).slice(1), X(X1).reverse().slice(1), Y(Y0).reverse().slice(1)) ] + }; + }; + graticule.extent = function(_) { + if (!arguments.length) return graticule.minorExtent(); + return graticule.majorExtent(_).minorExtent(_); + }; + graticule.majorExtent = function(_) { + if (!arguments.length) return [ [ X0, Y0 ], [ X1, Y1 ] ]; + X0 = +_[0][0], X1 = +_[1][0]; + Y0 = +_[0][1], Y1 = +_[1][1]; + if (X0 > X1) _ = X0, X0 = X1, X1 = _; + if (Y0 > Y1) _ = Y0, Y0 = Y1, Y1 = _; + return graticule.precision(precision); + }; + graticule.minorExtent = function(_) { + if (!arguments.length) return [ [ x0, y0 ], [ x1, y1 ] ]; + x0 = +_[0][0], x1 = +_[1][0]; + y0 = +_[0][1], y1 = +_[1][1]; + if (x0 > x1) _ = x0, x0 = x1, x1 = _; + if (y0 > y1) _ = y0, y0 = y1, y1 = _; + return graticule.precision(precision); + }; + graticule.step = function(_) { + if (!arguments.length) return graticule.minorStep(); + return graticule.majorStep(_).minorStep(_); + }; + graticule.majorStep = function(_) { + if (!arguments.length) return [ DX, DY ]; + DX = +_[0], DY = +_[1]; + return graticule; + }; + graticule.minorStep = function(_) { + if (!arguments.length) return [ dx, dy ]; + dx = +_[0], dy = +_[1]; + return graticule; + }; + graticule.precision = function(_) { + if (!arguments.length) return precision; + precision = +_; + x = d3_geo_graticuleX(y0, y1, 90); + y = d3_geo_graticuleY(x0, x1, precision); + X = d3_geo_graticuleX(Y0, Y1, 90); + Y = d3_geo_graticuleY(X0, X1, precision); + return graticule; + }; + return graticule.majorExtent([ [ -180, -90 + ε ], [ 180, 90 - ε ] ]).minorExtent([ [ -180, -80 - ε ], [ 180, 80 + ε ] ]); + }; + function d3_geo_graticuleX(y0, y1, dy) { + var y = d3.range(y0, y1 - ε, dy).concat(y1); + return function(x) { + return y.map(function(y) { + return [ x, y ]; + }); + }; + } + function d3_geo_graticuleY(x0, x1, dx) { + var x = d3.range(x0, x1 - ε, dx).concat(x1); + return function(y) { + return x.map(function(x) { + return [ x, y ]; + }); + }; + } + function d3_source(d) { + return d.source; + } + function d3_target(d) { + return d.target; + } + d3.geo.greatArc = function() { + var source = d3_source, source_, target = d3_target, target_; + function greatArc() { + return { + type: "LineString", + coordinates: [ source_ || source.apply(this, arguments), target_ || target.apply(this, arguments) ] + }; + } + greatArc.distance = function() { + return d3.geo.distance(source_ || source.apply(this, arguments), target_ || target.apply(this, arguments)); + }; + greatArc.source = function(_) { + if (!arguments.length) return source; + source = _, source_ = typeof _ === "function" ? null : _; + return greatArc; + }; + greatArc.target = function(_) { + if (!arguments.length) return target; + target = _, target_ = typeof _ === "function" ? null : _; + return greatArc; + }; + greatArc.precision = function() { + return arguments.length ? greatArc : 0; + }; + return greatArc; + }; + d3.geo.interpolate = function(source, target) { + return d3_geo_interpolate(source[0] * d3_radians, source[1] * d3_radians, target[0] * d3_radians, target[1] * d3_radians); + }; + function d3_geo_interpolate(x0, y0, x1, y1) { + 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); + var interpolate = d ? function(t) { + 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; + return [ Math.atan2(y, x) * d3_degrees, Math.atan2(z, Math.sqrt(x * x + y * y)) * d3_degrees ]; + } : function() { + return [ x0 * d3_degrees, y0 * d3_degrees ]; + }; + interpolate.distance = d; + return interpolate; + } + d3.geo.length = function(object) { + d3_geo_lengthSum = 0; + d3.geo.stream(object, d3_geo_length); + return d3_geo_lengthSum; + }; + var d3_geo_lengthSum; + var d3_geo_length = { + sphere: d3_noop, + point: d3_noop, + lineStart: d3_geo_lengthLineStart, + lineEnd: d3_noop, + polygonStart: d3_noop, + polygonEnd: d3_noop + }; + function d3_geo_lengthLineStart() { + var λ0, sinφ0, cosφ0; + d3_geo_length.point = function(λ, φ) { + λ0 = λ * d3_radians, sinφ0 = Math.sin(φ *= d3_radians), cosφ0 = Math.cos(φ); + d3_geo_length.point = nextPoint; + }; + d3_geo_length.lineEnd = function() { + d3_geo_length.point = d3_geo_length.lineEnd = d3_noop; + }; + function nextPoint(λ, φ) { + var sinφ = Math.sin(φ *= d3_radians), cosφ = Math.cos(φ), t = abs((λ *= d3_radians) - λ0), cosΔλ = Math.cos(t); + 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Δλ); + λ0 = λ, sinφ0 = sinφ, cosφ0 = cosφ; + } + } + function d3_geo_azimuthal(scale, angle) { + function azimuthal(λ, φ) { + var cosλ = Math.cos(λ), cosφ = Math.cos(φ), k = scale(cosλ * cosφ); + return [ k * cosφ * Math.sin(λ), k * Math.sin(φ) ]; + } + azimuthal.invert = function(x, y) { + var ρ = Math.sqrt(x * x + y * y), c = angle(ρ), sinc = Math.sin(c), cosc = Math.cos(c); + return [ Math.atan2(x * sinc, ρ * cosc), Math.asin(ρ && y * sinc / ρ) ]; + }; + return azimuthal; + } + var d3_geo_azimuthalEqualArea = d3_geo_azimuthal(function(cosλcosφ) { + return Math.sqrt(2 / (1 + cosλcosφ)); + }, function(ρ) { + return 2 * Math.asin(ρ / 2); + }); + (d3.geo.azimuthalEqualArea = function() { + return d3_geo_projection(d3_geo_azimuthalEqualArea); + }).raw = d3_geo_azimuthalEqualArea; + var d3_geo_azimuthalEquidistant = d3_geo_azimuthal(function(cosλcosφ) { + var c = Math.acos(cosλcosφ); + return c && c / Math.sin(c); + }, d3_identity); + (d3.geo.azimuthalEquidistant = function() { + return d3_geo_projection(d3_geo_azimuthalEquidistant); + }).raw = d3_geo_azimuthalEquidistant; + function d3_geo_conicConformal(φ0, φ1) { + var cosφ0 = Math.cos(φ0), t = function(φ) { + return Math.tan(π / 4 + φ / 2); + }, 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; + if (!n) return d3_geo_mercator; + function forward(λ, φ) { + if (F > 0) { + if (φ < -halfπ + ε) φ = -halfπ + ε; + } else { + if (φ > halfπ - ε) φ = halfπ - ε; + } + var ρ = F / Math.pow(t(φ), n); + return [ ρ * Math.sin(n * λ), F - ρ * Math.cos(n * λ) ]; + } + forward.invert = function(x, y) { + var ρ0_y = F - y, ρ = d3_sgn(n) * Math.sqrt(x * x + ρ0_y * ρ0_y); + return [ Math.atan2(x, ρ0_y) / n, 2 * Math.atan(Math.pow(F / ρ, 1 / n)) - halfπ ]; + }; + return forward; + } + (d3.geo.conicConformal = function() { + return d3_geo_conic(d3_geo_conicConformal); + }).raw = d3_geo_conicConformal; + function d3_geo_conicEquidistant(φ0, φ1) { + var cosφ0 = Math.cos(φ0), n = φ0 === φ1 ? Math.sin(φ0) : (cosφ0 - Math.cos(φ1)) / (φ1 - φ0), G = cosφ0 / n + φ0; + if (abs(n) < ε) return d3_geo_equirectangular; + function forward(λ, φ) { + var ρ = G - φ; + return [ ρ * Math.sin(n * λ), G - ρ * Math.cos(n * λ) ]; + } + forward.invert = function(x, y) { + var ρ0_y = G - y; + return [ Math.atan2(x, ρ0_y) / n, G - d3_sgn(n) * Math.sqrt(x * x + ρ0_y * ρ0_y) ]; + }; + return forward; + } + (d3.geo.conicEquidistant = function() { + return d3_geo_conic(d3_geo_conicEquidistant); + }).raw = d3_geo_conicEquidistant; + var d3_geo_gnomonic = d3_geo_azimuthal(function(cosλcosφ) { + return 1 / cosλcosφ; + }, Math.atan); + (d3.geo.gnomonic = function() { + return d3_geo_projection(d3_geo_gnomonic); + }).raw = d3_geo_gnomonic; + function d3_geo_mercator(λ, φ) { + return [ λ, Math.log(Math.tan(π / 4 + φ / 2)) ]; + } + d3_geo_mercator.invert = function(x, y) { + return [ x, 2 * Math.atan(Math.exp(y)) - halfπ ]; + }; + function d3_geo_mercatorProjection(project) { + var m = d3_geo_projection(project), scale = m.scale, translate = m.translate, clipExtent = m.clipExtent, clipAuto; + m.scale = function() { + var v = scale.apply(m, arguments); + return v === m ? clipAuto ? m.clipExtent(null) : m : v; + }; + m.translate = function() { + var v = translate.apply(m, arguments); + return v === m ? clipAuto ? m.clipExtent(null) : m : v; + }; + m.clipExtent = function(_) { + var v = clipExtent.apply(m, arguments); + if (v === m) { + if (clipAuto = _ == null) { + var k = π * scale(), t = translate(); + clipExtent([ [ t[0] - k, t[1] - k ], [ t[0] + k, t[1] + k ] ]); + } + } else if (clipAuto) { + v = null; + } + return v; + }; + return m.clipExtent(null); + } + (d3.geo.mercator = function() { + return d3_geo_mercatorProjection(d3_geo_mercator); + }).raw = d3_geo_mercator; + var d3_geo_orthographic = d3_geo_azimuthal(function() { + return 1; + }, Math.asin); + (d3.geo.orthographic = function() { + return d3_geo_projection(d3_geo_orthographic); + }).raw = d3_geo_orthographic; + var d3_geo_stereographic = d3_geo_azimuthal(function(cosλcosφ) { + return 1 / (1 + cosλcosφ); + }, function(ρ) { + return 2 * Math.atan(ρ); + }); + (d3.geo.stereographic = function() { + return d3_geo_projection(d3_geo_stereographic); + }).raw = d3_geo_stereographic; + function d3_geo_transverseMercator(λ, φ) { + return [ Math.log(Math.tan(π / 4 + φ / 2)), -λ ]; + } + d3_geo_transverseMercator.invert = function(x, y) { + return [ -y, 2 * Math.atan(Math.exp(x)) - halfπ ]; + }; + (d3.geo.transverseMercator = function() { + var projection = d3_geo_mercatorProjection(d3_geo_transverseMercator), center = projection.center, rotate = projection.rotate; + projection.center = function(_) { + return _ ? center([ -_[1], _[0] ]) : (_ = center(), [ _[1], -_[0] ]); + }; + projection.rotate = function(_) { + return _ ? rotate([ _[0], _[1], _.length > 2 ? _[2] + 90 : 90 ]) : (_ = rotate(), + [ _[0], _[1], _[2] - 90 ]); + }; + return rotate([ 0, 0, 90 ]); + }).raw = d3_geo_transverseMercator; + d3.geom = {}; + function d3_geom_pointX(d) { + return d[0]; + } + function d3_geom_pointY(d) { + return d[1]; + } + d3.geom.hull = function(vertices) { + var x = d3_geom_pointX, y = d3_geom_pointY; + if (arguments.length) return hull(vertices); + function hull(data) { + if (data.length < 3) return []; + var fx = d3_functor(x), fy = d3_functor(y), i, n = data.length, points = [], flippedPoints = []; + for (i = 0; i < n; i++) { + points.push([ +fx.call(this, data[i], i), +fy.call(this, data[i], i), i ]); + } + points.sort(d3_geom_hullOrder); + for (i = 0; i < n; i++) flippedPoints.push([ points[i][0], -points[i][1] ]); + var upper = d3_geom_hullUpper(points), lower = d3_geom_hullUpper(flippedPoints); + var skipLeft = lower[0] === upper[0], skipRight = lower[lower.length - 1] === upper[upper.length - 1], polygon = []; + for (i = upper.length - 1; i >= 0; --i) polygon.push(data[points[upper[i]][2]]); + for (i = +skipLeft; i < lower.length - skipRight; ++i) polygon.push(data[points[lower[i]][2]]); + return polygon; + } + hull.x = function(_) { + return arguments.length ? (x = _, hull) : x; + }; + hull.y = function(_) { + return arguments.length ? (y = _, hull) : y; + }; + return hull; + }; + function d3_geom_hullUpper(points) { + var n = points.length, hull = [ 0, 1 ], hs = 2; + for (var i = 2; i < n; i++) { + while (hs > 1 && d3_cross2d(points[hull[hs - 2]], points[hull[hs - 1]], points[i]) <= 0) --hs; + hull[hs++] = i; + } + return hull.slice(0, hs); + } + function d3_geom_hullOrder(a, b) { + return a[0] - b[0] || a[1] - b[1]; + } + d3.geom.polygon = function(coordinates) { + d3_subclass(coordinates, d3_geom_polygonPrototype); + return coordinates; + }; + var d3_geom_polygonPrototype = d3.geom.polygon.prototype = []; + d3_geom_polygonPrototype.area = function() { + var i = -1, n = this.length, a, b = this[n - 1], area = 0; + while (++i < n) { + a = b; + b = this[i]; + area += a[1] * b[0] - a[0] * b[1]; + } + return area * .5; + }; + d3_geom_polygonPrototype.centroid = function(k) { + var i = -1, n = this.length, x = 0, y = 0, a, b = this[n - 1], c; + if (!arguments.length) k = -1 / (6 * this.area()); + while (++i < n) { + a = b; + b = this[i]; + c = a[0] * b[1] - b[0] * a[1]; + x += (a[0] + b[0]) * c; + y += (a[1] + b[1]) * c; + } + return [ x * k, y * k ]; + }; + d3_geom_polygonPrototype.clip = function(subject) { + 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; + while (++i < n) { + input = subject.slice(); + subject.length = 0; + b = this[i]; + c = input[(m = input.length - closed) - 1]; + j = -1; + while (++j < m) { + d = input[j]; + if (d3_geom_polygonInside(d, a, b)) { + if (!d3_geom_polygonInside(c, a, b)) { + subject.push(d3_geom_polygonIntersect(c, d, a, b)); + } + subject.push(d); + } else if (d3_geom_polygonInside(c, a, b)) { + subject.push(d3_geom_polygonIntersect(c, d, a, b)); + } + c = d; + } + if (closed) subject.push(subject[0]); + a = b; + } + return subject; + }; + function d3_geom_polygonInside(p, a, b) { + return (b[0] - a[0]) * (p[1] - a[1]) < (b[1] - a[1]) * (p[0] - a[0]); + } + function d3_geom_polygonIntersect(c, d, a, b) { + 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); + return [ x1 + ua * x21, y1 + ua * y21 ]; + } + function d3_geom_polygonClosed(coordinates) { + var a = coordinates[0], b = coordinates[coordinates.length - 1]; + return !(a[0] - b[0] || a[1] - b[1]); + } + var d3_geom_voronoiEdges, d3_geom_voronoiCells, d3_geom_voronoiBeaches, d3_geom_voronoiBeachPool = [], d3_geom_voronoiFirstCircle, d3_geom_voronoiCircles, d3_geom_voronoiCirclePool = []; + function d3_geom_voronoiBeach() { + d3_geom_voronoiRedBlackNode(this); + this.edge = this.site = this.circle = null; + } + function d3_geom_voronoiCreateBeach(site) { + var beach = d3_geom_voronoiBeachPool.pop() || new d3_geom_voronoiBeach(); + beach.site = site; + return beach; + } + function d3_geom_voronoiDetachBeach(beach) { + d3_geom_voronoiDetachCircle(beach); + d3_geom_voronoiBeaches.remove(beach); + d3_geom_voronoiBeachPool.push(beach); + d3_geom_voronoiRedBlackNode(beach); + } + function d3_geom_voronoiRemoveBeach(beach) { + var circle = beach.circle, x = circle.x, y = circle.cy, vertex = { + x: x, + y: y + }, previous = beach.P, next = beach.N, disappearing = [ beach ]; + d3_geom_voronoiDetachBeach(beach); + var lArc = previous; + while (lArc.circle && abs(x - lArc.circle.x) < ε && abs(y - lArc.circle.cy) < ε) { + previous = lArc.P; + disappearing.unshift(lArc); + d3_geom_voronoiDetachBeach(lArc); + lArc = previous; + } + disappearing.unshift(lArc); + d3_geom_voronoiDetachCircle(lArc); + var rArc = next; + while (rArc.circle && abs(x - rArc.circle.x) < ε && abs(y - rArc.circle.cy) < ε) { + next = rArc.N; + disappearing.push(rArc); + d3_geom_voronoiDetachBeach(rArc); + rArc = next; + } + disappearing.push(rArc); + d3_geom_voronoiDetachCircle(rArc); + var nArcs = disappearing.length, iArc; + for (iArc = 1; iArc < nArcs; ++iArc) { + rArc = disappearing[iArc]; + lArc = disappearing[iArc - 1]; + d3_geom_voronoiSetEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex); + } + lArc = disappearing[0]; + rArc = disappearing[nArcs - 1]; + rArc.edge = d3_geom_voronoiCreateEdge(lArc.site, rArc.site, null, vertex); + d3_geom_voronoiAttachCircle(lArc); + d3_geom_voronoiAttachCircle(rArc); + } + function d3_geom_voronoiAddBeach(site) { + var x = site.x, directrix = site.y, lArc, rArc, dxl, dxr, node = d3_geom_voronoiBeaches._; + while (node) { + dxl = d3_geom_voronoiLeftBreakPoint(node, directrix) - x; + if (dxl > ε) node = node.L; else { + dxr = x - d3_geom_voronoiRightBreakPoint(node, directrix); + if (dxr > ε) { + if (!node.R) { + lArc = node; + break; + } + node = node.R; + } else { + if (dxl > -ε) { + lArc = node.P; + rArc = node; + } else if (dxr > -ε) { + lArc = node; + rArc = node.N; + } else { + lArc = rArc = node; + } + break; + } + } + } + var newArc = d3_geom_voronoiCreateBeach(site); + d3_geom_voronoiBeaches.insert(lArc, newArc); + if (!lArc && !rArc) return; + if (lArc === rArc) { + d3_geom_voronoiDetachCircle(lArc); + rArc = d3_geom_voronoiCreateBeach(lArc.site); + d3_geom_voronoiBeaches.insert(newArc, rArc); + newArc.edge = rArc.edge = d3_geom_voronoiCreateEdge(lArc.site, newArc.site); + d3_geom_voronoiAttachCircle(lArc); + d3_geom_voronoiAttachCircle(rArc); + return; + } + if (!rArc) { + newArc.edge = d3_geom_voronoiCreateEdge(lArc.site, newArc.site); + return; + } + d3_geom_voronoiDetachCircle(lArc); + d3_geom_voronoiDetachCircle(rArc); + 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 = { + x: (cy * hb - by * hc) / d + ax, + y: (bx * hc - cx * hb) / d + ay + }; + d3_geom_voronoiSetEdgeEnd(rArc.edge, lSite, rSite, vertex); + newArc.edge = d3_geom_voronoiCreateEdge(lSite, site, null, vertex); + rArc.edge = d3_geom_voronoiCreateEdge(site, rSite, null, vertex); + d3_geom_voronoiAttachCircle(lArc); + d3_geom_voronoiAttachCircle(rArc); + } + function d3_geom_voronoiLeftBreakPoint(arc, directrix) { + var site = arc.site, rfocx = site.x, rfocy = site.y, pby2 = rfocy - directrix; + if (!pby2) return rfocx; + var lArc = arc.P; + if (!lArc) return -Infinity; + site = lArc.site; + var lfocx = site.x, lfocy = site.y, plby2 = lfocy - directrix; + if (!plby2) return lfocx; + var hl = lfocx - rfocx, aby2 = 1 / pby2 - 1 / plby2, b = hl / plby2; + if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx; + return (rfocx + lfocx) / 2; + } + function d3_geom_voronoiRightBreakPoint(arc, directrix) { + var rArc = arc.N; + if (rArc) return d3_geom_voronoiLeftBreakPoint(rArc, directrix); + var site = arc.site; + return site.y === directrix ? site.x : Infinity; + } + function d3_geom_voronoiCell(site) { + this.site = site; + this.edges = []; + } + d3_geom_voronoiCell.prototype.prepare = function() { + var halfEdges = this.edges, iHalfEdge = halfEdges.length, edge; + while (iHalfEdge--) { + edge = halfEdges[iHalfEdge].edge; + if (!edge.b || !edge.a) halfEdges.splice(iHalfEdge, 1); + } + halfEdges.sort(d3_geom_voronoiHalfEdgeOrder); + return halfEdges.length; + }; + function d3_geom_voronoiCloseCells(extent) { + 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; + while (iCell--) { + cell = cells[iCell]; + if (!cell || !cell.prepare()) continue; + halfEdges = cell.edges; + nHalfEdges = halfEdges.length; + iHalfEdge = 0; + while (iHalfEdge < nHalfEdges) { + end = halfEdges[iHalfEdge].end(), x3 = end.x, y3 = end.y; + start = halfEdges[++iHalfEdge % nHalfEdges].start(), x2 = start.x, y2 = start.y; + if (abs(x3 - x2) > ε || abs(y3 - y2) > ε) { + halfEdges.splice(iHalfEdge, 0, new d3_geom_voronoiHalfEdge(d3_geom_voronoiCreateBorderEdge(cell.site, end, abs(x3 - x0) < ε && y1 - y3 > ε ? { + x: x0, + y: abs(x2 - x0) < ε ? y2 : y1 + } : abs(y3 - y1) < ε && x1 - x3 > ε ? { + x: abs(y2 - y1) < ε ? x2 : x1, + y: y1 + } : abs(x3 - x1) < ε && y3 - y0 > ε ? { + x: x1, + y: abs(x2 - x1) < ε ? y2 : y0 + } : abs(y3 - y0) < ε && x3 - x0 > ε ? { + x: abs(y2 - y0) < ε ? x2 : x0, + y: y0 + } : null), cell.site, null)); + ++nHalfEdges; + } + } + } + } + function d3_geom_voronoiHalfEdgeOrder(a, b) { + return b.angle - a.angle; + } + function d3_geom_voronoiCircle() { + d3_geom_voronoiRedBlackNode(this); + this.x = this.y = this.arc = this.site = this.cy = null; + } + function d3_geom_voronoiAttachCircle(arc) { + var lArc = arc.P, rArc = arc.N; + if (!lArc || !rArc) return; + var lSite = lArc.site, cSite = arc.site, rSite = rArc.site; + if (lSite === rSite) return; + var bx = cSite.x, by = cSite.y, ax = lSite.x - bx, ay = lSite.y - by, cx = rSite.x - bx, cy = rSite.y - by; + var d = 2 * (ax * cy - ay * cx); + if (d >= -ε2) return; + 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; + var circle = d3_geom_voronoiCirclePool.pop() || new d3_geom_voronoiCircle(); + circle.arc = arc; + circle.site = cSite; + circle.x = x + bx; + circle.y = cy + Math.sqrt(x * x + y * y); + circle.cy = cy; + arc.circle = circle; + var before = null, node = d3_geom_voronoiCircles._; + while (node) { + if (circle.y < node.y || circle.y === node.y && circle.x <= node.x) { + if (node.L) node = node.L; else { + before = node.P; + break; + } + } else { + if (node.R) node = node.R; else { + before = node; + break; + } + } + } + d3_geom_voronoiCircles.insert(before, circle); + if (!before) d3_geom_voronoiFirstCircle = circle; + } + function d3_geom_voronoiDetachCircle(arc) { + var circle = arc.circle; + if (circle) { + if (!circle.P) d3_geom_voronoiFirstCircle = circle.N; + d3_geom_voronoiCircles.remove(circle); + d3_geom_voronoiCirclePool.push(circle); + d3_geom_voronoiRedBlackNode(circle); + arc.circle = null; + } + } + function d3_geom_voronoiClipEdges(extent) { + 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; + while (i--) { + e = edges[i]; + if (!d3_geom_voronoiConnectEdge(e, extent) || !clip(e) || abs(e.a.x - e.b.x) < ε && abs(e.a.y - e.b.y) < ε) { + e.a = e.b = null; + edges.splice(i, 1); + } + } + } + function d3_geom_voronoiConnectEdge(edge, extent) { + var vb = edge.b; + if (vb) return true; + 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; + if (ry === ly) { + if (fx < x0 || fx >= x1) return; + if (lx > rx) { + if (!va) va = { + x: fx, + y: y0 + }; else if (va.y >= y1) return; + vb = { + x: fx, + y: y1 + }; + } else { + if (!va) va = { + x: fx, + y: y1 + }; else if (va.y < y0) return; + vb = { + x: fx, + y: y0 + }; + } + } else { + fm = (lx - rx) / (ry - ly); + fb = fy - fm * fx; + if (fm < -1 || fm > 1) { + if (lx > rx) { + if (!va) va = { + x: (y0 - fb) / fm, + y: y0 + }; else if (va.y >= y1) return; + vb = { + x: (y1 - fb) / fm, + y: y1 + }; + } else { + if (!va) va = { + x: (y1 - fb) / fm, + y: y1 + }; else if (va.y < y0) return; + vb = { + x: (y0 - fb) / fm, + y: y0 + }; + } + } else { + if (ly < ry) { + if (!va) va = { + x: x0, + y: fm * x0 + fb + }; else if (va.x >= x1) return; + vb = { + x: x1, + y: fm * x1 + fb + }; + } else { + if (!va) va = { + x: x1, + y: fm * x1 + fb + }; else if (va.x < x0) return; + vb = { + x: x0, + y: fm * x0 + fb + }; + } + } + } + edge.a = va; + edge.b = vb; + return true; + } + function d3_geom_voronoiEdge(lSite, rSite) { + this.l = lSite; + this.r = rSite; + this.a = this.b = null; + } + function d3_geom_voronoiCreateEdge(lSite, rSite, va, vb) { + var edge = new d3_geom_voronoiEdge(lSite, rSite); + d3_geom_voronoiEdges.push(edge); + if (va) d3_geom_voronoiSetEdgeEnd(edge, lSite, rSite, va); + if (vb) d3_geom_voronoiSetEdgeEnd(edge, rSite, lSite, vb); + d3_geom_voronoiCells[lSite.i].edges.push(new d3_geom_voronoiHalfEdge(edge, lSite, rSite)); + d3_geom_voronoiCells[rSite.i].edges.push(new d3_geom_voronoiHalfEdge(edge, rSite, lSite)); + return edge; + } + function d3_geom_voronoiCreateBorderEdge(lSite, va, vb) { + var edge = new d3_geom_voronoiEdge(lSite, null); + edge.a = va; + edge.b = vb; + d3_geom_voronoiEdges.push(edge); + return edge; + } + function d3_geom_voronoiSetEdgeEnd(edge, lSite, rSite, vertex) { + if (!edge.a && !edge.b) { + edge.a = vertex; + edge.l = lSite; + edge.r = rSite; + } else if (edge.l === rSite) { + edge.b = vertex; + } else { + edge.a = vertex; + } + } + function d3_geom_voronoiHalfEdge(edge, lSite, rSite) { + var va = edge.a, vb = edge.b; + this.edge = edge; + this.site = lSite; + 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); + } + d3_geom_voronoiHalfEdge.prototype = { + start: function() { + return this.edge.l === this.site ? this.edge.a : this.edge.b; + }, + end: function() { + return this.edge.l === this.site ? this.edge.b : this.edge.a; + } + }; + function d3_geom_voronoiRedBlackTree() { + this._ = null; + } + function d3_geom_voronoiRedBlackNode(node) { + node.U = node.C = node.L = node.R = node.P = node.N = null; + } + d3_geom_voronoiRedBlackTree.prototype = { + insert: function(after, node) { + var parent, grandpa, uncle; + if (after) { + node.P = after; + node.N = after.N; + if (after.N) after.N.P = node; + after.N = node; + if (after.R) { + after = after.R; + while (after.L) after = after.L; + after.L = node; + } else { + after.R = node; + } + parent = after; + } else if (this._) { + after = d3_geom_voronoiRedBlackFirst(this._); + node.P = null; + node.N = after; + after.P = after.L = node; + parent = after; + } else { + node.P = node.N = null; + this._ = node; + parent = null; + } + node.L = node.R = null; + node.U = parent; + node.C = true; + after = node; + while (parent && parent.C) { + grandpa = parent.U; + if (parent === grandpa.L) { + uncle = grandpa.R; + if (uncle && uncle.C) { + parent.C = uncle.C = false; + grandpa.C = true; + after = grandpa; + } else { + if (after === parent.R) { + d3_geom_voronoiRedBlackRotateLeft(this, parent); + after = parent; + parent = after.U; + } + parent.C = false; + grandpa.C = true; + d3_geom_voronoiRedBlackRotateRight(this, grandpa); + } + } else { + uncle = grandpa.L; + if (uncle && uncle.C) { + parent.C = uncle.C = false; + grandpa.C = true; + after = grandpa; + } else { + if (after === parent.L) { + d3_geom_voronoiRedBlackRotateRight(this, parent); + after = parent; + parent = after.U; + } + parent.C = false; + grandpa.C = true; + d3_geom_voronoiRedBlackRotateLeft(this, grandpa); + } + } + parent = after.U; + } + this._.C = false; + }, + remove: function(node) { + if (node.N) node.N.P = node.P; + if (node.P) node.P.N = node.N; + node.N = node.P = null; + var parent = node.U, sibling, left = node.L, right = node.R, next, red; + if (!left) next = right; else if (!right) next = left; else next = d3_geom_voronoiRedBlackFirst(right); + if (parent) { + if (parent.L === node) parent.L = next; else parent.R = next; + } else { + this._ = next; + } + if (left && right) { + red = next.C; + next.C = node.C; + next.L = left; + left.U = next; + if (next !== right) { + parent = next.U; + next.U = node.U; + node = next.R; + parent.L = node; + next.R = right; + right.U = next; + } else { + next.U = parent; + parent = next; + node = next.R; + } + } else { + red = node.C; + node = next; + } + if (node) node.U = parent; + if (red) return; + if (node && node.C) { + node.C = false; + return; + } + do { + if (node === this._) break; + if (node === parent.L) { + sibling = parent.R; + if (sibling.C) { + sibling.C = false; + parent.C = true; + d3_geom_voronoiRedBlackRotateLeft(this, parent); + sibling = parent.R; + } + if (sibling.L && sibling.L.C || sibling.R && sibling.R.C) { + if (!sibling.R || !sibling.R.C) { + sibling.L.C = false; + sibling.C = true; + d3_geom_voronoiRedBlackRotateRight(this, sibling); + sibling = parent.R; + } + sibling.C = parent.C; + parent.C = sibling.R.C = false; + d3_geom_voronoiRedBlackRotateLeft(this, parent); + node = this._; + break; + } + } else { + sibling = parent.L; + if (sibling.C) { + sibling.C = false; + parent.C = true; + d3_geom_voronoiRedBlackRotateRight(this, parent); + sibling = parent.L; + } + if (sibling.L && sibling.L.C || sibling.R && sibling.R.C) { + if (!sibling.L || !sibling.L.C) { + sibling.R.C = false; + sibling.C = true; + d3_geom_voronoiRedBlackRotateLeft(this, sibling); + sibling = parent.L; + } + sibling.C = parent.C; + parent.C = sibling.L.C = false; + d3_geom_voronoiRedBlackRotateRight(this, parent); + node = this._; + break; + } + } + sibling.C = true; + node = parent; + parent = parent.U; + } while (!node.C); + if (node) node.C = false; + } + }; + function d3_geom_voronoiRedBlackRotateLeft(tree, node) { + var p = node, q = node.R, parent = p.U; + if (parent) { + if (parent.L === p) parent.L = q; else parent.R = q; + } else { + tree._ = q; + } + q.U = parent; + p.U = q; + p.R = q.L; + if (p.R) p.R.U = p; + q.L = p; + } + function d3_geom_voronoiRedBlackRotateRight(tree, node) { + var p = node, q = node.L, parent = p.U; + if (parent) { + if (parent.L === p) parent.L = q; else parent.R = q; + } else { + tree._ = q; + } + q.U = parent; + p.U = q; + p.L = q.R; + if (p.L) p.L.U = p; + q.R = p; + } + function d3_geom_voronoiRedBlackFirst(node) { + while (node.L) node = node.L; + return node; + } + function d3_geom_voronoi(sites, bbox) { + var site = sites.sort(d3_geom_voronoiVertexOrder).pop(), x0, y0, circle; + d3_geom_voronoiEdges = []; + d3_geom_voronoiCells = new Array(sites.length); + d3_geom_voronoiBeaches = new d3_geom_voronoiRedBlackTree(); + d3_geom_voronoiCircles = new d3_geom_voronoiRedBlackTree(); + while (true) { + circle = d3_geom_voronoiFirstCircle; + if (site && (!circle || site.y < circle.y || site.y === circle.y && site.x < circle.x)) { + if (site.x !== x0 || site.y !== y0) { + d3_geom_voronoiCells[site.i] = new d3_geom_voronoiCell(site); + d3_geom_voronoiAddBeach(site); + x0 = site.x, y0 = site.y; + } + site = sites.pop(); + } else if (circle) { + d3_geom_voronoiRemoveBeach(circle.arc); + } else { + break; + } + } + if (bbox) d3_geom_voronoiClipEdges(bbox), d3_geom_voronoiCloseCells(bbox); + var diagram = { + cells: d3_geom_voronoiCells, + edges: d3_geom_voronoiEdges + }; + d3_geom_voronoiBeaches = d3_geom_voronoiCircles = d3_geom_voronoiEdges = d3_geom_voronoiCells = null; + return diagram; + } + function d3_geom_voronoiVertexOrder(a, b) { + return b.y - a.y || b.x - a.x; + } + d3.geom.voronoi = function(points) { + var x = d3_geom_pointX, y = d3_geom_pointY, fx = x, fy = y, clipExtent = d3_geom_voronoiClipExtent; + if (points) return voronoi(points); + function voronoi(data) { + var polygons = new Array(data.length), x0 = clipExtent[0][0], y0 = clipExtent[0][1], x1 = clipExtent[1][0], y1 = clipExtent[1][1]; + d3_geom_voronoi(sites(data), clipExtent).cells.forEach(function(cell, i) { + var edges = cell.edges, site = cell.site, polygon = polygons[i] = edges.length ? edges.map(function(e) { + var s = e.start(); + return [ s.x, s.y ]; + }) : site.x >= x0 && site.x <= x1 && site.y >= y0 && site.y <= y1 ? [ [ x0, y1 ], [ x1, y1 ], [ x1, y0 ], [ x0, y0 ] ] : []; + polygon.point = data[i]; + }); + return polygons; + } + function sites(data) { + return data.map(function(d, i) { + return { + x: Math.round(fx(d, i) / ε) * ε, + y: Math.round(fy(d, i) / ε) * ε, + i: i + }; + }); + } + voronoi.links = function(data) { + return d3_geom_voronoi(sites(data)).edges.filter(function(edge) { + return edge.l && edge.r; + }).map(function(edge) { + return { + source: data[edge.l.i], + target: data[edge.r.i] + }; + }); + }; + voronoi.triangles = function(data) { + var triangles = []; + d3_geom_voronoi(sites(data)).cells.forEach(function(cell, i) { + 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; + while (++j < m) { + e0 = e1; + s0 = s1; + e1 = edges[j].edge; + s1 = e1.l === site ? e1.r : e1.l; + if (i < s0.i && i < s1.i && d3_geom_voronoiTriangleArea(site, s0, s1) < 0) { + triangles.push([ data[i], data[s0.i], data[s1.i] ]); + } + } + }); + return triangles; + }; + voronoi.x = function(_) { + return arguments.length ? (fx = d3_functor(x = _), voronoi) : x; + }; + voronoi.y = function(_) { + return arguments.length ? (fy = d3_functor(y = _), voronoi) : y; + }; + voronoi.clipExtent = function(_) { + if (!arguments.length) return clipExtent === d3_geom_voronoiClipExtent ? null : clipExtent; + clipExtent = _ == null ? d3_geom_voronoiClipExtent : _; + return voronoi; + }; + voronoi.size = function(_) { + if (!arguments.length) return clipExtent === d3_geom_voronoiClipExtent ? null : clipExtent && clipExtent[1]; + return voronoi.clipExtent(_ && [ [ 0, 0 ], _ ]); + }; + return voronoi; + }; + var d3_geom_voronoiClipExtent = [ [ -1e6, -1e6 ], [ 1e6, 1e6 ] ]; + function d3_geom_voronoiTriangleArea(a, b, c) { + return (a.x - c.x) * (b.y - a.y) - (a.x - b.x) * (c.y - a.y); + } + d3.geom.delaunay = function(vertices) { + return d3.geom.voronoi().triangles(vertices); + }; + d3.geom.quadtree = function(points, x1, y1, x2, y2) { + var x = d3_geom_pointX, y = d3_geom_pointY, compat; + if (compat = arguments.length) { + x = d3_geom_quadtreeCompatX; + y = d3_geom_quadtreeCompatY; + if (compat === 3) { + y2 = y1; + x2 = x1; + y1 = x1 = 0; + } + return quadtree(points); + } + function quadtree(data) { + var d, fx = d3_functor(x), fy = d3_functor(y), xs, ys, i, n, x1_, y1_, x2_, y2_; + if (x1 != null) { + x1_ = x1, y1_ = y1, x2_ = x2, y2_ = y2; + } else { + x2_ = y2_ = -(x1_ = y1_ = Infinity); + xs = [], ys = []; + n = data.length; + if (compat) for (i = 0; i < n; ++i) { + d = data[i]; + if (d.x < x1_) x1_ = d.x; + if (d.y < y1_) y1_ = d.y; + if (d.x > x2_) x2_ = d.x; + if (d.y > y2_) y2_ = d.y; + xs.push(d.x); + ys.push(d.y); + } else for (i = 0; i < n; ++i) { + var x_ = +fx(d = data[i], i), y_ = +fy(d, i); + if (x_ < x1_) x1_ = x_; + if (y_ < y1_) y1_ = y_; + if (x_ > x2_) x2_ = x_; + if (y_ > y2_) y2_ = y_; + xs.push(x_); + ys.push(y_); + } + } + var dx = x2_ - x1_, dy = y2_ - y1_; + if (dx > dy) y2_ = y1_ + dx; else x2_ = x1_ + dy; + function insert(n, d, x, y, x1, y1, x2, y2) { + if (isNaN(x) || isNaN(y)) return; + if (n.leaf) { + var nx = n.x, ny = n.y; + if (nx != null) { + if (abs(nx - x) + abs(ny - y) < .01) { + insertChild(n, d, x, y, x1, y1, x2, y2); + } else { + var nPoint = n.point; + n.x = n.y = n.point = null; + insertChild(n, nPoint, nx, ny, x1, y1, x2, y2); + insertChild(n, d, x, y, x1, y1, x2, y2); + } + } else { + n.x = x, n.y = y, n.point = d; + } + } else { + insertChild(n, d, x, y, x1, y1, x2, y2); + } + } + function insertChild(n, d, x, y, x1, y1, x2, y2) { + var xm = (x1 + x2) * .5, ym = (y1 + y2) * .5, right = x >= xm, below = y >= ym, i = below << 1 | right; + n.leaf = false; + n = n.nodes[i] || (n.nodes[i] = d3_geom_quadtreeNode()); + if (right) x1 = xm; else x2 = xm; + if (below) y1 = ym; else y2 = ym; + insert(n, d, x, y, x1, y1, x2, y2); + } + var root = d3_geom_quadtreeNode(); + root.add = function(d) { + insert(root, d, +fx(d, ++i), +fy(d, i), x1_, y1_, x2_, y2_); + }; + root.visit = function(f) { + d3_geom_quadtreeVisit(f, root, x1_, y1_, x2_, y2_); + }; + root.find = function(point) { + return d3_geom_quadtreeFind(root, point[0], point[1], x1_, y1_, x2_, y2_); + }; + i = -1; + if (x1 == null) { + while (++i < n) { + insert(root, data[i], xs[i], ys[i], x1_, y1_, x2_, y2_); + } + --i; + } else data.forEach(root.add); + xs = ys = data = d = null; + return root; + } + quadtree.x = function(_) { + return arguments.length ? (x = _, quadtree) : x; + }; + quadtree.y = function(_) { + return arguments.length ? (y = _, quadtree) : y; + }; + quadtree.extent = function(_) { + if (!arguments.length) return x1 == null ? null : [ [ x1, y1 ], [ x2, y2 ] ]; + if (_ == null) x1 = y1 = x2 = y2 = null; else x1 = +_[0][0], y1 = +_[0][1], x2 = +_[1][0], + y2 = +_[1][1]; + return quadtree; + }; + quadtree.size = function(_) { + if (!arguments.length) return x1 == null ? null : [ x2 - x1, y2 - y1 ]; + if (_ == null) x1 = y1 = x2 = y2 = null; else x1 = y1 = 0, x2 = +_[0], y2 = +_[1]; + return quadtree; + }; + return quadtree; + }; + function d3_geom_quadtreeCompatX(d) { + return d.x; + } + function d3_geom_quadtreeCompatY(d) { + return d.y; + } + function d3_geom_quadtreeNode() { + return { + leaf: true, + nodes: [], + point: null, + x: null, + y: null + }; + } + function d3_geom_quadtreeVisit(f, node, x1, y1, x2, y2) { + if (!f(node, x1, y1, x2, y2)) { + var sx = (x1 + x2) * .5, sy = (y1 + y2) * .5, children = node.nodes; + if (children[0]) d3_geom_quadtreeVisit(f, children[0], x1, y1, sx, sy); + if (children[1]) d3_geom_quadtreeVisit(f, children[1], sx, y1, x2, sy); + if (children[2]) d3_geom_quadtreeVisit(f, children[2], x1, sy, sx, y2); + if (children[3]) d3_geom_quadtreeVisit(f, children[3], sx, sy, x2, y2); + } + } + function d3_geom_quadtreeFind(root, x, y, x0, y0, x3, y3) { + var minDistance2 = Infinity, closestPoint; + (function find(node, x1, y1, x2, y2) { + if (x1 > x3 || y1 > y3 || x2 < x0 || y2 < y0) return; + if (point = node.point) { + var point, dx = x - node.x, dy = y - node.y, distance2 = dx * dx + dy * dy; + if (distance2 < minDistance2) { + var distance = Math.sqrt(minDistance2 = distance2); + x0 = x - distance, y0 = y - distance; + x3 = x + distance, y3 = y + distance; + closestPoint = point; + } + } + var children = node.nodes, xm = (x1 + x2) * .5, ym = (y1 + y2) * .5, right = x >= xm, below = y >= ym; + for (var i = below << 1 | right, j = i + 4; i < j; ++i) { + if (node = children[i & 3]) switch (i & 3) { + case 0: + find(node, x1, y1, xm, ym); + break; + + case 1: + find(node, xm, y1, x2, ym); + break; + + case 2: + find(node, x1, ym, xm, y2); + break; + + case 3: + find(node, xm, ym, x2, y2); + break; + } + } + })(root, x0, y0, x3, y3); + return closestPoint; + } + d3.interpolateRgb = d3_interpolateRgb; + function d3_interpolateRgb(a, b) { + a = d3.rgb(a); + b = d3.rgb(b); + var ar = a.r, ag = a.g, ab = a.b, br = b.r - ar, bg = b.g - ag, bb = b.b - ab; + return function(t) { + return "#" + d3_rgb_hex(Math.round(ar + br * t)) + d3_rgb_hex(Math.round(ag + bg * t)) + d3_rgb_hex(Math.round(ab + bb * t)); + }; + } + d3.interpolateObject = d3_interpolateObject; + function d3_interpolateObject(a, b) { + var i = {}, c = {}, k; + for (k in a) { + if (k in b) { + i[k] = d3_interpolate(a[k], b[k]); + } else { + c[k] = a[k]; + } + } + for (k in b) { + if (!(k in a)) { + c[k] = b[k]; + } + } + return function(t) { + for (k in i) c[k] = i[k](t); + return c; + }; + } + d3.interpolateNumber = d3_interpolateNumber; + function d3_interpolateNumber(a, b) { + a = +a, b = +b; + return function(t) { + return a * (1 - t) + b * t; + }; + } + d3.interpolateString = d3_interpolateString; + function d3_interpolateString(a, b) { + var bi = d3_interpolate_numberA.lastIndex = d3_interpolate_numberB.lastIndex = 0, am, bm, bs, i = -1, s = [], q = []; + a = a + "", b = b + ""; + while ((am = d3_interpolate_numberA.exec(a)) && (bm = d3_interpolate_numberB.exec(b))) { + if ((bs = bm.index) > bi) { + bs = b.slice(bi, bs); + if (s[i]) s[i] += bs; else s[++i] = bs; + } + if ((am = am[0]) === (bm = bm[0])) { + if (s[i]) s[i] += bm; else s[++i] = bm; + } else { + s[++i] = null; + q.push({ + i: i, + x: d3_interpolateNumber(am, bm) + }); + } + bi = d3_interpolate_numberB.lastIndex; + } + if (bi < b.length) { + bs = b.slice(bi); + if (s[i]) s[i] += bs; else s[++i] = bs; + } + return s.length < 2 ? q[0] ? (b = q[0].x, function(t) { + return b(t) + ""; + }) : function() { + return b; + } : (b = q.length, function(t) { + for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t); + return s.join(""); + }); + } + var d3_interpolate_numberA = /[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g, d3_interpolate_numberB = new RegExp(d3_interpolate_numberA.source, "g"); + d3.interpolate = d3_interpolate; + function d3_interpolate(a, b) { + var i = d3.interpolators.length, f; + while (--i >= 0 && !(f = d3.interpolators[i](a, b))) ; + return f; + } + d3.interpolators = [ function(a, b) { + var t = typeof b; + 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); + } ]; + d3.interpolateArray = d3_interpolateArray; + function d3_interpolateArray(a, b) { + var x = [], c = [], na = a.length, nb = b.length, n0 = Math.min(a.length, b.length), i; + for (i = 0; i < n0; ++i) x.push(d3_interpolate(a[i], b[i])); + for (;i < na; ++i) c[i] = a[i]; + for (;i < nb; ++i) c[i] = b[i]; + return function(t) { + for (i = 0; i < n0; ++i) c[i] = x[i](t); + return c; + }; + } + var d3_ease_default = function() { + return d3_identity; + }; + var d3_ease = d3.map({ + linear: d3_ease_default, + poly: d3_ease_poly, + quad: function() { + return d3_ease_quad; + }, + cubic: function() { + return d3_ease_cubic; + }, + sin: function() { + return d3_ease_sin; + }, + exp: function() { + return d3_ease_exp; + }, + circle: function() { + return d3_ease_circle; + }, + elastic: d3_ease_elastic, + back: d3_ease_back, + bounce: function() { + return d3_ease_bounce; + } + }); + var d3_ease_mode = d3.map({ + "in": d3_identity, + out: d3_ease_reverse, + "in-out": d3_ease_reflect, + "out-in": function(f) { + return d3_ease_reflect(d3_ease_reverse(f)); + } + }); + d3.ease = function(name) { + var i = name.indexOf("-"), t = i >= 0 ? name.slice(0, i) : name, m = i >= 0 ? name.slice(i + 1) : "in"; + t = d3_ease.get(t) || d3_ease_default; + m = d3_ease_mode.get(m) || d3_identity; + return d3_ease_clamp(m(t.apply(null, d3_arraySlice.call(arguments, 1)))); + }; + function d3_ease_clamp(f) { + return function(t) { + return t <= 0 ? 0 : t >= 1 ? 1 : f(t); + }; + } + function d3_ease_reverse(f) { + return function(t) { + return 1 - f(1 - t); + }; + } + function d3_ease_reflect(f) { + return function(t) { + return .5 * (t < .5 ? f(2 * t) : 2 - f(2 - 2 * t)); + }; + } + function d3_ease_quad(t) { + return t * t; + } + function d3_ease_cubic(t) { + return t * t * t; + } + function d3_ease_cubicInOut(t) { + if (t <= 0) return 0; + if (t >= 1) return 1; + var t2 = t * t, t3 = t2 * t; + return 4 * (t < .5 ? t3 : 3 * (t - t2) + t3 - .75); + } + function d3_ease_poly(e) { + return function(t) { + return Math.pow(t, e); + }; + } + function d3_ease_sin(t) { + return 1 - Math.cos(t * halfπ); + } + function d3_ease_exp(t) { + return Math.pow(2, 10 * (t - 1)); + } + function d3_ease_circle(t) { + return 1 - Math.sqrt(1 - t * t); + } + function d3_ease_elastic(a, p) { + var s; + if (arguments.length < 2) p = .45; + if (arguments.length) s = p / τ * Math.asin(1 / a); else a = 1, s = p / 4; + return function(t) { + return 1 + a * Math.pow(2, -10 * t) * Math.sin((t - s) * τ / p); + }; + } + function d3_ease_back(s) { + if (!s) s = 1.70158; + return function(t) { + return t * t * ((s + 1) * t - s); + }; + } + function d3_ease_bounce(t) { + return t < 1 / 2.75 ? 7.5625 * t * t : t < 2 / 2.75 ? 7.5625 * (t -= 1.5 / 2.75) * t + .75 : t < 2.5 / 2.75 ? 7.5625 * (t -= 2.25 / 2.75) * t + .9375 : 7.5625 * (t -= 2.625 / 2.75) * t + .984375; + } + d3.interpolateHcl = d3_interpolateHcl; + function d3_interpolateHcl(a, b) { + a = d3.hcl(a); + b = d3.hcl(b); + var ah = a.h, ac = a.c, al = a.l, bh = b.h - ah, bc = b.c - ac, bl = b.l - al; + if (isNaN(bc)) bc = 0, ac = isNaN(ac) ? b.c : ac; + if (isNaN(bh)) bh = 0, ah = isNaN(ah) ? b.h : ah; else if (bh > 180) bh -= 360; else if (bh < -180) bh += 360; + return function(t) { + return d3_hcl_lab(ah + bh * t, ac + bc * t, al + bl * t) + ""; + }; + } + d3.interpolateHsl = d3_interpolateHsl; + function d3_interpolateHsl(a, b) { + a = d3.hsl(a); + b = d3.hsl(b); + var ah = a.h, as = a.s, al = a.l, bh = b.h - ah, bs = b.s - as, bl = b.l - al; + if (isNaN(bs)) bs = 0, as = isNaN(as) ? b.s : as; + if (isNaN(bh)) bh = 0, ah = isNaN(ah) ? b.h : ah; else if (bh > 180) bh -= 360; else if (bh < -180) bh += 360; + return function(t) { + return d3_hsl_rgb(ah + bh * t, as + bs * t, al + bl * t) + ""; + }; + } + d3.interpolateLab = d3_interpolateLab; + function d3_interpolateLab(a, b) { + a = d3.lab(a); + b = d3.lab(b); + var al = a.l, aa = a.a, ab = a.b, bl = b.l - al, ba = b.a - aa, bb = b.b - ab; + return function(t) { + return d3_lab_rgb(al + bl * t, aa + ba * t, ab + bb * t) + ""; + }; + } + d3.interpolateRound = d3_interpolateRound; + function d3_interpolateRound(a, b) { + b -= a; + return function(t) { + return Math.round(a + b * t); + }; + } + d3.transform = function(string) { + var g = d3_document.createElementNS(d3.ns.prefix.svg, "g"); + return (d3.transform = function(string) { + if (string != null) { + g.setAttribute("transform", string); + var t = g.transform.baseVal.consolidate(); + } + return new d3_transform(t ? t.matrix : d3_transformIdentity); + })(string); + }; + function d3_transform(m) { + 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; + if (r0[0] * r1[1] < r1[0] * r0[1]) { + r0[0] *= -1; + r0[1] *= -1; + kx *= -1; + kz *= -1; + } + this.rotate = (kx ? Math.atan2(r0[1], r0[0]) : Math.atan2(-r1[0], r1[1])) * d3_degrees; + this.translate = [ m.e, m.f ]; + this.scale = [ kx, ky ]; + this.skew = ky ? Math.atan2(kz, ky) * d3_degrees : 0; + } + d3_transform.prototype.toString = function() { + return "translate(" + this.translate + ")rotate(" + this.rotate + ")skewX(" + this.skew + ")scale(" + this.scale + ")"; + }; + function d3_transformDot(a, b) { + return a[0] * b[0] + a[1] * b[1]; + } + function d3_transformNormalize(a) { + var k = Math.sqrt(d3_transformDot(a, a)); + if (k) { + a[0] /= k; + a[1] /= k; + } + return k; + } + function d3_transformCombine(a, b, k) { + a[0] += k * b[0]; + a[1] += k * b[1]; + return a; + } + var d3_transformIdentity = { + a: 1, + b: 0, + c: 0, + d: 1, + e: 0, + f: 0 + }; + d3.interpolateTransform = d3_interpolateTransform; + function d3_interpolateTransformPop(s) { + return s.length ? s.pop() + "," : ""; + } + function d3_interpolateTranslate(ta, tb, s, q) { + if (ta[0] !== tb[0] || ta[1] !== tb[1]) { + var i = s.push("translate(", null, ",", null, ")"); + q.push({ + i: i - 4, + x: d3_interpolateNumber(ta[0], tb[0]) + }, { + i: i - 2, + x: d3_interpolateNumber(ta[1], tb[1]) + }); + } else if (tb[0] || tb[1]) { + s.push("translate(" + tb + ")"); + } + } + function d3_interpolateRotate(ra, rb, s, q) { + if (ra !== rb) { + if (ra - rb > 180) rb += 360; else if (rb - ra > 180) ra += 360; + q.push({ + i: s.push(d3_interpolateTransformPop(s) + "rotate(", null, ")") - 2, + x: d3_interpolateNumber(ra, rb) + }); + } else if (rb) { + s.push(d3_interpolateTransformPop(s) + "rotate(" + rb + ")"); + } + } + function d3_interpolateSkew(wa, wb, s, q) { + if (wa !== wb) { + q.push({ + i: s.push(d3_interpolateTransformPop(s) + "skewX(", null, ")") - 2, + x: d3_interpolateNumber(wa, wb) + }); + } else if (wb) { + s.push(d3_interpolateTransformPop(s) + "skewX(" + wb + ")"); + } + } + function d3_interpolateScale(ka, kb, s, q) { + if (ka[0] !== kb[0] || ka[1] !== kb[1]) { + var i = s.push(d3_interpolateTransformPop(s) + "scale(", null, ",", null, ")"); + q.push({ + i: i - 4, + x: d3_interpolateNumber(ka[0], kb[0]) + }, { + i: i - 2, + x: d3_interpolateNumber(ka[1], kb[1]) + }); + } else if (kb[0] !== 1 || kb[1] !== 1) { + s.push(d3_interpolateTransformPop(s) + "scale(" + kb + ")"); + } + } + function d3_interpolateTransform(a, b) { + var s = [], q = []; + a = d3.transform(a), b = d3.transform(b); + d3_interpolateTranslate(a.translate, b.translate, s, q); + d3_interpolateRotate(a.rotate, b.rotate, s, q); + d3_interpolateSkew(a.skew, b.skew, s, q); + d3_interpolateScale(a.scale, b.scale, s, q); + a = b = null; + return function(t) { + var i = -1, n = q.length, o; + while (++i < n) s[(o = q[i]).i] = o.x(t); + return s.join(""); + }; + } + function d3_uninterpolateNumber(a, b) { + b = (b -= a = +a) || 1 / b; + return function(x) { + return (x - a) / b; + }; + } + function d3_uninterpolateClamp(a, b) { + b = (b -= a = +a) || 1 / b; + return function(x) { + return Math.max(0, Math.min(1, (x - a) / b)); + }; + } + d3.layout = {}; + d3.layout.bundle = function() { + return function(links) { + var paths = [], i = -1, n = links.length; + while (++i < n) paths.push(d3_layout_bundlePath(links[i])); + return paths; + }; + }; + function d3_layout_bundlePath(link) { + var start = link.source, end = link.target, lca = d3_layout_bundleLeastCommonAncestor(start, end), points = [ start ]; + while (start !== lca) { + start = start.parent; + points.push(start); + } + var k = points.length; + while (end !== lca) { + points.splice(k, 0, end); + end = end.parent; + } + return points; + } + function d3_layout_bundleAncestors(node) { + var ancestors = [], parent = node.parent; + while (parent != null) { + ancestors.push(node); + node = parent; + parent = parent.parent; + } + ancestors.push(node); + return ancestors; + } + function d3_layout_bundleLeastCommonAncestor(a, b) { + if (a === b) return a; + var aNodes = d3_layout_bundleAncestors(a), bNodes = d3_layout_bundleAncestors(b), aNode = aNodes.pop(), bNode = bNodes.pop(), sharedNode = null; + while (aNode === bNode) { + sharedNode = aNode; + aNode = aNodes.pop(); + bNode = bNodes.pop(); + } + return sharedNode; + } + d3.layout.chord = function() { + var chord = {}, chords, groups, matrix, n, padding = 0, sortGroups, sortSubgroups, sortChords; + function relayout() { + var subgroups = {}, groupSums = [], groupIndex = d3.range(n), subgroupIndex = [], k, x, x0, i, j; + chords = []; + groups = []; + k = 0, i = -1; + while (++i < n) { + x = 0, j = -1; + while (++j < n) { + x += matrix[i][j]; + } + groupSums.push(x); + subgroupIndex.push(d3.range(n)); + k += x; + } + if (sortGroups) { + groupIndex.sort(function(a, b) { + return sortGroups(groupSums[a], groupSums[b]); + }); + } + if (sortSubgroups) { + subgroupIndex.forEach(function(d, i) { + d.sort(function(a, b) { + return sortSubgroups(matrix[i][a], matrix[i][b]); + }); + }); + } + k = (τ - padding * n) / k; + x = 0, i = -1; + while (++i < n) { + x0 = x, j = -1; + while (++j < n) { + var di = groupIndex[i], dj = subgroupIndex[di][j], v = matrix[di][dj], a0 = x, a1 = x += v * k; + subgroups[di + "-" + dj] = { + index: di, + subindex: dj, + startAngle: a0, + endAngle: a1, + value: v + }; + } + groups[di] = { + index: di, + startAngle: x0, + endAngle: x, + value: groupSums[di] + }; + x += padding; + } + i = -1; + while (++i < n) { + j = i - 1; + while (++j < n) { + var source = subgroups[i + "-" + j], target = subgroups[j + "-" + i]; + if (source.value || target.value) { + chords.push(source.value < target.value ? { + source: target, + target: source + } : { + source: source, + target: target + }); + } + } + } + if (sortChords) resort(); + } + function resort() { + chords.sort(function(a, b) { + return sortChords((a.source.value + a.target.value) / 2, (b.source.value + b.target.value) / 2); + }); + } + chord.matrix = function(x) { + if (!arguments.length) return matrix; + n = (matrix = x) && matrix.length; + chords = groups = null; + return chord; + }; + chord.padding = function(x) { + if (!arguments.length) return padding; + padding = x; + chords = groups = null; + return chord; + }; + chord.sortGroups = function(x) { + if (!arguments.length) return sortGroups; + sortGroups = x; + chords = groups = null; + return chord; + }; + chord.sortSubgroups = function(x) { + if (!arguments.length) return sortSubgroups; + sortSubgroups = x; + chords = null; + return chord; + }; + chord.sortChords = function(x) { + if (!arguments.length) return sortChords; + sortChords = x; + if (chords) resort(); + return chord; + }; + chord.chords = function() { + if (!chords) relayout(); + return chords; + }; + chord.groups = function() { + if (!groups) relayout(); + return groups; + }; + return chord; + }; + d3.layout.force = function() { + 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; + function repulse(node) { + return function(quad, x1, _, x2) { + if (quad.point !== node) { + var dx = quad.cx - node.x, dy = quad.cy - node.y, dw = x2 - x1, dn = dx * dx + dy * dy; + if (dw * dw / theta2 < dn) { + if (dn < chargeDistance2) { + var k = quad.charge / dn; + node.px -= dx * k; + node.py -= dy * k; + } + return true; + } + if (quad.point && dn && dn < chargeDistance2) { + var k = quad.pointCharge / dn; + node.px -= dx * k; + node.py -= dy * k; + } + } + return !quad.charge; + }; + } + force.tick = function() { + if ((alpha *= .99) < .005) { + timer = null; + event.end({ + type: "end", + alpha: alpha = 0 + }); + return true; + } + var n = nodes.length, m = links.length, q, i, o, s, t, l, k, x, y; + for (i = 0; i < m; ++i) { + o = links[i]; + s = o.source; + t = o.target; + x = t.x - s.x; + y = t.y - s.y; + if (l = x * x + y * y) { + l = alpha * strengths[i] * ((l = Math.sqrt(l)) - distances[i]) / l; + x *= l; + y *= l; + t.x -= x * (k = s.weight + t.weight ? s.weight / (s.weight + t.weight) : .5); + t.y -= y * k; + s.x += x * (k = 1 - k); + s.y += y * k; + } + } + if (k = alpha * gravity) { + x = size[0] / 2; + y = size[1] / 2; + i = -1; + if (k) while (++i < n) { + o = nodes[i]; + o.x += (x - o.x) * k; + o.y += (y - o.y) * k; + } + } + if (charge) { + d3_layout_forceAccumulate(q = d3.geom.quadtree(nodes), alpha, charges); + i = -1; + while (++i < n) { + if (!(o = nodes[i]).fixed) { + q.visit(repulse(o)); + } + } + } + i = -1; + while (++i < n) { + o = nodes[i]; + if (o.fixed) { + o.x = o.px; + o.y = o.py; + } else { + o.x -= (o.px - (o.px = o.x)) * friction; + o.y -= (o.py - (o.py = o.y)) * friction; + } + } + event.tick({ + type: "tick", + alpha: alpha + }); + }; + force.nodes = function(x) { + if (!arguments.length) return nodes; + nodes = x; + return force; + }; + force.links = function(x) { + if (!arguments.length) return links; + links = x; + return force; + }; + force.size = function(x) { + if (!arguments.length) return size; + size = x; + return force; + }; + force.linkDistance = function(x) { + if (!arguments.length) return linkDistance; + linkDistance = typeof x === "function" ? x : +x; + return force; + }; + force.distance = force.linkDistance; + force.linkStrength = function(x) { + if (!arguments.length) return linkStrength; + linkStrength = typeof x === "function" ? x : +x; + return force; + }; + force.friction = function(x) { + if (!arguments.length) return friction; + friction = +x; + return force; + }; + force.charge = function(x) { + if (!arguments.length) return charge; + charge = typeof x === "function" ? x : +x; + return force; + }; + force.chargeDistance = function(x) { + if (!arguments.length) return Math.sqrt(chargeDistance2); + chargeDistance2 = x * x; + return force; + }; + force.gravity = function(x) { + if (!arguments.length) return gravity; + gravity = +x; + return force; + }; + force.theta = function(x) { + if (!arguments.length) return Math.sqrt(theta2); + theta2 = x * x; + return force; + }; + force.alpha = function(x) { + if (!arguments.length) return alpha; + x = +x; + if (alpha) { + if (x > 0) { + alpha = x; + } else { + timer.c = null, timer.t = NaN, timer = null; + event.end({ + type: "end", + alpha: alpha = 0 + }); + } + } else if (x > 0) { + event.start({ + type: "start", + alpha: alpha = x + }); + timer = d3_timer(force.tick); + } + return force; + }; + force.start = function() { + var i, n = nodes.length, m = links.length, w = size[0], h = size[1], neighbors, o; + for (i = 0; i < n; ++i) { + (o = nodes[i]).index = i; + o.weight = 0; + } + for (i = 0; i < m; ++i) { + o = links[i]; + if (typeof o.source == "number") o.source = nodes[o.source]; + if (typeof o.target == "number") o.target = nodes[o.target]; + ++o.source.weight; + ++o.target.weight; + } + for (i = 0; i < n; ++i) { + o = nodes[i]; + if (isNaN(o.x)) o.x = position("x", w); + if (isNaN(o.y)) o.y = position("y", h); + if (isNaN(o.px)) o.px = o.x; + if (isNaN(o.py)) o.py = o.y; + } + distances = []; + 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; + strengths = []; + 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; + charges = []; + 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; + function position(dimension, size) { + if (!neighbors) { + neighbors = new Array(n); + for (j = 0; j < n; ++j) { + neighbors[j] = []; + } + for (j = 0; j < m; ++j) { + var o = links[j]; + neighbors[o.source.index].push(o.target); + neighbors[o.target.index].push(o.source); + } + } + var candidates = neighbors[i], j = -1, l = candidates.length, x; + while (++j < l) if (!isNaN(x = candidates[j][dimension])) return x; + return Math.random() * size; + } + return force.resume(); + }; + force.resume = function() { + return force.alpha(.1); + }; + force.stop = function() { + return force.alpha(0); + }; + force.drag = function() { + 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); + if (!arguments.length) return drag; + this.on("mouseover.force", d3_layout_forceMouseover).on("mouseout.force", d3_layout_forceMouseout).call(drag); + }; + function dragmove(d) { + d.px = d3.event.x, d.py = d3.event.y; + force.resume(); + } + return d3.rebind(force, event, "on"); + }; + function d3_layout_forceDragstart(d) { + d.fixed |= 2; + } + function d3_layout_forceDragend(d) { + d.fixed &= ~6; + } + function d3_layout_forceMouseover(d) { + d.fixed |= 4; + d.px = d.x, d.py = d.y; + } + function d3_layout_forceMouseout(d) { + d.fixed &= ~4; + } + function d3_layout_forceAccumulate(quad, alpha, charges) { + var cx = 0, cy = 0; + quad.charge = 0; + if (!quad.leaf) { + var nodes = quad.nodes, n = nodes.length, i = -1, c; + while (++i < n) { + c = nodes[i]; + if (c == null) continue; + d3_layout_forceAccumulate(c, alpha, charges); + quad.charge += c.charge; + cx += c.charge * c.cx; + cy += c.charge * c.cy; + } + } + if (quad.point) { + if (!quad.leaf) { + quad.point.x += Math.random() - .5; + quad.point.y += Math.random() - .5; + } + var k = alpha * charges[quad.point.index]; + quad.charge += quad.pointCharge = k; + cx += k * quad.point.x; + cy += k * quad.point.y; + } + quad.cx = cx / quad.charge; + quad.cy = cy / quad.charge; + } + var d3_layout_forceLinkDistance = 20, d3_layout_forceLinkStrength = 1, d3_layout_forceChargeDistance2 = Infinity; + d3.layout.hierarchy = function() { + var sort = d3_layout_hierarchySort, children = d3_layout_hierarchyChildren, value = d3_layout_hierarchyValue; + function hierarchy(root) { + var stack = [ root ], nodes = [], node; + root.depth = 0; + while ((node = stack.pop()) != null) { + nodes.push(node); + if ((childs = children.call(hierarchy, node, node.depth)) && (n = childs.length)) { + var n, childs, child; + while (--n >= 0) { + stack.push(child = childs[n]); + child.parent = node; + child.depth = node.depth + 1; + } + if (value) node.value = 0; + node.children = childs; + } else { + if (value) node.value = +value.call(hierarchy, node, node.depth) || 0; + delete node.children; + } + } + d3_layout_hierarchyVisitAfter(root, function(node) { + var childs, parent; + if (sort && (childs = node.children)) childs.sort(sort); + if (value && (parent = node.parent)) parent.value += node.value; + }); + return nodes; + } + hierarchy.sort = function(x) { + if (!arguments.length) return sort; + sort = x; + return hierarchy; + }; + hierarchy.children = function(x) { + if (!arguments.length) return children; + children = x; + return hierarchy; + }; + hierarchy.value = function(x) { + if (!arguments.length) return value; + value = x; + return hierarchy; + }; + hierarchy.revalue = function(root) { + if (value) { + d3_layout_hierarchyVisitBefore(root, function(node) { + if (node.children) node.value = 0; + }); + d3_layout_hierarchyVisitAfter(root, function(node) { + var parent; + if (!node.children) node.value = +value.call(hierarchy, node, node.depth) || 0; + if (parent = node.parent) parent.value += node.value; + }); + } + return root; + }; + return hierarchy; + }; + function d3_layout_hierarchyRebind(object, hierarchy) { + d3.rebind(object, hierarchy, "sort", "children", "value"); + object.nodes = object; + object.links = d3_layout_hierarchyLinks; + return object; + } + function d3_layout_hierarchyVisitBefore(node, callback) { + var nodes = [ node ]; + while ((node = nodes.pop()) != null) { + callback(node); + if ((children = node.children) && (n = children.length)) { + var n, children; + while (--n >= 0) nodes.push(children[n]); + } + } + } + function d3_layout_hierarchyVisitAfter(node, callback) { + var nodes = [ node ], nodes2 = []; + while ((node = nodes.pop()) != null) { + nodes2.push(node); + if ((children = node.children) && (n = children.length)) { + var i = -1, n, children; + while (++i < n) nodes.push(children[i]); + } + } + while ((node = nodes2.pop()) != null) { + callback(node); + } + } + function d3_layout_hierarchyChildren(d) { + return d.children; + } + function d3_layout_hierarchyValue(d) { + return d.value; + } + function d3_layout_hierarchySort(a, b) { + return b.value - a.value; + } + function d3_layout_hierarchyLinks(nodes) { + return d3.merge(nodes.map(function(parent) { + return (parent.children || []).map(function(child) { + return { + source: parent, + target: child + }; + }); + })); + } + d3.layout.partition = function() { + var hierarchy = d3.layout.hierarchy(), size = [ 1, 1 ]; + function position(node, x, dx, dy) { + var children = node.children; + node.x = x; + node.y = node.depth * dy; + node.dx = dx; + node.dy = dy; + if (children && (n = children.length)) { + var i = -1, n, c, d; + dx = node.value ? dx / node.value : 0; + while (++i < n) { + position(c = children[i], x, d = c.value * dx, dy); + x += d; + } + } + } + function depth(node) { + var children = node.children, d = 0; + if (children && (n = children.length)) { + var i = -1, n; + while (++i < n) d = Math.max(d, depth(children[i])); + } + return 1 + d; + } + function partition(d, i) { + var nodes = hierarchy.call(this, d, i); + position(nodes[0], 0, size[0], size[1] / depth(nodes[0])); + return nodes; + } + partition.size = function(x) { + if (!arguments.length) return size; + size = x; + return partition; + }; + return d3_layout_hierarchyRebind(partition, hierarchy); + }; + d3.layout.pie = function() { + var value = Number, sort = d3_layout_pieSortByValue, startAngle = 0, endAngle = τ, padAngle = 0; + function pie(data) { + var n = data.length, values = data.map(function(d, i) { + return +value.call(pie, d, i); + }), 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; + if (sort != null) index.sort(sort === d3_layout_pieSortByValue ? function(i, j) { + return values[j] - values[i]; + } : function(i, j) { + return sort(data[i], data[j]); + }); + index.forEach(function(i) { + arcs[i] = { + data: data[i], + value: v = values[i], + startAngle: a, + endAngle: a += v * k + pa, + padAngle: p + }; + }); + return arcs; + } + pie.value = function(_) { + if (!arguments.length) return value; + value = _; + return pie; + }; + pie.sort = function(_) { + if (!arguments.length) return sort; + sort = _; + return pie; + }; + pie.startAngle = function(_) { + if (!arguments.length) return startAngle; + startAngle = _; + return pie; + }; + pie.endAngle = function(_) { + if (!arguments.length) return endAngle; + endAngle = _; + return pie; + }; + pie.padAngle = function(_) { + if (!arguments.length) return padAngle; + padAngle = _; + return pie; + }; + return pie; + }; + var d3_layout_pieSortByValue = {}; + d3.layout.stack = function() { + var values = d3_identity, order = d3_layout_stackOrderDefault, offset = d3_layout_stackOffsetZero, out = d3_layout_stackOut, x = d3_layout_stackX, y = d3_layout_stackY; + function stack(data, index) { + if (!(n = data.length)) return data; + var series = data.map(function(d, i) { + return values.call(stack, d, i); + }); + var points = series.map(function(d) { + return d.map(function(v, i) { + return [ x.call(stack, v, i), y.call(stack, v, i) ]; + }); + }); + var orders = order.call(stack, points, index); + series = d3.permute(series, orders); + points = d3.permute(points, orders); + var offsets = offset.call(stack, points, index); + var m = series[0].length, n, i, j, o; + for (j = 0; j < m; ++j) { + out.call(stack, series[0][j], o = offsets[j], points[0][j][1]); + for (i = 1; i < n; ++i) { + out.call(stack, series[i][j], o += points[i - 1][j][1], points[i][j][1]); + } + } + return data; + } + stack.values = function(x) { + if (!arguments.length) return values; + values = x; + return stack; + }; + stack.order = function(x) { + if (!arguments.length) return order; + order = typeof x === "function" ? x : d3_layout_stackOrders.get(x) || d3_layout_stackOrderDefault; + return stack; + }; + stack.offset = function(x) { + if (!arguments.length) return offset; + offset = typeof x === "function" ? x : d3_layout_stackOffsets.get(x) || d3_layout_stackOffsetZero; + return stack; + }; + stack.x = function(z) { + if (!arguments.length) return x; + x = z; + return stack; + }; + stack.y = function(z) { + if (!arguments.length) return y; + y = z; + return stack; + }; + stack.out = function(z) { + if (!arguments.length) return out; + out = z; + return stack; + }; + return stack; + }; + function d3_layout_stackX(d) { + return d.x; + } + function d3_layout_stackY(d) { + return d.y; + } + function d3_layout_stackOut(d, y0, y) { + d.y0 = y0; + d.y = y; + } + var d3_layout_stackOrders = d3.map({ + "inside-out": function(data) { + var n = data.length, i, j, max = data.map(d3_layout_stackMaxIndex), sums = data.map(d3_layout_stackReduceSum), index = d3.range(n).sort(function(a, b) { + return max[a] - max[b]; + }), top = 0, bottom = 0, tops = [], bottoms = []; + for (i = 0; i < n; ++i) { + j = index[i]; + if (top < bottom) { + top += sums[j]; + tops.push(j); + } else { + bottom += sums[j]; + bottoms.push(j); + } + } + return bottoms.reverse().concat(tops); + }, + reverse: function(data) { + return d3.range(data.length).reverse(); + }, + "default": d3_layout_stackOrderDefault + }); + var d3_layout_stackOffsets = d3.map({ + silhouette: function(data) { + var n = data.length, m = data[0].length, sums = [], max = 0, i, j, o, y0 = []; + for (j = 0; j < m; ++j) { + for (i = 0, o = 0; i < n; i++) o += data[i][j][1]; + if (o > max) max = o; + sums.push(o); + } + for (j = 0; j < m; ++j) { + y0[j] = (max - sums[j]) / 2; + } + return y0; + }, + wiggle: function(data) { + var n = data.length, x = data[0], m = x.length, i, j, k, s1, s2, s3, dx, o, o0, y0 = []; + y0[0] = o = o0 = 0; + for (j = 1; j < m; ++j) { + for (i = 0, s1 = 0; i < n; ++i) s1 += data[i][j][1]; + for (i = 0, s2 = 0, dx = x[j][0] - x[j - 1][0]; i < n; ++i) { + for (k = 0, s3 = (data[i][j][1] - data[i][j - 1][1]) / (2 * dx); k < i; ++k) { + s3 += (data[k][j][1] - data[k][j - 1][1]) / dx; + } + s2 += s3 * data[i][j][1]; + } + y0[j] = o -= s1 ? s2 / s1 * dx : 0; + if (o < o0) o0 = o; + } + for (j = 0; j < m; ++j) y0[j] -= o0; + return y0; + }, + expand: function(data) { + var n = data.length, m = data[0].length, k = 1 / n, i, j, o, y0 = []; + for (j = 0; j < m; ++j) { + for (i = 0, o = 0; i < n; i++) o += data[i][j][1]; + if (o) for (i = 0; i < n; i++) data[i][j][1] /= o; else for (i = 0; i < n; i++) data[i][j][1] = k; + } + for (j = 0; j < m; ++j) y0[j] = 0; + return y0; + }, + zero: d3_layout_stackOffsetZero + }); + function d3_layout_stackOrderDefault(data) { + return d3.range(data.length); + } + function d3_layout_stackOffsetZero(data) { + var j = -1, m = data[0].length, y0 = []; + while (++j < m) y0[j] = 0; + return y0; + } + function d3_layout_stackMaxIndex(array) { + var i = 1, j = 0, v = array[0][1], k, n = array.length; + for (;i < n; ++i) { + if ((k = array[i][1]) > v) { + j = i; + v = k; + } + } + return j; + } + function d3_layout_stackReduceSum(d) { + return d.reduce(d3_layout_stackSum, 0); + } + function d3_layout_stackSum(p, d) { + return p + d[1]; + } + d3.layout.histogram = function() { + var frequency = true, valuer = Number, ranger = d3_layout_histogramRange, binner = d3_layout_histogramBinSturges; + function histogram(data, i) { + var bins = [], values = data.map(valuer, this), range = ranger.call(this, values, i), thresholds = binner.call(this, range, values, i), bin, i = -1, n = values.length, m = thresholds.length - 1, k = frequency ? 1 : 1 / n, x; + while (++i < m) { + bin = bins[i] = []; + bin.dx = thresholds[i + 1] - (bin.x = thresholds[i]); + bin.y = 0; + } + if (m > 0) { + i = -1; + while (++i < n) { + x = values[i]; + if (x >= range[0] && x <= range[1]) { + bin = bins[d3.bisect(thresholds, x, 1, m) - 1]; + bin.y += k; + bin.push(data[i]); + } + } + } + return bins; + } + histogram.value = function(x) { + if (!arguments.length) return valuer; + valuer = x; + return histogram; + }; + histogram.range = function(x) { + if (!arguments.length) return ranger; + ranger = d3_functor(x); + return histogram; + }; + histogram.bins = function(x) { + if (!arguments.length) return binner; + binner = typeof x === "number" ? function(range) { + return d3_layout_histogramBinFixed(range, x); + } : d3_functor(x); + return histogram; + }; + histogram.frequency = function(x) { + if (!arguments.length) return frequency; + frequency = !!x; + return histogram; + }; + return histogram; + }; + function d3_layout_histogramBinSturges(range, values) { + return d3_layout_histogramBinFixed(range, Math.ceil(Math.log(values.length) / Math.LN2 + 1)); + } + function d3_layout_histogramBinFixed(range, n) { + var x = -1, b = +range[0], m = (range[1] - b) / n, f = []; + while (++x <= n) f[x] = m * x + b; + return f; + } + function d3_layout_histogramRange(values) { + return [ d3.min(values), d3.max(values) ]; + } + d3.layout.pack = function() { + var hierarchy = d3.layout.hierarchy().sort(d3_layout_packSort), padding = 0, size = [ 1, 1 ], radius; + function pack(d, i) { + 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() { + return radius; + }; + root.x = root.y = 0; + d3_layout_hierarchyVisitAfter(root, function(d) { + d.r = +r(d.value); + }); + d3_layout_hierarchyVisitAfter(root, d3_layout_packSiblings); + if (padding) { + var dr = padding * (radius ? 1 : Math.max(2 * root.r / w, 2 * root.r / h)) / 2; + d3_layout_hierarchyVisitAfter(root, function(d) { + d.r += dr; + }); + d3_layout_hierarchyVisitAfter(root, d3_layout_packSiblings); + d3_layout_hierarchyVisitAfter(root, function(d) { + d.r -= dr; + }); + } + d3_layout_packTransform(root, w / 2, h / 2, radius ? 1 : 1 / Math.max(2 * root.r / w, 2 * root.r / h)); + return nodes; + } + pack.size = function(_) { + if (!arguments.length) return size; + size = _; + return pack; + }; + pack.radius = function(_) { + if (!arguments.length) return radius; + radius = _ == null || typeof _ === "function" ? _ : +_; + return pack; + }; + pack.padding = function(_) { + if (!arguments.length) return padding; + padding = +_; + return pack; + }; + return d3_layout_hierarchyRebind(pack, hierarchy); + }; + function d3_layout_packSort(a, b) { + return a.value - b.value; + } + function d3_layout_packInsert(a, b) { + var c = a._pack_next; + a._pack_next = b; + b._pack_prev = a; + b._pack_next = c; + c._pack_prev = b; + } + function d3_layout_packSplice(a, b) { + a._pack_next = b; + b._pack_prev = a; + } + function d3_layout_packIntersects(a, b) { + var dx = b.x - a.x, dy = b.y - a.y, dr = a.r + b.r; + return .999 * dr * dr > dx * dx + dy * dy; + } + function d3_layout_packSiblings(node) { + if (!(nodes = node.children) || !(n = nodes.length)) return; + var nodes, xMin = Infinity, xMax = -Infinity, yMin = Infinity, yMax = -Infinity, a, b, c, i, j, k, n; + function bound(node) { + xMin = Math.min(node.x - node.r, xMin); + xMax = Math.max(node.x + node.r, xMax); + yMin = Math.min(node.y - node.r, yMin); + yMax = Math.max(node.y + node.r, yMax); + } + nodes.forEach(d3_layout_packLink); + a = nodes[0]; + a.x = -a.r; + a.y = 0; + bound(a); + if (n > 1) { + b = nodes[1]; + b.x = b.r; + b.y = 0; + bound(b); + if (n > 2) { + c = nodes[2]; + d3_layout_packPlace(a, b, c); + bound(c); + d3_layout_packInsert(a, c); + a._pack_prev = c; + d3_layout_packInsert(c, b); + b = a._pack_next; + for (i = 3; i < n; i++) { + d3_layout_packPlace(a, b, c = nodes[i]); + var isect = 0, s1 = 1, s2 = 1; + for (j = b._pack_next; j !== b; j = j._pack_next, s1++) { + if (d3_layout_packIntersects(j, c)) { + isect = 1; + break; + } + } + if (isect == 1) { + for (k = a._pack_prev; k !== j._pack_prev; k = k._pack_prev, s2++) { + if (d3_layout_packIntersects(k, c)) { + break; + } + } + } + if (isect) { + if (s1 < s2 || s1 == s2 && b.r < a.r) d3_layout_packSplice(a, b = j); else d3_layout_packSplice(a = k, b); + i--; + } else { + d3_layout_packInsert(a, c); + b = c; + bound(c); + } + } + } + } + var cx = (xMin + xMax) / 2, cy = (yMin + yMax) / 2, cr = 0; + for (i = 0; i < n; i++) { + c = nodes[i]; + c.x -= cx; + c.y -= cy; + cr = Math.max(cr, c.r + Math.sqrt(c.x * c.x + c.y * c.y)); + } + node.r = cr; + nodes.forEach(d3_layout_packUnlink); + } + function d3_layout_packLink(node) { + node._pack_next = node._pack_prev = node; + } + function d3_layout_packUnlink(node) { + delete node._pack_next; + delete node._pack_prev; + } + function d3_layout_packTransform(node, x, y, k) { + var children = node.children; + node.x = x += k * node.x; + node.y = y += k * node.y; + node.r *= k; + if (children) { + var i = -1, n = children.length; + while (++i < n) d3_layout_packTransform(children[i], x, y, k); + } + } + function d3_layout_packPlace(a, b, c) { + var db = a.r + c.r, dx = b.x - a.x, dy = b.y - a.y; + if (db && (dx || dy)) { + var da = b.r + c.r, dc = dx * dx + dy * dy; + da *= da; + db *= db; + var x = .5 + (db - da) / (2 * dc), y = Math.sqrt(Math.max(0, 2 * da * (db + dc) - (db -= dc) * db - da * da)) / (2 * dc); + c.x = a.x + x * dx + y * dy; + c.y = a.y + x * dy - y * dx; + } else { + c.x = a.x + db; + c.y = a.y; + } + } + d3.layout.tree = function() { + var hierarchy = d3.layout.hierarchy().sort(null).value(null), separation = d3_layout_treeSeparation, size = [ 1, 1 ], nodeSize = null; + function tree(d, i) { + var nodes = hierarchy.call(this, d, i), root0 = nodes[0], root1 = wrapTree(root0); + d3_layout_hierarchyVisitAfter(root1, firstWalk), root1.parent.m = -root1.z; + d3_layout_hierarchyVisitBefore(root1, secondWalk); + if (nodeSize) d3_layout_hierarchyVisitBefore(root0, sizeNode); else { + var left = root0, right = root0, bottom = root0; + d3_layout_hierarchyVisitBefore(root0, function(node) { + if (node.x < left.x) left = node; + if (node.x > right.x) right = node; + if (node.depth > bottom.depth) bottom = node; + }); + var tx = separation(left, right) / 2 - left.x, kx = size[0] / (right.x + separation(right, left) / 2 + tx), ky = size[1] / (bottom.depth || 1); + d3_layout_hierarchyVisitBefore(root0, function(node) { + node.x = (node.x + tx) * kx; + node.y = node.depth * ky; + }); + } + return nodes; + } + function wrapTree(root0) { + var root1 = { + A: null, + children: [ root0 ] + }, queue = [ root1 ], node1; + while ((node1 = queue.pop()) != null) { + for (var children = node1.children, child, i = 0, n = children.length; i < n; ++i) { + queue.push((children[i] = child = { + _: children[i], + parent: node1, + children: (child = children[i].children) && child.slice() || [], + A: null, + a: null, + z: 0, + m: 0, + c: 0, + s: 0, + t: null, + i: i + }).a = child); + } + } + return root1.children[0]; + } + function firstWalk(v) { + var children = v.children, siblings = v.parent.children, w = v.i ? siblings[v.i - 1] : null; + if (children.length) { + d3_layout_treeShift(v); + var midpoint = (children[0].z + children[children.length - 1].z) / 2; + if (w) { + v.z = w.z + separation(v._, w._); + v.m = v.z - midpoint; + } else { + v.z = midpoint; + } + } else if (w) { + v.z = w.z + separation(v._, w._); + } + v.parent.A = apportion(v, w, v.parent.A || siblings[0]); + } + function secondWalk(v) { + v._.x = v.z + v.parent.m; + v.m += v.parent.m; + } + function apportion(v, w, ancestor) { + if (w) { + 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; + while (vim = d3_layout_treeRight(vim), vip = d3_layout_treeLeft(vip), vim && vip) { + vom = d3_layout_treeLeft(vom); + vop = d3_layout_treeRight(vop); + vop.a = v; + shift = vim.z + sim - vip.z - sip + separation(vim._, vip._); + if (shift > 0) { + d3_layout_treeMove(d3_layout_treeAncestor(vim, v, ancestor), v, shift); + sip += shift; + sop += shift; + } + sim += vim.m; + sip += vip.m; + som += vom.m; + sop += vop.m; + } + if (vim && !d3_layout_treeRight(vop)) { + vop.t = vim; + vop.m += sim - sop; + } + if (vip && !d3_layout_treeLeft(vom)) { + vom.t = vip; + vom.m += sip - som; + ancestor = v; + } + } + return ancestor; + } + function sizeNode(node) { + node.x *= size[0]; + node.y = node.depth * size[1]; + } + tree.separation = function(x) { + if (!arguments.length) return separation; + separation = x; + return tree; + }; + tree.size = function(x) { + if (!arguments.length) return nodeSize ? null : size; + nodeSize = (size = x) == null ? sizeNode : null; + return tree; + }; + tree.nodeSize = function(x) { + if (!arguments.length) return nodeSize ? size : null; + nodeSize = (size = x) == null ? null : sizeNode; + return tree; + }; + return d3_layout_hierarchyRebind(tree, hierarchy); + }; + function d3_layout_treeSeparation(a, b) { + return a.parent == b.parent ? 1 : 2; + } + function d3_layout_treeLeft(v) { + var children = v.children; + return children.length ? children[0] : v.t; + } + function d3_layout_treeRight(v) { + var children = v.children, n; + return (n = children.length) ? children[n - 1] : v.t; + } + function d3_layout_treeMove(wm, wp, shift) { + var change = shift / (wp.i - wm.i); + wp.c -= change; + wp.s += shift; + wm.c += change; + wp.z += shift; + wp.m += shift; + } + function d3_layout_treeShift(v) { + var shift = 0, change = 0, children = v.children, i = children.length, w; + while (--i >= 0) { + w = children[i]; + w.z += shift; + w.m += shift; + shift += w.s + (change += w.c); + } + } + function d3_layout_treeAncestor(vim, v, ancestor) { + return vim.a.parent === v.parent ? vim.a : ancestor; + } + d3.layout.cluster = function() { + var hierarchy = d3.layout.hierarchy().sort(null).value(null), separation = d3_layout_treeSeparation, size = [ 1, 1 ], nodeSize = false; + function cluster(d, i) { + var nodes = hierarchy.call(this, d, i), root = nodes[0], previousNode, x = 0; + d3_layout_hierarchyVisitAfter(root, function(node) { + var children = node.children; + if (children && children.length) { + node.x = d3_layout_clusterX(children); + node.y = d3_layout_clusterY(children); + } else { + node.x = previousNode ? x += separation(node, previousNode) : 0; + node.y = 0; + previousNode = node; + } + }); + 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; + d3_layout_hierarchyVisitAfter(root, nodeSize ? function(node) { + node.x = (node.x - root.x) * size[0]; + node.y = (root.y - node.y) * size[1]; + } : function(node) { + node.x = (node.x - x0) / (x1 - x0) * size[0]; + node.y = (1 - (root.y ? node.y / root.y : 1)) * size[1]; + }); + return nodes; + } + cluster.separation = function(x) { + if (!arguments.length) return separation; + separation = x; + return cluster; + }; + cluster.size = function(x) { + if (!arguments.length) return nodeSize ? null : size; + nodeSize = (size = x) == null; + return cluster; + }; + cluster.nodeSize = function(x) { + if (!arguments.length) return nodeSize ? size : null; + nodeSize = (size = x) != null; + return cluster; + }; + return d3_layout_hierarchyRebind(cluster, hierarchy); + }; + function d3_layout_clusterY(children) { + return 1 + d3.max(children, function(child) { + return child.y; + }); + } + function d3_layout_clusterX(children) { + return children.reduce(function(x, child) { + return x + child.x; + }, 0) / children.length; + } + function d3_layout_clusterLeft(node) { + var children = node.children; + return children && children.length ? d3_layout_clusterLeft(children[0]) : node; + } + function d3_layout_clusterRight(node) { + var children = node.children, n; + return children && (n = children.length) ? d3_layout_clusterRight(children[n - 1]) : node; + } + d3.layout.treemap = function() { + 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)); + function scale(children, k) { + var i = -1, n = children.length, child, area; + while (++i < n) { + area = (child = children[i]).value * (k < 0 ? 0 : k); + child.area = isNaN(area) || area <= 0 ? 0 : area; + } + } + function squarify(node) { + var children = node.children; + if (children && children.length) { + 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; + scale(remaining, rect.dx * rect.dy / node.value); + row.area = 0; + while ((n = remaining.length) > 0) { + row.push(child = remaining[n - 1]); + row.area += child.area; + if (mode !== "squarify" || (score = worst(row, u)) <= best) { + remaining.pop(); + best = score; + } else { + row.area -= row.pop().area; + position(row, u, rect, false); + u = Math.min(rect.dx, rect.dy); + row.length = row.area = 0; + best = Infinity; + } + } + if (row.length) { + position(row, u, rect, true); + row.length = row.area = 0; + } + children.forEach(squarify); + } + } + function stickify(node) { + var children = node.children; + if (children && children.length) { + var rect = pad(node), remaining = children.slice(), child, row = []; + scale(remaining, rect.dx * rect.dy / node.value); + row.area = 0; + while (child = remaining.pop()) { + row.push(child); + row.area += child.area; + if (child.z != null) { + position(row, child.z ? rect.dx : rect.dy, rect, !remaining.length); + row.length = row.area = 0; + } + } + children.forEach(stickify); + } + } + function worst(row, u) { + var s = row.area, r, rmax = 0, rmin = Infinity, i = -1, n = row.length; + while (++i < n) { + if (!(r = row[i].area)) continue; + if (r < rmin) rmin = r; + if (r > rmax) rmax = r; + } + s *= s; + u *= u; + return s ? Math.max(u * rmax * ratio / s, s / (u * rmin * ratio)) : Infinity; + } + function position(row, u, rect, flush) { + var i = -1, n = row.length, x = rect.x, y = rect.y, v = u ? round(row.area / u) : 0, o; + if (u == rect.dx) { + if (flush || v > rect.dy) v = rect.dy; + while (++i < n) { + o = row[i]; + o.x = x; + o.y = y; + o.dy = v; + x += o.dx = Math.min(rect.x + rect.dx - x, v ? round(o.area / v) : 0); + } + o.z = true; + o.dx += rect.x + rect.dx - x; + rect.y += v; + rect.dy -= v; + } else { + if (flush || v > rect.dx) v = rect.dx; + while (++i < n) { + o = row[i]; + o.x = x; + o.y = y; + o.dx = v; + y += o.dy = Math.min(rect.y + rect.dy - y, v ? round(o.area / v) : 0); + } + o.z = false; + o.dy += rect.y + rect.dy - y; + rect.x += v; + rect.dx -= v; + } + } + function treemap(d) { + var nodes = stickies || hierarchy(d), root = nodes[0]; + root.x = root.y = 0; + if (root.value) root.dx = size[0], root.dy = size[1]; else root.dx = root.dy = 0; + if (stickies) hierarchy.revalue(root); + scale([ root ], root.dx * root.dy / root.value); + (stickies ? stickify : squarify)(root); + if (sticky) stickies = nodes; + return nodes; + } + treemap.size = function(x) { + if (!arguments.length) return size; + size = x; + return treemap; + }; + treemap.padding = function(x) { + if (!arguments.length) return padding; + function padFunction(node) { + var p = x.call(treemap, node, node.depth); + return p == null ? d3_layout_treemapPadNull(node) : d3_layout_treemapPad(node, typeof p === "number" ? [ p, p, p, p ] : p); + } + function padConstant(node) { + return d3_layout_treemapPad(node, x); + } + var type; + pad = (padding = x) == null ? d3_layout_treemapPadNull : (type = typeof x) === "function" ? padFunction : type === "number" ? (x = [ x, x, x, x ], + padConstant) : padConstant; + return treemap; + }; + treemap.round = function(x) { + if (!arguments.length) return round != Number; + round = x ? Math.round : Number; + return treemap; + }; + treemap.sticky = function(x) { + if (!arguments.length) return sticky; + sticky = x; + stickies = null; + return treemap; + }; + treemap.ratio = function(x) { + if (!arguments.length) return ratio; + ratio = x; + return treemap; + }; + treemap.mode = function(x) { + if (!arguments.length) return mode; + mode = x + ""; + return treemap; + }; + return d3_layout_hierarchyRebind(treemap, hierarchy); + }; + function d3_layout_treemapPadNull(node) { + return { + x: node.x, + y: node.y, + dx: node.dx, + dy: node.dy + }; + } + function d3_layout_treemapPad(node, padding) { + var x = node.x + padding[3], y = node.y + padding[0], dx = node.dx - padding[1] - padding[3], dy = node.dy - padding[0] - padding[2]; + if (dx < 0) { + x += dx / 2; + dx = 0; + } + if (dy < 0) { + y += dy / 2; + dy = 0; + } + return { + x: x, + y: y, + dx: dx, + dy: dy + }; + } + d3.random = { + normal: function(µ, σ) { + var n = arguments.length; + if (n < 2) σ = 1; + if (n < 1) µ = 0; + return function() { + var x, y, r; + do { + x = Math.random() * 2 - 1; + y = Math.random() * 2 - 1; + r = x * x + y * y; + } while (!r || r > 1); + return µ + σ * x * Math.sqrt(-2 * Math.log(r) / r); + }; + }, + logNormal: function() { + var random = d3.random.normal.apply(d3, arguments); + return function() { + return Math.exp(random()); + }; + }, + bates: function(m) { + var random = d3.random.irwinHall(m); + return function() { + return random() / m; + }; + }, + irwinHall: function(m) { + return function() { + for (var s = 0, j = 0; j < m; j++) s += Math.random(); + return s; + }; + } + }; + d3.scale = {}; + function d3_scaleExtent(domain) { + var start = domain[0], stop = domain[domain.length - 1]; + return start < stop ? [ start, stop ] : [ stop, start ]; + } + function d3_scaleRange(scale) { + return scale.rangeExtent ? scale.rangeExtent() : d3_scaleExtent(scale.range()); + } + function d3_scale_bilinear(domain, range, uninterpolate, interpolate) { + var u = uninterpolate(domain[0], domain[1]), i = interpolate(range[0], range[1]); + return function(x) { + return i(u(x)); + }; + } + function d3_scale_nice(domain, nice) { + var i0 = 0, i1 = domain.length - 1, x0 = domain[i0], x1 = domain[i1], dx; + if (x1 < x0) { + dx = i0, i0 = i1, i1 = dx; + dx = x0, x0 = x1, x1 = dx; + } + domain[i0] = nice.floor(x0); + domain[i1] = nice.ceil(x1); + return domain; + } + function d3_scale_niceStep(step) { + return step ? { + floor: function(x) { + return Math.floor(x / step) * step; + }, + ceil: function(x) { + return Math.ceil(x / step) * step; + } + } : d3_scale_niceIdentity; + } + var d3_scale_niceIdentity = { + floor: d3_identity, + ceil: d3_identity + }; + function d3_scale_polylinear(domain, range, uninterpolate, interpolate) { + var u = [], i = [], j = 0, k = Math.min(domain.length, range.length) - 1; + if (domain[k] < domain[0]) { + domain = domain.slice().reverse(); + range = range.slice().reverse(); + } + while (++j <= k) { + u.push(uninterpolate(domain[j - 1], domain[j])); + i.push(interpolate(range[j - 1], range[j])); + } + return function(x) { + var j = d3.bisect(domain, x, 1, k) - 1; + return i[j](u[j](x)); + }; + } + d3.scale.linear = function() { + return d3_scale_linear([ 0, 1 ], [ 0, 1 ], d3_interpolate, false); + }; + function d3_scale_linear(domain, range, interpolate, clamp) { + var output, input; + function rescale() { + var linear = Math.min(domain.length, range.length) > 2 ? d3_scale_polylinear : d3_scale_bilinear, uninterpolate = clamp ? d3_uninterpolateClamp : d3_uninterpolateNumber; + output = linear(domain, range, uninterpolate, interpolate); + input = linear(range, domain, uninterpolate, d3_interpolate); + return scale; + } + function scale(x) { + return output(x); + } + scale.invert = function(y) { + return input(y); + }; + scale.domain = function(x) { + if (!arguments.length) return domain; + domain = x.map(Number); + return rescale(); + }; + scale.range = function(x) { + if (!arguments.length) return range; + range = x; + return rescale(); + }; + scale.rangeRound = function(x) { + return scale.range(x).interpolate(d3_interpolateRound); + }; + scale.clamp = function(x) { + if (!arguments.length) return clamp; + clamp = x; + return rescale(); + }; + scale.interpolate = function(x) { + if (!arguments.length) return interpolate; + interpolate = x; + return rescale(); + }; + scale.ticks = function(m) { + return d3_scale_linearTicks(domain, m); + }; + scale.tickFormat = function(m, format) { + return d3_scale_linearTickFormat(domain, m, format); + }; + scale.nice = function(m) { + d3_scale_linearNice(domain, m); + return rescale(); + }; + scale.copy = function() { + return d3_scale_linear(domain, range, interpolate, clamp); + }; + return rescale(); + } + function d3_scale_linearRebind(scale, linear) { + return d3.rebind(scale, linear, "range", "rangeRound", "interpolate", "clamp"); + } + function d3_scale_linearNice(domain, m) { + d3_scale_nice(domain, d3_scale_niceStep(d3_scale_linearTickRange(domain, m)[2])); + d3_scale_nice(domain, d3_scale_niceStep(d3_scale_linearTickRange(domain, m)[2])); + return domain; + } + function d3_scale_linearTickRange(domain, m) { + if (m == null) m = 10; + 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; + if (err <= .15) step *= 10; else if (err <= .35) step *= 5; else if (err <= .75) step *= 2; + extent[0] = Math.ceil(extent[0] / step) * step; + extent[1] = Math.floor(extent[1] / step) * step + step * .5; + extent[2] = step; + return extent; + } + function d3_scale_linearTicks(domain, m) { + return d3.range.apply(d3, d3_scale_linearTickRange(domain, m)); + } + function d3_scale_linearTickFormat(domain, m, format) { + var range = d3_scale_linearTickRange(domain, m); + if (format) { + var match = d3_format_re.exec(format); + match.shift(); + if (match[8] === "s") { + var prefix = d3.formatPrefix(Math.max(abs(range[0]), abs(range[1]))); + if (!match[7]) match[7] = "." + d3_scale_linearPrecision(prefix.scale(range[2])); + match[8] = "f"; + format = d3.format(match.join("")); + return function(d) { + return format(prefix.scale(d)) + prefix.symbol; + }; + } + if (!match[7]) match[7] = "." + d3_scale_linearFormatPrecision(match[8], range); + format = match.join(""); + } else { + format = ",." + d3_scale_linearPrecision(range[2]) + "f"; + } + return d3.format(format); + } + var d3_scale_linearFormatSignificant = { + s: 1, + g: 1, + p: 1, + r: 1, + e: 1 + }; + function d3_scale_linearPrecision(value) { + return -Math.floor(Math.log(value) / Math.LN10 + .01); + } + function d3_scale_linearFormatPrecision(type, range) { + var p = d3_scale_linearPrecision(range[2]); + 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; + } + d3.scale.log = function() { + return d3_scale_log(d3.scale.linear().domain([ 0, 1 ]), 10, true, [ 1, 10 ]); + }; + function d3_scale_log(linear, base, positive, domain) { + function log(x) { + return (positive ? Math.log(x < 0 ? 0 : x) : -Math.log(x > 0 ? 0 : -x)) / Math.log(base); + } + function pow(x) { + return positive ? Math.pow(base, x) : -Math.pow(base, -x); + } + function scale(x) { + return linear(log(x)); + } + scale.invert = function(x) { + return pow(linear.invert(x)); + }; + scale.domain = function(x) { + if (!arguments.length) return domain; + positive = x[0] >= 0; + linear.domain((domain = x.map(Number)).map(log)); + return scale; + }; + scale.base = function(_) { + if (!arguments.length) return base; + base = +_; + linear.domain(domain.map(log)); + return scale; + }; + scale.nice = function() { + var niced = d3_scale_nice(domain.map(log), positive ? Math : d3_scale_logNiceNegative); + linear.domain(niced); + domain = niced.map(pow); + return scale; + }; + scale.ticks = function() { + 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; + if (isFinite(j - i)) { + if (positive) { + for (;i < j; i++) for (var k = 1; k < n; k++) ticks.push(pow(i) * k); + ticks.push(pow(i)); + } else { + ticks.push(pow(i)); + for (;i++ < j; ) for (var k = n - 1; k > 0; k--) ticks.push(pow(i) * k); + } + for (i = 0; ticks[i] < u; i++) {} + for (j = ticks.length; ticks[j - 1] > v; j--) {} + ticks = ticks.slice(i, j); + } + return ticks; + }; + scale.tickFormat = function(n, format) { + if (!arguments.length) return d3_scale_logFormat; + if (arguments.length < 2) format = d3_scale_logFormat; else if (typeof format !== "function") format = d3.format(format); + var k = Math.max(1, base * n / scale.ticks().length); + return function(d) { + var i = d / pow(Math.round(log(d))); + if (i * base < base - .5) i *= base; + return i <= k ? format(d) : ""; + }; + }; + scale.copy = function() { + return d3_scale_log(linear.copy(), base, positive, domain); + }; + return d3_scale_linearRebind(scale, linear); + } + var d3_scale_logFormat = d3.format(".0e"), d3_scale_logNiceNegative = { + floor: function(x) { + return -Math.ceil(-x); + }, + ceil: function(x) { + return -Math.floor(-x); + } + }; + d3.scale.pow = function() { + return d3_scale_pow(d3.scale.linear(), 1, [ 0, 1 ]); + }; + function d3_scale_pow(linear, exponent, domain) { + var powp = d3_scale_powPow(exponent), powb = d3_scale_powPow(1 / exponent); + function scale(x) { + return linear(powp(x)); + } + scale.invert = function(x) { + return powb(linear.invert(x)); + }; + scale.domain = function(x) { + if (!arguments.length) return domain; + linear.domain((domain = x.map(Number)).map(powp)); + return scale; + }; + scale.ticks = function(m) { + return d3_scale_linearTicks(domain, m); + }; + scale.tickFormat = function(m, format) { + return d3_scale_linearTickFormat(domain, m, format); + }; + scale.nice = function(m) { + return scale.domain(d3_scale_linearNice(domain, m)); + }; + scale.exponent = function(x) { + if (!arguments.length) return exponent; + powp = d3_scale_powPow(exponent = x); + powb = d3_scale_powPow(1 / exponent); + linear.domain(domain.map(powp)); + return scale; + }; + scale.copy = function() { + return d3_scale_pow(linear.copy(), exponent, domain); + }; + return d3_scale_linearRebind(scale, linear); + } + function d3_scale_powPow(e) { + return function(x) { + return x < 0 ? -Math.pow(-x, e) : Math.pow(x, e); + }; + } + d3.scale.sqrt = function() { + return d3.scale.pow().exponent(.5); + }; + d3.scale.ordinal = function() { + return d3_scale_ordinal([], { + t: "range", + a: [ [] ] + }); + }; + function d3_scale_ordinal(domain, ranger) { + var index, range, rangeBand; + function scale(x) { + return range[((index.get(x) || (ranger.t === "range" ? index.set(x, domain.push(x)) : NaN)) - 1) % range.length]; + } + function steps(start, step) { + return d3.range(domain.length).map(function(i) { + return start + step * i; + }); + } + scale.domain = function(x) { + if (!arguments.length) return domain; + domain = []; + index = new d3_Map(); + var i = -1, n = x.length, xi; + while (++i < n) if (!index.has(xi = x[i])) index.set(xi, domain.push(xi)); + return scale[ranger.t].apply(scale, ranger.a); + }; + scale.range = function(x) { + if (!arguments.length) return range; + range = x; + rangeBand = 0; + ranger = { + t: "range", + a: arguments + }; + return scale; + }; + scale.rangePoints = function(x, padding) { + if (arguments.length < 2) padding = 0; + var start = x[0], stop = x[1], step = domain.length < 2 ? (start = (start + stop) / 2, + 0) : (stop - start) / (domain.length - 1 + padding); + range = steps(start + step * padding / 2, step); + rangeBand = 0; + ranger = { + t: "rangePoints", + a: arguments + }; + return scale; + }; + scale.rangeRoundPoints = function(x, padding) { + if (arguments.length < 2) padding = 0; + var start = x[0], stop = x[1], step = domain.length < 2 ? (start = stop = Math.round((start + stop) / 2), + 0) : (stop - start) / (domain.length - 1 + padding) | 0; + range = steps(start + Math.round(step * padding / 2 + (stop - start - (domain.length - 1 + padding) * step) / 2), step); + rangeBand = 0; + ranger = { + t: "rangeRoundPoints", + a: arguments + }; + return scale; + }; + scale.rangeBands = function(x, padding, outerPadding) { + if (arguments.length < 2) padding = 0; + if (arguments.length < 3) outerPadding = padding; + var reverse = x[1] < x[0], start = x[reverse - 0], stop = x[1 - reverse], step = (stop - start) / (domain.length - padding + 2 * outerPadding); + range = steps(start + step * outerPadding, step); + if (reverse) range.reverse(); + rangeBand = step * (1 - padding); + ranger = { + t: "rangeBands", + a: arguments + }; + return scale; + }; + scale.rangeRoundBands = function(x, padding, outerPadding) { + if (arguments.length < 2) padding = 0; + if (arguments.length < 3) outerPadding = padding; + var reverse = x[1] < x[0], start = x[reverse - 0], stop = x[1 - reverse], step = Math.floor((stop - start) / (domain.length - padding + 2 * outerPadding)); + range = steps(start + Math.round((stop - start - (domain.length - padding) * step) / 2), step); + if (reverse) range.reverse(); + rangeBand = Math.round(step * (1 - padding)); + ranger = { + t: "rangeRoundBands", + a: arguments + }; + return scale; + }; + scale.rangeBand = function() { + return rangeBand; + }; + scale.rangeExtent = function() { + return d3_scaleExtent(ranger.a[0]); + }; + scale.copy = function() { + return d3_scale_ordinal(domain, ranger); + }; + return scale.domain(domain); + } + d3.scale.category10 = function() { + return d3.scale.ordinal().range(d3_category10); + }; + d3.scale.category20 = function() { + return d3.scale.ordinal().range(d3_category20); + }; + d3.scale.category20b = function() { + return d3.scale.ordinal().range(d3_category20b); + }; + d3.scale.category20c = function() { + return d3.scale.ordinal().range(d3_category20c); + }; + var d3_category10 = [ 2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175 ].map(d3_rgbString); + 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); + 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); + 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); + d3.scale.quantile = function() { + return d3_scale_quantile([], []); + }; + function d3_scale_quantile(domain, range) { + var thresholds; + function rescale() { + var k = 0, q = range.length; + thresholds = []; + while (++k < q) thresholds[k - 1] = d3.quantile(domain, k / q); + return scale; + } + function scale(x) { + if (!isNaN(x = +x)) return range[d3.bisect(thresholds, x)]; + } + scale.domain = function(x) { + if (!arguments.length) return domain; + domain = x.map(d3_number).filter(d3_numeric).sort(d3_ascending); + return rescale(); + }; + scale.range = function(x) { + if (!arguments.length) return range; + range = x; + return rescale(); + }; + scale.quantiles = function() { + return thresholds; + }; + scale.invertExtent = function(y) { + y = range.indexOf(y); + return y < 0 ? [ NaN, NaN ] : [ y > 0 ? thresholds[y - 1] : domain[0], y < thresholds.length ? thresholds[y] : domain[domain.length - 1] ]; + }; + scale.copy = function() { + return d3_scale_quantile(domain, range); + }; + return rescale(); + } + d3.scale.quantize = function() { + return d3_scale_quantize(0, 1, [ 0, 1 ]); + }; + function d3_scale_quantize(x0, x1, range) { + var kx, i; + function scale(x) { + return range[Math.max(0, Math.min(i, Math.floor(kx * (x - x0))))]; + } + function rescale() { + kx = range.length / (x1 - x0); + i = range.length - 1; + return scale; + } + scale.domain = function(x) { + if (!arguments.length) return [ x0, x1 ]; + x0 = +x[0]; + x1 = +x[x.length - 1]; + return rescale(); + }; + scale.range = function(x) { + if (!arguments.length) return range; + range = x; + return rescale(); + }; + scale.invertExtent = function(y) { + y = range.indexOf(y); + y = y < 0 ? NaN : y / kx + x0; + return [ y, y + 1 / kx ]; + }; + scale.copy = function() { + return d3_scale_quantize(x0, x1, range); + }; + return rescale(); + } + d3.scale.threshold = function() { + return d3_scale_threshold([ .5 ], [ 0, 1 ]); + }; + function d3_scale_threshold(domain, range) { + function scale(x) { + if (x <= x) return range[d3.bisect(domain, x)]; + } + scale.domain = function(_) { + if (!arguments.length) return domain; + domain = _; + return scale; + }; + scale.range = function(_) { + if (!arguments.length) return range; + range = _; + return scale; + }; + scale.invertExtent = function(y) { + y = range.indexOf(y); + return [ domain[y - 1], domain[y] ]; + }; + scale.copy = function() { + return d3_scale_threshold(domain, range); + }; + return scale; + } + d3.scale.identity = function() { + return d3_scale_identity([ 0, 1 ]); + }; + function d3_scale_identity(domain) { + function identity(x) { + return +x; + } + identity.invert = identity; + identity.domain = identity.range = function(x) { + if (!arguments.length) return domain; + domain = x.map(identity); + return identity; + }; + identity.ticks = function(m) { + return d3_scale_linearTicks(domain, m); + }; + identity.tickFormat = function(m, format) { + return d3_scale_linearTickFormat(domain, m, format); + }; + identity.copy = function() { + return d3_scale_identity(domain); + }; + return identity; + } + d3.svg = {}; + function d3_zero() { + return 0; + } + d3.svg.arc = function() { + 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; + function arc() { + 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; + if (r1 < r0) rc = r1, r1 = r0, r0 = rc; + if (da >= τε) return circleSegment(r1, cw) + (r0 ? circleSegment(r0, 1 - cw) : "") + "Z"; + var rc, cr, rp, ap, p0 = 0, p1 = 0, x0, y0, x1, y1, x2, y2, x3, y3, path = []; + if (ap = (+padAngle.apply(this, arguments) || 0) / 2) { + rp = padRadius === d3_svg_arcAuto ? Math.sqrt(r0 * r0 + r1 * r1) : +padRadius.apply(this, arguments); + if (!cw) p1 *= -1; + if (r1) p1 = d3_asin(rp / r1 * Math.sin(ap)); + if (r0) p0 = d3_asin(rp / r0 * Math.sin(ap)); + } + if (r1) { + x0 = r1 * Math.cos(a0 + p1); + y0 = r1 * Math.sin(a0 + p1); + x1 = r1 * Math.cos(a1 - p1); + y1 = r1 * Math.sin(a1 - p1); + var l1 = Math.abs(a1 - a0 - 2 * p1) <= π ? 0 : 1; + if (p1 && d3_svg_arcSweep(x0, y0, x1, y1) === cw ^ l1) { + var h1 = (a0 + a1) / 2; + x0 = r1 * Math.cos(h1); + y0 = r1 * Math.sin(h1); + x1 = y1 = null; + } + } else { + x0 = y0 = 0; + } + if (r0) { + x2 = r0 * Math.cos(a1 - p0); + y2 = r0 * Math.sin(a1 - p0); + x3 = r0 * Math.cos(a0 + p0); + y3 = r0 * Math.sin(a0 + p0); + var l0 = Math.abs(a0 - a1 + 2 * p0) <= π ? 0 : 1; + if (p0 && d3_svg_arcSweep(x2, y2, x3, y3) === 1 - cw ^ l0) { + var h0 = (a0 + a1) / 2; + x2 = r0 * Math.cos(h0); + y2 = r0 * Math.sin(h0); + x3 = y3 = null; + } + } else { + x2 = y2 = 0; + } + if (da > ε && (rc = Math.min(Math.abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments))) > .001) { + cr = r0 < r1 ^ cw ? 0 : 1; + var rc1 = rc, rc0 = rc; + if (da < π) { + 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]); + rc0 = Math.min(rc, (r0 - lc) / (kc - 1)); + rc1 = Math.min(rc, (r1 - lc) / (kc + 1)); + } + if (x1 != null) { + 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); + if (rc === rc1) { + 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]); + } else { + path.push("M", t30[0], "A", rc1, ",", rc1, " 0 1,", cr, " ", t12[0]); + } + } else { + path.push("M", x0, ",", y0); + } + if (x3 != null) { + 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); + if (rc === rc0) { + 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]); + } else { + path.push("L", t21[0], "A", rc0, ",", rc0, " 0 0,", cr, " ", t03[0]); + } + } else { + path.push("L", x2, ",", y2); + } + } else { + path.push("M", x0, ",", y0); + if (x1 != null) path.push("A", r1, ",", r1, " 0 ", l1, ",", cw, " ", x1, ",", y1); + path.push("L", x2, ",", y2); + if (x3 != null) path.push("A", r0, ",", r0, " 0 ", l0, ",", 1 - cw, " ", x3, ",", y3); + } + path.push("Z"); + return path.join(""); + } + function circleSegment(r1, cw) { + return "M0," + r1 + "A" + r1 + "," + r1 + " 0 1," + cw + " 0," + -r1 + "A" + r1 + "," + r1 + " 0 1," + cw + " 0," + r1; + } + arc.innerRadius = function(v) { + if (!arguments.length) return innerRadius; + innerRadius = d3_functor(v); + return arc; + }; + arc.outerRadius = function(v) { + if (!arguments.length) return outerRadius; + outerRadius = d3_functor(v); + return arc; + }; + arc.cornerRadius = function(v) { + if (!arguments.length) return cornerRadius; + cornerRadius = d3_functor(v); + return arc; + }; + arc.padRadius = function(v) { + if (!arguments.length) return padRadius; + padRadius = v == d3_svg_arcAuto ? d3_svg_arcAuto : d3_functor(v); + return arc; + }; + arc.startAngle = function(v) { + if (!arguments.length) return startAngle; + startAngle = d3_functor(v); + return arc; + }; + arc.endAngle = function(v) { + if (!arguments.length) return endAngle; + endAngle = d3_functor(v); + return arc; + }; + arc.padAngle = function(v) { + if (!arguments.length) return padAngle; + padAngle = d3_functor(v); + return arc; + }; + arc.centroid = function() { + var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2, a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - halfπ; + return [ Math.cos(a) * r, Math.sin(a) * r ]; + }; + return arc; + }; + var d3_svg_arcAuto = "auto"; + function d3_svg_arcInnerRadius(d) { + return d.innerRadius; + } + function d3_svg_arcOuterRadius(d) { + return d.outerRadius; + } + function d3_svg_arcStartAngle(d) { + return d.startAngle; + } + function d3_svg_arcEndAngle(d) { + return d.endAngle; + } + function d3_svg_arcPadAngle(d) { + return d && d.padAngle; + } + function d3_svg_arcSweep(x0, y0, x1, y1) { + return (x0 - x1) * y0 - (y0 - y1) * x0 > 0 ? 0 : 1; + } + function d3_svg_arcCornerTangents(p0, p1, r1, rc, cw) { + 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; + if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1; + return [ [ cx0 - ox, cy0 - oy ], [ cx0 * r1 / r, cy0 * r1 / r ] ]; + } + function d3_svg_line(projection) { + var x = d3_geom_pointX, y = d3_geom_pointY, defined = d3_true, interpolate = d3_svg_lineLinear, interpolateKey = interpolate.key, tension = .7; + function line(data) { + var segments = [], points = [], i = -1, n = data.length, d, fx = d3_functor(x), fy = d3_functor(y); + function segment() { + segments.push("M", interpolate(projection(points), tension)); + } + while (++i < n) { + if (defined.call(this, d = data[i], i)) { + points.push([ +fx.call(this, d, i), +fy.call(this, d, i) ]); + } else if (points.length) { + segment(); + points = []; + } + } + if (points.length) segment(); + return segments.length ? segments.join("") : null; + } + line.x = function(_) { + if (!arguments.length) return x; + x = _; + return line; + }; + line.y = function(_) { + if (!arguments.length) return y; + y = _; + return line; + }; + line.defined = function(_) { + if (!arguments.length) return defined; + defined = _; + return line; + }; + line.interpolate = function(_) { + if (!arguments.length) return interpolateKey; + if (typeof _ === "function") interpolateKey = interpolate = _; else interpolateKey = (interpolate = d3_svg_lineInterpolators.get(_) || d3_svg_lineLinear).key; + return line; + }; + line.tension = function(_) { + if (!arguments.length) return tension; + tension = _; + return line; + }; + return line; + } + d3.svg.line = function() { + return d3_svg_line(d3_identity); + }; + var d3_svg_lineInterpolators = d3.map({ + linear: d3_svg_lineLinear, + "linear-closed": d3_svg_lineLinearClosed, + step: d3_svg_lineStep, + "step-before": d3_svg_lineStepBefore, + "step-after": d3_svg_lineStepAfter, + basis: d3_svg_lineBasis, + "basis-open": d3_svg_lineBasisOpen, + "basis-closed": d3_svg_lineBasisClosed, + bundle: d3_svg_lineBundle, + cardinal: d3_svg_lineCardinal, + "cardinal-open": d3_svg_lineCardinalOpen, + "cardinal-closed": d3_svg_lineCardinalClosed, + monotone: d3_svg_lineMonotone + }); + d3_svg_lineInterpolators.forEach(function(key, value) { + value.key = key; + value.closed = /-closed$/.test(key); + }); + function d3_svg_lineLinear(points) { + return points.length > 1 ? points.join("L") : points + "Z"; + } + function d3_svg_lineLinearClosed(points) { + return points.join("L") + "Z"; + } + function d3_svg_lineStep(points) { + var i = 0, n = points.length, p = points[0], path = [ p[0], ",", p[1] ]; + while (++i < n) path.push("H", (p[0] + (p = points[i])[0]) / 2, "V", p[1]); + if (n > 1) path.push("H", p[0]); + return path.join(""); + } + function d3_svg_lineStepBefore(points) { + var i = 0, n = points.length, p = points[0], path = [ p[0], ",", p[1] ]; + while (++i < n) path.push("V", (p = points[i])[1], "H", p[0]); + return path.join(""); + } + function d3_svg_lineStepAfter(points) { + var i = 0, n = points.length, p = points[0], path = [ p[0], ",", p[1] ]; + while (++i < n) path.push("H", (p = points[i])[0], "V", p[1]); + return path.join(""); + } + function d3_svg_lineCardinalOpen(points, tension) { + return points.length < 4 ? d3_svg_lineLinear(points) : points[1] + d3_svg_lineHermite(points.slice(1, -1), d3_svg_lineCardinalTangents(points, tension)); + } + function d3_svg_lineCardinalClosed(points, tension) { + return points.length < 3 ? d3_svg_lineLinearClosed(points) : points[0] + d3_svg_lineHermite((points.push(points[0]), + points), d3_svg_lineCardinalTangents([ points[points.length - 2] ].concat(points, [ points[1] ]), tension)); + } + function d3_svg_lineCardinal(points, tension) { + return points.length < 3 ? d3_svg_lineLinear(points) : points[0] + d3_svg_lineHermite(points, d3_svg_lineCardinalTangents(points, tension)); + } + function d3_svg_lineHermite(points, tangents) { + if (tangents.length < 1 || points.length != tangents.length && points.length != tangents.length + 2) { + return d3_svg_lineLinear(points); + } + var quad = points.length != tangents.length, path = "", p0 = points[0], p = points[1], t0 = tangents[0], t = t0, pi = 1; + if (quad) { + path += "Q" + (p[0] - t0[0] * 2 / 3) + "," + (p[1] - t0[1] * 2 / 3) + "," + p[0] + "," + p[1]; + p0 = points[1]; + pi = 2; + } + if (tangents.length > 1) { + t = tangents[1]; + p = points[pi]; + pi++; + path += "C" + (p0[0] + t0[0]) + "," + (p0[1] + t0[1]) + "," + (p[0] - t[0]) + "," + (p[1] - t[1]) + "," + p[0] + "," + p[1]; + for (var i = 2; i < tangents.length; i++, pi++) { + p = points[pi]; + t = tangents[i]; + path += "S" + (p[0] - t[0]) + "," + (p[1] - t[1]) + "," + p[0] + "," + p[1]; + } + } + if (quad) { + var lp = points[pi]; + path += "Q" + (p[0] + t[0] * 2 / 3) + "," + (p[1] + t[1] * 2 / 3) + "," + lp[0] + "," + lp[1]; + } + return path; + } + function d3_svg_lineCardinalTangents(points, tension) { + var tangents = [], a = (1 - tension) / 2, p0, p1 = points[0], p2 = points[1], i = 1, n = points.length; + while (++i < n) { + p0 = p1; + p1 = p2; + p2 = points[i]; + tangents.push([ a * (p2[0] - p0[0]), a * (p2[1] - p0[1]) ]); + } + return tangents; + } + function d3_svg_lineBasis(points) { + if (points.length < 3) return d3_svg_lineLinear(points); + 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) ]; + points.push(points[n - 1]); + while (++i <= n) { + pi = points[i]; + px.shift(); + px.push(pi[0]); + py.shift(); + py.push(pi[1]); + d3_svg_lineBasisBezier(path, px, py); + } + points.pop(); + path.push("L", pi); + return path.join(""); + } + function d3_svg_lineBasisOpen(points) { + if (points.length < 4) return d3_svg_lineLinear(points); + var path = [], i = -1, n = points.length, pi, px = [ 0 ], py = [ 0 ]; + while (++i < 3) { + pi = points[i]; + px.push(pi[0]); + py.push(pi[1]); + } + path.push(d3_svg_lineDot4(d3_svg_lineBasisBezier3, px) + "," + d3_svg_lineDot4(d3_svg_lineBasisBezier3, py)); + --i; + while (++i < n) { + pi = points[i]; + px.shift(); + px.push(pi[0]); + py.shift(); + py.push(pi[1]); + d3_svg_lineBasisBezier(path, px, py); + } + return path.join(""); + } + function d3_svg_lineBasisClosed(points) { + var path, i = -1, n = points.length, m = n + 4, pi, px = [], py = []; + while (++i < 4) { + pi = points[i % n]; + px.push(pi[0]); + py.push(pi[1]); + } + path = [ d3_svg_lineDot4(d3_svg_lineBasisBezier3, px), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, py) ]; + --i; + while (++i < m) { + pi = points[i % n]; + px.shift(); + px.push(pi[0]); + py.shift(); + py.push(pi[1]); + d3_svg_lineBasisBezier(path, px, py); + } + return path.join(""); + } + function d3_svg_lineBundle(points, tension) { + var n = points.length - 1; + if (n) { + var x0 = points[0][0], y0 = points[0][1], dx = points[n][0] - x0, dy = points[n][1] - y0, i = -1, p, t; + while (++i <= n) { + p = points[i]; + t = i / n; + p[0] = tension * p[0] + (1 - tension) * (x0 + t * dx); + p[1] = tension * p[1] + (1 - tension) * (y0 + t * dy); + } + } + return d3_svg_lineBasis(points); + } + function d3_svg_lineDot4(a, b) { + return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3]; + } + 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 ]; + function d3_svg_lineBasisBezier(path, x, y) { + path.push("C", d3_svg_lineDot4(d3_svg_lineBasisBezier1, x), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier1, y), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier2, x), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier2, y), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, x), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, y)); + } + function d3_svg_lineSlope(p0, p1) { + return (p1[1] - p0[1]) / (p1[0] - p0[0]); + } + function d3_svg_lineFiniteDifferences(points) { + var i = 0, j = points.length - 1, m = [], p0 = points[0], p1 = points[1], d = m[0] = d3_svg_lineSlope(p0, p1); + while (++i < j) { + m[i] = (d + (d = d3_svg_lineSlope(p0 = p1, p1 = points[i + 1]))) / 2; + } + m[i] = d; + return m; + } + function d3_svg_lineMonotoneTangents(points) { + var tangents = [], d, a, b, s, m = d3_svg_lineFiniteDifferences(points), i = -1, j = points.length - 1; + while (++i < j) { + d = d3_svg_lineSlope(points[i], points[i + 1]); + if (abs(d) < ε) { + m[i] = m[i + 1] = 0; + } else { + a = m[i] / d; + b = m[i + 1] / d; + s = a * a + b * b; + if (s > 9) { + s = d * 3 / Math.sqrt(s); + m[i] = s * a; + m[i + 1] = s * b; + } + } + } + i = -1; + while (++i <= j) { + s = (points[Math.min(j, i + 1)][0] - points[Math.max(0, i - 1)][0]) / (6 * (1 + m[i] * m[i])); + tangents.push([ s || 0, m[i] * s || 0 ]); + } + return tangents; + } + function d3_svg_lineMonotone(points) { + return points.length < 3 ? d3_svg_lineLinear(points) : points[0] + d3_svg_lineHermite(points, d3_svg_lineMonotoneTangents(points)); + } + d3.svg.line.radial = function() { + var line = d3_svg_line(d3_svg_lineRadial); + line.radius = line.x, delete line.x; + line.angle = line.y, delete line.y; + return line; + }; + function d3_svg_lineRadial(points) { + var point, i = -1, n = points.length, r, a; + while (++i < n) { + point = points[i]; + r = point[0]; + a = point[1] - halfπ; + point[0] = r * Math.cos(a); + point[1] = r * Math.sin(a); + } + return points; + } + function d3_svg_area(projection) { + 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; + function area(data) { + var segments = [], points0 = [], points1 = [], i = -1, n = data.length, d, fx0 = d3_functor(x0), fy0 = d3_functor(y0), fx1 = x0 === x1 ? function() { + return x; + } : d3_functor(x1), fy1 = y0 === y1 ? function() { + return y; + } : d3_functor(y1), x, y; + function segment() { + segments.push("M", interpolate(projection(points1), tension), L, interpolateReverse(projection(points0.reverse()), tension), "Z"); + } + while (++i < n) { + if (defined.call(this, d = data[i], i)) { + points0.push([ x = +fx0.call(this, d, i), y = +fy0.call(this, d, i) ]); + points1.push([ +fx1.call(this, d, i), +fy1.call(this, d, i) ]); + } else if (points0.length) { + segment(); + points0 = []; + points1 = []; + } + } + if (points0.length) segment(); + return segments.length ? segments.join("") : null; + } + area.x = function(_) { + if (!arguments.length) return x1; + x0 = x1 = _; + return area; + }; + area.x0 = function(_) { + if (!arguments.length) return x0; + x0 = _; + return area; + }; + area.x1 = function(_) { + if (!arguments.length) return x1; + x1 = _; + return area; + }; + area.y = function(_) { + if (!arguments.length) return y1; + y0 = y1 = _; + return area; + }; + area.y0 = function(_) { + if (!arguments.length) return y0; + y0 = _; + return area; + }; + area.y1 = function(_) { + if (!arguments.length) return y1; + y1 = _; + return area; + }; + area.defined = function(_) { + if (!arguments.length) return defined; + defined = _; + return area; + }; + area.interpolate = function(_) { + if (!arguments.length) return interpolateKey; + if (typeof _ === "function") interpolateKey = interpolate = _; else interpolateKey = (interpolate = d3_svg_lineInterpolators.get(_) || d3_svg_lineLinear).key; + interpolateReverse = interpolate.reverse || interpolate; + L = interpolate.closed ? "M" : "L"; + return area; + }; + area.tension = function(_) { + if (!arguments.length) return tension; + tension = _; + return area; + }; + return area; + } + d3_svg_lineStepBefore.reverse = d3_svg_lineStepAfter; + d3_svg_lineStepAfter.reverse = d3_svg_lineStepBefore; + d3.svg.area = function() { + return d3_svg_area(d3_identity); + }; + d3.svg.area.radial = function() { + var area = d3_svg_area(d3_svg_lineRadial); + area.radius = area.x, delete area.x; + area.innerRadius = area.x0, delete area.x0; + area.outerRadius = area.x1, delete area.x1; + area.angle = area.y, delete area.y; + area.startAngle = area.y0, delete area.y0; + area.endAngle = area.y1, delete area.y1; + return area; + }; + d3.svg.chord = function() { + var source = d3_source, target = d3_target, radius = d3_svg_chordRadius, startAngle = d3_svg_arcStartAngle, endAngle = d3_svg_arcEndAngle; + function chord(d, i) { + var s = subgroup(this, source, d, i), t = subgroup(this, target, d, i); + return "M" + s.p0 + arc(s.r, s.p1, 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"; + } + function subgroup(self, f, d, i) { + var subgroup = f.call(self, d, i), r = radius.call(self, subgroup, i), a0 = startAngle.call(self, subgroup, i) - halfπ, a1 = endAngle.call(self, subgroup, i) - halfπ; + return { + r: r, + a0: a0, + a1: a1, + p0: [ r * Math.cos(a0), r * Math.sin(a0) ], + p1: [ r * Math.cos(a1), r * Math.sin(a1) ] + }; + } + function equals(a, b) { + return a.a0 == b.a0 && a.a1 == b.a1; + } + function arc(r, p, a) { + return "A" + r + "," + r + " 0 " + +(a > π) + ",1 " + p; + } + function curve(r0, p0, r1, p1) { + return "Q 0,0 " + p1; + } + chord.radius = function(v) { + if (!arguments.length) return radius; + radius = d3_functor(v); + return chord; + }; + chord.source = function(v) { + if (!arguments.length) return source; + source = d3_functor(v); + return chord; + }; + chord.target = function(v) { + if (!arguments.length) return target; + target = d3_functor(v); + return chord; + }; + chord.startAngle = function(v) { + if (!arguments.length) return startAngle; + startAngle = d3_functor(v); + return chord; + }; + chord.endAngle = function(v) { + if (!arguments.length) return endAngle; + endAngle = d3_functor(v); + return chord; + }; + return chord; + }; + function d3_svg_chordRadius(d) { + return d.radius; + } + d3.svg.diagonal = function() { + var source = d3_source, target = d3_target, projection = d3_svg_diagonalProjection; + function diagonal(d, i) { + var p0 = source.call(this, d, i), p3 = target.call(this, d, i), m = (p0.y + p3.y) / 2, p = [ p0, { + x: p0.x, + y: m + }, { + x: p3.x, + y: m + }, p3 ]; + p = p.map(projection); + return "M" + p[0] + "C" + p[1] + " " + p[2] + " " + p[3]; + } + diagonal.source = function(x) { + if (!arguments.length) return source; + source = d3_functor(x); + return diagonal; + }; + diagonal.target = function(x) { + if (!arguments.length) return target; + target = d3_functor(x); + return diagonal; + }; + diagonal.projection = function(x) { + if (!arguments.length) return projection; + projection = x; + return diagonal; + }; + return diagonal; + }; + function d3_svg_diagonalProjection(d) { + return [ d.x, d.y ]; + } + d3.svg.diagonal.radial = function() { + var diagonal = d3.svg.diagonal(), projection = d3_svg_diagonalProjection, projection_ = diagonal.projection; + diagonal.projection = function(x) { + return arguments.length ? projection_(d3_svg_diagonalRadialProjection(projection = x)) : projection; + }; + return diagonal; + }; + function d3_svg_diagonalRadialProjection(projection) { + return function() { + var d = projection.apply(this, arguments), r = d[0], a = d[1] - halfπ; + return [ r * Math.cos(a), r * Math.sin(a) ]; + }; + } + d3.svg.symbol = function() { + var type = d3_svg_symbolType, size = d3_svg_symbolSize; + function symbol(d, i) { + return (d3_svg_symbols.get(type.call(this, d, i)) || d3_svg_symbolCircle)(size.call(this, d, i)); + } + symbol.type = function(x) { + if (!arguments.length) return type; + type = d3_functor(x); + return symbol; + }; + symbol.size = function(x) { + if (!arguments.length) return size; + size = d3_functor(x); + return symbol; + }; + return symbol; + }; + function d3_svg_symbolSize() { + return 64; + } + function d3_svg_symbolType() { + return "circle"; + } + function d3_svg_symbolCircle(size) { + var r = Math.sqrt(size / π); + return "M0," + r + "A" + r + "," + r + " 0 1,1 0," + -r + "A" + r + "," + r + " 0 1,1 0," + r + "Z"; + } + var d3_svg_symbols = d3.map({ + circle: d3_svg_symbolCircle, + cross: function(size) { + var r = Math.sqrt(size / 5) / 2; + return "M" + -3 * r + "," + -r + "H" + -r + "V" + -3 * r + "H" + r + "V" + -r + "H" + 3 * r + "V" + r + "H" + r + "V" + 3 * r + "H" + -r + "V" + r + "H" + -3 * r + "Z"; + }, + diamond: function(size) { + var ry = Math.sqrt(size / (2 * d3_svg_symbolTan30)), rx = ry * d3_svg_symbolTan30; + return "M0," + -ry + "L" + rx + ",0" + " 0," + ry + " " + -rx + ",0" + "Z"; + }, + square: function(size) { + var r = Math.sqrt(size) / 2; + return "M" + -r + "," + -r + "L" + r + "," + -r + " " + r + "," + r + " " + -r + "," + r + "Z"; + }, + "triangle-down": function(size) { + var rx = Math.sqrt(size / d3_svg_symbolSqrt3), ry = rx * d3_svg_symbolSqrt3 / 2; + return "M0," + ry + "L" + rx + "," + -ry + " " + -rx + "," + -ry + "Z"; + }, + "triangle-up": function(size) { + var rx = Math.sqrt(size / d3_svg_symbolSqrt3), ry = rx * d3_svg_symbolSqrt3 / 2; + return "M0," + -ry + "L" + rx + "," + ry + " " + -rx + "," + ry + "Z"; + } + }); + d3.svg.symbolTypes = d3_svg_symbols.keys(); + var d3_svg_symbolSqrt3 = Math.sqrt(3), d3_svg_symbolTan30 = Math.tan(30 * d3_radians); + d3_selectionPrototype.transition = function(name) { + var id = d3_transitionInheritId || ++d3_transitionId, ns = d3_transitionNamespace(name), subgroups = [], subgroup, node, transition = d3_transitionInherit || { + time: Date.now(), + ease: d3_ease_cubicInOut, + delay: 0, + duration: 250 + }; + for (var j = -1, m = this.length; ++j < m; ) { + subgroups.push(subgroup = []); + for (var group = this[j], i = -1, n = group.length; ++i < n; ) { + if (node = group[i]) d3_transitionNode(node, i, ns, id, transition); + subgroup.push(node); + } + } + return d3_transition(subgroups, ns, id); + }; + d3_selectionPrototype.interrupt = function(name) { + return this.each(name == null ? d3_selection_interrupt : d3_selection_interruptNS(d3_transitionNamespace(name))); + }; + var d3_selection_interrupt = d3_selection_interruptNS(d3_transitionNamespace()); + function d3_selection_interruptNS(ns) { + return function() { + var lock, activeId, active; + if ((lock = this[ns]) && (active = lock[activeId = lock.active])) { + active.timer.c = null; + active.timer.t = NaN; + if (--lock.count) delete lock[activeId]; else delete this[ns]; + lock.active += .5; + active.event && active.event.interrupt.call(this, this.__data__, active.index); + } + }; + } + function d3_transition(groups, ns, id) { + d3_subclass(groups, d3_transitionPrototype); + groups.namespace = ns; + groups.id = id; + return groups; + } + var d3_transitionPrototype = [], d3_transitionId = 0, d3_transitionInheritId, d3_transitionInherit; + d3_transitionPrototype.call = d3_selectionPrototype.call; + d3_transitionPrototype.empty = d3_selectionPrototype.empty; + d3_transitionPrototype.node = d3_selectionPrototype.node; + d3_transitionPrototype.size = d3_selectionPrototype.size; + d3.transition = function(selection, name) { + return selection && selection.transition ? d3_transitionInheritId ? selection.transition(name) : selection : d3.selection().transition(selection); + }; + d3.transition.prototype = d3_transitionPrototype; + d3_transitionPrototype.select = function(selector) { + var id = this.id, ns = this.namespace, subgroups = [], subgroup, subnode, node; + selector = d3_selection_selector(selector); + for (var j = -1, m = this.length; ++j < m; ) { + subgroups.push(subgroup = []); + for (var group = this[j], i = -1, n = group.length; ++i < n; ) { + if ((node = group[i]) && (subnode = selector.call(node, node.__data__, i, j))) { + if ("__data__" in node) subnode.__data__ = node.__data__; + d3_transitionNode(subnode, i, ns, id, node[ns][id]); + subgroup.push(subnode); + } else { + subgroup.push(null); + } + } + } + return d3_transition(subgroups, ns, id); + }; + d3_transitionPrototype.selectAll = function(selector) { + var id = this.id, ns = this.namespace, subgroups = [], subgroup, subnodes, node, subnode, transition; + selector = d3_selection_selectorAll(selector); + for (var j = -1, m = this.length; ++j < m; ) { + for (var group = this[j], i = -1, n = group.length; ++i < n; ) { + if (node = group[i]) { + transition = node[ns][id]; + subnodes = selector.call(node, node.__data__, i, j); + subgroups.push(subgroup = []); + for (var k = -1, o = subnodes.length; ++k < o; ) { + if (subnode = subnodes[k]) d3_transitionNode(subnode, k, ns, id, transition); + subgroup.push(subnode); + } + } + } + } + return d3_transition(subgroups, ns, id); + }; + d3_transitionPrototype.filter = function(filter) { + var subgroups = [], subgroup, group, node; + if (typeof filter !== "function") filter = d3_selection_filter(filter); + for (var j = 0, m = this.length; j < m; j++) { + subgroups.push(subgroup = []); + for (var group = this[j], i = 0, n = group.length; i < n; i++) { + if ((node = group[i]) && filter.call(node, node.__data__, i, j)) { + subgroup.push(node); + } + } + } + return d3_transition(subgroups, this.namespace, this.id); + }; + d3_transitionPrototype.tween = function(name, tween) { + var id = this.id, ns = this.namespace; + if (arguments.length < 2) return this.node()[ns][id].tween.get(name); + return d3_selection_each(this, tween == null ? function(node) { + node[ns][id].tween.remove(name); + } : function(node) { + node[ns][id].tween.set(name, tween); + }); + }; + function d3_transition_tween(groups, name, value, tween) { + var id = groups.id, ns = groups.namespace; + return d3_selection_each(groups, typeof value === "function" ? function(node, i, j) { + node[ns][id].tween.set(name, tween(value.call(node, node.__data__, i, j))); + } : (value = tween(value), function(node) { + node[ns][id].tween.set(name, value); + })); + } + d3_transitionPrototype.attr = function(nameNS, value) { + if (arguments.length < 2) { + for (value in nameNS) this.attr(value, nameNS[value]); + return this; + } + var interpolate = nameNS == "transform" ? d3_interpolateTransform : d3_interpolate, name = d3.ns.qualify(nameNS); + function attrNull() { + this.removeAttribute(name); + } + function attrNullNS() { + this.removeAttributeNS(name.space, name.local); + } + function attrTween(b) { + return b == null ? attrNull : (b += "", function() { + var a = this.getAttribute(name), i; + return a !== b && (i = interpolate(a, b), function(t) { + this.setAttribute(name, i(t)); + }); + }); + } + function attrTweenNS(b) { + return b == null ? attrNullNS : (b += "", function() { + var a = this.getAttributeNS(name.space, name.local), i; + return a !== b && (i = interpolate(a, b), function(t) { + this.setAttributeNS(name.space, name.local, i(t)); + }); + }); + } + return d3_transition_tween(this, "attr." + nameNS, value, name.local ? attrTweenNS : attrTween); + }; + d3_transitionPrototype.attrTween = function(nameNS, tween) { + var name = d3.ns.qualify(nameNS); + function attrTween(d, i) { + var f = tween.call(this, d, i, this.getAttribute(name)); + return f && function(t) { + this.setAttribute(name, f(t)); + }; + } + function attrTweenNS(d, i) { + var f = tween.call(this, d, i, this.getAttributeNS(name.space, name.local)); + return f && function(t) { + this.setAttributeNS(name.space, name.local, f(t)); + }; + } + return this.tween("attr." + nameNS, name.local ? attrTweenNS : attrTween); + }; + d3_transitionPrototype.style = function(name, value, priority) { + var n = arguments.length; + if (n < 3) { + if (typeof name !== "string") { + if (n < 2) value = ""; + for (priority in name) this.style(priority, name[priority], value); + return this; + } + priority = ""; + } + function styleNull() { + this.style.removeProperty(name); + } + function styleString(b) { + return b == null ? styleNull : (b += "", function() { + var a = d3_window(this).getComputedStyle(this, null).getPropertyValue(name), i; + return a !== b && (i = d3_interpolate(a, b), function(t) { + this.style.setProperty(name, i(t), priority); + }); + }); + } + return d3_transition_tween(this, "style." + name, value, styleString); + }; + d3_transitionPrototype.styleTween = function(name, tween, priority) { + if (arguments.length < 3) priority = ""; + function styleTween(d, i) { + var f = tween.call(this, d, i, d3_window(this).getComputedStyle(this, null).getPropertyValue(name)); + return f && function(t) { + this.style.setProperty(name, f(t), priority); + }; + } + return this.tween("style." + name, styleTween); + }; + d3_transitionPrototype.text = function(value) { + return d3_transition_tween(this, "text", value, d3_transition_text); + }; + function d3_transition_text(b) { + if (b == null) b = ""; + return function() { + this.textContent = b; + }; + } + d3_transitionPrototype.remove = function() { + var ns = this.namespace; + return this.each("end.transition", function() { + var p; + if (this[ns].count < 2 && (p = this.parentNode)) p.removeChild(this); + }); + }; + d3_transitionPrototype.ease = function(value) { + var id = this.id, ns = this.namespace; + if (arguments.length < 1) return this.node()[ns][id].ease; + if (typeof value !== "function") value = d3.ease.apply(d3, arguments); + return d3_selection_each(this, function(node) { + node[ns][id].ease = value; + }); + }; + d3_transitionPrototype.delay = function(value) { + var id = this.id, ns = this.namespace; + if (arguments.length < 1) return this.node()[ns][id].delay; + return d3_selection_each(this, typeof value === "function" ? function(node, i, j) { + node[ns][id].delay = +value.call(node, node.__data__, i, j); + } : (value = +value, function(node) { + node[ns][id].delay = value; + })); + }; + d3_transitionPrototype.duration = function(value) { + var id = this.id, ns = this.namespace; + if (arguments.length < 1) return this.node()[ns][id].duration; + return d3_selection_each(this, typeof value === "function" ? function(node, i, j) { + node[ns][id].duration = Math.max(1, value.call(node, node.__data__, i, j)); + } : (value = Math.max(1, value), function(node) { + node[ns][id].duration = value; + })); + }; + d3_transitionPrototype.each = function(type, listener) { + var id = this.id, ns = this.namespace; + if (arguments.length < 2) { + var inherit = d3_transitionInherit, inheritId = d3_transitionInheritId; + try { + d3_transitionInheritId = id; + d3_selection_each(this, function(node, i, j) { + d3_transitionInherit = node[ns][id]; + type.call(node, node.__data__, i, j); + }); + } finally { + d3_transitionInherit = inherit; + d3_transitionInheritId = inheritId; + } + } else { + d3_selection_each(this, function(node) { + var transition = node[ns][id]; + (transition.event || (transition.event = d3.dispatch("start", "end", "interrupt"))).on(type, listener); + }); + } + return this; + }; + d3_transitionPrototype.transition = function() { + var id0 = this.id, id1 = ++d3_transitionId, ns = this.namespace, subgroups = [], subgroup, group, node, transition; + for (var j = 0, m = this.length; j < m; j++) { + subgroups.push(subgroup = []); + for (var group = this[j], i = 0, n = group.length; i < n; i++) { + if (node = group[i]) { + transition = node[ns][id0]; + d3_transitionNode(node, i, ns, id1, { + time: transition.time, + ease: transition.ease, + delay: transition.delay + transition.duration, + duration: transition.duration + }); + } + subgroup.push(node); + } + } + return d3_transition(subgroups, ns, id1); + }; + function d3_transitionNamespace(name) { + return name == null ? "__transition__" : "__transition_" + name + "__"; + } + function d3_transitionNode(node, i, ns, id, inherit) { + var lock = node[ns] || (node[ns] = { + active: 0, + count: 0 + }), transition = lock[id], time, timer, duration, ease, tweens; + function schedule(elapsed) { + var delay = transition.delay; + timer.t = delay + time; + if (delay <= elapsed) return start(elapsed - delay); + timer.c = start; + } + function start(elapsed) { + var activeId = lock.active, active = lock[activeId]; + if (active) { + active.timer.c = null; + active.timer.t = NaN; + --lock.count; + delete lock[activeId]; + active.event && active.event.interrupt.call(node, node.__data__, active.index); + } + for (var cancelId in lock) { + if (+cancelId < id) { + var cancel = lock[cancelId]; + cancel.timer.c = null; + cancel.timer.t = NaN; + --lock.count; + delete lock[cancelId]; + } + } + timer.c = tick; + d3_timer(function() { + if (timer.c && tick(elapsed || 1)) { + timer.c = null; + timer.t = NaN; + } + return 1; + }, 0, time); + lock.active = id; + transition.event && transition.event.start.call(node, node.__data__, i); + tweens = []; + transition.tween.forEach(function(key, value) { + if (value = value.call(node, node.__data__, i)) { + tweens.push(value); + } + }); + ease = transition.ease; + duration = transition.duration; + } + function tick(elapsed) { + var t = elapsed / duration, e = ease(t), n = tweens.length; + while (n > 0) { + tweens[--n].call(node, e); + } + if (t >= 1) { + transition.event && transition.event.end.call(node, node.__data__, i); + if (--lock.count) delete lock[id]; else delete node[ns]; + return 1; + } + } + if (!transition) { + time = inherit.time; + timer = d3_timer(schedule, 0, time); + transition = lock[id] = { + tween: new d3_Map(), + time: time, + timer: timer, + delay: inherit.delay, + duration: inherit.duration, + ease: inherit.ease, + index: i + }; + inherit = null; + ++lock.count; + } + } + d3.svg.axis = function() { + var scale = d3.scale.linear(), orient = d3_svg_axisDefaultOrient, innerTickSize = 6, outerTickSize = 6, tickPadding = 3, tickArguments_ = [ 10 ], tickValues = null, tickFormat_; + function axis(g) { + g.each(function() { + var g = d3.select(this); + var scale0 = this.__chart__ || scale, scale1 = this.__chart__ = scale.copy(); + 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; + var range = d3_scaleRange(scale1), path = g.selectAll(".domain").data([ 0 ]), pathUpdate = (path.enter().append("path").attr("class", "domain"), + d3.transition(path)); + tickEnter.append("line"); + tickEnter.append("text"); + 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; + if (orient === "bottom" || orient === "top") { + tickTransform = d3_svg_axisX, x1 = "x", y1 = "y", x2 = "x2", y2 = "y2"; + text.attr("dy", sign < 0 ? "0em" : ".71em").style("text-anchor", "middle"); + pathUpdate.attr("d", "M" + range[0] + "," + sign * outerTickSize + "V0H" + range[1] + "V" + sign * outerTickSize); + } else { + tickTransform = d3_svg_axisY, x1 = "y", y1 = "x", x2 = "y2", y2 = "x2"; + text.attr("dy", ".32em").style("text-anchor", sign < 0 ? "end" : "start"); + pathUpdate.attr("d", "M" + sign * outerTickSize + "," + range[0] + "H0V" + range[1] + "H" + sign * outerTickSize); + } + lineEnter.attr(y2, sign * innerTickSize); + textEnter.attr(y1, sign * tickSpacing); + lineUpdate.attr(x2, 0).attr(y2, sign * innerTickSize); + textUpdate.attr(x1, 0).attr(y1, sign * tickSpacing); + if (scale1.rangeBand) { + var x = scale1, dx = x.rangeBand() / 2; + scale0 = scale1 = function(d) { + return x(d) + dx; + }; + } else if (scale0.rangeBand) { + scale0 = scale1; + } else { + tickExit.call(tickTransform, scale1, scale0); + } + tickEnter.call(tickTransform, scale0, scale1); + tickUpdate.call(tickTransform, scale1, scale1); + }); + } + axis.scale = function(x) { + if (!arguments.length) return scale; + scale = x; + return axis; + }; + axis.orient = function(x) { + if (!arguments.length) return orient; + orient = x in d3_svg_axisOrients ? x + "" : d3_svg_axisDefaultOrient; + return axis; + }; + axis.ticks = function() { + if (!arguments.length) return tickArguments_; + tickArguments_ = d3_array(arguments); + return axis; + }; + axis.tickValues = function(x) { + if (!arguments.length) return tickValues; + tickValues = x; + return axis; + }; + axis.tickFormat = function(x) { + if (!arguments.length) return tickFormat_; + tickFormat_ = x; + return axis; + }; + axis.tickSize = function(x) { + var n = arguments.length; + if (!n) return innerTickSize; + innerTickSize = +x; + outerTickSize = +arguments[n - 1]; + return axis; + }; + axis.innerTickSize = function(x) { + if (!arguments.length) return innerTickSize; + innerTickSize = +x; + return axis; + }; + axis.outerTickSize = function(x) { + if (!arguments.length) return outerTickSize; + outerTickSize = +x; + return axis; + }; + axis.tickPadding = function(x) { + if (!arguments.length) return tickPadding; + tickPadding = +x; + return axis; + }; + axis.tickSubdivide = function() { + return arguments.length && axis; + }; + return axis; + }; + var d3_svg_axisDefaultOrient = "bottom", d3_svg_axisOrients = { + top: 1, + right: 1, + bottom: 1, + left: 1 + }; + function d3_svg_axisX(selection, x0, x1) { + selection.attr("transform", function(d) { + var v0 = x0(d); + return "translate(" + (isFinite(v0) ? v0 : x1(d)) + ",0)"; + }); + } + function d3_svg_axisY(selection, y0, y1) { + selection.attr("transform", function(d) { + var v0 = y0(d); + return "translate(0," + (isFinite(v0) ? v0 : y1(d)) + ")"; + }); + } + d3.svg.brush = function() { + 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]; + function brush(g) { + g.each(function() { + 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); + var background = g.selectAll(".background").data([ 0 ]); + background.enter().append("rect").attr("class", "background").style("visibility", "hidden").style("cursor", "crosshair"); + g.selectAll(".extent").data([ 0 ]).enter().append("rect").attr("class", "extent").style("cursor", "move"); + var resize = g.selectAll(".resize").data(resizes, d3_identity); + resize.exit().remove(); + resize.enter().append("g").attr("class", function(d) { + return "resize " + d; + }).style("cursor", function(d) { + return d3_svg_brushCursor[d]; + }).append("rect").attr("x", function(d) { + return /[ew]$/.test(d) ? -3 : null; + }).attr("y", function(d) { + return /^[ns]/.test(d) ? -3 : null; + }).attr("width", 6).attr("height", 6).style("visibility", "hidden"); + resize.style("display", brush.empty() ? "none" : null); + var gUpdate = d3.transition(g), backgroundUpdate = d3.transition(background), range; + if (x) { + range = d3_scaleRange(x); + backgroundUpdate.attr("x", range[0]).attr("width", range[1] - range[0]); + redrawX(gUpdate); + } + if (y) { + range = d3_scaleRange(y); + backgroundUpdate.attr("y", range[0]).attr("height", range[1] - range[0]); + redrawY(gUpdate); + } + redraw(gUpdate); + }); + } + brush.event = function(g) { + g.each(function() { + var event_ = event.of(this, arguments), extent1 = { + x: xExtent, + y: yExtent, + i: xExtentDomain, + j: yExtentDomain + }, extent0 = this.__chart__ || extent1; + this.__chart__ = extent1; + if (d3_transitionInheritId) { + d3.select(this).transition().each("start.brush", function() { + xExtentDomain = extent0.i; + yExtentDomain = extent0.j; + xExtent = extent0.x; + yExtent = extent0.y; + event_({ + type: "brushstart" + }); + }).tween("brush:brush", function() { + var xi = d3_interpolateArray(xExtent, extent1.x), yi = d3_interpolateArray(yExtent, extent1.y); + xExtentDomain = yExtentDomain = null; + return function(t) { + xExtent = extent1.x = xi(t); + yExtent = extent1.y = yi(t); + event_({ + type: "brush", + mode: "resize" + }); + }; + }).each("end.brush", function() { + xExtentDomain = extent1.i; + yExtentDomain = extent1.j; + event_({ + type: "brush", + mode: "resize" + }); + event_({ + type: "brushend" + }); + }); + } else { + event_({ + type: "brushstart" + }); + event_({ + type: "brush", + mode: "resize" + }); + event_({ + type: "brushend" + }); + } + }); + }; + function redraw(g) { + g.selectAll(".resize").attr("transform", function(d) { + return "translate(" + xExtent[+/e$/.test(d)] + "," + yExtent[+/^s/.test(d)] + ")"; + }); + } + function redrawX(g) { + g.select(".extent").attr("x", xExtent[0]); + g.selectAll(".extent,.n>rect,.s>rect").attr("width", xExtent[1] - xExtent[0]); + } + function redrawY(g) { + g.select(".extent").attr("y", yExtent[0]); + g.selectAll(".extent,.e>rect,.w>rect").attr("height", yExtent[1] - yExtent[0]); + } + function brushstart() { + 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; + var w = d3.select(d3_window(target)).on("keydown.brush", keydown).on("keyup.brush", keyup); + if (d3.event.changedTouches) { + w.on("touchmove.brush", brushmove).on("touchend.brush", brushend); + } else { + w.on("mousemove.brush", brushmove).on("mouseup.brush", brushend); + } + g.interrupt().selectAll("*").interrupt(); + if (dragging) { + origin[0] = xExtent[0] - origin[0]; + origin[1] = yExtent[0] - origin[1]; + } else if (resizing) { + var ex = +/w$/.test(resizing), ey = +/^n/.test(resizing); + offset = [ xExtent[1 - ex] - origin[0], yExtent[1 - ey] - origin[1] ]; + origin[0] = xExtent[ex]; + origin[1] = yExtent[ey]; + } else if (d3.event.altKey) center = origin.slice(); + g.style("pointer-events", "none").selectAll(".resize").style("display", null); + d3.select("body").style("cursor", eventTarget.style("cursor")); + event_({ + type: "brushstart" + }); + brushmove(); + function keydown() { + if (d3.event.keyCode == 32) { + if (!dragging) { + center = null; + origin[0] -= xExtent[1]; + origin[1] -= yExtent[1]; + dragging = 2; + } + d3_eventPreventDefault(); + } + } + function keyup() { + if (d3.event.keyCode == 32 && dragging == 2) { + origin[0] += xExtent[1]; + origin[1] += yExtent[1]; + dragging = 0; + d3_eventPreventDefault(); + } + } + function brushmove() { + var point = d3.mouse(target), moved = false; + if (offset) { + point[0] += offset[0]; + point[1] += offset[1]; + } + if (!dragging) { + if (d3.event.altKey) { + if (!center) center = [ (xExtent[0] + xExtent[1]) / 2, (yExtent[0] + yExtent[1]) / 2 ]; + origin[0] = xExtent[+(point[0] < center[0])]; + origin[1] = yExtent[+(point[1] < center[1])]; + } else center = null; + } + if (resizingX && move1(point, x, 0)) { + redrawX(g); + moved = true; + } + if (resizingY && move1(point, y, 1)) { + redrawY(g); + moved = true; + } + if (moved) { + redraw(g); + event_({ + type: "brush", + mode: dragging ? "move" : "resize" + }); + } + } + function move1(point, scale, i) { + 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; + if (dragging) { + r0 -= position; + r1 -= size + position; + } + min = (i ? yClamp : xClamp) ? Math.max(r0, Math.min(r1, point[i])) : point[i]; + if (dragging) { + max = (min += position) + size; + } else { + if (center) position = Math.max(r0, Math.min(r1, 2 * center[i] - min)); + if (position < min) { + max = min; + min = position; + } else { + max = position; + } + } + if (extent[0] != min || extent[1] != max) { + if (i) yExtentDomain = null; else xExtentDomain = null; + extent[0] = min; + extent[1] = max; + return true; + } + } + function brushend() { + brushmove(); + g.style("pointer-events", "all").selectAll(".resize").style("display", brush.empty() ? "none" : null); + d3.select("body").style("cursor", null); + 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); + dragRestore(); + event_({ + type: "brushend" + }); + } + } + brush.x = function(z) { + if (!arguments.length) return x; + x = z; + resizes = d3_svg_brushResizes[!x << 1 | !y]; + return brush; + }; + brush.y = function(z) { + if (!arguments.length) return y; + y = z; + resizes = d3_svg_brushResizes[!x << 1 | !y]; + return brush; + }; + brush.clamp = function(z) { + if (!arguments.length) return x && y ? [ xClamp, yClamp ] : x ? xClamp : y ? yClamp : null; + if (x && y) xClamp = !!z[0], yClamp = !!z[1]; else if (x) xClamp = !!z; else if (y) yClamp = !!z; + return brush; + }; + brush.extent = function(z) { + var x0, x1, y0, y1, t; + if (!arguments.length) { + if (x) { + if (xExtentDomain) { + x0 = xExtentDomain[0], x1 = xExtentDomain[1]; + } else { + x0 = xExtent[0], x1 = xExtent[1]; + if (x.invert) x0 = x.invert(x0), x1 = x.invert(x1); + if (x1 < x0) t = x0, x0 = x1, x1 = t; + } + } + if (y) { + if (yExtentDomain) { + y0 = yExtentDomain[0], y1 = yExtentDomain[1]; + } else { + y0 = yExtent[0], y1 = yExtent[1]; + if (y.invert) y0 = y.invert(y0), y1 = y.invert(y1); + if (y1 < y0) t = y0, y0 = y1, y1 = t; + } + } + return x && y ? [ [ x0, y0 ], [ x1, y1 ] ] : x ? [ x0, x1 ] : y && [ y0, y1 ]; + } + if (x) { + x0 = z[0], x1 = z[1]; + if (y) x0 = x0[0], x1 = x1[0]; + xExtentDomain = [ x0, x1 ]; + if (x.invert) x0 = x(x0), x1 = x(x1); + if (x1 < x0) t = x0, x0 = x1, x1 = t; + if (x0 != xExtent[0] || x1 != xExtent[1]) xExtent = [ x0, x1 ]; + } + if (y) { + y0 = z[0], y1 = z[1]; + if (x) y0 = y0[1], y1 = y1[1]; + yExtentDomain = [ y0, y1 ]; + if (y.invert) y0 = y(y0), y1 = y(y1); + if (y1 < y0) t = y0, y0 = y1, y1 = t; + if (y0 != yExtent[0] || y1 != yExtent[1]) yExtent = [ y0, y1 ]; + } + return brush; + }; + brush.clear = function() { + if (!brush.empty()) { + xExtent = [ 0, 0 ], yExtent = [ 0, 0 ]; + xExtentDomain = yExtentDomain = null; + } + return brush; + }; + brush.empty = function() { + return !!x && xExtent[0] == xExtent[1] || !!y && yExtent[0] == yExtent[1]; + }; + return d3.rebind(brush, event, "on"); + }; + var d3_svg_brushCursor = { + n: "ns-resize", + e: "ew-resize", + s: "ns-resize", + w: "ew-resize", + nw: "nwse-resize", + ne: "nesw-resize", + se: "nwse-resize", + sw: "nesw-resize" + }; + var d3_svg_brushResizes = [ [ "n", "e", "s", "w", "nw", "ne", "se", "sw" ], [ "e", "w" ], [ "n", "s" ], [] ]; + var d3_time_format = d3_time.format = d3_locale_enUS.timeFormat; + var d3_time_formatUtc = d3_time_format.utc; + var d3_time_formatIso = d3_time_formatUtc("%Y-%m-%dT%H:%M:%S.%LZ"); + d3_time_format.iso = Date.prototype.toISOString && +new Date("2000-01-01T00:00:00.000Z") ? d3_time_formatIsoNative : d3_time_formatIso; + function d3_time_formatIsoNative(date) { + return date.toISOString(); + } + d3_time_formatIsoNative.parse = function(string) { + var date = new Date(string); + return isNaN(date) ? null : date; + }; + d3_time_formatIsoNative.toString = d3_time_formatIso.toString; + d3_time.second = d3_time_interval(function(date) { + return new d3_date(Math.floor(date / 1e3) * 1e3); + }, function(date, offset) { + date.setTime(date.getTime() + Math.floor(offset) * 1e3); + }, function(date) { + return date.getSeconds(); + }); + d3_time.seconds = d3_time.second.range; + d3_time.seconds.utc = d3_time.second.utc.range; + d3_time.minute = d3_time_interval(function(date) { + return new d3_date(Math.floor(date / 6e4) * 6e4); + }, function(date, offset) { + date.setTime(date.getTime() + Math.floor(offset) * 6e4); + }, function(date) { + return date.getMinutes(); + }); + d3_time.minutes = d3_time.minute.range; + d3_time.minutes.utc = d3_time.minute.utc.range; + d3_time.hour = d3_time_interval(function(date) { + var timezone = date.getTimezoneOffset() / 60; + return new d3_date((Math.floor(date / 36e5 - timezone) + timezone) * 36e5); + }, function(date, offset) { + date.setTime(date.getTime() + Math.floor(offset) * 36e5); + }, function(date) { + return date.getHours(); + }); + d3_time.hours = d3_time.hour.range; + d3_time.hours.utc = d3_time.hour.utc.range; + d3_time.month = d3_time_interval(function(date) { + date = d3_time.day(date); + date.setDate(1); + return date; + }, function(date, offset) { + date.setMonth(date.getMonth() + offset); + }, function(date) { + return date.getMonth(); + }); + d3_time.months = d3_time.month.range; + d3_time.months.utc = d3_time.month.utc.range; + function d3_time_scale(linear, methods, format) { + function scale(x) { + return linear(x); + } + scale.invert = function(x) { + return d3_time_scaleDate(linear.invert(x)); + }; + scale.domain = function(x) { + if (!arguments.length) return linear.domain().map(d3_time_scaleDate); + linear.domain(x); + return scale; + }; + function tickMethod(extent, count) { + var span = extent[1] - extent[0], target = span / count, i = d3.bisect(d3_time_scaleSteps, target); + return i == d3_time_scaleSteps.length ? [ methods.year, d3_scale_linearTickRange(extent.map(function(d) { + return d / 31536e6; + }), 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]; + } + scale.nice = function(interval, skip) { + var domain = scale.domain(), extent = d3_scaleExtent(domain), method = interval == null ? tickMethod(extent, 10) : typeof interval === "number" && tickMethod(extent, interval); + if (method) interval = method[0], skip = method[1]; + function skipped(date) { + return !isNaN(date) && !interval.range(date, d3_time_scaleDate(+date + 1), skip).length; + } + return scale.domain(d3_scale_nice(domain, skip > 1 ? { + floor: function(date) { + while (skipped(date = interval.floor(date))) date = d3_time_scaleDate(date - 1); + return date; + }, + ceil: function(date) { + while (skipped(date = interval.ceil(date))) date = d3_time_scaleDate(+date + 1); + return date; + } + } : interval)); + }; + scale.ticks = function(interval, skip) { + var extent = d3_scaleExtent(scale.domain()), method = interval == null ? tickMethod(extent, 10) : typeof interval === "number" ? tickMethod(extent, interval) : !interval.range && [ { + range: interval + }, skip ]; + if (method) interval = method[0], skip = method[1]; + return interval.range(extent[0], d3_time_scaleDate(+extent[1] + 1), skip < 1 ? 1 : skip); + }; + scale.tickFormat = function() { + return format; + }; + scale.copy = function() { + return d3_time_scale(linear.copy(), methods, format); + }; + return d3_scale_linearRebind(scale, linear); + } + function d3_time_scaleDate(t) { + return new Date(t); + } + var d3_time_scaleSteps = [ 1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6 ]; + 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 ] ]; + var d3_time_scaleLocalFormat = d3_time_format.multi([ [ ".%L", function(d) { + return d.getMilliseconds(); + } ], [ ":%S", function(d) { + return d.getSeconds(); + } ], [ "%I:%M", function(d) { + return d.getMinutes(); + } ], [ "%I %p", function(d) { + return d.getHours(); + } ], [ "%a %d", function(d) { + return d.getDay() && d.getDate() != 1; + } ], [ "%b %d", function(d) { + return d.getDate() != 1; + } ], [ "%B", function(d) { + return d.getMonth(); + } ], [ "%Y", d3_true ] ]); + var d3_time_scaleMilliseconds = { + range: function(start, stop, step) { + return d3.range(Math.ceil(start / step) * step, +stop, step).map(d3_time_scaleDate); + }, + floor: d3_identity, + ceil: d3_identity + }; + d3_time_scaleLocalMethods.year = d3_time.year; + d3_time.scale = function() { + return d3_time_scale(d3.scale.linear(), d3_time_scaleLocalMethods, d3_time_scaleLocalFormat); + }; + var d3_time_scaleUtcMethods = d3_time_scaleLocalMethods.map(function(m) { + return [ m[0].utc, m[1] ]; + }); + var d3_time_scaleUtcFormat = d3_time_formatUtc.multi([ [ ".%L", function(d) { + return d.getUTCMilliseconds(); + } ], [ ":%S", function(d) { + return d.getUTCSeconds(); + } ], [ "%I:%M", function(d) { + return d.getUTCMinutes(); + } ], [ "%I %p", function(d) { + return d.getUTCHours(); + } ], [ "%a %d", function(d) { + return d.getUTCDay() && d.getUTCDate() != 1; + } ], [ "%b %d", function(d) { + return d.getUTCDate() != 1; + } ], [ "%B", function(d) { + return d.getUTCMonth(); + } ], [ "%Y", d3_true ] ]); + d3_time_scaleUtcMethods.year = d3_time.year.utc; + d3_time.scale.utc = function() { + return d3_time_scale(d3.scale.linear(), d3_time_scaleUtcMethods, d3_time_scaleUtcFormat); + }; + d3.text = d3_xhrType(function(request) { + return request.responseText; + }); + d3.json = function(url, callback) { + return d3_xhr(url, "application/json", d3_json, callback); + }; + function d3_json(request) { + return JSON.parse(request.responseText); + } + d3.html = function(url, callback) { + return d3_xhr(url, "text/html", d3_html, callback); + }; + function d3_html(request) { + var range = d3_document.createRange(); + range.selectNode(d3_document.body); + return range.createContextualFragment(request.responseText); + } + d3.xml = d3_xhrType(function(request) { + return request.responseXML; + }); + 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; +}(); \ No newline at end of file