diff --git a/CHANGELOG.md b/CHANGELOG.md index c1ec664a7..988a081b1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,9 +1,13 @@ # Changelog -## [Unreleased] +## [0.4.8] - 2020-03-16 ### Changed * [#489](https://github.com/plotly/dash-bio/pull/489) Renamed async modules with hyphen `-` instead of tilde `~` -- [#494](https://github.com/plotly/dash-bio/pull/494) Update from React 16.8.6 to 16.13.0 +* [#494](https://github.com/plotly/dash-bio/pull/494) Update from React 16.8.6 to 16.13.0 + +### Added +* [#492](https://github.com/plotly/dash-bio/pull/492) Added working support of + labels in Clustergram. ## [0.4.7] - 2020-02-21 ### Added diff --git a/dash_bio/bundle.js b/dash_bio/bundle.js index 20525175b..502c2e117 100644 --- a/dash_bio/bundle.js +++ b/dash_bio/bundle.js @@ -1 +1 @@ -window.dash_bio=function(t){function n(n){for(var e,o,a=n[0],i=n[1],u=0,s=[];u0&&(o=1/Math.sqrt(o),t[0]=n[0]*o,t[1]=n[1]*o),t},u.dot=function(t,n){return t[0]*n[0]+t[1]*n[1]},u.cross=function(t,n,e){var r=n[0]*e[1]-n[1]*e[0];return t[0]=t[1]=0,t[2]=r,t},u.lerp=function(t,n,e,r){var o=n[0],a=n[1];return t[0]=o+r*(e[0]-o),t[1]=a+r*(e[1]-a),t},u.random=function(t,n){n=n||1;var e=2*r()*Math.PI;return t[0]=Math.cos(e)*n,t[1]=Math.sin(e)*n,t},u.transformMat2=function(t,n,e){var r=n[0],o=n[1];return t[0]=e[0]*r+e[2]*o,t[1]=e[1]*r+e[3]*o,t},u.transformMat2d=function(t,n,e){var r=n[0],o=n[1];return t[0]=e[0]*r+e[2]*o+e[4],t[1]=e[1]*r+e[3]*o+e[5],t},u.transformMat3=function(t,n,e){var r=n[0],o=n[1];return t[0]=e[0]*r+e[3]*o+e[6],t[1]=e[1]*r+e[4]*o+e[7],t},u.transformMat4=function(t,n,e){var r=n[0],o=n[1];return t[0]=e[0]*r+e[4]*o+e[12],t[1]=e[1]*r+e[5]*o+e[13],t},u.forEach=(i=u.create(),function(t,n,e,r,o,a){var u,s;for(n||(n=2),e||(e=0),s=r?Math.min(r*n+e,t.length):t.length,u=e;u0&&(a=1/Math.sqrt(a),t[0]=n[0]*a,t[1]=n[1]*a,t[2]=n[2]*a),t},s.dot=function(t,n){return t[0]*n[0]+t[1]*n[1]+t[2]*n[2]},s.cross=function(t,n,e){var r=n[0],o=n[1],a=n[2],i=e[0],u=e[1],s=e[2];return t[0]=o*s-a*u,t[1]=a*i-r*s,t[2]=r*u-o*i,t},s.lerp=function(t,n,e,r){var o=n[0],a=n[1],i=n[2];return t[0]=o+r*(e[0]-o),t[1]=a+r*(e[1]-a),t[2]=i+r*(e[2]-i),t},s.random=function(t,n){n=n||1;var e=2*r()*Math.PI,o=2*r()-1,a=Math.sqrt(1-o*o)*n;return t[0]=Math.cos(e)*a,t[1]=Math.sin(e)*a,t[2]=o*n,t},s.transformMat4=function(t,n,e){var r=n[0],o=n[1],a=n[2],i=e[3]*r+e[7]*o+e[11]*a+e[15];return i=i||1,t[0]=(e[0]*r+e[4]*o+e[8]*a+e[12])/i,t[1]=(e[1]*r+e[5]*o+e[9]*a+e[13])/i,t[2]=(e[2]*r+e[6]*o+e[10]*a+e[14])/i,t},s.transformMat3=function(t,n,e){var r=n[0],o=n[1],a=n[2];return t[0]=r*e[0]+o*e[3]+a*e[6],t[1]=r*e[1]+o*e[4]+a*e[7],t[2]=r*e[2]+o*e[5]+a*e[8],t},s.transformQuat=function(t,n,e){var r=n[0],o=n[1],a=n[2],i=e[0],u=e[1],s=e[2],l=e[3],c=l*r+u*a-s*o,f=l*o+s*r-i*a,h=l*a+i*o-u*r,p=-i*r-u*o-s*a;return t[0]=c*l+p*-i+f*-s-h*-u,t[1]=f*l+p*-u+h*-i-c*-s,t[2]=h*l+p*-s+c*-u-f*-i,t},s.rotateX=function(t,n,e,r){var o=[],a=[];return o[0]=n[0]-e[0],o[1]=n[1]-e[1],o[2]=n[2]-e[2],a[0]=o[0],a[1]=o[1]*Math.cos(r)-o[2]*Math.sin(r),a[2]=o[1]*Math.sin(r)+o[2]*Math.cos(r),t[0]=a[0]+e[0],t[1]=a[1]+e[1],t[2]=a[2]+e[2],t},s.rotateY=function(t,n,e,r){var o=[],a=[];return o[0]=n[0]-e[0],o[1]=n[1]-e[1],o[2]=n[2]-e[2],a[0]=o[2]*Math.sin(r)+o[0]*Math.cos(r),a[1]=o[1],a[2]=o[2]*Math.cos(r)-o[0]*Math.sin(r),t[0]=a[0]+e[0],t[1]=a[1]+e[1],t[2]=a[2]+e[2],t},s.rotateZ=function(t,n,e,r){var o=[],a=[];return o[0]=n[0]-e[0],o[1]=n[1]-e[1],o[2]=n[2]-e[2],a[0]=o[0]*Math.cos(r)-o[1]*Math.sin(r),a[1]=o[0]*Math.sin(r)+o[1]*Math.cos(r),a[2]=o[2],t[0]=a[0]+e[0],t[1]=a[1]+e[1],t[2]=a[2]+e[2],t},s.forEach=function(){var t=s.create();return function(n,e,r,o,a,i){var u,s;for(e||(e=3),r||(r=0),s=o?Math.min(o*e+r,n.length):n.length,u=r;u1?0:Math.acos(o)},s.str=function(t){return"vec3("+t[0]+", "+t[1]+", "+t[2]+")"},void 0!==t&&(t.vec3=s);var l={create:function(){var t=new e(4);return t[0]=0,t[1]=0,t[2]=0,t[3]=0,t},clone:function(t){var n=new e(4);return n[0]=t[0],n[1]=t[1],n[2]=t[2],n[3]=t[3],n},fromValues:function(t,n,r,o){var a=new e(4);return a[0]=t,a[1]=n,a[2]=r,a[3]=o,a},copy:function(t,n){return t[0]=n[0],t[1]=n[1],t[2]=n[2],t[3]=n[3],t},set:function(t,n,e,r,o){return t[0]=n,t[1]=e,t[2]=r,t[3]=o,t},add:function(t,n,e){return t[0]=n[0]+e[0],t[1]=n[1]+e[1],t[2]=n[2]+e[2],t[3]=n[3]+e[3],t},subtract:function(t,n,e){return t[0]=n[0]-e[0],t[1]=n[1]-e[1],t[2]=n[2]-e[2],t[3]=n[3]-e[3],t}};l.sub=l.subtract,l.multiply=function(t,n,e){return t[0]=n[0]*e[0],t[1]=n[1]*e[1],t[2]=n[2]*e[2],t[3]=n[3]*e[3],t},l.mul=l.multiply,l.divide=function(t,n,e){return t[0]=n[0]/e[0],t[1]=n[1]/e[1],t[2]=n[2]/e[2],t[3]=n[3]/e[3],t},l.div=l.divide,l.min=function(t,n,e){return t[0]=Math.min(n[0],e[0]),t[1]=Math.min(n[1],e[1]),t[2]=Math.min(n[2],e[2]),t[3]=Math.min(n[3],e[3]),t},l.max=function(t,n,e){return t[0]=Math.max(n[0],e[0]),t[1]=Math.max(n[1],e[1]),t[2]=Math.max(n[2],e[2]),t[3]=Math.max(n[3],e[3]),t},l.scale=function(t,n,e){return t[0]=n[0]*e,t[1]=n[1]*e,t[2]=n[2]*e,t[3]=n[3]*e,t},l.scaleAndAdd=function(t,n,e,r){return t[0]=n[0]+e[0]*r,t[1]=n[1]+e[1]*r,t[2]=n[2]+e[2]*r,t[3]=n[3]+e[3]*r,t},l.distance=function(t,n){var e=n[0]-t[0],r=n[1]-t[1],o=n[2]-t[2],a=n[3]-t[3];return Math.sqrt(e*e+r*r+o*o+a*a)},l.dist=l.distance,l.squaredDistance=function(t,n){var e=n[0]-t[0],r=n[1]-t[1],o=n[2]-t[2],a=n[3]-t[3];return e*e+r*r+o*o+a*a},l.sqrDist=l.squaredDistance,l.length=function(t){var n=t[0],e=t[1],r=t[2],o=t[3];return Math.sqrt(n*n+e*e+r*r+o*o)},l.len=l.length,l.squaredLength=function(t){var n=t[0],e=t[1],r=t[2],o=t[3];return n*n+e*e+r*r+o*o},l.sqrLen=l.squaredLength,l.negate=function(t,n){return t[0]=-n[0],t[1]=-n[1],t[2]=-n[2],t[3]=-n[3],t},l.inverse=function(t,n){return t[0]=1/n[0],t[1]=1/n[1],t[2]=1/n[2],t[3]=1/n[3],t},l.normalize=function(t,n){var e=n[0],r=n[1],o=n[2],a=n[3],i=e*e+r*r+o*o+a*a;return i>0&&(i=1/Math.sqrt(i),t[0]=n[0]*i,t[1]=n[1]*i,t[2]=n[2]*i,t[3]=n[3]*i),t},l.dot=function(t,n){return t[0]*n[0]+t[1]*n[1]+t[2]*n[2]+t[3]*n[3]},l.lerp=function(t,n,e,r){var o=n[0],a=n[1],i=n[2],u=n[3];return t[0]=o+r*(e[0]-o),t[1]=a+r*(e[1]-a),t[2]=i+r*(e[2]-i),t[3]=u+r*(e[3]-u),t},l.random=function(t,n){return n=n||1,t[0]=r(),t[1]=r(),t[2]=r(),t[3]=r(),l.normalize(t,t),l.scale(t,t,n),t},l.transformMat4=function(t,n,e){var r=n[0],o=n[1],a=n[2],i=n[3];return t[0]=e[0]*r+e[4]*o+e[8]*a+e[12]*i,t[1]=e[1]*r+e[5]*o+e[9]*a+e[13]*i,t[2]=e[2]*r+e[6]*o+e[10]*a+e[14]*i,t[3]=e[3]*r+e[7]*o+e[11]*a+e[15]*i,t},l.transformQuat=function(t,n,e){var r=n[0],o=n[1],a=n[2],i=e[0],u=e[1],s=e[2],l=e[3],c=l*r+u*a-s*o,f=l*o+s*r-i*a,h=l*a+i*o-u*r,p=-i*r-u*o-s*a;return t[0]=c*l+p*-i+f*-s-h*-u,t[1]=f*l+p*-u+h*-i-c*-s,t[2]=h*l+p*-s+c*-u-f*-i,t},l.forEach=function(){var t=l.create();return function(n,e,r,o,a,i){var u,s;for(e||(e=4),r||(r=0),s=o?Math.min(o*e+r,n.length):n.length,u=r;u.999999?(t[0]=0,t[1]=0,t[2]=0,t[3]=1,t):(s.cross(d,n,e),t[0]=d[0],t[1]=d[1],t[2]=d[2],t[3]=1+r,y.normalize(t,t))}),y.setAxes=(v=h.create(),function(t,n,e,r){return v[0]=e[0],v[3]=e[1],v[6]=e[2],v[1]=r[0],v[4]=r[1],v[7]=r[2],v[2]=-n[0],v[5]=-n[1],v[8]=-n[2],y.normalize(t,y.fromMat3(t,v))}),y.clone=l.clone,y.fromValues=l.fromValues,y.copy=l.copy,y.set=l.set,y.identity=function(t){return t[0]=0,t[1]=0,t[2]=0,t[3]=1,t},y.setAxisAngle=function(t,n,e){e*=.5;var r=Math.sin(e);return t[0]=r*n[0],t[1]=r*n[1],t[2]=r*n[2],t[3]=Math.cos(e),t},y.add=l.add,y.multiply=function(t,n,e){var r=n[0],o=n[1],a=n[2],i=n[3],u=e[0],s=e[1],l=e[2],c=e[3];return t[0]=r*c+i*u+o*l-a*s,t[1]=o*c+i*s+a*u-r*l,t[2]=a*c+i*l+r*s-o*u,t[3]=i*c-r*u-o*s-a*l,t},y.mul=y.multiply,y.scale=l.scale,y.rotateX=function(t,n,e){e*=.5;var r=n[0],o=n[1],a=n[2],i=n[3],u=Math.sin(e),s=Math.cos(e);return t[0]=r*s+i*u,t[1]=o*s+a*u,t[2]=a*s-o*u,t[3]=i*s-r*u,t},y.rotateY=function(t,n,e){e*=.5;var r=n[0],o=n[1],a=n[2],i=n[3],u=Math.sin(e),s=Math.cos(e);return t[0]=r*s-a*u,t[1]=o*s+i*u,t[2]=a*s+r*u,t[3]=i*s-o*u,t},y.rotateZ=function(t,n,e){e*=.5;var r=n[0],o=n[1],a=n[2],i=n[3],u=Math.sin(e),s=Math.cos(e);return t[0]=r*s+o*u,t[1]=o*s-r*u,t[2]=a*s+i*u,t[3]=i*s-a*u,t},y.calculateW=function(t,n){var e=n[0],r=n[1],o=n[2];return t[0]=e,t[1]=r,t[2]=o,t[3]=Math.sqrt(Math.abs(1-e*e-r*r-o*o)),t},y.dot=l.dot,y.lerp=l.lerp,y.slerp=function(t,n,e,r){var o,a,i,u,s,l=n[0],c=n[1],f=n[2],h=n[3],p=e[0],d=e[1],m=e[2],g=e[3];return(a=l*p+c*d+f*m+h*g)<0&&(a=-a,p=-p,d=-d,m=-m,g=-g),1-a>1e-6?(o=Math.acos(a),i=Math.sin(o),u=Math.sin((1-r)*o)/i,s=Math.sin(r*o)/i):(u=1-r,s=r),t[0]=u*l+s*p,t[1]=u*c+s*d,t[2]=u*f+s*m,t[3]=u*h+s*g,t},y.invert=function(t,n){var e=n[0],r=n[1],o=n[2],a=n[3],i=e*e+r*r+o*o+a*a,u=i?1/i:0;return t[0]=-e*u,t[1]=-r*u,t[2]=-o*u,t[3]=a*u,t},y.conjugate=function(t,n){return t[0]=-n[0],t[1]=-n[1],t[2]=-n[2],t[3]=n[3],t},y.length=l.length,y.len=y.length,y.squaredLength=l.squaredLength,y.sqrLen=y.squaredLength,y.normalize=l.normalize,y.fromMat3=function(t,n){var e,r=n[0]+n[4]+n[8];if(r>0)e=Math.sqrt(r+1),t[3]=.5*e,e=.5/e,t[0]=(n[5]-n[7])*e,t[1]=(n[6]-n[2])*e,t[2]=(n[1]-n[3])*e;else{var o=0;n[4]>n[0]&&(o=1),n[8]>n[3*o+o]&&(o=2);var a=(o+1)%3,i=(o+2)%3;e=Math.sqrt(n[3*o+o]-n[3*a+a]-n[3*i+i]+1),t[o]=.5*e,e=.5/e,t[3]=(n[3*a+i]-n[3*i+a])*e,t[a]=(n[3*a+o]+n[3*o+a])*e,t[i]=(n[3*i+o]+n[3*o+i])*e}return t},y.str=function(t){return"quat("+t[0]+", "+t[1]+", "+t[2]+", "+t[3]+")"},void 0!==t&&(t.quat=y)}(e.exports)}()},function(t,n,e){"use strict";var r=e(7),o=e(6),a=e(20);function i(t,n,e){return Math.min(n,Math.max(t,e))}t.exports.new=function(){return{aspect:1,zoom:.125,translation:{x:0,y:0},atomScale:.6,relativeAtomScale:1,bondScale:.5,rotation:r.mat4.create(),ao:.75,aoRes:256,brightness:.5,outline:0,spf:32,bonds:!1,bondThreshold:1.2,bondShade:.5,atomShade:.5,resolution:768,dofStrength:0,dofPosition:.5,fxaa:1}},t.exports.center=function(t,n){for(var e=-1/0,a=1/0,i=-1/0,u=1/0,s=0;sn&&(n=u,t.farAtom=r)}return t.farAtom});t.exports.getRadius=function(t){var n=u(t),e=a.MAX_ATOM_RADIUS,r=2.5*Math.sqrt(e*e+e*e+e*e);return Math.sqrt(n.x*n.x+n.y*n.y+n.z*n.z)+r}},function(t,n,e){var o;o=function(){return function(t){var n={};function e(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return t[r].call(o.exports,o,o.exports,e),o.loaded=!0,o.exports}return e.m=t,e.c=n,e.p="",e(0)}([function(t,n,e){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.rnaPlot=n.RNAGraph=void 0;var o=e(1);Object.defineProperty(n,"RNAGraph",{enumerable:!0,get:function(){return o.RNAGraph}});var a=e(3);Object.defineProperty(n,"rnaPlot",{enumerable:!0,get:function(){return a.rnaPlot}}),n.FornaContainer=function(t,n){var e=this;if(e.options={displayAllLinks:!1,labelInterval:10,applyForce:!0,chargeDistance:110,friction:.35,middleCharge:-30,otherCharge:-30,linkDistanceMultiplier:15,initialSize:null,layout:"standard-polygonal",allowPanningAndZooming:!0,transitionDuration:500,resizeSvgOnResize:!0},arguments.length>1)for(var a in n)e.options.hasOwnProperty(a)&&(e.options[a]=n[a]);null!==e.options.initialSize?(e.options.svgW=e.options.initialSize[0],e.options.svgH=e.options.initialSize[1]):(e.options.svgW=800,e.options.svgH=800),l.default.scale.category20();var u=null,s=null,p=l.default.scale.linear().domain([0,e.options.svgW]).range([0,e.options.svgW]),d=l.default.scale.linear().domain([0,e.options.svgH]).range([0,e.options.svgH]),m=e.graph={nodes:[],links:[]};function g(t){return Math.sqrt(t[0]*t[0]+t[1]*t[1])}function v(t){var n=t,e=t.prevNode;if(null!==e&&t.linked){var r=[-(n.x-e.x),-(n.y-e.y)],o=[-(r=[r[0]/g(r),r[1]/g(r)])[1],r[0]],a=[t.radius*r[0],t.radius*r[1]],i="M"+(a[0]+6*(r[0]+o[0])/2)+","+(a[1]+6*(r[1]+o[1])/2)+"L"+a[0]+","+a[1]+"L"+(a[0]+6*(r[0]-o[0])/2)+","+(a[1]+6*(r[1]-o[1])/2);l.default.select(this).attr("d",i)}}function y(t){return"basepair"==t.linkType||"backbone"==t.linkType||"pseudoknot"==t.linkType||"label_link"==t.linkType||"external"==t.linkType||"chain_chain"==t.linkType}function b(t,n,e){if(t.hasOwnProperty(n.num)){var r=parseFloat(t[n.num]);return isNaN(r)?t[n.num]:e(r)}return"white"}function x(){}function M(){u&&(mpos=l.default.mouse(A.node()),P.attr("x1",u.x).attr("y1",u.y).attr("x2",mpos[0]).attr("y2",mpos[1]))}function w(){u&&P.attr("class","drag_line_hidden"),C()}e.linkStrengths={pseudoknot:0,proteinChain:0,chainChain:0,intermolecule:10,external:0,other:10},e.displayParameters={displayBackground:"true",displayNumbering:"true",displayNodeOutline:"true",displayNodeLabel:"true",displayLinks:"true",displayPseudoknotLinks:"true",displayProteinLinks:"true"},e.colorScheme="structure",e.customColors={},e.animation=e.options.applyForce,e.deaf=!1,e.rnas={},e.extraLinks=[],Array.prototype.equals=function(t){if(!t)return!1;if(this.length!=t.length)return!1;for(var n=0,e=this.length;n0?l.default.max(e.graph.nodes.map((function(t){return t.x}))):0,o=l.default.min(t.nodes.map((function(t){return t.x}))),t.nodes.forEach((function(t){t.x+=r-o+20,t.px+=r-o}))),t.nodes.forEach((function(n){n.rna=t})),e.rnas[t.uid]=t,e.recalculateGraph(),e.update(),e.centerView(),t},e.transitionRNA=function(t,n){var r=e.options.transitionDuration,o={uids:e.graph.nodes.filter((function(t){return"nucleotide"==t.nodeType})).map((function(t){return t.uid}))},a=e.createInitialLayout(t,o),i=T.selectAll("g.gnode").data(a.nodes,Y);0===(r=e.options.transitionDuration)?i.attr("transform",(function(t){return"translate("+[t.x,t.y]+")"})):i.transition().attr("transform",(function(t){return"translate("+[t.x,t.y]+")"})).duration(r);var u=E.selectAll("line.link").data(a.links.filter(y),X),s=e.createNewNodes(i.enter()).attr("transform",(function(t){return void 0!==t.x&&void 0!==t.y?"translate("+[0,0]+")":""}));0===r?i.exit().remove():i.exit().transition().attr("transform",(function(t){return void 0!==t.x&&void 0!==t.y?"translate("+[0,0]+")":""})),i.select("path").each(v),e.graph.nodes=i.data(),e.updateStyle(),e.centerView(r),u.exit().remove(),0===r?(u.attr("x1",(function(t){return t.source.x})).attr("y1",(function(t){return t.source.y})).attr("x2",(function(t){return t.target.x})).attr("y2",(function(t){return t.target.y})),e.createNewLinks(u.enter()),e.graph.links=u.data(),e.updateStyle()):u.transition().attr("x1",(function(t){return t.source.x})).attr("y1",(function(t){return t.source.y})).attr("x2",(function(t){return t.target.x})).attr("y2",(function(t){return t.target.y})).duration(r).call((function(t,n){0===t.size()&&setTimeout(n,r);var e=0;t.each((function(){++e})).each("end",(function(){--e||n.apply(this,arguments)}))}),(function(){e.createNewLinks(u.enter()),e.graph.links=u.data(),e.updateStyle(),void 0!==n&&n()})),0===r?s.attr("transform",(function(t){return void 0!==t.x&&void 0!==t.y?"translate("+[t.x,t.y]+")":""})):s.transition().attr("transform",(function(t){return void 0!==t.x&&void 0!==t.y?"translate("+[t.x,t.y]+")":""}))},e.recalculateGraph=function(){for(var t in e.graph.nodes=[],e.graph.links=[],e.rnas)e.graph.nodes=e.graph.nodes.concat(e.rnas[t].nodes),e.graph.links=e.graph.links.concat(e.rnas[t].links);for(var n={},r=0;r0?(maxX=l.default.max(e.graph.nodes.map((function(t){return t.x}))),maxY=l.default.max(e.graph.nodes.map((function(t){return t.y})))):(maxX=0,maxY=0),t.nodes.forEach((function(t){t.rna.uid in e.rnas||(e.rnas[t.rna.uid]=t.rna),t.x+=maxX,t.px+=maxX})),r=new o.RNAGraph("",""),r.nodes=t.nodes,r.links=t.links,e.recalculateGraph(),e.update(),e.centerView()},e.addCustomColors=function(t){e.customColors=t},e.addCustomColorsText=function(t){var n=new f.ColorScheme(t);e.customColors=n.colorsJson,e.changeColorScheme("custom")},e.clearNodes=function(){e.graph.nodes=[],e.graph.links=[],e.rnas={},e.extraLinks=[],e.update()},e.toJSON=function(){var t={rnas:e.rnas,extraLinks:e.extraLinks};return JSON.stringify(t,(function(t,n){return"rna"==t?void 0:n}),"\t")},e.fromJSON=function(t){var n,a;try{var i=JSON.parse(t);n=i.rnas,a=i.extraLinks}catch(t){throw t}for(var u in n)"rna"==n[u].type?(r=new o.RNAGraph,r.seq=n[u].seq,r.dotbracket=n[u].dotbracket,r.circular=n[u].circular,r.pairtable=n[u].pairtable,r.uid=n[u].uid,r.structName=n[u].structName,r.nodes=n[u].nodes,r.links=n[u].links,r.rnaLength=n[u].rnaLength,r.elements=n[u].elements,r.nucsToNodes=n[u].nucsToNodes,r.pseudoknotPairs=n[u].pseudoknotPairs):(r=new ProteinGraph,r.size=n[u].size,r.nodes=n[u].nodes,r.uid=n[u].uid),e.addRNAJSON(r,!1);a.forEach((function(t){e.extraLinks.push(t)})),e.recalculateGraph(),e.update()},e.setSize=function(){if(null==e.options.initialSize){var n=l.default.select(t).node().offsetHeight,r=l.default.select(t).node().offsetWidth;e.options.svgW=r,e.options.svgH=n,p.range([0,r]).domain([0,r]),d.range([0,n]).domain([0,n]),e.zoomer.x(p).y(d),e.brusher.x(p).y(d),e.centerView(),e.options.resizeSvgOnResize&&_.attr("width",r).attr("height",n)}},e.setOutlineColor=function(t){T.selectAll("g.gnode").select("[node_type=nucleotide]").style("fill",t)},e.changeColorScheme=function(t){T.selectAll("[node_type=protein]").classed("protein",!0).attr("r",(function(t){return t.radius})),T.selectAll("g.gnode"),T.selectAll("g.gnode").selectAll("circle");var n=T.selectAll("g.gnode").select("[node_type=nucleotide]");if(e.colorScheme=t,"sequence"==t){var r=l.default.scale.ordinal().range(["#dbdb8d","#98df8a","#ff9896","#aec7e8","#aec7e8"]).domain(["A","C","G","U","T"]);n.style("fill",(function(t){return r(t.name)}))}else"structure"==t?(r=l.default.scale.category10().domain(["s","m","i","e","t","h","x"]).range(["lightgreen","#ff9896","#dbdb8d","lightsalmon","lightcyan","lightblue","transparent"]),n.style("fill",(function(t){return r(t.elemType)}))):"positions"==t?n.style("fill",(function(t){return l.default.scale.linear().range(["#98df8a","#dbdb8d","#ff9896"]).interpolate(l.default.interpolateLab).domain([1,1+(t.rna.rnaLength-1)/2,t.rna.rnaLength])(t.num)})):"custom"==t&&(void 0!==e.customColors&&"domain"in e.customColors&&"range"in e.customColors&&(r=l.default.scale.linear().interpolate(l.default.interpolateLab).domain(e.customColors.domain).range(e.customColors.range)),n.style("fill",(function(t){return void 0!==e.customColors&&e.customColors.hasOwnProperty("colorValues")?e.customColors.colorValues.hasOwnProperty(t.structName)&&e.customColors.colorValues[t.structName].hasOwnProperty(t.num)?b(e.customColors.colorValues[t.structName],t,r):e.customColors.colorValues.hasOwnProperty("")?b(e.customColors.colorValues[""],t,r):"white":"white"})))},window.addEventListener("resize",e.setSize,!1),e.zoomer=l.default.behavior.zoom().scaleExtent([.1,10]).x(p).y(d).on("zoomstart",R).on("zoom",N),l.default.select(t).select("svg").remove();var _=l.default.select(t).classed("forna-container",!0).attr("tabindex",1).on("keydown.brush",B).on("keyup.brush",I).each((function(){this.focus()})).append("svg:svg").attr("width",e.options.svgW).attr("height",e.options.svgH).attr("id","plotting-area");e.options.svg=_;var k=_.append("svg:g").on("mousemove",M).on("mousedown",x).on("mouseup",w);e.options.allowPanningAndZooming&&k.call(e.zoomer);var S=k.append("g").datum((function(){return{selected:!1,previouslySelected:!1}})).attr("class","brush"),A=k.append("svg:g"),E=A.append("svg:g"),T=A.append("svg:g");function R(){var t=T.selectAll("g.gnode").selectAll(".outline_node");t.each((function(t){t.selected=!1,t.previouslySelected=!1})),t.classed("selected",!1)}function N(){A.attr("transform","translate("+l.default.event.translate+") scale("+l.default.event.scale+")")}e.brusher=l.default.svg.brush().x(p).y(d).on("brushstart",(function(t){T.selectAll("g.gnode").selectAll(".outline_node").each((function(t){t.previouslySelected=L&&t.selected}))})).on("brush",(function(){var t=T.selectAll("g.gnode").selectAll(".outline_node"),n=l.default.event.target.extent();t.classed("selected",(function(t){return t.selected=e.options.applyForce&&t.previouslySelected^(n[0][0]<=t.x&&t.xr||sa||l-1){if(t.source.rna==t.target.rna){var n=t.source.rna;n.addPseudoknots(),n.pairtable[t.source.num]=0,n.pairtable[t.target.num]=0,H(n)}else extraLinkIndex=e.extraLinks.indexOf(t),e.extraLinks.splice(extraLinkIndex,1);e.recalculateGraph()}e.update()},G=function(t){O&&(t.linkType in{backbone:!0,fake:!0,fake_fake:!0,label_link:!0}||V(t))};e.addLink=function(t){t.source.rna==t.target.rna?(r=t.source.rna,r.pairtable[t.source.num]=t.target.num,r.pairtable[t.target.num]=t.source.num,H(r)):(t.linkType="intermolecule",e.extraLinks.push(t)),e.recalculateGraph(),e.update()};var W=function(t){l.default.event.defaultPrevented||(L||T.selectAll("g.gnode").selectAll(".outline_node").classed("selected",(function(t){return t.selected=e.options.applyForce&&(t.previouslySelected=!1)})),l.default.select(this).select("circle").classed("selected",t.selected=e.options.applyForce&&!t.previouslySelected))},Z=function(t){if(u){if((s=t)==u)return void C();var n={source:u,target:s,linkType:"basepair",value:1,uid:generateUUID()};for(i=0;i0&&"*"==u.dotbracket[u.dotbracket.length-1]&&(u.dotbracket=u.dotbracket.slice(0,u.dotbracket.length-1),u.circular=!0),u.uid=a(),u.elements=[],u.pseudoknotPairs=[],u.nucsToNodes={},u.addUids=function(t){for(var n=u.nodes.filter((function(t){return"nucleotide"==t.nodeType})),e=0;e=0;)n.push(e),t=t.substring(0,e)+"oo"+t.substring(e+1,t.length);return{targetString:t,breaks:n}};var s=u.removeBreaks(u.dotbracket);u.dotbracket=s.targetString,u.dotBracketBreaks=s.breaks,s=u.removeBreaks(u.seq),u.seq=s.targetString,u.seqBreaks=s.breaks,u.calculateStartNumberArray=function(){u.startNumberArray=[];for(var t=0;t=0&&(e=!0);e?u.elements[n][2].map((function(t){0!=t&&(u.nodes[t-1].elemType="e")})):u.elements[n][2].map((function(t){0!=t&&(u.nodes[t-1].elemType=u.elements[n][0])}))}return u},u.getPositions=function(t){for(var n=[],e=u.nodes.filter((function(n){return n.nodeType==t})),r=0;r=4})),e=0;eu.dotbracket.length)){u.links.push({source:u.nodes[t[f]-1],target:u.nodes[u.nodes.length-1],linkType:"fake",value:e,uid:a()}),t.length>4&&u.links.push({source:u.nodes[t[f]-1],target:u.nodes[t[(f+Math.floor(t.length/2))%t.length]-1],linkType:"fake",value:2*e,uid:a()});var h=3.14159*(t.length-2)/t.length,p=2*Math.cos(1.570795-h/2);u.links.push({source:u.nodes[t[f]-1],target:u.nodes[t[(f+2)%t.length]-1],linkType:"fake",value:p});var d=u.nodes[t[f]-1];"x"in d&&(s+=d.x,l+=d.y,c+=1)}return c>0&&(i.x=s/c,i.y=l/c,i.px=i.x,i.py=i.y),u},u.connectFakeNodes=function(){for(var t={},n=u.nodes.filter((function(t){return"middle"==t.nodeType})),e=new Set,r=1;r<=u.nodes.length;r++)t[r]=[];for(r=0;r=0||u.dotBracketBreaks.indexOf(e-2)>=0)&&(i=""),u.nodes.push({name:i,num:e+u.startNumberArray[e-1]-1,radius:5,rna:u,nodeType:"nucleotide",structName:u.structName,elemType:n[e],uid:a(),linked:!1})}for(e=0;e1&&-1===u.dotBracketBreaks.indexOf(e-1)&&-1==u.dotBracketBreaks.indexOf(e-2)&&-1==u.dotBracketBreaks.indexOf(e-3)&&(u.links.push({source:u.nodes[e-2],target:u.nodes[e-1],linkType:"backbone",value:1,uid:a()}),u.nodes[e-1].linked=!0);for(e=0;er)return[];for(;0===t[e];e++)i.push(e);for(;0===t[r];r--)s.push(r);if(e>r){if(i.push(e),0===n)return[["e",n,i.sort(o)]];for(var l=!1,c=[],f=[],h=0;h=0&&(l=!0);return[["h",n,i.sort(o)]]}if(t[e]!=r){var p=i;for(h=e,p.push(h);h<=r;){for(a=a.concat(u.ptToElements(t,n,h,t[h])),p.push(t[h]),h=t[h]+1;0===t[h]&&h<=r;h++)p.push(h);p.push(h)}return p.pop(),(p=p.concat(s)).length>0&&(0===n?a.push(["e",n,p.sort(o)]):a.push(["m",n,p.sort(o)])),a}t[e]===r&&(i.push(e),s.push(r),i.concat(s).length>4&&(0===n?a.push(["e",n,i.concat(s).sort(o)]):a.push(["i",n,i.concat(s).sort(o)])));for(var d=[];t[e]===r&&e0)){eloop=externalLoop[0],nucs=eloop[2].sort(o),prev=nucs[0],hloop=!0,numGreater=0;for(var t=1;t1&&(numGreater+=1),prev=nucs[t];1==numGreater?eloop[0]="h":2==numGreater?eloop[0]="i":eloop[0]="m"}return u},u.reassignLinkUids=function(){for(var t=0;t1&&(u.pseudoknotPairs=u.pseudoknotPairs.concat(r.rnaUtilities.removePseudoknotsFromPairtable(u.pairtable))),u},u.addPseudoknots=function(){for(var t=u.pairtable,n=u.pseudoknotPairs,e=0;e0&&u.recalculateElements()}void 0===String.prototype.trim&&(String.prototype.trim=function(){return String(this).replace(/^\s+|\s+$/g,"")})},function(t,n,e){t.exports=function(t){function n(r){if(e[r])return e[r].exports;var o=e[r]={exports:{},id:r,loaded:!1};return t[r].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var e={};return n.m=t,n.c=e,n.p="",n(0)}([function(t,n,e){t.exports=e(1)},function(t,n){"use strict";function e(){var t=this;t.bracketLeft="([{abcdefghijklmnopqrstuvwxyz".split(""),t.inverseBrackets=function(t){for(var n={},e=0;e=r;r++){e[r]=new Array(n+1);for(var o=r;n>=o;o++)e[r][o]=0}var a=0;for(r=n-0-1;r>0;r--)for(o=r+0+1;n>=o;o++){a=e[r][o-1];for(var i=o-0-1;i>=r;i--)t[i]===o&&(a=Math.max(a,(i>r?e[r][i-1]:0)+1+(o-i-1>0?e[i+1][o-1]:0)));e[r][o]=a}return a=e[1][n],e},t.backtrackMaximumMatching=function(n,e){var r=Array.apply(null,Array(n.length)).map((function(){return 0}));return t.mmBt(n,r,e,1,n.length-1),r},t.mmBt=function(n,e,r,o,a){var i=n[o][a];if(!(0>a-o-1)){if(n[o][a-1]==i)return void t.mmBt(n,e,r,o,a-1);for(var u=a-0-1;u>=o;u--)if(r[a]===u&&(u>o?n[o][u-1]:0)+(a-u-1>0?n[u+1][a-1]:0)+1==i)return e[u]=a,e[a]=u,u>o&&t.mmBt(n,e,r,o,u-1),void t.mmBt(n,e,r,u+1,a-1);console.log("FAILED!!!"+o+","+a+": backtracking failed!")}},t.dotbracketToPairtable=function(n){var e=Array.apply(null,new Array(n.length+1)).map(Number.prototype.valueOf,0);e[0]=n.length;for(var r={},o=0;o0)throw"Unmatched base at position "+r[c][0];return e},t.insertIntoStack=function(t,n,e){for(var r=0;t[r].length>0&&t[r][t[r].length-1]r?t.bracketLeft[t.insertIntoStack(e,r,n[r])]:t.bracketRight[t.deleteFromStack(e,r)]}return a},t.findUnmatched=function(n,e,r){for(var o=[],a=[],i=e,u=r,s=e;r>=s;s++)0!==n[s]&&(n[s]r)&&a.push([s,n[s]]);for(s=i;u>=s;s++){for(;0===n[s]&&u>=s;)s++;for(r=n[s];n[s]===r;)s++,r--;o=o.concat(t.findUnmatched(n,s,r))}return a.length>0&&o.push(a),o},t.removePseudoknotsFromPairtable=function(n){for(var e=t.maximumMatching(n),r=t.backtrackMaximumMatching(e,n),o=[],a=1;aa)return[];for(;0===n[o];o++)s.push(o);for(;0===n[a];a--)l.push(a);if(o>a){if(s.push(o),0===e)return[["e",e,s.sort(r)]];for(var c=!1,f=[],h=[],p=0;p=0&&(c=!0);return[["h",e,s.sort(r)]]}if(n[o]!=a){var d=s;for(p=o,d.push(p);a>=p;){for(u=u.concat(t.ptToElements(n,e,p,n[p],i)),d.push(n[p]),p=n[p]+1;0===n[p]&&a>=p;p++)d.push(p);d.push(p)}return d.pop(),(d=d.concat(l)).length>0&&(0===e?u.push(["e",e,d.sort(r)]):u.push(["m",e,d.sort(r)])),u}if(n[o]===a){s.push(o),l.push(a);var m=s.concat(l);m.length>4&&(0===e?u.push(["e",e,s.concat(l).sort(r)]):u.push(["i",e,s.concat(l).sort(r)]))}for(var g=[];n[o]===a&&a>o;)g.push(o),g.push(a),o+=1,a-=1,e+=1;return s=[o-1],l=[a+1],u.push(["s",e,g.sort(r)]),u.concat(t.ptToElements(n,e,o,a,i))}}Object.defineProperty(n,"__esModule",{value:!0}),n.arraysEqual=function(t,n){if(t===n)return!0;if(null===t||null===n)return!1;if(t.length!=n.length)return!1;for(var e=0;e=u;u++)e.push(u);else console.log("Malformed range (too many dashes):",t)}return e},n.parseColorText=function(t){for(var e=t.split("\n"),r="",o=1,a={colorValues:{"":{}},range:["white","steelblue"]},i=[],u=0;u"!=e[u][0])for(var s=e[u].trim().split(/[\s]+/),l=0;lt&&(r=t),t>o&&(o=t));for(a in n.colorsJson.colorValues[e])"number"==typeof(t=n.colorsJson.colorValues[e][a])&&(n.colorsJson.colorValues[e][a]=(t-r)/(o-r))}return n},n.parseColorText(n.colorsText),n};var r=function(t,n){return t-n};n.rnaUtilities=new e}])},function(t,n,e){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.rnaPlot=function(){var t,n,e={width:400,height:400,nucleotideRadius:5,rnaEdgePadding:0,labelInterval:0,showNucleotideLabels:!0,startNucleotideNumber:1,bundleExternalLinks:!1};function a(a){a.each((function(a){var i=new r.RNAGraph(a.sequence,a.structure,a.name).recalculateElements().elementsToJson().addName(a.name);a.rnaGraph=i;for(var u=(new o.NAView).naview_xy_coordinates(i.pairtable),s=[],l=0;l2&&void 0!==arguments[2]?arguments[2]:"",i=d3.extent(r),u=d3.extent(o),s=30;""!=a&&(u[1]+=s),i[0]-=e.nucleotideRadius+e.rnaEdgePadding,u[0]-=e.nucleotideRadius+e.rnaEdgePadding,i[1]+=e.nucleotideRadius+e.rnaEdgePadding,u[1]+=e.nucleotideRadius+e.rnaEdgePadding;var l,c=i[1]-i[0],f=u[1]-u[0],h=c-e.width,p=f-e.height;function d(t,n,e){var r=(t.range()[1]-t.range()[0])/(t.domain()[1]-t.domain()[0]),o=(n[1]-n[0])*r,a=(e[1]-e[0]-o)/2;return{scaleFactor:r,scale:d3.scale.linear().domain(n).range([e[0]+a,e[1]-a])}}return h>p?(l=d(t=d3.scale.linear().domain(i).range([0,e.width]),u,[0,e.height]),n=l.scale):(l=d(n=d3.scale.linear().domain(u).range([0,e.height]),i,[0,e.width]),t=l.scale),t.range()[0],t.domain()[0],n.range()[0],n.domain()[0],"translate("+-(t.domain()[0]*l.scaleFactor-t.range()[0])+","+-(n.domain()[0]*l.scaleFactor-n.range()[0])+")scale("+l.scaleFactor+")"}(i.nodes.map((function(t){return t.x})),i.nodes.map((function(t){return t.y}))),f=d3.select(this).append("g").attr("transform",c),h=i.nodes.filter((function(t){return"nucleotide"==t.nodeType})),p=i.nodes.filter((function(t){return"label"==t.nodeType})),d=i.links;!function(t,n){n=n.filter((function(t){return null!==t.source&&null!==t.target})),t.selectAll(".rna-link").data(n).enter().append("svg:line").attr("x1",(function(t){return t.source.x})).attr("x2",(function(t){return t.target.x})).attr("y1",(function(t){return t.source.y})).attr("y2",(function(t){return t.target.y})).attr("link-type",(function(t){return t.linkType})).attr("extra-link-type",(function(t){return t.extraLinkType})).classed("rna-link",!0)}(f,d),function(t,n){var r=t.selectAll(".rna-base").data(n).enter().append("svg:g").attr("transform",(function(t){return"translate("+t.x+","+t.y+")"}));r.append("svg:circle").attr("r",e.nucleotideRadius).classed("rna-base",!0),e.showNucleotideLabels&&r.append("svg:text").text((function(t){return t.name})).attr("text-anchor","middle").attr("dominant-baseline","central").classed("nucleotide-label",!0).append("svg:title").text((function(t){return t.struct_name+":"+t.num}))}(f,h),function(t,n){t.selectAll(".rnaLabel").data(n).enter().append("svg:g").attr("transform",(function(t){return"translate("+t.x+","+t.y+")"})).append("svg:text").text((function(t){return t.name})).attr("text-anchor","middle").attr("font-weight","bold").attr("dominant-baseline","central").classed("number-label",!0)}(f,p),function(r,o){r.append("svg:text").attr("transform","translate("+t.invert(e.width/2)+","+n.invert(e.height)+")").attr("dy",-10).classed("rna-name",!0).text(o)}(f,a.name),e.bundleExternalLinks&&function(t,n){var e={},r=[];n=n.filter((function(t){return"correct"==t.linkType||"incorrect"==t.linkType||"extra"==t.linkType})),t.selectAll("[link-type=extra]").remove();for(var o=0;oh);if(g=v-2,v>=2&&(i[d+1+g]+=f,i[m-1-g]+=f,i[d]+=f,i[m]+=f,v>2))for(;g>=1;g--)i[d+g]=Math.PI,i[m-g]=Math.PI;s[++c]=v,h<=p&&t(h,p,r)}else n++,w++,k++;for(M=Math.PI*(w-2)/w,S[++_]=e,y=o<0?0:o,b=1;b<=_;b++){for(x=S[b]-y,g=0;g<=x;g++)i[y+g]+=M;if(b>_)break;y=S[++b]}u[++l]=k})(0,e+1,t),u[l]-=2,r=0,o[0]=100,a[0]=100;var h=[];for(h.push([o[0],a[0]]),n=1;n=0&&(1==++n?e=r:e>r&&(e=r));return t.setMark(!1),e+1}s.prototype.naview_xy_coordinates=function(t){var n,e=[],r=[];if(0===t.length||0===t[0])return 0;this.nbase=t[0],this.bases=[];for(var o=0;on&&e++;0==e&&(this.bases[1].setMate(this.nbase),this.bases[this.nbase].setMate(1))},s.prototype.find_regions=function(){var t,n=null,e=null;t=this.nbase+1;var r=[];for(n=0;nthis.nbase&&(n=0)}while(n!=t);return i},s.prototype.find_central_loop=function(){var t=new u.Loop,n=null,e=null,r=null;for(l.bind(this)(),n=0,e=-1,r=0;rn?(e=t.getDepth(),n=t.getNconnection(),this.root=t):t.getDepth()>e&&t.getNconnection()==n&&(e=t.getDepth(),this.root=t)},s.prototype.traverse_loop=function(t,n){var e,r,o,a,i,u,s,l,c,f,h,p,d,m,g,v,y,b,x,M,w,_,k,S,A,E,T,R,N,P,C,O,L,U,D,z,F,q,j,B,I,X,Y,H,V,G,W,Z,J,$,K,Q,tt,nt,et,rt,ot,at,it,ut,st,lt,ct,ft,ht,pt,dt,mt,gt,vt=0;u=2*Math.PI/(this.nbase+1),b=null,P=-1;var yt=0;for(k=0;null!=(v=t.getConnection(yt));yt++,k++)e=-Math.sin(u*v.getStart()),r=Math.cos(u*v.getStart()),o=-Math.sin(u*v.getEnd()),a=Math.cos(u*v.getEnd())-r,i=e-o,s=Math.sqrt(a*a+i*i),v.setXrad(a/s),v.setYrad(i/s),v.setAngle(Math.atan2(i,a)),v.getAngle()<0&&v.setAngle(v.getAngle()+2*Math.PI),null!=n&&n.getRegion()==v.getRegion()&&(b=v,P=k);t:for(;;){this.determine_radius(t,this.lencut),l=t.getRadius()/this.RADIUS_REDUCTION_FACTOR,null==n?c=f=0:(h=(this.bases[b.getStart()].getX()+this.bases[b.getEnd()].getX())/2,p=(this.bases[b.getStart()].getY()+this.bases[b.getEnd()].getY())/2,c=h-l*b.getXrad(),f=p-l*b.getYrad()),T=-1==P?0:P,v=t.getConnection(T),E=0,C=!1;do{if((w=T-1)<0&&(w=t.getNconnection()-1),x=t.getConnection(w),this.connected_connection(x,v)?(T=w,v=x):C=!0,++E>t.getNconnection()){for(A=-1,k=0;k=t.getNconnection()&&(w=0),v=t.getConnection(k),(ht=(y=t.getConnection(w)).getAngle()-v.getAngle())<0&&(ht+=2*Math.PI),ht>A&&(A=ht,vt=k);R=vt,(T=vt+1)>=t.getNconnection()&&(T=0),(v=t.getConnection(R)).setBroken(!0),C=!0}}while(!C);for(O=!1,G=T;!O;){for(E=0,C=!1,R=T,L=!1;!C;)if(v=t.getConnection(R),R==P&&(L=!0),(w=R+1)>=t.getNconnection()&&(w=0),y=t.getConnection(w),this.connected_connection(v,y)){if(++E>=t.getNconnection())break;R=w}else C=!0;for(k=W=Z=N=this.find_ic_middle(T,R,n,b,t),C=!1,$=0;!C;)(k=$<0?W:0==$?N:Z)>=0&&(v=t.getConnection(k),null!=n&&b==v||(0==$?(d=v.getAngle()-Math.asin(.5/l),m=v.getAngle()+Math.asin(.5/l),this.bases[v.getStart()].setX(c+l*Math.cos(d)),this.bases[v.getStart()].setY(f+l*Math.sin(d)),this.bases[v.getEnd()].setX(c+l*Math.cos(m)),this.bases[v.getEnd()].setY(f+l*Math.sin(m))):$<0?((w=k+1)>=t.getNconnection()&&(w=0),v=t.getConnection(k),y=t.getConnection(w),et=v.getXrad(),rt=v.getYrad(),ht=(v.getAngle()+y.getAngle())/2,v.getAngle()>y.getAngle()&&(ht-=Math.PI),it=Math.cos(ht),lt=Math.sin(ht),ct=-it,(S=y.getAngle()-v.getAngle())<0&&(S+=2*Math.PI),ft=v.isExtruded()?S<=Math.PI/2?2:1.5:1,this.bases[v.getEnd()].setX(this.bases[y.getStart()].getX()+ft*lt),this.bases[v.getEnd()].setY(this.bases[y.getStart()].getY()+ft*ct),this.bases[v.getStart()].setX(this.bases[v.getEnd()].getX()+rt),this.bases[v.getStart()].setY(this.bases[v.getEnd()].getY()-et)):((w=k-1)<0&&(w=t.getNconnection()-1),v=t.getConnection(w),ot=(y=t.getConnection(k)).getXrad(),at=y.getYrad(),ht=(v.getAngle()+y.getAngle())/2,v.getAngle()>y.getAngle()&&(ht-=Math.PI),it=Math.cos(ht),lt=-Math.sin(ht),ct=it,(S=y.getAngle()-v.getAngle())<0&&(S+=2*Math.PI),ft=v.isExtruded()?S<=Math.PI/2?2:1.5:1,this.bases[y.getStart()].setX(this.bases[v.getEnd()].getX()+ft*lt),this.bases[y.getStart()].setY(this.bases[v.getEnd()].getY()+ft*ct),this.bases[y.getEnd()].setX(this.bases[y.getStart()].getX()-at),this.bases[y.getEnd()].setY(this.bases[y.getStart()].getY()+ot)))),$<0?(Z==R?Z=-1:Z>=0&&++Z>=t.getNconnection()&&(Z=0),$=1):(W==T?W=-1:W>=0&&--W<0&&(W=t.getNconnection()-1),$=-1),C=-1==W&&-1==Z;if((J=R+1)>=t.getNconnection()&&(J=0),R!=T&&(T!=G||J!=G))if(v=t.getConnection(T),y=t.getConnection(R),Q=this.bases[y.getEnd()].getX()-this.bases[v.getStart()].getX(),tt=this.bases[y.getEnd()].getY()-this.bases[v.getStart()].getY(),D=this.bases[v.getStart()].getX()+Q/2,z=this.bases[v.getStart()].getY()+tt/2,j=Q/(nt=Math.sqrt(Q*Q+tt*tt)),B=tt/nt,I=c-D,X=f-z,F=(Y=(I/=nt=Math.sqrt(Q*Q+tt*tt))*j+(X/=nt)*B)*j-I,q=Y*B-X,F/=nt=Math.sqrt(F*F+q*q),q/=nt,Q=this.bases[v.getStart()].getX()-c,tt=this.bases[v.getStart()].getY()-f,(ht=Math.atan2(tt,Q))<0&&(ht+=2*Math.PI),Q=this.bases[y.getEnd()].getX()-c,tt=this.bases[y.getEnd()].getY()-f,(pt=Math.atan2(tt,Q))<0&&(pt+=2*Math.PI),ptMath.PI?-1:1)*l*F,V=f+U*l*q,L)c-=H-D,f-=V-z;else for(k=T;M=(v=t.getConnection(k)).getStart(),this.bases[M].setX(this.bases[M].getX()+H-D),this.bases[M].setY(this.bases[M].getY()+V-z),M=v.getEnd(),this.bases[M].setX(this.bases[M].getX()+H-D),this.bases[M].setY(this.bases[M].getY()+V-z),k!=R;)++k>=t.getNconnection()&&(k=0);O=(T=J)==G}for(k=0;k=t.getNconnection()&&(w=0),y=t.getConnection(w),Q=this.bases[v.getEnd()].getX()-c,tt=this.bases[v.getEnd()].getY()-f,st=Math.sqrt(Q*Q+tt*tt),(ht=Math.atan2(tt,Q))<0&&(ht+=2*Math.PI),Q=this.bases[y.getStart()].getX()-c,tt=this.bases[y.getStart()].getY()-f,ut=Math.sqrt(Q*Q+tt*tt),(pt=Math.atan2(tt,Q))<0&&(pt+=2*Math.PI),ptMath.PI)if(v.isExtruded())console.log("Warning from traverse_loop. Loop "+t.getNumber()+" has crossed regions\n");else if(y.getStart()-v.getEnd()!=1){v.setExtruded(!0);continue t}if(v.isExtruded())this.construct_extruded_segment(v,y);else for((_=y.getStart()-v.getEnd())<0&&(_+=this.nbase+1),u=K/_,w=1;w<_;w++)(M=v.getEnd()+w)>this.nbase&&(M-=this.nbase+1),nt=st+(ut-st)*((g=ht+w*u)-ht)/K,this.bases[M].setX(c+nt*Math.cos(g)),this.bases[M].setY(f+nt*Math.sin(g))}break}for(k=0;k=t.getNconnection()&&(w=0),v=t.getConnection(k),y=t.getConnection(w),_+=2,dt+=this.bases[v.getStart()].getX()+this.bases[v.getEnd()].getX(),mt+=this.bases[v.getStart()].getY()+this.bases[v.getEnd()].getY(),!v.isExtruded())for(w=v.getEnd()+1;w!=y.getStart();w++)w>this.nbase&&(w-=this.nbase+1),_++,dt+=this.bases[w].getX(),mt+=this.bases[w].getY();t.setX(dt/_),t.setY(mt/_)},s.prototype.determine_radius=function(t,n){var e,r,a,i,u,s,l,c,f,h,p,d=0,m=new o.Connection,g=new o.Connection;do{for(e=1e10,u=0,i=0,c=0;c=t.getNconnection()&&(f=0),g=t.getConnection(f),h=m.getEnd(),(p=g.getStart())1&&(e=l,d=c);(s=i/u)<.7071068&&(s=.7071068),e*s0?s=t.getRadius():t.setRadius(s)},s.prototype.find_ic_middle=function(t,n,e,r,o){var a,i,u,s,l;for(a=0,i=-1,u=t,l=!1;!l;)a++>2*o.getNconnection()&&console.log("Infinite loop in 'find_ic_middle'"),null!=e&&o.getConnection(u)==r&&(i=u),l=u==n,++u>=o.getNconnection()&&(u=0);if(-1==i){for(s=1,u=t;s<(a+1)/2;s++)++u>=o.getNconnection()&&(u=0);i=u}return i},s.prototype.construct_extruded_segment=function(t,n){var e,r,o,a,i,u,s,l,c,f,h,p,d,m,g,v,y,b;if(e=t.getAngle(),(o=r=n.getAngle())=1.5&&h<=Math.PI/2&&((v=d+1)>this.nbase&&(v-=this.nbase+1),(y=m-1)<0&&(y+=this.nbase+1),this.bases[v].setX(this.bases[d].getX()+.5*i),this.bases[v].setY(this.bases[d].getY()+.5*u),this.bases[y].setX(this.bases[m].getX()-.5*i),this.bases[y].setY(this.bases[m].getY()-.5*u),d=v,m=y);do{b=!1,this.construct_circle_segment(d,m),(v=d+1)>this.nbase&&(v-=this.nbase+1),i=this.bases[v].getX()-this.bases[d].getX(),u=this.bases[v].getY()-this.bases[d].getY(),(s=Math.atan2(u,i))<0&&(s+=2*Math.PI),(p=s-e)<0&&(p+=2*Math.PI),p>Math.PI&&(b=!0),(y=m-1)<0&&(y+=this.nbase+1),i=this.bases[y].getX()-this.bases[m].getX(),u=this.bases[y].getY()-this.bases[m].getY(),(l=Math.atan2(u,i))<0&&(l+=2*Math.PI),(p=r-l)<0&&(p+=2*Math.PI),p>Math.PI&&(b=!0),b&&(c=this.minf2(a,e+.5),this.bases[v].setX(this.bases[d].getX()+Math.cos(c)),this.bases[v].setY(this.bases[d].getY()+Math.sin(c)),d=v,c=this.maxf2(a,o-.5),this.bases[y].setX(this.bases[m].getX()+Math.cos(c)),this.bases[y].setY(this.bases[m].getY()+Math.sin(c)),m=y,g-=2)}while(b&&g>1)}},s.prototype.construct_circle_segment=function(t,n){var e,r,o,a,i,u,s,l,c,f,h,p,d,m,g;if(e=this.bases[n].getX()-this.bases[t].getX(),r=this.bases[n].getY()-this.bases[t].getY(),o=Math.sqrt(e*e+r*r),(d=n-t)<0&&(d+=this.nbase+1),o>=d)for(e/=o,r/=o,m=1;mthis.nbase&&(g-=this.nbase+1),this.bases[g].setX(this.bases[t].getX()+e*m/d),this.bases[g].setY(this.bases[t].getY()+r*m/d);else for(this.find_center_for_arc(d-1,o),e/=o,r/=o,a=this.bases[t].getX()+e*o/2,i=this.bases[t].getY()+r*o/2,u=r,s=-e,l=a+this._h*u,c=i+this._h*s,f=this.bases[t].getX()-l,h=this.bases[t].getY()-c,o=Math.sqrt(f*f+h*h),p=Math.atan2(h,f),m=1;mthis.nbase&&(g-=this.nbase+1),this.bases[g].setX(l+o*Math.cos(p+m*this.angleinc)),this.bases[g].setY(c+o*Math.sin(p+m*this.angleinc))},s.prototype.find_center_for_arc=function(t,n){var e,r,o,a,i,u,s,l;o=-(r=(t+1)/Math.PI)-n/(t+1.000001-n),n<1&&(o=0),l=0;do{e=(r+o)/2,i=1-.5/((a=Math.sqrt(e*e+n*n/4))*a),Math.abs(i)>1&&console.log("Unexpected large magnitude discriminant = "+i+" "+a),(s=(u=Math.acos(i))*(t+1)+2*Math.acos(e/a)-2*Math.PI)>0?o=e:r=e}while(Math.abs(s)>1e-4&&++l=this.MAXITER&&(noIterationFailureYet&&(console.log("Iteration failed in find_center_for_arc"),noIterationFailureYet=!1),e=0,u=0),this._h=e,this.angleinc=u},s.prototype.generate_region=function(t){var n,e,r,o,a,i;for(i=t.getRegion(),n=0,t.getStart()==i.getStart1()?(e=i.getStart1(),r=i.getEnd1()):(e=i.getStart2(),r=i.getEnd2()),(this.bases[t.getStart()].getX()>this.ANUM-100||this.bases[t.getEnd()].getX()>this.ANUM-100)&&console.log("Bad region passed to generate_region. Coordinates not defined."),o=e+1;o<=r;o++)n++,this.bases[o].setX(this.bases[t.getStart()].getX()+this.HELIX_FACTOR*n*t.getXrad()),this.bases[o].setY(this.bases[t.getStart()].getY()+this.HELIX_FACTOR*n*t.getYrad()),a=this.bases[o].getMate(),this.bases[a].setX(this.bases[t.getEnd()].getX()+this.HELIX_FACTOR*n*t.getXrad()),this.bases[a].setY(this.bases[t.getEnd()].getY()+this.HELIX_FACTOR*n*t.getYrad())},s.prototype.minf2=function(t,n){return tn?t:n},s.prototype.connected_connection=function(t,n){return!!t.isExtruded()||t.getEnd()+1==n.getStart()}},function(t,n){"use strict";function e(){this.radius=null,this.loopnumber=null,this.next=null,this.prev=null}Object.defineProperty(n,"__esModule",{value:!0}),n.Radloop=e,e.prototype.getRadius=function(){return this.radius},e.prototype.setRadius=function(t){this.radius=t},e.prototype.getLoopnumber=function(){return this.loopnumber},e.prototype.setLoopnumber=function(t){this.loopnumber=t},e.prototype.getNext=function(){return this.next},e.prototype.setNext=function(t){this.next=t},e.prototype.getPrev=function(){return this.prev},e.prototype.setPrev=function(t){this.prev=t}},function(t,n,e){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.Connection=a;var r=e(8),o=e(9);function a(){this.loop=new r.Loop,this.region=new o.Region,this.start=null,this.end=null,this.xrad=null,this.yrad=null,this.angle=null,this.extruded=null,this.broken=null,this._isNull=!1}a.prototype.isNull=function(){return this._isNull},a.prototype.setNull=function(t){this._isNull=t},a.prototype.getLoop=function(){return this.loop},a.prototype.setLoop=function(t){this.loop=t},a.prototype.getRegion=function(){return this.region},a.prototype.setRegion=function(t){this.region=t},a.prototype.getStart=function(){return this.start},a.prototype.setStart=function(t){this.start=t},a.prototype.getEnd=function(){return this.end},a.prototype.setEnd=function(t){this.end=t},a.prototype.getXrad=function(){return this.xrad},a.prototype.setXrad=function(t){this.xrad=t},a.prototype.getYrad=function(){return this.yrad},a.prototype.setYrad=function(t){this.yrad=t},a.prototype.getAngle=function(){return this.angle},a.prototype.setAngle=function(t){this.angle=t},a.prototype.isExtruded=function(){return this.extruded},a.prototype.setExtruded=function(t){this.extruded=t},a.prototype.isBroken=function(){return this.broken},a.prototype.setBroken=function(t){this.broken=t}},function(t,n,e){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.Loop=o;var r=e(7);function o(){this.nconnection=null,this.connections=[],this._connections=[],this.number=null,this.depth=null,this.mark=null,this.x=null,this.y=null,this.radius=null}o.prototype.getNconnection=function(){return this.nconnection},o.prototype.setNconnection=function(t){this.nconnection=t},o.prototype.setConnection=function(t,n){null!=n?this._connections[t]=n:(this._connections[t]||(this._connections[t]=new r.Connection),this._connections[t].setNull(!0))},o.prototype.getConnection=function(t){var n=e(7);this._connections[t]||(this._connections[t]=new n);var r=this._connections[t];return r.isNull()?null:r},o.prototype.addConnection=function(t,n){this._connections.push(n)},o.prototype.getNumber=function(){return this.number},o.prototype.setNumber=function(t){this.number=t},o.prototype.getDepth=function(){return this.depth},o.prototype.setDepth=function(t){this.depth=t},o.prototype.isMark=function(){return this.mark},o.prototype.setMark=function(t){this.mark=t},o.prototype.getX=function(){return this.x},o.prototype.setX=function(t){this.x=t},o.prototype.getY=function(){return this.y},o.prototype.setY=function(t){this.y=t},o.prototype.getRadius=function(){return this.radius},o.prototype.setRadius=function(t){this.radius=t}},function(t,n){"use strict";function e(){this._start1=null,this._end1=null,this._start2=null,this._end2=null}Object.defineProperty(n,"__esModule",{value:!0}),n.Region=e,e.prototype.getStart1=function(){return this._start1},e.prototype.setStart1=function(t){this._start1=t},e.prototype.getEnd1=function(){return this._end1},e.prototype.setEnd1=function(t){this._end1=t},e.prototype.getStart2=function(){return this._start2},e.prototype.setStart2=function(t){this._start2=t},e.prototype.getEnd2=function(){return this._end2},e.prototype.setEnd2=function(t){this._end2=t}},function(t,n,e){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.Base=o;var r=e(9);function o(){this.mate=null,this.x=null,this.y=null,this.extracted=null,this.region=new r.Region}o.prototype.getMate=function(){return this.mate},o.prototype.setMate=function(t){this.mate=t},o.prototype.getX=function(){return this.x},o.prototype.setX=function(t){this.x=t},o.prototype.getY=function(){return this.y},o.prototype.setY=function(t){this.y=t},o.prototype.isExtracted=function(){return this.extracted},o.prototype.setExtracted=function(t){this.extracted=t},o.prototype.getRegion=function(){return this.region},o.prototype.setRegion=function(t){this.region=t}},function(t,n,e){var r=e(12);"string"==typeof r&&(r=[[t.id,r,""]]),e(14)(r,{}),r.locals&&(t.exports=r.locals)},function(t,n,e){(t.exports=e(13)()).push([t.id,'.forna-container .structure-background-rect {\r\n stroke: black;\r\n stroke-width: 5;\r\n fill: transparent;\r\n}\r\n\r\n.forna-container circle.rna-base {\r\n stroke: #ccc;\r\n stroke-width: 1px;\r\n opacity: 1;\r\n fill: white;\r\n}\r\n\r\n.forna-container circle.rna-base.label {\r\n stroke: transparent;\r\n stroke-width: 0;\r\n fill: white;\r\n}\r\n\r\n.forna-container line.link {\r\n stroke: #999;\r\n stroke-opacity: 0.8;\r\n stroke-width: 2;\r\n}\r\n\r\n.forna-container line.rna-link {\r\n stroke: #999;\r\n stroke-opacity: 0.8;\r\n stroke-width: 2;\r\n}\r\n\r\n.forna-container .overlay {\r\n fill: transparent;\r\n}\r\n\r\n.forna-container .rna-name {\r\n text-anchor: middle;\r\n dy: -10;\r\n font-family: Tahoma, Geneva, sans-serif;\r\n font-size: 8pt;\r\n}\r\n\r\n.forna-container line.rna-link[link-type="backbone"] {\r\n stroke: transparent;\r\n}\r\n\r\n.forna-container line.rna-link[link-type="basepair"] {\r\n stroke: transparent;\r\n}\r\n\r\n.forna-container line.rna-link[link-type="fake"] {\r\n stroke: transparent;\r\n}\r\n\r\n.forna-container line.rna-link[link-type="extra"] {\r\n stroke: grey;\r\n}\r\n\r\n.forna-container line.rna-link[extra-link-type="correct"] {\r\n stroke: green;\r\n}\r\n\r\n.forna-container line.rna-link[extra-link-type="incorrect"] {\r\n stroke: green;\r\n}\r\n\r\n\r\n.forna-container path {\r\n stroke-width: 2;\r\n}\r\n\r\n.forna-container path[extra-link-type="correct"] {\r\n stroke: green;\r\n}\r\n\r\n.forna-container path[extra-link-type="incorrect"] {\r\n stroke: red;\r\n}\r\n\r\n\r\n.forna-container line.basepair {\r\n stroke: red;\r\n}\r\n\r\n.forna-container line.intermolecule {\r\n stroke: blue;\r\n}\r\n\r\n.forna-container line.chain_chain {\r\n stroke-dasharray: 3,3;\r\n}\r\n\r\n.forna-container line.fake {\r\n stroke: green;\r\n}\r\n\r\n.forna-container .transparent {\r\n fill: transparent;\r\n stroke-width: 0;\r\n stroke-opacity: 0;\r\n opacity: 0;\r\n}\r\n\r\n.forna-container .d3-tip {\r\n line-height: 1;\r\n font-weight: bold;\r\n padding: 6px;\r\n background: rgba(0, 0, 0, 0.6);\r\n color: #fff;\r\n border-radius: 4px;\r\n pointer-events: none;\r\n}\r\n\r\n.forna-container text.nucleotide-label {\r\n font-size: 5.5pt;\r\n font-weight: bold;\r\n font-family: Tahoma, Geneva, sans-serif;\r\n color: rgb(100,100,100);\r\n pointer-events: none;\r\n}\r\n\r\n.forna-container text.number-label {\r\n font-size: 5.5pt;\r\n font-weight: bold;\r\n font-family: Tahoma, Geneva, sans-serif;\r\n color: rgb(100,100,100);\r\n pointer-events: none;\r\n}\r\n\r\n.forna-container text {\r\n pointer-events: none;\r\n}\r\n\r\n.forna-container g.gnode {\r\n\r\n}\r\n\r\n.forna-container .brush .extent {\r\n fill-opacity: .1;\r\n stroke: #fff;\r\n shape-rendering: crispEdges;\r\n}\r\n\r\n.forna-container .noselect {\r\n -webkit-touch-callout: none;\r\n -webkit-user-select: none;\r\n -khtml-user-select: none;\r\n -moz-user-select: none;\r\n -ms-user-select: none;\r\n user-select: none;\r\n}\r\n',""])},function(t,n){t.exports=function(){var t=[];return t.toString=function(){for(var t=[],n=0;n=0&&l.splice(n,1)}function d(t){var n=document.createElement("style");return n.type="text/css",h(t,n),n}function m(t,n){var e,r,o;if(n.singleton){var a=s++;e=u||(u=d(n)),r=y.bind(null,e,a,!1),o=y.bind(null,e,a,!0)}else t.sourceMap&&"function"==typeof URL&&"function"==typeof URL.createObjectURL&&"function"==typeof URL.revokeObjectURL&&"function"==typeof Blob&&"function"==typeof btoa?(e=function(t){var n=document.createElement("link");return n.rel="stylesheet",h(t,n),n}(n),r=x.bind(null,e),o=function(){p(e),e.href&&URL.revokeObjectURL(e.href)}):(e=d(n),r=b.bind(null,e),o=function(){p(e)});return r(t),function(n){if(n){if(n.css===t.css&&n.media===t.media&&n.sourceMap===t.sourceMap)return;r(t=n)}else o()}}t.exports=function(t,n){void 0===(n=n||{}).singleton&&(n.singleton=a()),void 0===n.insertAt&&(n.insertAt="bottom");var e=f(t);return c(e,n),function(t){for(var o=[],a=0;an?1:t>=n?0:NaN}function v(t){return null===t?NaN:+t}function y(t){return!isNaN(t)}function b(t){return{left:function(n,e,r,o){for(arguments.length<3&&(r=0),arguments.length<4&&(o=n.length);r>>1;t(n[a],e)<0?r=a+1:o=a}return r},right:function(n,e,r,o){for(arguments.length<3&&(r=0),arguments.length<4&&(o=n.length);r>>1;t(n[a],e)>0?o=a:r=a+1}return r}}}a.ascending=g,a.descending=function(t,n){return nt?1:n>=t?0:NaN},a.min=function(t,n){var e,r,o=-1,a=t.length;if(1===arguments.length){for(;++o=r){e=r;break}for(;++or&&(e=r)}else{for(;++o=r){e=r;break}for(;++or&&(e=r)}return e},a.max=function(t,n){var e,r,o=-1,a=t.length;if(1===arguments.length){for(;++o=r){e=r;break}for(;++oe&&(e=r)}else{for(;++o=r){e=r;break}for(;++oe&&(e=r)}return e},a.extent=function(t,n){var e,r,o,a=-1,i=t.length;if(1===arguments.length){for(;++a=r){e=o=r;break}for(;++ar&&(e=r),o=r){e=o=r;break}for(;++ar&&(e=r),o1)return i/(s-1)},a.deviation=function(){var t=a.variance.apply(this,arguments);return t?Math.sqrt(t):t};var x=b(g);function M(t){return t.length}a.bisectLeft=x.left,a.bisect=a.bisectRight=x.right,a.bisector=function(t){return b(1===t.length?function(n,e){return g(t(n),e)}:t)},a.shuffle=function(t,n,e){(a=arguments.length)<3&&(e=t.length,a<2&&(n=0));for(var r,o,a=e-n;a;)o=Math.random()*a--|0,r=t[a+n],t[a+n]=t[o+n],t[o+n]=r;return t},a.permute=function(t,n){for(var e=n.length,r=new Array(e);e--;)r[e]=t[n[e]];return r},a.pairs=function(t){for(var n=0,e=t.length-1,r=t[0],o=new Array(e<0?0:e);n=0;)for(n=(r=t[o]).length;--n>=0;)e[--i]=r[n];return e};var w=Math.abs;function _(t){for(var n=1;t*n%1;)n*=10;return n}function k(t,n){for(var e in n)Object.defineProperty(t.prototype,e,{value:n[e],enumerable:!1})}function S(){this._=Object.create(null)}function A(t){return"__proto__"==(t+="")||"\0"===t[0]?"\0"+t:t}function E(t){return"\0"===(t+="")[0]?t.slice(1):t}function T(t){return A(t)in this._}function R(t){return(t=A(t))in this._&&delete this._[t]}function N(){var t=[];for(var n in this._)t.push(E(n));return t}function P(){var t=0;for(var n in this._)++t;return t}function C(){for(var t in this._)return!1;return!0}function O(){this._=Object.create(null)}function L(t){return t}function U(t,n,e){return function(){var r=e.apply(n,arguments);return r===n?t:r}}function D(t,n){if(n in t)return n;n=n.charAt(0).toUpperCase()+n.slice(1);for(var e=0,r=z.length;en;)o.push(r/a);else for(;(r=t+e*++i)=r.length)return n?n.call(e,a):t?a.sort(t):a;for(var s,l,c,f,h=-1,p=a.length,d=r[u++],m=new S;++h=r.length)return n;var a=[],i=o[e++];return n.forEach((function(n,r){a.push({key:n,values:t(r,e)})})),i?a.sort((function(t,n){return i(t.key,n.key)})):a}(i(a.map,t,0),0)},e.key=function(t){return r.push(t),e},e.sortKeys=function(t){return o[r.length-1]=t,e},e.sortValues=function(n){return t=n,e},e.rollup=function(t){return n=t,e},e},a.set=function(t){var n=new O;if(t)for(var e=0,r=t.length;e=0&&(r=t.slice(e+1),t=t.slice(0,e)),t)return arguments.length<2?this[t].on(r):this[t].on(r,n);if(2===arguments.length){if(null==n)for(t in this)this.hasOwnProperty(t)&&this[t].on(r,null);return this}},a.event=null,a.requote=function(t){return t.replace(Y,"\\$&")};var Y=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g,H={}.__proto__?function(t,n){t.__proto__=n}:function(t,n){for(var e in n)t[e]=n[e]};function V(t){return H(t,J),t}var G=function(t,n){return n.querySelector(t)},W=function(t,n){return n.querySelectorAll(t)},Z=function(t,n){var e=t.matches||t[D(t,"matchesSelector")];return(Z=function(t,n){return e.call(t,n)})(t,n)};"function"==typeof Sizzle&&(G=function(t,n){return Sizzle(t,n)[0]||null},W=Sizzle,Z=Sizzle.matchesSelector),a.selection=function(){return a.select(s.documentElement)};var J=a.selection.prototype=[];function $(t){return"function"==typeof t?t:function(){return G(t,this)}}function K(t){return"function"==typeof t?t:function(){return W(t,this)}}J.select=function(t){var n,e,r,o,a=[];t=$(t);for(var i=-1,u=this.length;++i=0&&"xmlns"!==(e=t.slice(0,n))&&(t=t.slice(n+1)),tt.hasOwnProperty(e)?{space:tt[e],local:t}:t}},J.attr=function(t,n){if(arguments.length<2){if("string"==typeof t){var e=this.node();return(t=a.ns.qualify(t)).local?e.getAttributeNS(t.space,t.local):e.getAttribute(t)}for(n in t)this.each(nt(n,t[n]));return this}return this.each(nt(t,n))},J.classed=function(t,n){if(arguments.length<2){if("string"==typeof t){var e=this.node(),r=(t=ot(t)).length,o=-1;if(n=e.classList){for(;++o=0;)(e=r[o])&&(a&&a!==e.nextSibling&&a.parentNode.insertBefore(e,a),a=e);return this},J.sort=function(t){t=pt.apply(this,arguments);for(var n=-1,e=this.length;++n=n&&(n=o+1);!(i=u[n])&&++n0&&(t=t.slice(0,o));var s=bt.get(t);function l(){var n=this[r];n&&(this.removeEventListener(t,n,n.$),delete this[r])}return s&&(t=s,i=Mt),o?n?function(){var o=i(n,u(arguments));l.call(this),this.addEventListener(t,this[r]=o,o.$=e),o._=n}:l:n?F:function(){var n,e=new RegExp("^__on([^.]+)"+a.requote(t)+"$");for(var r in this)if(n=r.match(e)){var o=this[r];this.removeEventListener(n[1],o,o.$),delete this[r]}}}a.selection.enter=mt,a.selection.enter.prototype=gt,gt.append=J.append,gt.empty=J.empty,gt.node=J.node,gt.call=J.call,gt.size=J.size,gt.select=function(t){for(var n,e,r,o,a,i=[],u=-1,s=this.length;++u0?1:t<0?-1:0}function zt(t,n,e){return(n[0]-t[0])*(e[1]-t[1])-(n[1]-t[1])*(e[0]-t[0])}function Ft(t){return t>1?0:t<-1?Nt:Math.acos(t)}function qt(t){return t>1?Ot:t<-1?-Ot:Math.asin(t)}function jt(t){return((t=Math.exp(t))+1/t)/2}function Bt(t){return(t=Math.sin(t/2))*t}var It=Math.SQRT2;a.interpolateZoom=function(t,n){var e,r,o=t[0],a=t[1],i=t[2],u=n[0],s=n[1],l=n[2],c=u-o,f=s-a,h=c*c+f*f;if(h0&&(t=t.transition().duration(m)),t.call(w.event)}function E(){u&&u.domain(i.range().map((function(t){return(t-h.x)/h.k})).map(i.invert)),f&&f.domain(l.range().map((function(t){return(t-h.y)/h.k})).map(l.invert))}function T(t){g++||t({type:"zoomstart"})}function R(t){E(),t({type:"zoom",scale:h.k,translate:[h.x,h.y]})}function N(t){--g||(t({type:"zoomend"}),n=null)}function P(){var t=this,n=M.of(t,arguments),e=0,r=a.select(c(t)).on(y,u).on(b,s),o=_(a.mouse(t)),i=kt(t);function u(){e=1,S(a.mouse(t),o),R(n)}function s(){r.on(y,null).on(b,null),i(e),N(n)}Mu.call(t),T(n)}function C(){var t,n=this,e=M.of(n,arguments),r={},i=0,u=".zoom-"+a.event.changedTouches[0].identifier,s="touchmove"+u,l="touchend"+u,c=[],f=a.select(n),p=kt(n);function d(){var e=a.touches(n);return t=h.k,e.forEach((function(t){t.identifier in r&&(r[t.identifier]=_(t))})),e}function m(){var t=a.event.target;a.select(t).on(s,g).on(l,y),c.push(t);for(var e=a.event.changedTouches,u=0,f=e.length;u1){v=p[0];var b=p[1],x=v[0]-b[0],M=v[1]-b[1];i=x*x+M*M}}function g(){var u,s,l,c,f=a.touches(n);Mu.call(n);for(var h=0,p=f.length;h360?t-=360:t<0&&(t+=360),t<60?r+(o-r)*t/60:t<180?o:t<240?r+(o-r)*(240-t)/60:r}(t))}return t=isNaN(t)?0:(t%=360)<0?t+360:t,n=isNaN(n)?0:n<0?0:n>1?1:n,r=2*(e=e<0?0:e>1?1:e)-(o=e<=.5?e*(1+n):e+n-e*n),new sn(a(t+120),a(t),a(t-120))}function Jt(t,n,e){return this instanceof Jt?(this.h=+t,this.c=+n,void(this.l=+e)):arguments.length<2?t instanceof Jt?new Jt(t.h,t.c,t.l):rn(t instanceof Qt?t.l:(t=mn((t=a.rgb(t)).r,t.g,t.b)).l,t.a,t.b):new Jt(t,n,e)}Wt.brighter=function(t){return t=Math.pow(.7,arguments.length?t:1),new Gt(this.h,this.s,this.l/t)},Wt.darker=function(t){return t=Math.pow(.7,arguments.length?t:1),new Gt(this.h,this.s,t*this.l)},Wt.rgb=function(){return Zt(this.h,this.s,this.l)},a.hcl=Jt;var $t=Jt.prototype=new Vt;function Kt(t,n,e){return isNaN(t)&&(t=0),isNaN(n)&&(n=0),new Qt(e,Math.cos(t*=Lt)*n,Math.sin(t)*n)}function Qt(t,n,e){return this instanceof Qt?(this.l=+t,this.a=+n,void(this.b=+e)):arguments.length<2?t instanceof Qt?new Qt(t.l,t.a,t.b):t instanceof Jt?Kt(t.h,t.c,t.l):mn((t=sn(t)).r,t.g,t.b):new Qt(t,n,e)}$t.brighter=function(t){return new Jt(this.h,this.c,Math.min(100,this.l+tn*(arguments.length?t:1)))},$t.darker=function(t){return new Jt(this.h,this.c,Math.max(0,this.l-tn*(arguments.length?t:1)))},$t.rgb=function(){return Kt(this.h,this.c,this.l).rgb()},a.lab=Qt;var tn=18,nn=Qt.prototype=new Vt;function en(t,n,e){var r=(t+16)/116,o=r+n/500,a=r-e/200;return new sn(un(3.2404542*(o=.95047*on(o))-1.5371385*(r=1*on(r))-.4985314*(a=1.08883*on(a))),un(-.969266*o+1.8760108*r+.041556*a),un(.0556434*o-.2040259*r+1.0572252*a))}function rn(t,n,e){return t>0?new Jt(Math.atan2(e,n)*Ut,Math.sqrt(n*n+e*e),t):new Jt(NaN,NaN,t)}function on(t){return t>.206893034?t*t*t:(t-4/29)/7.787037}function an(t){return t>.008856?Math.pow(t,1/3):7.787037*t+4/29}function un(t){return Math.round(255*(t<=.00304?12.92*t:1.055*Math.pow(t,1/2.4)-.055))}function sn(t,n,e){return this instanceof sn?(this.r=~~t,this.g=~~n,void(this.b=~~e)):arguments.length<2?t instanceof sn?new sn(t.r,t.g,t.b):pn(""+t,sn,Zt):new sn(t,n,e)}function ln(t){return new sn(t>>16,t>>8&255,255&t)}function cn(t){return ln(t)+""}nn.brighter=function(t){return new Qt(Math.min(100,this.l+tn*(arguments.length?t:1)),this.a,this.b)},nn.darker=function(t){return new Qt(Math.max(0,this.l-tn*(arguments.length?t:1)),this.a,this.b)},nn.rgb=function(){return en(this.l,this.a,this.b)},a.rgb=sn;var fn=sn.prototype=new Vt;function hn(t){return t<16?"0"+Math.max(0,t).toString(16):Math.min(255,t).toString(16)}function pn(t,n,e){var r,o,a,i=0,u=0,s=0;if(r=/([a-z]+)\((.*)\)/.exec(t=t.toLowerCase()))switch(o=r[2].split(","),r[1]){case"hsl":return e(parseFloat(o[0]),parseFloat(o[1])/100,parseFloat(o[2])/100);case"rgb":return n(vn(o[0]),vn(o[1]),vn(o[2]))}return(a=yn.get(t))?n(a.r,a.g,a.b):(null==t||"#"!==t.charAt(0)||isNaN(a=parseInt(t.slice(1),16))||(4===t.length?(i=(3840&a)>>4,i|=i>>4,u=240&a,u|=u>>4,s=15&a,s|=s<<4):7===t.length&&(i=(16711680&a)>>16,u=(65280&a)>>8,s=255&a)),n(i,u,s))}function dn(t,n,e){var r,o,a=Math.min(t/=255,n/=255,e/=255),i=Math.max(t,n,e),u=i-a,s=(i+a)/2;return u?(o=s<.5?u/(i+a):u/(2-i-a),r=t==i?(n-e)/u+(n0&&s<1?0:r),new Gt(r,o,s)}function mn(t,n,e){var r=an((.4124564*(t=gn(t))+.3575761*(n=gn(n))+.1804375*(e=gn(e)))/.95047),o=an((.2126729*t+.7151522*n+.072175*e)/1);return Qt(116*o-16,500*(r-o),200*(o-an((.0193339*t+.119192*n+.9503041*e)/1.08883)))}function gn(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function vn(t){var n=parseFloat(t);return"%"===t.charAt(t.length-1)?Math.round(2.55*n):n}fn.brighter=function(t){t=Math.pow(.7,arguments.length?t:1);var n=this.r,e=this.g,r=this.b,o=30;return n||e||r?(n&&n=200&&n<300||304===n){try{t=e.call(o,l)}catch(t){return void i.error.call(o,t)}i.load.call(o,t)}else i.error.call(o,l)}return!this.XDomainRequest||"withCredentials"in l||!/^(http(s)?:)?\/\//.test(t)||(l=new XDomainRequest),"onload"in l?l.onload=l.onerror=f:l.onreadystatechange=function(){l.readyState>3&&f()},l.onprogress=function(t){var n=a.event;a.event=t;try{i.progress.call(o,l)}finally{a.event=n}},o.header=function(t,n){return t=(t+"").toLowerCase(),arguments.length<2?s[t]:(null==n?delete s[t]:s[t]=n+"",o)},o.mimeType=function(t){return arguments.length?(n=null==t?null:t+"",o):n},o.responseType=function(t){return arguments.length?(c=t,o):c},o.response=function(t){return e=t,o},["get","post"].forEach((function(t){o[t]=function(){return o.send.apply(o,[t].concat(u(arguments)))}})),o.send=function(e,r,a){if(2===arguments.length&&"function"==typeof r&&(a=r,r=null),l.open(e,t,!0),null==n||"accept"in s||(s.accept=n+",*/*"),l.setRequestHeader)for(var u in s)l.setRequestHeader(u,s[u]);return null!=n&&l.overrideMimeType&&l.overrideMimeType(n),null!=c&&(l.responseType=c),null!=a&&o.on("error",a).on("load",(function(t){a(null,t)})),i.beforesend.call(o,l),l.send(null==r?null:r),o},o.abort=function(){return l.abort(),o},a.rebind(o,i,"on"),null==r?o:o.get(function(t){return 1===t.length?function(n,e){t(null==n?e:null)}:t}(r))}yn.forEach((function(t,n){yn.set(t,ln(n))})),a.functor=bn,a.xhr=xn(L),a.dsv=function(t,n){var e=new RegExp('["'+t+"\n]"),r=t.charCodeAt(0);function o(t,e,r){arguments.length<3&&(r=e,e=null);var o=Mn(t,n,null==e?a:i(e),r);return o.row=function(t){return arguments.length?o.response(null==(e=t)?a:i(t)):e},o}function a(t){return o.parse(t.responseText)}function i(t){return function(n){return o.parse(n.responseText,t)}}function u(n){return n.map(s).join(t)}function s(t){return e.test(t)?'"'+t.replace(/\"/g,'""')+'"':t}return o.parse=function(t,n){var e;return o.parseRows(t,(function(t,r){if(e)return e(t,r-1);var o=new Function("d","return {"+t.map((function(t,n){return JSON.stringify(t)+": d["+n+"]"})).join(",")+"}");e=n?function(t,e){return n(o(t),e)}:o}))},o.parseRows=function(t,n){var e,o,a={},i={},u=[],s=t.length,l=0,c=0;function f(){if(l>=s)return i;if(o)return o=!1,a;var n=l;if(34===t.charCodeAt(n)){for(var e=n;e++24?(isFinite(n)&&(clearTimeout(Sn),Sn=setTimeout(Tn,n)),kn=0):(kn=1,An(Tn))}function Rn(){for(var t=Date.now(),n=wn;n;)t>=n.t&&n.c(t-n.t)&&(n.c=null),n=n.n;return t}function Nn(){for(var t,n=wn,e=1/0;n;)n.c?(n.t8?function(t){return t/e}:function(t){return t*e},symbol:t}}));function On(t){var n=t.decimal,e=t.thousands,r=t.grouping,o=t.currency,i=r&&e?function(t,n){for(var o=t.length,a=[],i=0,u=r[0],s=0;o>0&&u>0&&(s+u+1>n&&(u=Math.max(1,n-s)),a.push(t.substring(o-=u,o+u)),!((s+=u+1)>n));)u=r[i=(i+1)%r.length];return a.reverse().join(e)}:L;return function(t){var e=Ln.exec(t),r=e[1]||" ",u=e[2]||">",s=e[3]||"-",l=e[4]||"",c=e[5],f=+e[6],h=e[7],p=e[8],d=e[9],m=1,g="",v="",y=!1,b=!0;switch(p&&(p=+p.substring(1)),(c||"0"===r&&"="===u)&&(c=r="0",u="="),d){case"n":h=!0,d="g";break;case"%":m=100,v="%",d="f";break;case"p":m=100,v="%",d="r";break;case"b":case"o":case"x":case"X":"#"===l&&(g="0"+d.toLowerCase());case"c":b=!1;case"d":y=!0,p=0;break;case"s":m=-1,d="r"}"$"===l&&(g=o[0],v=o[1]),"r"!=d||p||(d="g"),null!=p&&("g"==d?p=Math.max(1,Math.min(21,p)):"e"!=d&&"f"!=d||(p=Math.max(0,Math.min(20,p)))),d=Un.get(d)||Dn;var x=c&&h;return function(t){var e=v;if(y&&t%1)return"";var o=t<0||0===t&&1/t<0?(t=-t,"-"):"-"===s?"":s;if(m<0){var l=a.formatPrefix(t,p);t=l.scale(t),e=l.symbol+v}else t*=m;var M,w,_=(t=d(t,p)).lastIndexOf(".");if(_<0){var k=b?t.lastIndexOf("e"):-1;k<0?(M=t,w=""):(M=t.substring(0,k),w=t.substring(k))}else M=t.substring(0,_),w=n+t.substring(_+1);!c&&h&&(M=i(M,1/0));var S=g.length+M.length+w.length+(x?0:o.length),A=S"===u?A+o+t:"^"===u?A.substring(0,S>>=1)+o+t+A.substring(S):o+(x?t:A+t))+e}}}a.formatPrefix=function(t,n){var e=0;return(t=+t)&&(t<0&&(t*=-1),n&&(t=a.round(t,Pn(t,n))),e=1+Math.floor(1e-12+Math.log(t)/Math.LN10),e=Math.max(-24,Math.min(24,3*Math.floor((e-1)/3)))),Cn[8+e/3]};var Ln=/(?:([^{])?([<>=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i,Un=a.map({b:function(t){return t.toString(2)},c:function(t){return String.fromCharCode(t)},o:function(t){return t.toString(8)},x:function(t){return t.toString(16)},X:function(t){return t.toString(16).toUpperCase()},g:function(t,n){return t.toPrecision(n)},e:function(t,n){return t.toExponential(n)},f:function(t,n){return t.toFixed(n)},r:function(t,n){return(t=a.round(t,Pn(t,n))).toFixed(Math.max(0,Math.min(20,Pn(t*(1+1e-15),n))))}});function Dn(t){return t+""}var zn=a.time={},Fn=Date;function qn(){this._=new Date(arguments.length>1?Date.UTC.apply(this,arguments):arguments[0])}qn.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(){jn.setUTCDate.apply(this._,arguments)},setDay:function(){jn.setUTCDay.apply(this._,arguments)},setFullYear:function(){jn.setUTCFullYear.apply(this._,arguments)},setHours:function(){jn.setUTCHours.apply(this._,arguments)},setMilliseconds:function(){jn.setUTCMilliseconds.apply(this._,arguments)},setMinutes:function(){jn.setUTCMinutes.apply(this._,arguments)},setMonth:function(){jn.setUTCMonth.apply(this._,arguments)},setSeconds:function(){jn.setUTCSeconds.apply(this._,arguments)},setTime:function(){jn.setTime.apply(this._,arguments)}};var jn=Date.prototype;function Bn(t,n,e){function r(n){var e=t(n),r=a(e,1);return n-e1)for(;i=l)return-1;if(37===(o=n.charCodeAt(u++))){if(i=n.charAt(u++),!(a=w[i in Yn?n.charAt(u++):i])||(r=a(t,e,r))<0)return-1}else if(o!=e.charCodeAt(r++))return-1}return r}c.utc=function(t){var n=c(t);function e(t){try{var e=new(Fn=qn);return e._=t,n(e)}finally{Fn=Date}}return e.parse=function(t){try{Fn=qn;var e=n.parse(t);return e&&e._}finally{Fn=Date}},e.toString=n.toString,e},c.multi=c.utc.multi=fe;var h=a.map(),p=Wn(i),d=Zn(i),m=Wn(u),g=Zn(u),v=Wn(s),y=Zn(s),b=Wn(l),x=Zn(l);o.forEach((function(t,n){h.set(t.toLowerCase(),n)}));var M={a:function(t){return u[t.getDay()]},A:function(t){return i[t.getDay()]},b:function(t){return l[t.getMonth()]},B:function(t){return s[t.getMonth()]},c:c(n),d:function(t,n){return Gn(t.getDate(),n,2)},e:function(t,n){return Gn(t.getDate(),n,2)},H:function(t,n){return Gn(t.getHours(),n,2)},I:function(t,n){return Gn(t.getHours()%12||12,n,2)},j:function(t,n){return Gn(1+zn.dayOfYear(t),n,3)},L:function(t,n){return Gn(t.getMilliseconds(),n,3)},m:function(t,n){return Gn(t.getMonth()+1,n,2)},M:function(t,n){return Gn(t.getMinutes(),n,2)},p:function(t){return o[+(t.getHours()>=12)]},S:function(t,n){return Gn(t.getSeconds(),n,2)},U:function(t,n){return Gn(zn.sundayOfYear(t),n,2)},w:function(t){return t.getDay()},W:function(t,n){return Gn(zn.mondayOfYear(t),n,2)},x:c(e),X:c(r),y:function(t,n){return Gn(t.getFullYear()%100,n,2)},Y:function(t,n){return Gn(t.getFullYear()%1e4,n,4)},Z:le,"%":function(){return"%"}},w={a:function(t,n,e){m.lastIndex=0;var r=m.exec(n.slice(e));return r?(t.w=g.get(r[0].toLowerCase()),e+r[0].length):-1},A:function(t,n,e){p.lastIndex=0;var r=p.exec(n.slice(e));return r?(t.w=d.get(r[0].toLowerCase()),e+r[0].length):-1},b:function(t,n,e){b.lastIndex=0;var r=b.exec(n.slice(e));return r?(t.m=x.get(r[0].toLowerCase()),e+r[0].length):-1},B:function(t,n,e){v.lastIndex=0;var r=v.exec(n.slice(e));return r?(t.m=y.get(r[0].toLowerCase()),e+r[0].length):-1},c:function(t,n,e){return f(t,M.c.toString(),n,e)},d:re,e:re,H:ae,I:ae,j:oe,L:se,m:ee,M:ie,p:function(t,n,e){var r=h.get(n.slice(e,e+=2).toLowerCase());return null==r?-1:(t.p=r,e)},S:ue,U:$n,w:Jn,W:Kn,x:function(t,n,e){return f(t,M.x.toString(),n,e)},X:function(t,n,e){return f(t,M.X.toString(),n,e)},y:te,Y:Qn,Z:ne,"%":ce};return c}zn.year=Bn((function(t){return(t=zn.day(t)).setMonth(0,1),t}),(function(t,n){t.setFullYear(t.getFullYear()+n)}),(function(t){return t.getFullYear()})),zn.years=zn.year.range,zn.years.utc=zn.year.utc.range,zn.day=Bn((function(t){var n=new Fn(2e3,0);return n.setFullYear(t.getFullYear(),t.getMonth(),t.getDate()),n}),(function(t,n){t.setDate(t.getDate()+n)}),(function(t){return t.getDate()-1})),zn.days=zn.day.range,zn.days.utc=zn.day.utc.range,zn.dayOfYear=function(t){var n=zn.year(t);return Math.floor((t-n-6e4*(t.getTimezoneOffset()-n.getTimezoneOffset()))/864e5)},["sunday","monday","tuesday","wednesday","thursday","friday","saturday"].forEach((function(t,n){n=7-n;var e=zn[t]=Bn((function(t){return(t=zn.day(t)).setDate(t.getDate()-(t.getDay()+n)%7),t}),(function(t,n){t.setDate(t.getDate()+7*Math.floor(n))}),(function(t){var e=zn.year(t).getDay();return Math.floor((zn.dayOfYear(t)+(e+n)%7)/7)-(e!==n)}));zn[t+"s"]=e.range,zn[t+"s"].utc=e.utc.range,zn[t+"OfYear"]=function(t){var e=zn.year(t).getDay();return Math.floor((zn.dayOfYear(t)+(e+n)%7)/7)}})),zn.week=zn.sunday,zn.weeks=zn.sunday.range,zn.weeks.utc=zn.sunday.utc.range,zn.weekOfYear=zn.sundayOfYear;var Yn={"-":"",_:" ",0:"0"},Hn=/^\s*\d+/,Vn=/^%/;function Gn(t,n,e){var r=t<0?"-":"",o=(r?-t:t)+"",a=o.length;return r+(a68?1900:2e3),e+o[0].length):-1}function ne(t,n,e){return/^[+-]\d{4}$/.test(n=n.slice(e,e+5))?(t.Z=-n,e+5):-1}function ee(t,n,e){Hn.lastIndex=0;var r=Hn.exec(n.slice(e,e+2));return r?(t.m=r[0]-1,e+r[0].length):-1}function re(t,n,e){Hn.lastIndex=0;var r=Hn.exec(n.slice(e,e+2));return r?(t.d=+r[0],e+r[0].length):-1}function oe(t,n,e){Hn.lastIndex=0;var r=Hn.exec(n.slice(e,e+3));return r?(t.j=+r[0],e+r[0].length):-1}function ae(t,n,e){Hn.lastIndex=0;var r=Hn.exec(n.slice(e,e+2));return r?(t.H=+r[0],e+r[0].length):-1}function ie(t,n,e){Hn.lastIndex=0;var r=Hn.exec(n.slice(e,e+2));return r?(t.M=+r[0],e+r[0].length):-1}function ue(t,n,e){Hn.lastIndex=0;var r=Hn.exec(n.slice(e,e+2));return r?(t.S=+r[0],e+r[0].length):-1}function se(t,n,e){Hn.lastIndex=0;var r=Hn.exec(n.slice(e,e+3));return r?(t.L=+r[0],e+r[0].length):-1}function le(t){var n=t.getTimezoneOffset(),e=n>0?"-":"+",r=w(n)/60|0,o=w(n)%60;return e+Gn(r,"0",2)+Gn(o,"0",2)}function ce(t,n,e){Vn.lastIndex=0;var r=Vn.exec(n.slice(e,e+1));return r?e+r[0].length:-1}function fe(t){for(var n=t.length,e=-1;++e=0?1:-1,u=i*a,s=Math.cos(n),l=Math.sin(n),c=o*l,f=r*s+c*Math.cos(u),h=c*i*Math.sin(u);Oe.add(Math.atan2(h,f)),e=t,r=s,o=l}Le.point=function(i,u){Le.point=a,e=(t=i)*Lt,r=Math.cos(u=(n=u)*Lt/2+Nt/4),o=Math.sin(u)},Le.lineEnd=function(){a(t,n)}}function De(t){var n=t[0],e=t[1],r=Math.cos(e);return[r*Math.cos(n),r*Math.sin(n),Math.sin(e)]}function ze(t,n){return t[0]*n[0]+t[1]*n[1]+t[2]*n[2]}function Fe(t,n){return[t[1]*n[2]-t[2]*n[1],t[2]*n[0]-t[0]*n[2],t[0]*n[1]-t[1]*n[0]]}function qe(t,n){t[0]+=n[0],t[1]+=n[1],t[2]+=n[2]}function je(t,n){return[t[0]*n,t[1]*n,t[2]*n]}function Be(t){var n=Math.sqrt(t[0]*t[0]+t[1]*t[1]+t[2]*t[2]);t[0]/=n,t[1]/=n,t[2]/=n}function Ie(t){return[Math.atan2(t[1],t[0]),qt(t[2])]}function Xe(t,n){return w(t[0]-n[0])Tt?r=90:l<-Tt&&(n=-90),f[0]=t,f[1]=e}};function p(o,a){c.push(f=[t=o,e=o]),ar&&(r=a)}function d(a,i){var u=De([a*Lt,i*Lt]);if(s){var l=Fe(s,u),c=Fe([l[1],-l[0],0],l);Be(c),c=Ie(c);var f=a-o,h=f>0?1:-1,d=c[0]*Ut*h,m=w(f)>180;if(m^(h*or&&(r=g);else if(m^(h*o<(d=(d+360)%360-180)&&dr&&(r=i);m?ax(t,e)&&(e=a):x(a,e)>x(t,e)&&(t=a):e>=t?(ae&&(e=a)):a>o?x(t,a)>x(t,e)&&(e=a):x(a,e)>x(t,e)&&(t=a)}else p(a,i);s=u,o=a}function m(){h.point=d}function g(){f[0]=t,f[1]=e,h.point=p,s=null}function v(t,n){if(s){var e=t-o;l+=w(e)>180?e+(e>0?360:-360):e}else i=t,u=n;Le.point(t,n),d(t,n)}function y(){Le.lineStart()}function b(){v(i,u),Le.lineEnd(),w(l)>Tt&&(t=-(e=180)),f[0]=t,f[1]=e,s=null}function x(t,n){return(n-=t)<0?n+360:n}function M(t,n){return t[0]-n[0]}function _(t,n){return n[0]<=n[1]?n[0]<=t&&t<=n[1]:tx(m[0],m[1])&&(m[1]=p[1]),x(p[0],m[1])>x(m[0],m[1])&&(m[0]=p[0])):u.push(m=p);for(var s,l,p,d=-1/0,m=(i=0,u[l=u.length-1]);i<=l;m=p,++i)p=u[i],(s=x(m[1],p[0]))>d&&(d=s,t=p[0],e=m[1])}return c=f=null,t===1/0||n===1/0?[[NaN,NaN],[NaN,NaN]]:[[t,n],[e,r]]}}(),a.geo.centroid=function(t){we=_e=ke=Se=Ae=Ee=Te=Re=Ne=Pe=Ce=0,a.geo.stream(t,Ye);var n=Ne,e=Pe,r=Ce,o=n*n+e*e+r*r;return o=0;--u)o.point((f=c[u])[0],f[1]);else r(p.x,p.p.x,-1,o);p=p.p}c=(p=p.o).z,d=!d}while(!p.v);o.lineEnd()}}}function Qe(t){if(n=t.length){for(var n,e,r=0,o=t[0];++r=0?1:-1,_=w*M,k=_>Nt,S=d*b;if(Oe.add(Math.atan2(S*w*Math.sin(_),m*x+S*Math.cos(_))),a+=k?M+w*Pt:M,k^h>=e^v>=e){var A=Fe(De(f),De(t));Be(A);var E=Fe(o,A);Be(E);var T=(k^M>=0?-1:1)*qt(E[2]);(r>T||r===T&&(A[0]||A[1]))&&(i+=k^M>=0?1:-1)}if(!g++)break;h=v,d=b,m=x,f=t}}return(a<-Tt||a0){for(b||(i.polygonStart(),b=!0),i.lineStart();++a1&&2&n&&e.push(e.pop().concat(e.shift())),u.push(e.filter(er))}return c}}function er(t){return t.length>1}function rr(){var t,n=[];return{lineStart:function(){n.push(t=[])},point:function(n,e){t.push([n,e])},lineEnd:F,buffer:function(){var e=n;return n=[],t=null,e},rejoin:function(){n.length>1&&n.push(n.pop().concat(n.shift()))}}}function or(t,n){return((t=t.x)[0]<0?t[1]-Ot-Tt:Ot-t[1])-((n=n.x)[0]<0?n[1]-Ot-Tt:Ot-n[1])}var ar=nr($e,(function(t){var n,e=NaN,r=NaN,o=NaN;return{lineStart:function(){t.lineStart(),n=1},point:function(a,i){var u=a>0?Nt:-Nt,s=w(a-e);w(s-Nt)0?Ot:-Ot),t.point(o,r),t.lineEnd(),t.lineStart(),t.point(u,r),t.point(a,r),n=0):o!==u&&s>=Nt&&(w(e-o)Tt?Math.atan((Math.sin(n)*(a=Math.cos(r))*Math.sin(e)-Math.sin(r)*(o=Math.cos(n))*Math.sin(t))/(o*a*i)):(n+r)/2}(e,r,a,i),t.point(o,r),t.lineEnd(),t.lineStart(),t.point(u,r),n=0),t.point(e=a,r=i),o=u},lineEnd:function(){t.lineEnd(),e=r=NaN},clean:function(){return 2-n}}}),(function(t,n,e,r){var o;if(null==t)o=e*Ot,r.point(-Nt,o),r.point(0,o),r.point(Nt,o),r.point(Nt,0),r.point(Nt,-o),r.point(0,-o),r.point(-Nt,-o),r.point(-Nt,0),r.point(-Nt,o);else if(w(t[0]-n[0])>Tt){var a=t[0]0,r=w(n)>Tt;return nr(o,(function(t){var n,u,s,l,c;return{lineStart:function(){l=s=!1,c=1},point:function(f,h){var p,d=[f,h],m=o(f,h),g=e?m?0:i(f,h):m?i(f+(f<0?Nt:-Nt),h):0;if(!n&&(l=s=m)&&t.lineStart(),m!==s&&(p=a(n,d),(Xe(n,p)||Xe(d,p))&&(d[0]+=Tt,d[1]+=Tt,m=o(d[0],d[1]))),m!==s)c=0,m?(t.lineStart(),p=a(d,n),t.point(p[0],p[1])):(p=a(n,d),t.point(p[0],p[1]),t.lineEnd()),n=p;else if(r&&n&&e^m){var v;g&u||!(v=a(d,n,!0))||(c=0,e?(t.lineStart(),t.point(v[0][0],v[0][1]),t.point(v[1][0],v[1][1]),t.lineEnd()):(t.point(v[1][0],v[1][1]),t.lineEnd(),t.lineStart(),t.point(v[0][0],v[0][1])))}!m||n&&Xe(n,d)||t.point(d[0],d[1]),n=d,s=m,u=g},lineEnd:function(){s&&t.lineEnd(),n=null},clean:function(){return c|(l&&s)<<1}}}),Ir(t,6*Lt),e?[0,-t]:[-Nt,t-Nt]);function o(t,e){return Math.cos(t)*Math.cos(e)>n}function a(t,e,r){var o=[1,0,0],a=Fe(De(t),De(e)),i=ze(a,a),u=a[0],s=i-u*u;if(!s)return!r&&t;var l=n*i/s,c=-n*u/s,f=Fe(o,a),h=je(o,l);qe(h,je(a,c));var p=f,d=ze(h,p),m=ze(p,p),g=d*d-m*(ze(h,h)-1);if(!(g<0)){var v=Math.sqrt(g),y=je(p,(-d-v)/m);if(qe(y,h),y=Ie(y),!r)return y;var b,x=t[0],M=e[0],_=t[1],k=e[1];M0^y[1]<(w(y[0]-x)Nt^(x<=y[0]&&y[0]<=M)){var E=je(p,(-d+v)/m);return qe(E,h),[y,Ie(E)]}}}function i(n,r){var o=e?t:Nt-t,a=0;return n<-o?a|=1:n>o&&(a|=2),r<-o?a|=4:r>o&&(a|=8),a}}function ur(t,n,e,r){return function(o){var a,i=o.a,u=o.b,s=i.x,l=i.y,c=0,f=1,h=u.x-s,p=u.y-l;if(a=t-s,h||!(a>0)){if(a/=h,h<0){if(a0){if(a>f)return;a>c&&(c=a)}if(a=e-s,h||!(a<0)){if(a/=h,h<0){if(a>f)return;a>c&&(c=a)}else if(h>0){if(a0)){if(a/=p,p<0){if(a0){if(a>f)return;a>c&&(c=a)}if(a=r-l,p||!(a<0)){if(a/=p,p<0){if(a>f)return;a>c&&(c=a)}else if(p>0){if(a0&&(o.a={x:s+c*h,y:l+c*p}),f<1&&(o.b={x:s+f*h,y:l+f*p}),o}}}}}}function sr(t,n,e,r){return function(s){var l,c,f,h,p,d,m,g,v,y,b,x=s,M=rr(),w=ur(t,n,e,r),_={point:A,lineStart:function(){_.point=E,c&&c.push(f=[]),y=!0,v=!1,m=g=NaN},lineEnd:function(){l&&(E(h,p),d&&v&&M.rejoin(),l.push(M.buffer())),_.point=A,v&&s.lineEnd()},polygonStart:function(){s=M,l=[],c=[],b=!0},polygonEnd:function(){s=x,l=a.merge(l);var n=function(t){for(var n=0,e=c.length,r=t[1],o=0;or&&zt(l,a,t)>0&&++n:a[1]<=r&&zt(l,a,t)<0&&--n,l=a;return 0!==n}([t,r]),e=b&&n,o=l.length;(e||o)&&(s.polygonStart(),e&&(s.lineStart(),k(null,null,1,s),s.lineEnd()),o&&Ke(l,i,n,k,s),s.polygonEnd()),l=c=f=null}};function k(a,i,s,l){var c=0,f=0;if(null==a||(c=o(a,s))!==(f=o(i,s))||u(a,i)<0^s>0)do{l.point(0===c||3===c?t:e,c>1?r:n)}while((c=(c+s+4)%4)!==f);else l.point(i[0],i[1])}function S(o,a){return t<=o&&o<=e&&n<=a&&a<=r}function A(t,n){S(t,n)&&s.point(t,n)}function E(t,n){var e=S(t=Math.max(-1e9,Math.min(1e9,t)),n=Math.max(-1e9,Math.min(1e9,n)));if(c&&f.push([t,n]),y)h=t,p=n,d=e,y=!1,e&&(s.lineStart(),s.point(t,n));else if(e&&v)s.point(t,n);else{var r={a:{x:m,y:g},b:{x:t,y:n}};w(r)?(v||(s.lineStart(),s.point(r.a.x,r.a.y)),s.point(r.b.x,r.b.y),e||s.lineEnd(),b=!1):e&&(s.lineStart(),s.point(t,n),b=!1)}m=t,g=n,v=e}return _};function o(r,o){return w(r[0]-t)0?0:3:w(r[0]-e)0?2:1:w(r[1]-n)0?1:0:o>0?3:2}function i(t,n){return u(t.x,n.x)}function u(t,n){var e=o(t,1),r=o(n,1);return e!==r?e-r:0===e?n[1]-t[1]:1===e?t[0]-n[0]:2===e?t[1]-n[1]:n[0]-t[0]}}function lr(t){var n=0,e=Nt/3,r=Lr(t),o=r(n,e);return o.parallels=function(t){return arguments.length?r(n=t[0]*Nt/180,e=t[1]*Nt/180):[n/Nt*180,e/Nt*180]},o}function cr(t,n){var e=Math.sin(t),r=(e+Math.sin(n))/2,o=1+e*(2*r-e),a=Math.sqrt(o)/r;function i(t,n){var e=Math.sqrt(o-2*r*Math.sin(n))/r;return[e*Math.sin(t*=r),a-e*Math.cos(t)]}return i.invert=function(t,n){var e=a-n;return[Math.atan2(t,e)/r,qt((o-(t*t+e*e)*r*r)/(2*r))]},i}a.geo.clipExtent=function(){var t,n,e,r,o,a,i={stream:function(t){return o&&(o.valid=!1),(o=a(t)).valid=!0,o},extent:function(u){return arguments.length?(a=sr(t=+u[0][0],n=+u[0][1],e=+u[1][0],r=+u[1][1]),o&&(o.valid=!1,o=null),i):[[t,n],[e,r]]}};return i.extent([[0,0],[960,500]])},(a.geo.conicEqualArea=function(){return lr(cr)}).raw=cr,a.geo.albers=function(){return a.geo.conicEqualArea().rotate([96,0]).center([-.6,38.7]).parallels([29.5,45.5]).scale(1070)},a.geo.albersUsa=function(){var t,n,e,r,o=a.geo.albers(),i=a.geo.conicEqualArea().rotate([154,0]).center([-2,58.5]).parallels([55,65]),u=a.geo.conicEqualArea().rotate([157,0]).center([-3,19.9]).parallels([8,18]),s={point:function(n,e){t=[n,e]}};function l(o){var a=o[0],i=o[1];return t=null,n(a,i),t||(e(a,i),t)||r(a,i),t}return l.invert=function(t){var n=o.scale(),e=o.translate(),r=(t[0]-e[0])/n,a=(t[1]-e[1])/n;return(a>=.12&&a<.234&&r>=-.425&&r<-.214?i:a>=.166&&a<.234&&r>=-.214&&r<-.115?u:o).invert(t)},l.stream=function(t){var n=o.stream(t),e=i.stream(t),r=u.stream(t);return{point:function(t,o){n.point(t,o),e.point(t,o),r.point(t,o)},sphere:function(){n.sphere(),e.sphere(),r.sphere()},lineStart:function(){n.lineStart(),e.lineStart(),r.lineStart()},lineEnd:function(){n.lineEnd(),e.lineEnd(),r.lineEnd()},polygonStart:function(){n.polygonStart(),e.polygonStart(),r.polygonStart()},polygonEnd:function(){n.polygonEnd(),e.polygonEnd(),r.polygonEnd()}}},l.precision=function(t){return arguments.length?(o.precision(t),i.precision(t),u.precision(t),l):o.precision()},l.scale=function(t){return arguments.length?(o.scale(t),i.scale(.35*t),u.scale(t),l.translate(o.translate())):o.scale()},l.translate=function(t){if(!arguments.length)return o.translate();var a=o.scale(),c=+t[0],f=+t[1];return n=o.translate(t).clipExtent([[c-.455*a,f-.238*a],[c+.455*a,f+.238*a]]).stream(s).point,e=i.translate([c-.307*a,f+.201*a]).clipExtent([[c-.425*a+Tt,f+.12*a+Tt],[c-.214*a-Tt,f+.234*a-Tt]]).stream(s).point,r=u.translate([c-.205*a,f+.212*a]).clipExtent([[c-.214*a+Tt,f+.166*a+Tt],[c-.115*a-Tt,f+.234*a-Tt]]).stream(s).point,l},l.scale(1070)};var fr,hr,pr,dr,mr,gr,vr={point:F,lineStart:F,lineEnd:F,polygonStart:function(){hr=0,vr.lineStart=yr},polygonEnd:function(){vr.lineStart=vr.lineEnd=vr.point=F,fr+=w(hr/2)}};function yr(){var t,n,e,r;function o(t,n){hr+=r*t-e*n,e=t,r=n}vr.point=function(a,i){vr.point=o,t=e=a,n=r=i},vr.lineEnd=function(){o(t,n)}}var br={point:function(t,n){tmr&&(mr=t),ngr&&(gr=n)},lineStart:F,lineEnd:F,polygonStart:F,polygonEnd:F};function xr(){var t=Mr(4.5),n=[],e={point:r,lineStart:function(){e.point=o},lineEnd:i,polygonStart:function(){e.lineEnd=u},polygonEnd:function(){e.lineEnd=i,e.point=r},pointRadius:function(n){return t=Mr(n),e},result:function(){if(n.length){var t=n.join("");return n=[],t}}};function r(e,r){n.push("M",e,",",r,t)}function o(t,r){n.push("M",t,",",r),e.point=a}function a(t,e){n.push("L",t,",",e)}function i(){e.point=r}function u(){n.push("Z")}return e}function Mr(t){return"m0,"+t+"a"+t+","+t+" 0 1,1 0,"+-2*t+"a"+t+","+t+" 0 1,1 0,"+2*t+"z"}var wr,_r={point:kr,lineStart:Sr,lineEnd:Ar,polygonStart:function(){_r.lineStart=Er},polygonEnd:function(){_r.point=kr,_r.lineStart=Sr,_r.lineEnd=Ar}};function kr(t,n){ke+=t,Se+=n,++Ae}function Sr(){var t,n;function e(e,r){var o=e-t,a=r-n,i=Math.sqrt(o*o+a*a);Ee+=i*(t+e)/2,Te+=i*(n+r)/2,Re+=i,kr(t=e,n=r)}_r.point=function(r,o){_r.point=e,kr(t=r,n=o)}}function Ar(){_r.point=kr}function Er(){var t,n,e,r;function o(t,n){var o=t-e,a=n-r,i=Math.sqrt(o*o+a*a);Ee+=i*(e+t)/2,Te+=i*(r+n)/2,Re+=i,Ne+=(i=r*t-e*n)*(e+t),Pe+=i*(r+n),Ce+=3*i,kr(e=t,r=n)}_r.point=function(a,i){_r.point=o,kr(t=e=a,n=r=i)},_r.lineEnd=function(){o(t,n)}}function Tr(t){var n=4.5,e={point:r,lineStart:function(){e.point=o},lineEnd:i,polygonStart:function(){e.lineEnd=u},polygonEnd:function(){e.lineEnd=i,e.point=r},pointRadius:function(t){return n=t,e},result:F};function r(e,r){t.moveTo(e+n,r),t.arc(e,r,n,0,Pt)}function o(n,r){t.moveTo(n,r),e.point=a}function a(n,e){t.lineTo(n,e)}function i(){e.point=r}function u(){t.closePath()}return e}function Rr(t){var n=.5,e=Math.cos(30*Lt),r=16;function o(t){return(r?i:a)(t)}function a(n){return Cr(n,(function(e,r){e=t(e,r),n.point(e[0],e[1])}))}function i(n){var e,o,a,i,s,l,c,f,h,p,d,m,g={point:v,lineStart:y,lineEnd:x,polygonStart:function(){n.polygonStart(),g.lineStart=M},polygonEnd:function(){n.polygonEnd(),g.lineStart=y}};function v(e,r){e=t(e,r),n.point(e[0],e[1])}function y(){f=NaN,g.point=b,n.lineStart()}function b(e,o){var a=De([e,o]),i=t(e,o);u(f,h,c,p,d,m,f=i[0],h=i[1],c=e,p=a[0],d=a[1],m=a[2],r,n),n.point(f,h)}function x(){g.point=v,n.lineEnd()}function M(){y(),g.point=w,g.lineEnd=_}function w(t,n){b(e=t,n),o=f,a=h,i=p,s=d,l=m,g.point=b}function _(){u(f,h,c,p,d,m,o,a,e,i,s,l,r,n),g.lineEnd=x,x()}return g}function u(r,o,a,i,s,l,c,f,h,p,d,m,g,v){var y=c-r,b=f-o,x=y*y+b*b;if(x>4*n&&g--){var M=i+p,_=s+d,k=l+m,S=Math.sqrt(M*M+_*_+k*k),A=Math.asin(k/=S),E=w(w(k)-1)n||w((y*P+b*C)/x-.5)>.3||i*p+s*d+l*m0&&16,o):Math.sqrt(n)},o}function Nr(t){var n=Rr((function(n,e){return t([n*Ut,e*Ut])}));return function(t){return Ur(n(t))}}function Pr(t){this.stream=t}function Cr(t,n){return{point:n,sphere:function(){t.sphere()},lineStart:function(){t.lineStart()},lineEnd:function(){t.lineEnd()},polygonStart:function(){t.polygonStart()},polygonEnd:function(){t.polygonEnd()}}}function Or(t){return Lr((function(){return t}))()}function Lr(t){var n,e,r,o,i,u,s=Rr((function(t,e){return[(t=n(t,e))[0]*l+o,i-t[1]*l]})),l=150,c=480,f=250,h=0,p=0,d=0,m=0,g=0,v=ar,y=L,b=null,x=null;function M(t){return[(t=r(t[0]*Lt,t[1]*Lt))[0]*l+o,i-t[1]*l]}function w(t){return(t=r.invert((t[0]-o)/l,(i-t[1])/l))&&[t[0]*Ut,t[1]*Ut]}function _(){r=Je(e=Fr(d,m,g),n);var t=n(h,p);return o=c-t[0]*l,i=f+t[1]*l,k()}function k(){return u&&(u.valid=!1,u=null),M}return M.stream=function(t){return u&&(u.valid=!1),(u=Ur(v(e,s(y(t))))).valid=!0,u},M.clipAngle=function(t){return arguments.length?(v=null==t?(b=t,ar):ir((b=+t)*Lt),k()):b},M.clipExtent=function(t){return arguments.length?(x=t,y=t?sr(t[0][0],t[0][1],t[1][0],t[1][1]):L,k()):x},M.scale=function(t){return arguments.length?(l=+t,_()):l},M.translate=function(t){return arguments.length?(c=+t[0],f=+t[1],_()):[c,f]},M.center=function(t){return arguments.length?(h=t[0]%360*Lt,p=t[1]%360*Lt,_()):[h*Ut,p*Ut]},M.rotate=function(t){return arguments.length?(d=t[0]%360*Lt,m=t[1]%360*Lt,g=t.length>2?t[2]%360*Lt:0,_()):[d*Ut,m*Ut,g*Ut]},a.rebind(M,s,"precision"),function(){return n=t.apply(this,arguments),M.invert=n.invert&&w,_()}}function Ur(t){return Cr(t,(function(n,e){t.point(n*Lt,e*Lt)}))}function Dr(t,n){return[t,n]}function zr(t,n){return[t>Nt?t-Pt:t<-Nt?t+Pt:t,n]}function Fr(t,n,e){return t?n||e?Je(jr(t),Br(n,e)):jr(t):n||e?Br(n,e):zr}function qr(t){return function(n,e){return[(n+=t)>Nt?n-Pt:n<-Nt?n+Pt:n,e]}}function jr(t){var n=qr(t);return n.invert=qr(-t),n}function Br(t,n){var e=Math.cos(t),r=Math.sin(t),o=Math.cos(n),a=Math.sin(n);function i(t,n){var i=Math.cos(n),u=Math.cos(t)*i,s=Math.sin(t)*i,l=Math.sin(n),c=l*e+u*r;return[Math.atan2(s*o-c*a,u*e-l*r),qt(c*o+s*a)]}return i.invert=function(t,n){var i=Math.cos(n),u=Math.cos(t)*i,s=Math.sin(t)*i,l=Math.sin(n),c=l*o-s*a;return[Math.atan2(s*o+l*a,u*e+c*r),qt(c*e-u*r)]},i}function Ir(t,n){var e=Math.cos(t),r=Math.sin(t);return function(o,a,i,u){var s=i*n;null!=o?(o=Xr(e,o),a=Xr(e,a),(i>0?oa)&&(o+=i*Pt)):(o=t+i*Pt,a=t-.5*s);for(var l,c=o;i>0?c>a:c2?t[2]*Lt:0),n.invert=function(n){return(n=t.invert(n[0]*Lt,n[1]*Lt))[0]*=Ut,n[1]*=Ut,n},n},zr.invert=Dr,a.geo.circle=function(){var t,n,e=[0,0],r=6;function o(){var t="function"==typeof e?e.apply(this,arguments):e,r=Fr(-t[0]*Lt,-t[1]*Lt,0).invert,o=[];return n(null,null,1,{point:function(t,n){o.push(t=r(t,n)),t[0]*=Ut,t[1]*=Ut}}),{type:"Polygon",coordinates:[o]}}return o.origin=function(t){return arguments.length?(e=t,o):e},o.angle=function(e){return arguments.length?(n=Ir((t=+e)*Lt,r*Lt),o):t},o.precision=function(e){return arguments.length?(n=Ir(t*Lt,(r=+e)*Lt),o):r},o.angle(90)},a.geo.distance=function(t,n){var e,r=(n[0]-t[0])*Lt,o=t[1]*Lt,a=n[1]*Lt,i=Math.sin(r),u=Math.cos(r),s=Math.sin(o),l=Math.cos(o),c=Math.sin(a),f=Math.cos(a);return Math.atan2(Math.sqrt((e=f*i)*e+(e=l*c-s*f*u)*e),s*c+l*f*u)},a.geo.graticule=function(){var t,n,e,r,o,i,u,s,l,c,f,h,p=10,d=p,m=90,g=360,v=2.5;function y(){return{type:"MultiLineString",coordinates:b()}}function b(){return a.range(Math.ceil(r/m)*m,e,m).map(f).concat(a.range(Math.ceil(s/g)*g,u,g).map(h)).concat(a.range(Math.ceil(n/p)*p,t,p).filter((function(t){return w(t%m)>Tt})).map(l)).concat(a.range(Math.ceil(i/d)*d,o,d).filter((function(t){return w(t%g)>Tt})).map(c))}return y.lines=function(){return b().map((function(t){return{type:"LineString",coordinates:t}}))},y.outline=function(){return{type:"Polygon",coordinates:[f(r).concat(h(u).slice(1),f(e).reverse().slice(1),h(s).reverse().slice(1))]}},y.extent=function(t){return arguments.length?y.majorExtent(t).minorExtent(t):y.minorExtent()},y.majorExtent=function(t){return arguments.length?(r=+t[0][0],e=+t[1][0],s=+t[0][1],u=+t[1][1],r>e&&(t=r,r=e,e=t),s>u&&(t=s,s=u,u=t),y.precision(v)):[[r,s],[e,u]]},y.minorExtent=function(e){return arguments.length?(n=+e[0][0],t=+e[1][0],i=+e[0][1],o=+e[1][1],n>t&&(e=n,n=t,t=e),i>o&&(e=i,i=o,o=e),y.precision(v)):[[n,i],[t,o]]},y.step=function(t){return arguments.length?y.majorStep(t).minorStep(t):y.minorStep()},y.majorStep=function(t){return arguments.length?(m=+t[0],g=+t[1],y):[m,g]},y.minorStep=function(t){return arguments.length?(p=+t[0],d=+t[1],y):[p,d]},y.precision=function(a){return arguments.length?(v=+a,l=Yr(i,o,90),c=Hr(n,t,v),f=Yr(s,u,90),h=Hr(r,e,v),y):v},y.majorExtent([[-180,-90+Tt],[180,90-Tt]]).minorExtent([[-180,-80-Tt],[180,80+Tt]])},a.geo.greatArc=function(){var t,n,e=Vr,r=Gr;function o(){return{type:"LineString",coordinates:[t||e.apply(this,arguments),n||r.apply(this,arguments)]}}return o.distance=function(){return a.geo.distance(t||e.apply(this,arguments),n||r.apply(this,arguments))},o.source=function(n){return arguments.length?(e=n,t="function"==typeof n?null:n,o):e},o.target=function(t){return arguments.length?(r=t,n="function"==typeof t?null:t,o):r},o.precision=function(){return arguments.length?o:0},o},a.geo.interpolate=function(t,n){return e=t[0]*Lt,r=t[1]*Lt,o=n[0]*Lt,a=n[1]*Lt,i=Math.cos(r),u=Math.sin(r),s=Math.cos(a),l=Math.sin(a),c=i*Math.cos(e),f=i*Math.sin(e),h=s*Math.cos(o),p=s*Math.sin(o),d=2*Math.asin(Math.sqrt(Bt(a-r)+i*s*Bt(o-e))),m=1/Math.sin(d),(g=d?function(t){var n=Math.sin(t*=d)*m,e=Math.sin(d-t)*m,r=e*c+n*h,o=e*f+n*p,a=e*u+n*l;return[Math.atan2(o,r)*Ut,Math.atan2(a,Math.sqrt(r*r+o*o))*Ut]}:function(){return[e*Ut,r*Ut]}).distance=d,g;var e,r,o,a,i,u,s,l,c,f,h,p,d,m,g},a.geo.length=function(t){return wr=0,a.geo.stream(t,Wr),wr};var Wr={sphere:F,point:F,lineStart:function(){var t,n,e;function r(r,o){var a=Math.sin(o*=Lt),i=Math.cos(o),u=w((r*=Lt)-t),s=Math.cos(u);wr+=Math.atan2(Math.sqrt((u=i*Math.sin(u))*u+(u=e*a-n*i*s)*u),n*a+e*i*s),t=r,n=a,e=i}Wr.point=function(o,a){t=o*Lt,n=Math.sin(a*=Lt),e=Math.cos(a),Wr.point=r},Wr.lineEnd=function(){Wr.point=Wr.lineEnd=F}},lineEnd:F,polygonStart:F,polygonEnd:F};function Zr(t,n){function e(n,e){var r=Math.cos(n),o=Math.cos(e),a=t(r*o);return[a*o*Math.sin(n),a*Math.sin(e)]}return e.invert=function(t,e){var r=Math.sqrt(t*t+e*e),o=n(r),a=Math.sin(o),i=Math.cos(o);return[Math.atan2(t*a,r*i),Math.asin(r&&e*a/r)]},e}var Jr=Zr((function(t){return Math.sqrt(2/(1+t))}),(function(t){return 2*Math.asin(t/2)}));(a.geo.azimuthalEqualArea=function(){return Or(Jr)}).raw=Jr;var $r=Zr((function(t){var n=Math.acos(t);return n&&n/Math.sin(n)}),L);function Kr(t,n){var e=Math.cos(t),r=function(t){return Math.tan(Nt/4+t/2)},o=t===n?Math.sin(t):Math.log(e/Math.cos(n))/Math.log(r(n)/r(t)),a=e*Math.pow(r(t),o)/o;if(!o)return no;function i(t,n){a>0?n<-Ot+Tt&&(n=-Ot+Tt):n>Ot-Tt&&(n=Ot-Tt);var e=a/Math.pow(r(n),o);return[e*Math.sin(o*t),a-e*Math.cos(o*t)]}return i.invert=function(t,n){var e=a-n,r=Dt(o)*Math.sqrt(t*t+e*e);return[Math.atan2(t,e)/o,2*Math.atan(Math.pow(a/r,1/o))-Ot]},i}function Qr(t,n){var e=Math.cos(t),r=t===n?Math.sin(t):(e-Math.cos(n))/(n-t),o=e/r+t;if(w(r)1&&zt(t[e[r-2]],t[e[r-1]],t[o])<=0;)--r;e[r++]=o}return e.slice(0,r)}function lo(t,n){return t[0]-n[0]||t[1]-n[1]}(a.geo.stereographic=function(){return Or(oo)}).raw=oo,ao.invert=function(t,n){return[-n,2*Math.atan(Math.exp(t))-Ot]},(a.geo.transverseMercator=function(){var t=eo(ao),n=t.center,e=t.rotate;return t.center=function(t){return t?n([-t[1],t[0]]):[(t=n())[1],-t[0]]},t.rotate=function(t){return t?e([t[0],t[1],t.length>2?t[2]+90:90]):[(t=e())[0],t[1],t[2]-90]},e([0,0,90])}).raw=ao,a.geom={},a.geom.hull=function(t){var n=io,e=uo;if(arguments.length)return r(t);function r(t){if(t.length<3)return[];var r,o=bn(n),a=bn(e),i=t.length,u=[],s=[];for(r=0;r=0;--r)p.push(t[u[l[r]][2]]);for(r=+f;rTt)u=u.L;else{if(!((o=a-To(u,i))>Tt)){r>-Tt?(n=u.P,e=u):o>-Tt?(n=u,e=u.N):n=e=u;break}if(!u.R){n=u;break}u=u.R}var s=_o(t);if(vo.insert(n,s),n||e){if(n===e)return Oo(n),e=_o(n.site),vo.insert(s,e),s.edge=e.edge=Do(n.site,s.site),Co(n),void Co(e);if(e){Oo(n),Oo(e);var l=n.site,c=l.x,f=l.y,h=t.x-c,p=t.y-f,d=e.site,m=d.x-c,g=d.y-f,v=2*(h*g-p*m),y=h*h+p*p,b=m*m+g*g,x={x:(g*y-p*b)/v+c,y:(h*b-m*y)/v+f};zo(e.edge,l,d,x),s.edge=Do(l,t,null,x),e.edge=Do(t,d,null,x),Co(n),Co(e)}else s.edge=Do(n.site,s.site)}}function Eo(t,n){var e=t.site,r=e.x,o=e.y,a=o-n;if(!a)return r;var i=t.P;if(!i)return-1/0;var u=(e=i.site).x,s=e.y,l=s-n;if(!l)return u;var c=u-r,f=1/a-1/l,h=c/l;return f?(-h+Math.sqrt(h*h-2*f*(c*c/(-2*l)-s+l/2+o-a/2)))/f+r:(r+u)/2}function To(t,n){var e=t.N;if(e)return Eo(e,n);var r=t.site;return r.y===n?r.x:1/0}function Ro(t){this.site=t,this.edges=[]}function No(t,n){return n.angle-t.angle}function Po(){jo(this),this.x=this.y=this.arc=this.site=this.cy=null}function Co(t){var n=t.P,e=t.N;if(n&&e){var r=n.site,o=t.site,a=e.site;if(r!==a){var i=o.x,u=o.y,s=r.x-i,l=r.y-u,c=a.x-i,f=2*(s*(g=a.y-u)-l*c);if(!(f>=-Rt)){var h=s*s+l*l,p=c*c+g*g,d=(g*h-l*p)/f,m=(s*p-c*h)/f,g=m+u,v=Mo.pop()||new Po;v.arc=t,v.site=o,v.x=d+i,v.y=g+Math.sqrt(d*d+m*m),v.cy=g,t.circle=v;for(var y=null,b=bo._;b;)if(v.y=u)return;if(h>d){if(a){if(a.y>=l)return}else a={x:g,y:s};e={x:g,y:l}}else{if(a){if(a.y1)if(h>d){if(a){if(a.y>=l)return}else a={x:(s-o)/r,y:s};e={x:(l-o)/r,y:l}}else{if(a){if(a.y=u)return}else a={x:i,y:r*i+o};e={x:u,y:r*u+o}}else{if(a){if(a.xTt||w(o-e)>Tt)&&(u.splice(i,0,new Fo((v=a.site,y=c,b=w(r-f)Tt?{x:f,y:w(n-f)Tt?{x:w(e-d)Tt?{x:h,y:w(n-h)Tt?{x:w(e-p)=e&&l.x<=o&&l.y>=r&&l.y<=i?[[e,i],[o,i],[o,r],[e,r]]:[]).point=t[u]})),n}function u(t){return t.map((function(t,n){return{x:Math.round(r(t,n)/Tt)*Tt,y:Math.round(o(t,n)/Tt)*Tt,i:n}}))}return i.links=function(t){return Yo(u(t)).edges.filter((function(t){return t.l&&t.r})).map((function(n){return{source:t[n.l.i],target:t[n.r.i]}}))},i.triangles=function(t){var n=[];return Yo(u(t)).cells.forEach((function(e,r){for(var o,a=e.site,i=e.edges.sort(No),u=-1,s=i.length,l=i[s-1].edge,c=l.l===a?l.r:l.l;++ua||f>i||h=M)<<1|n>=x,_=w+4;w<_;++w)if(l=b[3&w])switch(3&w){case 0:t(l,c,f,x,M);break;case 1:t(l,x,f,h,M);break;case 2:t(l,c,M,x,p);break;case 3:t(l,x,M,h,p)}}}(t,r,o,a,i),u}function Ko(t,n){t=a.rgb(t),n=a.rgb(n);var e=t.r,r=t.g,o=t.b,i=n.r-e,u=n.g-r,s=n.b-o;return function(t){return"#"+hn(Math.round(e+i*t))+hn(Math.round(r+u*t))+hn(Math.round(o+s*t))}}function Qo(t,n){var e,r={},o={};for(e in t)e in n?r[e]=oa(t[e],n[e]):o[e]=t[e];for(e in n)e in t||(o[e]=n[e]);return function(t){for(e in r)o[e]=r[e](t);return o}}function ta(t,n){return t=+t,n=+n,function(e){return t*(1-e)+n*e}}function na(t,n){var e,r,o,a=ea.lastIndex=ra.lastIndex=0,i=-1,u=[],s=[];for(t+="",n+="";(e=ea.exec(t))&&(r=ra.exec(n));)(o=r.index)>a&&(o=n.slice(a,o),u[i]?u[i]+=o:u[++i]=o),(e=e[0])===(r=r[0])?u[i]?u[i]+=r:u[++i]=r:(u[++i]=null,s.push({i:i,x:ta(e,r)})),a=ra.lastIndex;return am&&(m=s.x),s.y>g&&(g=s.y),l.push(s.x),c.push(s.y);else for(f=0;fm&&(m=b),x>g&&(g=x),l.push(b),c.push(x)}var M=m-p,_=g-d;function k(t,n,e,r,o,a,i,u){if(!isNaN(e)&&!isNaN(r))if(t.leaf){var s=t.x,l=t.y;if(null!=s)if(w(s-e)+w(l-r)<.01)S(t,n,e,r,o,a,i,u);else{var c=t.point;t.x=t.y=t.point=null,S(t,c,s,l,o,a,i,u),S(t,n,e,r,o,a,i,u)}else t.x=e,t.y=r,t.point=n}else S(t,n,e,r,o,a,i,u)}function S(t,n,e,r,o,a,i,u){var s=.5*(o+i),l=.5*(a+u),c=e>=s,f=r>=l,h=f<<1|c;t.leaf=!1,c?o=s:i=s,f?a=l:u=l,k(t=t.nodes[h]||(t.nodes[h]={leaf:!0,nodes:[],point:null,x:null,y:null}),n,e,r,o,a,i,u)}M>_?g=d+M:m=p+_;var A={leaf:!0,nodes:[],point:null,x:null,y:null,add:function(t){k(A,t,+v(t,++f),+y(t,f),p,d,m,g)},visit:function(t){Jo(t,A,p,d,m,g)},find:function(t){return $o(A,t[0],t[1],p,d,m,g)}};if(f=-1,null==n){for(;++f=0&&!(e=a.interpolators[r](t,n)););return e}function aa(t,n){var e,r=[],o=[],a=t.length,i=n.length,u=Math.min(t.length,n.length);for(e=0;e=1?1:t(n)}}function ca(t){return function(n){return 1-t(1-n)}}function fa(t){return function(n){return.5*(n<.5?t(2*n):2-t(2-2*n))}}function ha(t){return t*t}function pa(t){return t*t*t}function da(t){if(t<=0)return 0;if(t>=1)return 1;var n=t*t,e=n*t;return 4*(t<.5?e:3*(t-n)+e-.75)}function ma(t){return 1-Math.cos(t*Ot)}function ga(t){return Math.pow(2,10*(t-1))}function va(t){return 1-Math.sqrt(1-t*t)}function ya(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}function ba(t,n){return n-=t,function(e){return Math.round(t+n*e)}}function xa(t){var n=[t.a,t.b],e=[t.c,t.d],r=wa(n),o=Ma(n,e),a=wa(function(t,n,e){return t[0]+=e*n[0],t[1]+=e*n[1],t}(e,n,-o))||0;n[0]*e[1]=0?t.slice(0,n):t,r=n>=0?t.slice(n+1):"in";return e=ua.get(e)||ia,la((r=sa.get(r)||L)(e.apply(null,i.call(arguments,1))))},a.interpolateHcl=function(t,n){t=a.hcl(t),n=a.hcl(n);var e=t.h,r=t.c,o=t.l,i=n.h-e,u=n.c-r,s=n.l-o;return isNaN(u)&&(u=0,r=isNaN(r)?n.c:r),isNaN(i)?(i=0,e=isNaN(e)?n.h:e):i>180?i-=360:i<-180&&(i+=360),function(t){return Kt(e+i*t,r+u*t,o+s*t)+""}},a.interpolateHsl=function(t,n){t=a.hsl(t),n=a.hsl(n);var e=t.h,r=t.s,o=t.l,i=n.h-e,u=n.s-r,s=n.l-o;return isNaN(u)&&(u=0,r=isNaN(r)?n.s:r),isNaN(i)?(i=0,e=isNaN(e)?n.h:e):i>180?i-=360:i<-180&&(i+=360),function(t){return Zt(e+i*t,r+u*t,o+s*t)+""}},a.interpolateLab=function(t,n){t=a.lab(t),n=a.lab(n);var e=t.l,r=t.a,o=t.b,i=n.l-e,u=n.a-r,s=n.b-o;return function(t){return en(e+i*t,r+u*t,o+s*t)+""}},a.interpolateRound=ba,a.transform=function(t){var n=s.createElementNS(a.ns.prefix.svg,"g");return(a.transform=function(t){if(null!=t){n.setAttribute("transform",t);var e=n.transform.baseVal.consolidate()}return new xa(e?e.matrix:_a)})(t)},xa.prototype.toString=function(){return"translate("+this.translate+")rotate("+this.rotate+")skewX("+this.skew+")scale("+this.scale+")"};var _a={a:1,b:0,c:0,d:1,e:0,f:0};function ka(t){return t.length?t.pop()+",":""}function Sa(t,n){var e=[],r=[];return t=a.transform(t),n=a.transform(n),function(t,n,e,r){if(t[0]!==n[0]||t[1]!==n[1]){var o=e.push("translate(",null,",",null,")");r.push({i:o-4,x:ta(t[0],n[0])},{i:o-2,x:ta(t[1],n[1])})}else(n[0]||n[1])&&e.push("translate("+n+")")}(t.translate,n.translate,e,r),function(t,n,e,r){t!==n?(t-n>180?n+=360:n-t>180&&(t+=360),r.push({i:e.push(ka(e)+"rotate(",null,")")-2,x:ta(t,n)})):n&&e.push(ka(e)+"rotate("+n+")")}(t.rotate,n.rotate,e,r),function(t,n,e,r){t!==n?r.push({i:e.push(ka(e)+"skewX(",null,")")-2,x:ta(t,n)}):n&&e.push(ka(e)+"skewX("+n+")")}(t.skew,n.skew,e,r),function(t,n,e,r){if(t[0]!==n[0]||t[1]!==n[1]){var o=e.push(ka(e)+"scale(",null,",",null,")");r.push({i:o-4,x:ta(t[0],n[0])},{i:o-2,x:ta(t[1],n[1])})}else 1===n[0]&&1===n[1]||e.push(ka(e)+"scale("+n+")")}(t.scale,n.scale,e,r),t=n=null,function(t){for(var n,o=-1,a=r.length;++o0?e=n:(t.c=null,t.t=NaN,t=null,s.end({type:"end",alpha:e=0})):n>0&&(s.start({type:"start",alpha:e=n}),t=En(u.tick)),u):e},u.start=function(){var t,n,e,a=v.length,s=y.length,c=l[0],d=l[1];for(t=0;t=0;)e.push(o[r])}function qa(t,n){for(var e=[t],r=[];null!=(t=e.pop());)if(r.push(t),(a=t.children)&&(o=a.length))for(var o,a,i=-1;++i=0;)i.push(c=l[s]),c.parent=a,c.depth=a.depth+1;e&&(a.value=0),a.children=l}else e&&(a.value=+e.call(r,a,a.depth)||0),delete a.children;return qa(o,(function(n){var r,o;t&&(r=n.children)&&r.sort(t),e&&(o=n.parent)&&(o.value+=n.value)})),u}return r.sort=function(n){return arguments.length?(t=n,r):t},r.children=function(t){return arguments.length?(n=t,r):n},r.value=function(t){return arguments.length?(e=t,r):e},r.revalue=function(t){return e&&(Fa(t,(function(t){t.children&&(t.value=0)})),qa(t,(function(t){var n;t.children||(t.value=+e.call(r,t,t.depth)||0),(n=t.parent)&&(n.value+=t.value)}))),t},r},a.layout.partition=function(){var t=a.layout.hierarchy(),n=[1,1];function e(e,r){var o=t.call(this,e,r);return function t(n,e,r,o){var a=n.children;if(n.x=e,n.y=n.depth*o,n.dx=r,n.dy=o,a&&(i=a.length)){var i,u,s,l=-1;for(r=n.value?r/n.value:0;++lu&&(u=r),i.push(r)}for(e=0;eo&&(r=e,o=n);return r}function Qa(t){return t.reduce(ti,0)}function ti(t,n){return t+n[1]}function ni(t,n){return ei(t,Math.ceil(Math.log(n.length)/Math.LN2+1))}function ei(t,n){for(var e=-1,r=+t[0],o=(t[1]-r)/n,a=[];++e<=n;)a[e]=o*e+r;return a}function ri(t){return[a.min(t),a.max(t)]}function oi(t,n){return t.value-n.value}function ai(t,n){var e=t._pack_next;t._pack_next=n,n._pack_prev=t,n._pack_next=e,e._pack_prev=n}function ii(t,n){t._pack_next=n,n._pack_prev=t}function ui(t,n){var e=n.x-t.x,r=n.y-t.y,o=t.r+n.r;return.999*o*o>e*e+r*r}function si(t){if((n=t.children)&&(s=n.length)){var n,e,r,o,a,i,u,s,l=1/0,c=-1/0,f=1/0,h=-1/0;if(n.forEach(li),(e=n[0]).x=-e.r,e.y=0,b(e),s>1&&((r=n[1]).x=r.r,r.y=0,b(r),s>2))for(fi(e,r,o=n[2]),b(o),ai(e,o),e._pack_prev=o,ai(o,r),r=e._pack_next,a=3;a0)for(i=-1;++i=f[0]&&s<=f[1]&&((u=l[a.bisect(h,s,1,d)-1]).y+=m,u.push(o[i]));return l}return o.value=function(t){return arguments.length?(n=t,o):n},o.range=function(t){return arguments.length?(e=bn(t),o):e},o.bins=function(t){return arguments.length?(r="number"==typeof t?function(n){return ei(n,t)}:bn(t),o):r},o.frequency=function(n){return arguments.length?(t=!!n,o):t},o},a.layout.pack=function(){var t,n=a.layout.hierarchy().sort(oi),e=0,r=[1,1];function o(o,a){var i=n.call(this,o,a),u=i[0],s=r[0],l=r[1],c=null==t?Math.sqrt:"function"==typeof t?t:function(){return t};if(u.x=u.y=0,qa(u,(function(t){t.r=+c(t.value)})),qa(u,si),e){var f=e*(t?1:Math.max(2*u.r/s,2*u.r/l))/2;qa(u,(function(t){t.r+=f})),qa(u,si),qa(u,(function(t){t.r-=f}))}return function t(n,e,r,o){var a=n.children;if(n.x=e+=o*n.x,n.y=r+=o*n.y,n.r*=o,a)for(var i=-1,u=a.length;++ip.x&&(p=t),t.depth>d.depth&&(d=t)}));var m=n(h,p)/2-h.x,g=e[0]/(p.x+n(p,h)/2+m),v=e[1]/(d.depth||1);Fa(c,(function(t){t.x=(t.x+m)*g,t.y=t.depth*v}))}return l}function i(t){var e=t.children,r=t.parent.children,o=t.i?r[t.i-1]:null;if(e.length){!function(t){for(var n,e=0,r=0,o=t.children,a=o.length;--a>=0;)(n=o[a]).z+=e,n.m+=e,e+=n.s+(r+=n.c)}(t);var a=(e[0].z+e[e.length-1].z)/2;o?(t.z=o.z+n(t._,o._),t.m=t.z-a):t.z=a}else o&&(t.z=o.z+n(t._,o._));t.parent.A=function(t,e,r){if(e){for(var o,a=t,i=t,u=e,s=a.parent.children[0],l=a.m,c=i.m,f=u.m,h=s.m;u=di(u),a=pi(a),u&&a;)s=pi(s),(i=di(i)).a=t,(o=u.z+f-a.z-l+n(u._,a._))>0&&(mi(gi(u,t,r),t,o),l+=o,c+=o),f+=u.m,l+=a.m,h+=s.m,c+=i.m;u&&!di(i)&&(i.t=u,i.m+=f-c),a&&!pi(s)&&(s.t=a,s.m+=l-h,r=t)}return r}(t,o,t.parent.A||r[0])}function u(t){t._.x=t.z+t.parent.m,t.m+=t.parent.m}function s(t){t.x*=e[0],t.y=t.depth*e[1]}return o.separation=function(t){return arguments.length?(n=t,o):n},o.size=function(t){return arguments.length?(r=null==(e=t)?s:null,o):r?null:e},o.nodeSize=function(t){return arguments.length?(r=null==(e=t)?null:s,o):r?e:null},za(o,t)},a.layout.cluster=function(){var t=a.layout.hierarchy().sort(null).value(null),n=hi,e=[1,1],r=!1;function o(o,i){var u,s=t.call(this,o,i),l=s[0],c=0;qa(l,(function(t){var e=t.children;e&&e.length?(t.x=function(t){return t.reduce((function(t,n){return t+n.x}),0)/t.length}(e),t.y=function(t){return 1+a.max(t,(function(t){return t.y}))}(e)):(t.x=u?c+=n(t,u):0,t.y=0,u=t)}));var f=function t(n){var e=n.children;return e&&e.length?t(e[0]):n}(l),h=function t(n){var e,r=n.children;return r&&(e=r.length)?t(r[e-1]):n}(l),p=f.x-n(f,h)/2,d=h.x+n(h,f)/2;return qa(l,r?function(t){t.x=(t.x-l.x)*e[0],t.y=(l.y-t.y)*e[1]}:function(t){t.x=(t.x-p)/(d-p)*e[0],t.y=(1-(l.y?t.y/l.y:1))*e[1]}),s}return o.separation=function(t){return arguments.length?(n=t,o):n},o.size=function(t){return arguments.length?(r=null==(e=t),o):r?null:e},o.nodeSize=function(t){return arguments.length?(r=null!=(e=t),o):r?e:null},za(o,t)},a.layout.treemap=function(){var t,n=a.layout.hierarchy(),e=Math.round,r=[1,1],o=null,i=vi,u=!1,s="squarify",l=.5*(1+Math.sqrt(5));function c(t,n){for(var e,r,o=-1,a=t.length;++o0;)u.push(e=l[o-1]),u.area+=e.area,"squarify"!==s||(r=p(u,m))<=h?(l.pop(),h=r):(u.area-=u.pop().area,d(u,m,a,!1),m=Math.min(a.dx,a.dy),u.length=u.area=0,h=1/0);u.length&&(d(u,m,a,!0),u.length=u.area=0),n.forEach(f)}}function h(t){var n=t.children;if(n&&n.length){var e,r=i(t),o=n.slice(),a=[];for(c(o,r.dx*r.dy/t.value),a.area=0;e=o.pop();)a.push(e),a.area+=e.area,null!=e.z&&(d(a,e.z?r.dx:r.dy,r,!o.length),a.length=a.area=0);n.forEach(h)}}function p(t,n){for(var e,r=t.area,o=0,a=1/0,i=-1,u=t.length;++io&&(o=e));return n*=n,(r*=r)?Math.max(n*o*l/r,r/(n*a*l)):1/0}function d(t,n,r,o){var a,i=-1,u=t.length,s=r.x,l=r.y,c=n?e(t.area/n):0;if(n==r.dx){for((o||c>r.dy)&&(c=r.dy);++ir.dx)&&(c=r.dx);++i1);return t+n*e*Math.sqrt(-2*Math.log(o)/o)}},logNormal:function(){var t=a.random.normal.apply(a,arguments);return function(){return Math.exp(t())}},bates:function(t){var n=a.random.irwinHall(t);return function(){return n()/t}},irwinHall:function(t){return function(){for(var n=0,e=0;e2?Si:Mi,u=o?Ea:Aa;return a=t(n,e,u,r),i=t(e,n,u,oa),s}function s(t){return a(t)}return s.invert=function(t){return i(t)},s.domain=function(t){return arguments.length?(n=t.map(Number),u()):n},s.range=function(t){return arguments.length?(e=t,u()):e},s.rangeRound=function(t){return s.range(t).interpolate(ba)},s.clamp=function(t){return arguments.length?(o=t,u()):o},s.interpolate=function(t){return arguments.length?(r=t,u()):r},s.ticks=function(t){return Ri(n,t)},s.tickFormat=function(t,e){return Ni(n,t,e)},s.nice=function(t){return Ei(n,t),u()},s.copy=function(){return t(n,e,r,o)},u()}([0,1],[0,1],oa,!1)};var Pi={s:1,g:1,p:1,r:1,e:1};function Ci(t){return-Math.floor(Math.log(t)/Math.LN10+.01)}a.scale.log=function(){return function t(n,e,r,o){function i(t){return(r?Math.log(t<0?0:t):-Math.log(t>0?0:-t))/Math.log(e)}function u(t){return r?Math.pow(e,t):-Math.pow(e,-t)}function s(t){return n(i(t))}return s.invert=function(t){return u(n.invert(t))},s.domain=function(t){return arguments.length?(r=t[0]>=0,n.domain((o=t.map(Number)).map(i)),s):o},s.base=function(t){return arguments.length?(e=+t,n.domain(o.map(i)),s):e},s.nice=function(){var t=wi(o.map(i),r?Math:Li);return n.domain(t),o=t.map(u),s},s.ticks=function(){var t=bi(o),n=[],a=t[0],s=t[1],l=Math.floor(i(a)),c=Math.ceil(i(s)),f=e%1?2:e;if(isFinite(c-l)){if(r){for(;l0;h--)n.push(u(l)*h);for(l=0;n[l]s;c--);n=n.slice(l,c)}return n},s.tickFormat=function(t,n){if(!arguments.length)return Oi;arguments.length<2?n=Oi:"function"!=typeof n&&(n=a.format(n));var r=Math.max(1,e*t/s.ticks().length);return function(t){var o=t/u(Math.round(i(t)));return o*e0?r[t-1]:n[0],tf?0:1;if(l=Ct)return s(l,p)+(u?s(u,1-p):"")+"Z";var d,m,g,v,y,b,x,M,w,_,k,S,A=0,E=0,T=[];if((v=(+i.apply(this,arguments)||0)/2)&&(g=r===Bi?Math.sqrt(u*u+l*l):+r.apply(this,arguments),p||(E*=-1),l&&(E=qt(g/l*Math.sin(v))),u&&(A=qt(g/u*Math.sin(v)))),l){y=l*Math.cos(c+E),b=l*Math.sin(c+E),x=l*Math.cos(f-E),M=l*Math.sin(f-E);var R=Math.abs(f-c-2*E)<=Nt?0:1;if(E&&Gi(y,b,x,M)===p^R){var N=(c+f)/2;y=l*Math.cos(N),b=l*Math.sin(N),x=M=null}}else y=b=0;if(u){w=u*Math.cos(f-A),_=u*Math.sin(f-A),k=u*Math.cos(c+A),S=u*Math.sin(c+A);var P=Math.abs(c-f+2*A)<=Nt?0:1;if(A&&Gi(w,_,k,S)===1-p^P){var C=(c+f)/2;w=u*Math.cos(C),_=u*Math.sin(C),k=S=null}}else w=_=0;if(h>Tt&&(d=Math.min(Math.abs(l-u)/2,+e.apply(this,arguments)))>.001){m=u0?0:1}function Wi(t,n,e,r,o){var a=t[0]-n[0],i=t[1]-n[1],u=(o?r:-r)/Math.sqrt(a*a+i*i),s=u*i,l=-u*a,c=t[0]+s,f=t[1]+l,h=n[0]+s,p=n[1]+l,d=(c+h)/2,m=(f+p)/2,g=h-c,v=p-f,y=g*g+v*v,b=e-r,x=c*p-h*f,M=(v<0?-1:1)*Math.sqrt(Math.max(0,b*b*y-x*x)),w=(x*v-g*M)/y,_=(-x*g-v*M)/y,k=(x*v+g*M)/y,S=(-x*g+v*M)/y,A=w-d,E=_-m,T=k-d,R=S-m;return A*A+E*E>T*T+R*R&&(w=k,_=S),[[w-s,_-l],[w*e/b,_*e/b]]}function Zi(t){var n=io,e=uo,r=$e,o=$i,a=o.key,i=.7;function u(a){var u,s=[],l=[],c=-1,f=a.length,h=bn(n),p=bn(e);function d(){s.push("M",o(t(l),i))}for(;++c1&&o.push("H",r[0]),o.join("")},"step-before":Qi,"step-after":tu,basis:ru,"basis-open":function(t){if(t.length<4)return $i(t);for(var n,e=[],r=-1,o=t.length,a=[0],i=[0];++r<3;)n=t[r],a.push(n[0]),i.push(n[1]);for(e.push(ou(uu,a)+","+ou(uu,i)),--r;++r9&&(o=3*n/Math.sqrt(o),i[u]=o*e,i[u+1]=o*r));for(u=-1;++u<=s;)o=(t[Math.min(s,u+1)][0]-t[Math.max(0,u-1)][0])/(6*(1+i[u]*i[u])),a.push([o||0,i[u]*o||0]);return a}(t))}});function $i(t){return t.length>1?t.join("L"):t+"Z"}function Ki(t){return t.join("L")+"Z"}function Qi(t){for(var n=0,e=t.length,r=t[0],o=[r[0],",",r[1]];++n1){u=n[1],a=t[s],s++,r+="C"+(o[0]+i[0])+","+(o[1]+i[1])+","+(a[0]-u[0])+","+(a[1]-u[1])+","+a[0]+","+a[1];for(var l=2;lNt)+",1 "+n}function s(t,n,e,r){return"Q 0,0 "+r}return a.radius=function(t){return arguments.length?(e=bn(t),a):e},a.source=function(n){return arguments.length?(t=bn(n),a):t},a.target=function(t){return arguments.length?(n=bn(t),a):n},a.startAngle=function(t){return arguments.length?(r=bn(t),a):r},a.endAngle=function(t){return arguments.length?(o=bn(t),a):o},a},a.svg.diagonal=function(){var t=Vr,n=Gr,e=pu;function r(r,o){var a=t.call(this,r,o),i=n.call(this,r,o),u=(a.y+i.y)/2,s=[a,{x:a.x,y:u},{x:i.x,y:u},i];return"M"+(s=s.map(e))[0]+"C"+s[1]+" "+s[2]+" "+s[3]}return r.source=function(n){return arguments.length?(t=bn(n),r):t},r.target=function(t){return arguments.length?(n=bn(t),r):n},r.projection=function(t){return arguments.length?(e=t,r):e},r},a.svg.diagonal.radial=function(){var t=a.svg.diagonal(),n=pu,e=t.projection;return t.projection=function(t){return arguments.length?e(du(n=t)):n},t},a.svg.symbol=function(){var t=gu,n=mu;function e(e,r){return(yu.get(t.call(this,e,r))||vu)(n.call(this,e,r))}return e.type=function(n){return arguments.length?(t=bn(n),e):t},e.size=function(t){return arguments.length?(n=bn(t),e):n},e};var yu=a.map({circle:vu,cross:function(t){var n=Math.sqrt(t/5)/2;return"M"+-3*n+","+-n+"H"+-n+"V"+-3*n+"H"+n+"V"+-n+"H"+3*n+"V"+n+"H"+n+"V"+3*n+"H"+-n+"V"+n+"H"+-3*n+"Z"},diamond:function(t){var n=Math.sqrt(t/(2*xu)),e=n*xu;return"M0,"+-n+"L"+e+",0 0,"+n+" "+-e+",0Z"},square:function(t){var n=Math.sqrt(t)/2;return"M"+-n+","+-n+"L"+n+","+-n+" "+n+","+n+" "+-n+","+n+"Z"},"triangle-down":function(t){var n=Math.sqrt(t/bu),e=n*bu/2;return"M0,"+e+"L"+n+","+-e+" "+-n+","+-e+"Z"},"triangle-up":function(t){var n=Math.sqrt(t/bu),e=n*bu/2;return"M0,"+-e+"L"+n+","+e+" "+-n+","+e+"Z"}});a.svg.symbolTypes=yu.keys();var bu=Math.sqrt(3),xu=Math.tan(30*Lt);J.transition=function(t){for(var n,e,r=ku||++Eu,o=Nu(t),a=[],i=Su||{time:Date.now(),ease:da,delay:0,duration:250},u=-1,s=this.length;++u0;)l[--h].call(t,i);if(a>=1)return f.event&&f.event.end.call(t,t.__data__,n),--c.count?delete c[r]:delete t[e],1}f||(a=o.time,i=En((function(t){var n=f.delay;if(i.t=n+a,n<=t)return h(t-n);i.c=h}),0,a),f=c[r]={tween:new S,time:a,timer:i,delay:o.delay,duration:o.duration,ease:o.ease,index:n},o=null,++c.count)}Au.call=J.call,Au.empty=J.empty,Au.node=J.node,Au.size=J.size,a.transition=function(t,n){return t&&t.transition?ku?t.transition(n):t:a.selection().transition(t)},a.transition.prototype=Au,Au.select=function(t){var n,e,r,o=this.id,a=this.namespace,i=[];t=$(t);for(var u=-1,s=this.length;++urect,.s>rect").attr("width",i[1]-i[0])}function m(t){t.select(".extent").attr("y",u[0]),t.selectAll(".extent,.e>rect,.w>rect").attr("height",u[1]-u[0])}function g(){var f,g,v=this,y=a.select(a.event.target),b=e.of(v,arguments),x=a.select(v),M=y.datum(),w=!/^(n|s)$/.test(M)&&r,_=!/^(e|w)$/.test(M)&&o,k=y.classed("extent"),S=kt(v),A=a.mouse(v),E=a.select(c(v)).on("keydown.brush",N).on("keyup.brush",P);if(a.event.changedTouches?E.on("touchmove.brush",C).on("touchend.brush",L):E.on("mousemove.brush",C).on("mouseup.brush",L),x.interrupt().selectAll("*").interrupt(),k)A[0]=i[0]-A[0],A[1]=u[0]-A[1];else if(M){var T=+/w$/.test(M),R=+/^n/.test(M);g=[i[1-T]-A[0],u[1-R]-A[1]],A[0]=i[T],A[1]=u[R]}else a.event.altKey&&(f=A.slice());function N(){32==a.event.keyCode&&(k||(f=null,A[0]-=i[1],A[1]-=u[1],k=2),B())}function P(){32==a.event.keyCode&&2==k&&(A[0]+=i[1],A[1]+=u[1],k=0,B())}function C(){var t=a.mouse(v),n=!1;g&&(t[0]+=g[0],t[1]+=g[1]),k||(a.event.altKey?(f||(f=[(i[0]+i[1])/2,(u[0]+u[1])/2]),A[0]=i[+(t[0]1?{floor:function(n){for(;u(n=t.floor(n));)n=Xu(n-1);return n},ceil:function(n){for(;u(n=t.ceil(n));)n=Xu(+n+1);return n}}:t))},r.ticks=function(t,n){var e=bi(r.domain()),a=null==t?o(e,10):"number"==typeof t?o(e,t):!t.range&&[{range:t},n];return a&&(t=a[0],n=a[1]),t.range(e[0],Xu(+e[1]+1),n<1?1:n)},r.tickFormat=function(){return e},r.copy=function(){return Iu(t.copy(),n,e)},Ai(r,t)}function Xu(t){return new Date(t)}Fu.iso=Date.prototype.toISOString&&+new Date("2000-01-01T00:00:00.000Z")?Bu:ju,Bu.parse=function(t){var n=new Date(t);return isNaN(n)?null:n},Bu.toString=ju.toString,zn.second=Bn((function(t){return new Fn(1e3*Math.floor(t/1e3))}),(function(t,n){t.setTime(t.getTime()+1e3*Math.floor(n))}),(function(t){return t.getSeconds()})),zn.seconds=zn.second.range,zn.seconds.utc=zn.second.utc.range,zn.minute=Bn((function(t){return new Fn(6e4*Math.floor(t/6e4))}),(function(t,n){t.setTime(t.getTime()+6e4*Math.floor(n))}),(function(t){return t.getMinutes()})),zn.minutes=zn.minute.range,zn.minutes.utc=zn.minute.utc.range,zn.hour=Bn((function(t){var n=t.getTimezoneOffset()/60;return new Fn(36e5*(Math.floor(t/36e5-n)+n))}),(function(t,n){t.setTime(t.getTime()+36e5*Math.floor(n))}),(function(t){return t.getHours()})),zn.hours=zn.hour.range,zn.hours.utc=zn.hour.utc.range,zn.month=Bn((function(t){return(t=zn.day(t)).setDate(1),t}),(function(t,n){t.setMonth(t.getMonth()+n)}),(function(t){return t.getMonth()})),zn.months=zn.month.range,zn.months.utc=zn.month.utc.range;var Yu=[1e3,5e3,15e3,3e4,6e4,3e5,9e5,18e5,36e5,108e5,216e5,432e5,864e5,1728e5,6048e5,2592e6,7776e6,31536e6],Hu=[[zn.second,1],[zn.second,5],[zn.second,15],[zn.second,30],[zn.minute,1],[zn.minute,5],[zn.minute,15],[zn.minute,30],[zn.hour,1],[zn.hour,3],[zn.hour,6],[zn.hour,12],[zn.day,1],[zn.day,2],[zn.week,1],[zn.month,1],[zn.month,3],[zn.year,1]],Vu=Fu.multi([[".%L",function(t){return t.getMilliseconds()}],[":%S",function(t){return t.getSeconds()}],["%I:%M",function(t){return t.getMinutes()}],["%I %p",function(t){return t.getHours()}],["%a %d",function(t){return t.getDay()&&1!=t.getDate()}],["%b %d",function(t){return 1!=t.getDate()}],["%B",function(t){return t.getMonth()}],["%Y",$e]]),Gu={range:function(t,n,e){return a.range(Math.ceil(t/e)*e,+n,e).map(Xu)},floor:L,ceil:L};Hu.year=zn.year,zn.scale=function(){return Iu(a.scale.linear(),Hu,Vu)};var Wu=Hu.map((function(t){return[t[0].utc,t[1]]})),Zu=qu.multi([[".%L",function(t){return t.getUTCMilliseconds()}],[":%S",function(t){return t.getUTCSeconds()}],["%I:%M",function(t){return t.getUTCMinutes()}],["%I %p",function(t){return t.getUTCHours()}],["%a %d",function(t){return t.getUTCDay()&&1!=t.getUTCDate()}],["%b %d",function(t){return 1!=t.getUTCDate()}],["%B",function(t){return t.getUTCMonth()}],["%Y",$e]]);function Ju(t){return JSON.parse(t.responseText)}function $u(t){var n=s.createRange();return n.selectNode(s.body),n.createContextualFragment(t.responseText)}Wu.year=zn.year.utc,zn.scale.utc=function(){return Iu(a.scale.linear(),Wu,Zu)},a.text=xn((function(t){return t.responseText})),a.json=function(t,n){return Mn(t,"application/json",Ju,n)},a.html=function(t,n){return Mn(t,"text/html",$u,n)},a.xml=xn((function(t){return t.responseXML})),this.d3=a,void 0===(o="function"==typeof(r=a)?r.call(n,e,n,t):r)||(t.exports=o)}()}])},t.exports=o()},function(t,n,e){"use strict";var r=e(24);function o(){}t.exports=function(){function t(t,n,e,o,a,i){if(i!==r){var u=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw u.name="Invariant Violation",u}}function n(){return t}t.isRequired=t;var e={array:t,bool:t,func:t,number:t,object:t,string:t,symbol:t,any:t,arrayOf:n,element:t,instanceOf:n,node:t,objectOf:n,oneOf:n,oneOfType:n,shape:n,exact:n};return e.checkPropTypes=o,e.PropTypes=e,e}},function(t,n,e){"use strict";t.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},function(t,n,e){"use strict";var r=e(7),o=e(26),a=e(27),i=e(6),u=e(8),s=e(21),l=e(28);function c(t,n){return n=n.split("// __split__"),new o.Program(t,n[0],n[1])}t.exports=function(t,n,e){var f,h,p,d,m,g,v,y,b,x,M,w,_,k,S,A,E,T,R,N,P,C,O,L,U,D,z,F=this,q=null,j=null,B=null,I=null,X=null,Y=null,H=0,V=!1,G=!1;function W(t){p.viewport(0,0,e,e);var o=u.clone(t);o.zoom=1/f,o.translation.x=0,o.translation.y=0;for(var a=r.mat4.create(),i=0;i<3;i++){var s=r.vec3.random(r.vec3.create(),1);r.mat4.rotate(a,a,10*Math.random(),s)}o.rotation=r.mat4.multiply(r.mat4.create(),a,o.rotation),E.bind(),p.clear(p.COLOR_BUFFER_BIT|p.DEPTH_BUFFER_BIT);var l=u.getRect(o),c=r.mat4.create();r.mat4.ortho(c,l.left,l.right,l.bottom,l.top,0,f);var h=r.mat4.create();r.mat4.lookAt(h,[0,0,0],[0,0,-1],[0,1,0]);var d=r.mat4.create();r.mat4.translate(d,d,[0,0,-f/2]),r.mat4.multiply(d,d,o.rotation),P.setUniform("uProjection","Matrix4fv",!1,c),P.setUniform("uView","Matrix4fv",!1,h),P.setUniform("uModel","Matrix4fv",!1,d),P.setUniform("uBottomLeft","2fv",[l.left,l.bottom]),P.setUniform("uTopRight","2fv",[l.right,l.top]),P.setUniform("uAtomScale","1f",2.5*o.atomScale),P.setUniform("uRelativeAtomScale","1f",t.relativeAtomScale),P.setUniform("uRes","1f",e),P.setUniform("uDepth","1f",f),P.setUniform("uMode","1i",0),P.setUniform("uAtomShade","1f",t.atomShade),q.render(),t.bonds&&null!=j&&(C.setUniform("uProjection","Matrix4fv",!1,c),C.setUniform("uView","Matrix4fv",!1,h),C.setUniform("uModel","Matrix4fv",!1,d),C.setUniform("uRotation","Matrix4fv",!1,o.rotation),C.setUniform("uDepth","1f",f),C.setUniform("uBottomLeft","2fv",[l.left,l.bottom]),C.setUniform("uTopRight","2fv",[l.right,l.top]),C.setUniform("uRes","1f",e),C.setUniform("uBondRadius","1f",2.5*u.getBondRadius(t)),C.setUniform("uBondShade","1f",t.bondShade),C.setUniform("uAtomScale","1f",2.5*t.atomScale),C.setUniform("uRelativeAtomScale","1f",t.relativeAtomScale),C.setUniform("uMode","1i",0),j.render()),p.viewport(0,0,n,n);var y=u.getRect(t),x=u.getRect(o),M=r.mat4.invert(r.mat4.create(),a);T.bind(),p.clear(p.COLOR_BUFFER_BIT|p.DEPTH_BUFFER_BIT),O.setUniform("uSceneDepth","1i",g.index),O.setUniform("uSceneNormal","1i",m.index),O.setUniform("uRandRotDepth","1i",v.index),O.setUniform("uAccumulator","1i",b.index),O.setUniform("uSceneBottomLeft","2fv",[y.left,y.bottom]),O.setUniform("uSceneTopRight","2fv",[y.right,y.top]),O.setUniform("uRotBottomLeft","2fv",[x.left,x.bottom]),O.setUniform("uRotTopRight","2fv",[x.right,x.top]),O.setUniform("uRes","1f",n),O.setUniform("uDepth","1f",f),O.setUniform("uRot","Matrix4fv",!1,a),O.setUniform("uInvRot","Matrix4fv",!1,M),O.setUniform("uSampleCount","1i",H),B.render(),b.activate(),b.bind(),p.copyTexImage2D(p.TEXTURE_2D,0,p.RGBA,0,0,n,n,0)}F.getAOProgress=function(){return H/1024},F.initialize=function(){t.width=t.height=n,(p=t.getContext("webgl")).enable(p.DEPTH_TEST),p.enable(p.CULL_FACE),p.clearColor(0,0,0,0),p.clearDepth(1),p.viewport(0,0,n,n),window.gl=p,o.getExtensions(p,["EXT_frag_depth","WEBGL_depth_texture"]),F.createTextures(),P=c(p,l.shaders.atom),C=c(p,l.shaders.bond),z=c(p,l.shaders["textured-quad"]),O=c(p,l.shaders.accumulator),L=c(p,l.shaders.ao),U=c(p,l.shaders.fxaa),D=c(p,l.shaders.dof);var e=[-1,-1,0,1,-1,0,1,1,0,-1,-1,0,1,1,0,-1,1,0],r=o.buildAttribs(p,{aPosition:3});r.aPosition.buffer.set(new Float32Array(e));var a=e.length/9;new o.Renderable(p,z,r,a),B=new o.Renderable(p,O,r,a),I=new o.Renderable(p,L,r,a),Y=new o.Renderable(p,U,r,a),X=new o.Renderable(p,D,r,a),0},F.createTextures=function(){y=new o.Texture(p,0,null,e,e),v=new o.Texture(p,1,null,e,e,{internalFormat:p.DEPTH_COMPONENT,format:p.DEPTH_COMPONENT,type:p.UNSIGNED_SHORT}),E=new o.Framebuffer(p,[y],v),d=new o.Texture(p,2,null,n,n),m=new o.Texture(p,3,null,n,n),g=new o.Texture(p,4,null,n,n,{internalFormat:p.DEPTH_COMPONENT,format:p.DEPTH_COMPONENT,type:p.UNSIGNED_SHORT}),S=new o.Framebuffer(p,[d],g),A=new o.Framebuffer(p,[m],g),b=new o.Texture(p,5,null,n,n),x=new o.Texture(p,6,null,n,n),T=new o.Framebuffer(p,[x]),k=new o.Texture(p,7,null,n,n),N=new o.Framebuffer(p,[k]),M=new o.Texture(p,8,null,n,n),w=new o.Texture(p,9,null,n,n),R=new o.Framebuffer(p,[w]),_=new o.Texture(p,10,null,n,n),new o.Framebuffer(p,[_])},F.setResolution=function(r,o){e=o,n=r,t.width=t.height=n,p.viewport(0,0,n,n),F.createTextures()},F.setSystem=function(t,n){function e(t){for(var n=[],e=0;e<36;e++)n.push.apply(n,t);return n}h=t;for(var r=o.buildAttribs(p,{aImposter:3,aPosition:3,aRadius:1,aColor:3}),u=[],s=[],l=[],c=[],f=0;f0)){r=o.buildAttribs(p,{aImposter:3,aPosA:3,aPosB:3,aRadA:1,aRadB:1,aColA:3,aColB:3}),u=[];var v=[],y=[],b=[],x=[],M=[],w=[];for(f=0;fn.bondThreshold)break;u.push.apply(u,a.position),v.push.apply(v,e([_.posA.x,_.posA.y,_.posA.z])),y.push.apply(y,e([_.posB.x,_.posB.y,_.posB.z])),b.push.apply(b,e([_.radA])),x.push.apply(x,e([_.radB])),M.push.apply(M,e([_.colA.r,_.colA.g,_.colA.b])),w.push.apply(w,e([_.colB.r,_.colB.g,_.colB.b]))}r.aImposter.buffer.set(new Float32Array(u)),r.aPosA.buffer.set(new Float32Array(v)),r.aPosB.buffer.set(new Float32Array(y)),r.aRadA.buffer.set(new Float32Array(b)),r.aRadB.buffer.set(new Float32Array(x)),r.aColA.buffer.set(new Float32Array(M)),r.aColB.buffer.set(new Float32Array(w));g=u.length/9;j=new o.Renderable(p,C,r,g)}},F.reset=function(){H=0,V=!1,G=!1,b.reset(),x.reset()},F.render=function(t){if(void 0!==h&&null!=q){if(f=2*s.getRadius(h),V)if(G)for(var e=0;e1024);e++)W(t),H++;else!function(t){G=!0,p.viewport(0,0,n,n),A.bind(),p.clear(p.COLOR_BUFFER_BIT|p.DEPTH_BUFFER_BIT);var e=u.getRect(t),o=r.mat4.create();r.mat4.ortho(o,e.left,e.right,e.bottom,e.top,0,f);var a=r.mat4.create();r.mat4.lookAt(a,[0,0,0],[0,0,-1],[0,1,0]);var i=r.mat4.create();r.mat4.translate(i,i,[0,0,-f/2]),r.mat4.multiply(i,i,t.rotation),P.setUniform("uProjection","Matrix4fv",!1,o),P.setUniform("uView","Matrix4fv",!1,a),P.setUniform("uModel","Matrix4fv",!1,i),P.setUniform("uBottomLeft","2fv",[e.left,e.bottom]),P.setUniform("uTopRight","2fv",[e.right,e.top]),P.setUniform("uAtomScale","1f",2.5*t.atomScale),P.setUniform("uRelativeAtomScale","1f",t.relativeAtomScale),P.setUniform("uRes","1f",n),P.setUniform("uDepth","1f",f),P.setUniform("uMode","1i",1),P.setUniform("uAtomShade","1f",t.atomShade),q.render(),t.bonds&&null!=j&&(A.bind(),C.setUniform("uProjection","Matrix4fv",!1,o),C.setUniform("uView","Matrix4fv",!1,a),C.setUniform("uModel","Matrix4fv",!1,i),C.setUniform("uRotation","Matrix4fv",!1,t.rotation),C.setUniform("uDepth","1f",f),C.setUniform("uBottomLeft","2fv",[e.left,e.bottom]),C.setUniform("uTopRight","2fv",[e.right,e.top]),C.setUniform("uRes","1f",n),C.setUniform("uBondRadius","1f",2.5*u.getBondRadius(t)),C.setUniform("uBondShade","1f",t.bondShade),C.setUniform("uAtomScale","1f",2.5*t.atomScale),C.setUniform("uRelativeAtomScale","1f",t.relativeAtomScale),C.setUniform("uMode","1i",1),j.render())}(t);else!function(t){V=!0,p.viewport(0,0,n,n),S.bind(),p.clear(p.COLOR_BUFFER_BIT|p.DEPTH_BUFFER_BIT);var e=u.getRect(t),o=r.mat4.create();r.mat4.ortho(o,e.left,e.right,e.bottom,e.top,0,f);var a=r.mat4.create();r.mat4.lookAt(a,[0,0,0],[0,0,-1],[0,1,0]);var i=r.mat4.create();r.mat4.translate(i,i,[0,0,-f/2]),r.mat4.multiply(i,i,t.rotation),P.setUniform("uProjection","Matrix4fv",!1,o),P.setUniform("uView","Matrix4fv",!1,a),P.setUniform("uModel","Matrix4fv",!1,i),P.setUniform("uBottomLeft","2fv",[e.left,e.bottom]),P.setUniform("uTopRight","2fv",[e.right,e.top]),P.setUniform("uAtomScale","1f",2.5*t.atomScale),P.setUniform("uRelativeAtomScale","1f",t.relativeAtomScale),P.setUniform("uRes","1f",n),P.setUniform("uDepth","1f",f),P.setUniform("uMode","1i",0),P.setUniform("uAtomShade","1f",t.atomShade),q.render(),t.bonds&&null!=j&&(S.bind(),C.setUniform("uProjection","Matrix4fv",!1,o),C.setUniform("uView","Matrix4fv",!1,a),C.setUniform("uModel","Matrix4fv",!1,i),C.setUniform("uRotation","Matrix4fv",!1,t.rotation),C.setUniform("uDepth","1f",f),C.setUniform("uBottomLeft","2fv",[e.left,e.bottom]),C.setUniform("uTopRight","2fv",[e.right,e.top]),C.setUniform("uRes","1f",n),C.setUniform("uBondRadius","1f",2.5*u.getBondRadius(t)),C.setUniform("uBondShade","1f",t.bondShade),C.setUniform("uAtomScale","1f",2.5*t.atomScale),C.setUniform("uRelativeAtomScale","1f",t.relativeAtomScale),C.setUniform("uMode","1i",0),j.render())}(t);!function(t){p.viewport(0,0,n,n),t.fxaa>0||t.dofStrength>0?N.bind():p.bindFramebuffer(p.FRAMEBUFFER,null);if(p.clear(p.COLOR_BUFFER_BIT|p.DEPTH_BUFFER_BIT),L.setUniform("uSceneColor","1i",d.index),L.setUniform("uSceneDepth","1i",g.index),L.setUniform("uAccumulatorOut","1i",x.index),L.setUniform("uRes","1f",n),L.setUniform("uAO","1f",2*t.ao),L.setUniform("uBrightness","1f",2*t.brightness),L.setUniform("uOutlineStrength","1f",t.outline),I.render(),t.fxaa>0){t.dofStrength>0?R.bind():p.bindFramebuffer(p.FRAMEBUFFER,null);for(var e=0;e0&&(p.bindFramebuffer(p.FRAMEBUFFER,null),p.clear(p.COLOR_BUFFER_BIT|p.DEPTH_BUFFER_BIT),t.fxaa>0?D.setUniform("uColor","1i",M.index):D.setUniform("uColor","1i",k.index),D.setUniform("uDepth","1i",g.index),D.setUniform("uDOFPosition","1f",t.dofPosition),D.setUniform("uDOFStrength","1f",t.dofStrength),D.setUniform("uRes","1f",n),X.render())}(t)}},F.initialize()}},function(t,n){function e(t){var n=this;n.initialize=function(){n.buffer=t.createBuffer()},n.bind=function(){t.bindBuffer(t.ARRAY_BUFFER,n.buffer)},n.set=function(e){n.bind(),t.bufferData(t.ARRAY_BUFFER,e,t.STATIC_DRAW)},n.initialize()}t.exports.buildAttribs=function(t,n){var r={};for(var o in n)r[o]={buffer:new e(t),size:n[o]};return r},t.exports.getExtensions=function(t,n){for(var e={},r=0;r1){for(var a=[],i=0;i 0.0) {\n float depth = texture2D(uSceneDepth, p).r;\n float r = 1.0/511.0;\n float d0 = abs(texture2D(uSceneDepth, p + vec2(-r, 0)).r - depth);\n float d1 = abs(texture2D(uSceneDepth, p + vec2( r, 0)).r - depth);\n float d2 = abs(texture2D(uSceneDepth, p + vec2( 0, -r)).r - depth);\n float d3 = abs(texture2D(uSceneDepth, p + vec2( 0, r)).r - depth);\n float d = max(d0, d1);\n d = max(d, d2);\n d = max(d, d3);\n sceneColor.rgb *= pow(1.0 - d, uOutlineStrength * 32.0);\n sceneColor.a = max(step(0.003, d), sceneColor.a);\n }\n vec4 dAccum = texture2D(uAccumulatorOut, p);\n float shade = max(0.0, 1.0 - (dAccum.r + dAccum.g + dAccum.b + dAccum.a) * 0.25 * uAO);\n shade = pow(shade, 2.0);\n gl_FragColor = vec4(uBrightness * sceneColor.rgb * shade, sceneColor.a);\n}\n",atom:"#version 100\nprecision highp float;\n\nattribute vec3 aImposter;\nattribute vec3 aPosition;\nattribute float aRadius;\nattribute vec3 aColor;\n\nuniform mat4 uView;\nuniform mat4 uProjection;\nuniform mat4 uModel;\nuniform float uAtomScale;\nuniform float uRelativeAtomScale;\nuniform float uAtomShade;\n\nvarying vec3 vColor;\nvarying vec3 vPosition;\nvarying float vRadius;\n\nvoid main() {\n vRadius = uAtomScale * (1.0 + (aRadius - 1.0) * uRelativeAtomScale);\n gl_Position = uProjection * uView * uModel * vec4(vRadius * aImposter + aPosition, 1.0);\n vColor = mix(aColor, vec3(1,1,1), uAtomShade);\n vPosition = vec3(uModel * vec4(aPosition, 1));\n}\n\n\n// __split__\n\n\n#version 100\n#extension GL_EXT_frag_depth: enable\nprecision highp float;\n\nuniform vec2 uBottomLeft;\nuniform vec2 uTopRight;\nuniform float uRes;\nuniform float uDepth;\nuniform int uMode;\n\nvarying vec3 vPosition;\nvarying float vRadius;\nvarying vec3 vColor;\n\nvec2 res = vec2(uRes, uRes);\n\nfloat raySphereIntersect(vec3 r0, vec3 rd) {\n float a = dot(rd, rd);\n vec3 s0_r0 = r0 - vPosition;\n float b = 2.0 * dot(rd, s0_r0);\n float c = dot(s0_r0, s0_r0) - (vRadius * vRadius);\n float disc = b*b - 4.0*a*c;\n if (disc <= 0.0) {\n return -1.0;\n }\n return (-b - sqrt(disc))/(2.0*a);\n}\n\nvoid main() {\n vec3 r0 = vec3(uBottomLeft + (gl_FragCoord.xy/res) * (uTopRight - uBottomLeft), 0.0);\n vec3 rd = vec3(0, 0, -1);\n float t = raySphereIntersect(r0, rd);\n if (t < 0.0) {\n discard;\n }\n vec3 coord = r0 + rd * t;\n vec3 normal = normalize(coord - vPosition);\n if (uMode == 0) {\n gl_FragColor = vec4(vColor, 1);\n } else if (uMode == 1) {\n gl_FragColor = vec4(normal * 0.5 + 0.5, 1.0);\n }\n gl_FragDepthEXT = -coord.z/uDepth;\n}\n",blur:"#version 100\nprecision highp float;\n\nattribute vec3 aPosition;\n\nvoid main() {\n gl_Position = vec4(aPosition, 1);\n}\n\n\n// __split__\n\n\n#version 100\nprecision highp float;\n\nuniform sampler2D uTexture;\nuniform float uRes;\nuniform int leftRight;\n\nvoid main() {\n vec2 dir;\n if (leftRight == 1) {\n dir = vec2(1,0)/uRes;\n } else {\n dir = vec2(0,1)/uRes;\n }\n const int range = 16;\n vec4 sample = vec4(0,0,0,0);\n for (int i = -range; i <= range; i++) {\n vec2 p = gl_FragCoord.xy/uRes + dir * float(i);\n sample += texture2D(uTexture, p);\n }\n sample /= float(range) * 2.0 + 1.0;\n gl_FragColor = sample;\n}\n",bond:"#version 100\nprecision highp float;\n\nattribute vec3 aImposter;\nattribute vec3 aPosA;\nattribute vec3 aPosB;\nattribute float aRadA;\nattribute float aRadB;\nattribute vec3 aColA;\nattribute vec3 aColB;\n\nuniform mat4 uView;\nuniform mat4 uProjection;\nuniform mat4 uModel;\nuniform mat4 uRotation;\nuniform float uBondRadius;\nuniform float uAtomScale;\nuniform float uRelativeAtomScale;\n\nvarying vec3 vNormal;\nvarying vec3 vPosA, vPosB;\nvarying float vRadA, vRadB;\nvarying vec3 vColA, vColB;\nvarying float vRadius;\n\nmat3 alignVector(vec3 a, vec3 b) {\n vec3 v = cross(a, b);\n float s = length(v);\n float c = dot(a, b);\n mat3 I = mat3(\n 1, 0, 0,\n 0, 1, 0,\n 0, 0, 1\n );\n mat3 vx = mat3(\n 0, v.z, -v.y,\n -v.z, 0, v.x,\n v.y, -v.x, 0\n );\n return I + vx + vx * vx * ((1.0 - c) / (s * s));\n}\n\nvoid main() {\n vRadius = uBondRadius;\n vec3 pos = vec3(aImposter);\n // Scale the box in x and z to be bond-radius.\n pos = pos * vec3(vRadius, 1, vRadius);\n // Shift the origin-centered cube so that the bottom is at the origin.\n pos = pos + vec3(0, 1, 0);\n // Stretch the box in y so that it is the length of the bond.\n pos = pos * vec3(1, length(aPosA - aPosB) * 0.5, 1);\n // Find the rotation that aligns vec3(0, 1, 0) with vec3(uPosB - uPosA) and apply it.\n vec3 a = normalize(vec3(-0.000001, 1.000001, 0.000001));\n vec3 b = normalize(aPosB - aPosA);\n mat3 R = alignVector(a, b);\n pos = R * pos;\n // Shift the cube so that the bottom is centered at the middle of atom A.\n pos = pos + aPosA;\n\n vec4 position = uModel * vec4(pos, 1);\n gl_Position = uProjection * uView * position;\n vPosA = aPosA;\n vPosB = aPosB;\n vRadA = uAtomScale * (1.0 + (aRadA - 1.0) * uRelativeAtomScale);\n vRadB = uAtomScale * (1.0 + (aRadB - 1.0) * uRelativeAtomScale);\n vColA = aColA;\n vColB = aColB;\n}\n\n\n// __split__\n\n\n#version 100\n#extension GL_EXT_frag_depth: enable\nprecision highp float;\n\nuniform mat4 uRotation;\nuniform vec2 uBottomLeft;\nuniform vec2 uTopRight;\nuniform float uDepth;\nuniform float uRes;\nuniform float uBondShade;\nuniform int uMode;\n\nvarying vec3 vPosA, vPosB;\nvarying float vRadA, vRadB;\nvarying vec3 vColA, vColB;\nvarying float vRadius;\n\nmat3 alignVector(vec3 a, vec3 b) {\n vec3 v = cross(a, b);\n float s = length(v);\n float c = dot(a, b);\n mat3 I = mat3(\n 1, 0, 0,\n 0, 1, 0,\n 0, 0, 1\n );\n mat3 vx = mat3(\n 0, v.z, -v.y,\n -v.z, 0, v.x,\n v.y, -v.x, 0\n );\n return I + vx + vx * vx * ((1.0 - c) / (s * s));\n}\n\nvoid main() {\n\n vec2 res = vec2(uRes, uRes);\n vec3 r0 = vec3(uBottomLeft + (gl_FragCoord.xy/res) * (uTopRight - uBottomLeft), uDepth/2.0);\n vec3 rd = vec3(0, 0, -1);\n\n vec3 i = normalize(vPosB - vPosA);\n i = vec3(uRotation * vec4(i, 0));\n vec3 j = normalize(vec3(-0.000001, 1.000001, 0.000001));\n mat3 R = alignVector(i, j);\n\n vec3 r0p = r0 - vec3(uRotation * vec4(vPosA, 0));\n r0p = R * r0p;\n vec3 rdp = R * rd;\n\n float a = dot(rdp.xz, rdp.xz);\n float b = 2.0 * dot(rdp.xz, r0p.xz);\n float c = dot(r0p.xz, r0p.xz) - vRadius*vRadius;\n float disc = b*b - 4.0*a*c;\n if (disc <= 0.0) {\n discard;\n }\n float t = (-b - sqrt(disc))/(2.0*a);\n if (t < 0.0) {\n discard;\n }\n\n vec3 coord = r0p + rdp * t;\n if (coord.y < 0.0 || coord.y > length(vPosA - vPosB)) {\n discard;\n }\n\n vec3 color;\n if (coord.y < vRadA + 0.5 * (length(vPosA - vPosB) - (vRadA + vRadB))) {\n color = vColA;\n } else {\n color = vColB;\n }\n\n color = mix(color, vec3(1,1,1), uBondShade);\n\n R = alignVector(j, i);\n vec3 normal = normalize(R * vec3(coord.x, 0, coord.z));\n\n coord = r0 + rd * t;\n if (uMode == 0) {\n gl_FragColor = vec4(color, 1);\n } else if (uMode == 1) {\n gl_FragColor = vec4(normal * 0.5 + 0.5, 1.0);\n }\n gl_FragDepthEXT = -(coord.z - uDepth/2.0)/uDepth;\n}\n",dof:"#version 100\nprecision highp float;\n\nattribute vec3 aPosition;\n\nvoid main() {\n gl_Position = vec4(aPosition, 1);\n}\n\n\n// __split__\n\n\n#version 100\nprecision highp float;\n\nuniform sampler2D uColor;\nuniform sampler2D uDepth;\nuniform float uRes;\nuniform float uDOFPosition;\nuniform float uDOFStrength;\nuniform int leftRight;\n\nvoid main() {\n\n vec2 samples[64];\n samples[0] = vec2(0.857612, 0.019885);\n samples[1] = vec2(0.563809, -0.028071);\n samples[2] = vec2(0.825599, -0.346856);\n samples[3] = vec2(0.126584, -0.380959);\n samples[4] = vec2(0.782948, 0.594322);\n samples[5] = vec2(0.292148, -0.543265);\n samples[6] = vec2(0.130700, 0.330220);\n samples[7] = vec2(0.236088, 0.159604);\n samples[8] = vec2(-0.305259, 0.810505);\n samples[9] = vec2(0.269616, 0.923026);\n samples[10] = vec2(0.484486, 0.371845);\n samples[11] = vec2(-0.638057, 0.080447);\n samples[12] = vec2(0.199629, 0.667280);\n samples[13] = vec2(-0.861043, -0.370583);\n samples[14] = vec2(-0.040652, -0.996174);\n samples[15] = vec2(0.330458, -0.282111);\n samples[16] = vec2(0.647795, -0.214354);\n samples[17] = vec2(0.030422, -0.189908);\n samples[18] = vec2(0.177430, -0.721124);\n samples[19] = vec2(-0.461163, -0.327434);\n samples[20] = vec2(-0.410012, -0.734504);\n samples[21] = vec2(-0.616334, -0.626069);\n samples[22] = vec2(0.590759, -0.726479);\n samples[23] = vec2(-0.590794, 0.805365);\n samples[24] = vec2(-0.924561, -0.163739);\n samples[25] = vec2(-0.323028, 0.526960);\n samples[26] = vec2(0.642128, 0.752577);\n samples[27] = vec2(0.173625, -0.952386);\n samples[28] = vec2(0.759014, 0.330311);\n samples[29] = vec2(-0.360526, -0.032013);\n samples[30] = vec2(-0.035320, 0.968156);\n samples[31] = vec2(0.585478, -0.431068);\n samples[32] = vec2(-0.244766, -0.906947);\n samples[33] = vec2(-0.853096, 0.184615);\n samples[34] = vec2(-0.089061, 0.104648);\n samples[35] = vec2(-0.437613, 0.285308);\n samples[36] = vec2(-0.654098, 0.379841);\n samples[37] = vec2(-0.128663, 0.456572);\n samples[38] = vec2(0.015980, -0.568170);\n samples[39] = vec2(-0.043966, -0.771940);\n samples[40] = vec2(0.346512, -0.071238);\n samples[41] = vec2(-0.207921, -0.209121);\n samples[42] = vec2(-0.624075, -0.189224);\n samples[43] = vec2(-0.120618, 0.689339);\n samples[44] = vec2(-0.664679, -0.410200);\n samples[45] = vec2(0.371945, -0.880573);\n samples[46] = vec2(-0.743251, 0.629998);\n samples[47] = vec2(-0.191926, -0.413946);\n samples[48] = vec2(0.449574, 0.833373);\n samples[49] = vec2(0.299587, 0.449113);\n samples[50] = vec2(-0.900432, 0.399319);\n samples[51] = vec2(0.762613, -0.544796);\n samples[52] = vec2(0.606462, 0.174233);\n samples[53] = vec2(0.962185, -0.167019);\n samples[54] = vec2(0.960990, 0.249552);\n samples[55] = vec2(0.570397, 0.559146);\n samples[56] = vec2(-0.537514, 0.555019);\n samples[57] = vec2(0.108491, -0.003232);\n samples[58] = vec2(-0.237693, -0.615428);\n samples[59] = vec2(-0.217313, 0.261084);\n samples[60] = vec2(-0.998966, 0.025692);\n samples[61] = vec2(-0.418554, -0.527508);\n samples[62] = vec2(-0.822629, -0.567797);\n samples[63] = vec2(0.061945, 0.522105);\n\n float invRes = 1.0/uRes;\n vec2 coord = gl_FragCoord.xy * invRes;\n\n float strength = uDOFStrength * uRes/768.0;\n\n float depth = texture2D(uDepth, coord).r;\n float range = uDOFPosition - depth;\n float scale = abs(range);\n\n vec4 sample = texture2D(uColor, coord);\n float count = 1.0;\n for(int i = 0; i < 64; i++) {\n vec2 p = samples[i];\n p = coord + scale * 64.0 * strength * p * invRes;\n float d = texture2D(uDepth, p).r;\n float r = uDOFPosition - d;\n float s = abs(r);\n sample += texture2D(uColor, p) * s;\n count += s;\n }\n\n gl_FragColor = sample/count;\n}",fxaa:"#version 100\nprecision highp float;\n\nattribute vec3 aPosition;\n\nvoid main() {\n gl_Position = vec4(aPosition, 1);\n}\n\n\n// __split__\n\n\n#version 100\nprecision highp float;\n\nuniform sampler2D uTexture;\nuniform float uRes;\n\nvoid main() {\n float FXAA_SPAN_MAX = 8.0;\n float FXAA_REDUCE_MUL = 1.0/8.0;\n float FXAA_REDUCE_MIN = 1.0/128.0;\n\n vec2 texCoords = gl_FragCoord.xy/uRes;\n\n vec4 rgbNW = texture2D(uTexture, texCoords + (vec2(-1.0, -1.0) / uRes));\n vec4 rgbNE = texture2D(uTexture, texCoords + (vec2(1.0, -1.0) / uRes));\n vec4 rgbSW = texture2D(uTexture, texCoords + (vec2(-1.0, 1.0) / uRes));\n vec4 rgbSE = texture2D(uTexture, texCoords + (vec2(1.0, 1.0) / uRes));\n vec4 rgbM = texture2D(uTexture, texCoords);\n\n vec4 luma = vec4(0.299, 0.587, 0.114, 1.0);\n float lumaNW = dot(rgbNW, luma);\n float lumaNE = dot(rgbNE, luma);\n float lumaSW = dot(rgbSW, luma);\n float lumaSE = dot(rgbSE, luma);\n float lumaM = dot(rgbM, luma);\n\n float lumaMin = min(lumaM, min(min(lumaNW, lumaNE), min(lumaSW, lumaSE)));\n float lumaMax = max(lumaM, max(max(lumaNW, lumaNE), max(lumaSW, lumaSE)));\n\n vec2 dir;\n dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE));\n dir.y = ((lumaNW + lumaSW) - (lumaNE + lumaSE));\n\n float dirReduce = max((lumaNW + lumaNE + lumaSW + lumaSE) * (0.25 * FXAA_REDUCE_MUL), FXAA_REDUCE_MIN);\n\n float rcpDirMin = 1.0/(min(abs(dir.x), abs(dir.y)) + dirReduce);\n\n dir = min(vec2(FXAA_SPAN_MAX, FXAA_SPAN_MAX), max(vec2(-FXAA_SPAN_MAX, -FXAA_SPAN_MAX), dir * rcpDirMin)) / uRes;\n\n vec4 rgbA = (1.0/2.0) * \n (texture2D(uTexture, texCoords.xy + dir * (1.0/3.0 - 0.5)) + \n texture2D(uTexture, texCoords.xy + dir * (2.0/3.0 - 0.5)));\n vec4 rgbB = rgbA * (1.0/2.0) + (1.0/4.0) * \n (texture2D(uTexture, texCoords.xy + dir * (0.0/3.0 - 0.5)) +\n texture2D(uTexture, texCoords.xy + dir * (3.0/3.0 - 0.5)));\n float lumaB = dot(rgbB, luma);\n\n if((lumaB < lumaMin) || (lumaB > lumaMax)){\n gl_FragColor = rgbA;\n } else {\n gl_FragColor = rgbB;\n }\n\n}","textured-quad":"#version 100\nprecision highp float;\n\nattribute vec3 aPosition;\n\nvoid main() {\n gl_Position = vec4(aPosition, 1);\n}\n\n\n// __split__\n\n\n#version 100\nprecision highp float;\n\nuniform sampler2D uTexture;\nuniform float uRes;\n\nvoid main() {\n gl_FragColor = texture2D(uTexture, gl_FragCoord.xy/uRes);\n}\n"};t.exports={shaders:r}},function(t,n,e){"use strict";function r(t){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var o=e(8);t.exports=function(t){if(arguments.length>1)throw"Error: The Speck Interactions module has changed!";if(0===arguments.length||"object"!==r(t))throw"Error: Arguments not provided to interactions";var n=void 0===t.scrollZoom||t.scrollZoom,e=t.container,a=t.getRotation,i=t.setRotation,u=t.getTranslation,s=t.setTranslation,l=t.getZoom,c=t.setZoom,f=t.refreshView,h={buttonDown:!1,shiftDown:!1,lastX:0,lastY:0};function p(t){0===t.button&&(h={buttonDown:!0,shiftDown:h.shiftDown,lastX:t.clientX,lastY:t.clientY})}function d(t){if(0===t.button){if(!h.buttonDown)return;h.buttonDown=!1}}function m(t){h.shiftDown=t.shiftKey}function g(t){if(h.buttonDown&&0!==t.buttons){t.preventDefault();var n=t.clientX-h.lastX,e=t.clientY-h.lastY;if(0!==n||0!==e){if(h.lastX=t.clientX,h.lastY=t.clientY,h.shiftDown){var r=u(),c=.001/l();s({x:r.x-n*c,y:r.y+e*c})}else{var p={rotation:new Float32Array(a())};o.rotate(p,n,e),i(p.rotation)}f()}}}function v(t){t.preventDefault(),c(l()*(t.deltaY<0?1/.9:.9)),f()}function y(){e.removeEventListener("mousedown",p),window.removeEventListener("mouseup",d),window.removeEventListener("keydown",m),window.removeEventListener("keyup",m),window.removeEventListener("mousemove",g),e.removeEventListener("wheel",v)}return e.addEventListener("mousedown",p),window.addEventListener("mouseup",d),window.addEventListener("keydown",m),window.addEventListener("keyup",m),window.addEventListener("mousemove",g),n&&e.addEventListener("wheel",v),y}},function(t,n){t.exports={default:{atomScale:.6,relativeAtomScale:1,bondScale:.5,ao:.75,aoRes:256,brightness:.5,outline:0,spf:32,bonds:!1,bondThreshold:1.2,bondShade:.5,atomShade:.5,dofStrength:0,dofPosition:.5,fxaa:1},stickball:{atomScale:.24,relativeAtomScale:.64,bondScale:.5,bonds:!0,bondThreshold:1.2},toon:{ao:0,spf:0,brightness:.5,outline:1},licorice:{atomScale:.1,relativeAtomScale:0,bondScale:1,bonds:!0,bondThreshold:1.2}}},function(t,n,e){"use strict";e.r(n);var r=e(10),o=e(18),a=e(1),i=e.n(a),u=e(0),s=e.n(u),l=e(22),c=e(43);function f(t){return(f="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function h(t,n){for(var e=0;e=0;)n=h[e],Object(i.a)(n,t)&&!d(r,n)&&(r[r.length]=n),e-=1;return r})):Object(s.a)((function(t){return Object(t)!==t?[]:Object.keys(t)})),g=Object(s.a)((function(t){return null===t?"Null":void 0===t?"Undefined":Object.prototype.toString.call(t).slice(8,-1)}));function v(t,n,e,r){var i=o(t);function u(t,n){return y(t,n,e.slice(),r.slice())}return!a((function(t,n){return!a(u,n,t)}),o(n),i)}function y(t,n,e,r){if(u(t,n))return!0;var o,a,s=g(t);if(s!==g(n))return!1;if(null==t||null==n)return!1;if("function"==typeof t["fantasy-land/equals"]||"function"==typeof n["fantasy-land/equals"])return"function"==typeof t["fantasy-land/equals"]&&t["fantasy-land/equals"](n)&&"function"==typeof n["fantasy-land/equals"]&&n["fantasy-land/equals"](t);if("function"==typeof t.equals||"function"==typeof n.equals)return"function"==typeof t.equals&&t.equals(n)&&"function"==typeof n.equals&&n.equals(t);switch(s){case"Arguments":case"Array":case"Object":if("function"==typeof t.constructor&&"Promise"===(o=t.constructor,null==(a=String(o).match(/^function (\w*)/))?"":a[1]))return t===n;break;case"Boolean":case"Number":case"String":if(typeof t!=typeof n||!u(t.valueOf(),n.valueOf()))return!1;break;case"Date":if(!u(t.valueOf(),n.valueOf()))return!1;break;case"Error":return t.name===n.name&&t.message===n.message;case"RegExp":if(t.source!==n.source||t.global!==n.global||t.ignoreCase!==n.ignoreCase||t.multiline!==n.multiline||t.sticky!==n.sticky||t.unicode!==n.unicode)return!1}for(var l=e.length-1;l>=0;){if(e[l]===t)return r[l]===n;l-=1}switch(s){case"Map":return t.size===n.size&&v(t.entries(),n.entries(),e.concat([t]),r.concat([n]));case"Set":return t.size===n.size&&v(t.values(),n.values(),e.concat([t]),r.concat([n]));case"Arguments":case"Array":case"Object":case"Boolean":case"Number":case"String":case"Date":case"Error":case"RegExp":case"Int8Array":case"Uint8Array":case"Uint8ClampedArray":case"Int16Array":case"Uint16Array":case"Int32Array":case"Uint32Array":case"Float32Array":case"Float64Array":case"ArrayBuffer":break;default:return!1}var c=m(t);if(c.length!==m(n).length)return!1;var f=e.concat([t]),h=r.concat([n]);for(l=c.length-1;l>=0;){var p=c[l];if(!Object(i.a)(p,n)||!y(n[p],t[p],f,h))return!1;l-=1}return!0}var b=Object(r.a)((function(t,n){return y(t,n,[],[])}));n.a=b}]); \ No newline at end of file +window.dash_bio=function(t){function n(n){for(var e,o,a=n[0],i=n[1],u=0,s=[];u0&&(o=1/Math.sqrt(o),t[0]=n[0]*o,t[1]=n[1]*o),t},u.dot=function(t,n){return t[0]*n[0]+t[1]*n[1]},u.cross=function(t,n,e){var r=n[0]*e[1]-n[1]*e[0];return t[0]=t[1]=0,t[2]=r,t},u.lerp=function(t,n,e,r){var o=n[0],a=n[1];return t[0]=o+r*(e[0]-o),t[1]=a+r*(e[1]-a),t},u.random=function(t,n){n=n||1;var e=2*r()*Math.PI;return t[0]=Math.cos(e)*n,t[1]=Math.sin(e)*n,t},u.transformMat2=function(t,n,e){var r=n[0],o=n[1];return t[0]=e[0]*r+e[2]*o,t[1]=e[1]*r+e[3]*o,t},u.transformMat2d=function(t,n,e){var r=n[0],o=n[1];return t[0]=e[0]*r+e[2]*o+e[4],t[1]=e[1]*r+e[3]*o+e[5],t},u.transformMat3=function(t,n,e){var r=n[0],o=n[1];return t[0]=e[0]*r+e[3]*o+e[6],t[1]=e[1]*r+e[4]*o+e[7],t},u.transformMat4=function(t,n,e){var r=n[0],o=n[1];return t[0]=e[0]*r+e[4]*o+e[12],t[1]=e[1]*r+e[5]*o+e[13],t},u.forEach=(i=u.create(),function(t,n,e,r,o,a){var u,s;for(n||(n=2),e||(e=0),s=r?Math.min(r*n+e,t.length):t.length,u=e;u0&&(a=1/Math.sqrt(a),t[0]=n[0]*a,t[1]=n[1]*a,t[2]=n[2]*a),t},s.dot=function(t,n){return t[0]*n[0]+t[1]*n[1]+t[2]*n[2]},s.cross=function(t,n,e){var r=n[0],o=n[1],a=n[2],i=e[0],u=e[1],s=e[2];return t[0]=o*s-a*u,t[1]=a*i-r*s,t[2]=r*u-o*i,t},s.lerp=function(t,n,e,r){var o=n[0],a=n[1],i=n[2];return t[0]=o+r*(e[0]-o),t[1]=a+r*(e[1]-a),t[2]=i+r*(e[2]-i),t},s.random=function(t,n){n=n||1;var e=2*r()*Math.PI,o=2*r()-1,a=Math.sqrt(1-o*o)*n;return t[0]=Math.cos(e)*a,t[1]=Math.sin(e)*a,t[2]=o*n,t},s.transformMat4=function(t,n,e){var r=n[0],o=n[1],a=n[2],i=e[3]*r+e[7]*o+e[11]*a+e[15];return i=i||1,t[0]=(e[0]*r+e[4]*o+e[8]*a+e[12])/i,t[1]=(e[1]*r+e[5]*o+e[9]*a+e[13])/i,t[2]=(e[2]*r+e[6]*o+e[10]*a+e[14])/i,t},s.transformMat3=function(t,n,e){var r=n[0],o=n[1],a=n[2];return t[0]=r*e[0]+o*e[3]+a*e[6],t[1]=r*e[1]+o*e[4]+a*e[7],t[2]=r*e[2]+o*e[5]+a*e[8],t},s.transformQuat=function(t,n,e){var r=n[0],o=n[1],a=n[2],i=e[0],u=e[1],s=e[2],l=e[3],c=l*r+u*a-s*o,f=l*o+s*r-i*a,h=l*a+i*o-u*r,p=-i*r-u*o-s*a;return t[0]=c*l+p*-i+f*-s-h*-u,t[1]=f*l+p*-u+h*-i-c*-s,t[2]=h*l+p*-s+c*-u-f*-i,t},s.rotateX=function(t,n,e,r){var o=[],a=[];return o[0]=n[0]-e[0],o[1]=n[1]-e[1],o[2]=n[2]-e[2],a[0]=o[0],a[1]=o[1]*Math.cos(r)-o[2]*Math.sin(r),a[2]=o[1]*Math.sin(r)+o[2]*Math.cos(r),t[0]=a[0]+e[0],t[1]=a[1]+e[1],t[2]=a[2]+e[2],t},s.rotateY=function(t,n,e,r){var o=[],a=[];return o[0]=n[0]-e[0],o[1]=n[1]-e[1],o[2]=n[2]-e[2],a[0]=o[2]*Math.sin(r)+o[0]*Math.cos(r),a[1]=o[1],a[2]=o[2]*Math.cos(r)-o[0]*Math.sin(r),t[0]=a[0]+e[0],t[1]=a[1]+e[1],t[2]=a[2]+e[2],t},s.rotateZ=function(t,n,e,r){var o=[],a=[];return o[0]=n[0]-e[0],o[1]=n[1]-e[1],o[2]=n[2]-e[2],a[0]=o[0]*Math.cos(r)-o[1]*Math.sin(r),a[1]=o[0]*Math.sin(r)+o[1]*Math.cos(r),a[2]=o[2],t[0]=a[0]+e[0],t[1]=a[1]+e[1],t[2]=a[2]+e[2],t},s.forEach=function(){var t=s.create();return function(n,e,r,o,a,i){var u,s;for(e||(e=3),r||(r=0),s=o?Math.min(o*e+r,n.length):n.length,u=r;u1?0:Math.acos(o)},s.str=function(t){return"vec3("+t[0]+", "+t[1]+", "+t[2]+")"},void 0!==t&&(t.vec3=s);var l={create:function(){var t=new e(4);return t[0]=0,t[1]=0,t[2]=0,t[3]=0,t},clone:function(t){var n=new e(4);return n[0]=t[0],n[1]=t[1],n[2]=t[2],n[3]=t[3],n},fromValues:function(t,n,r,o){var a=new e(4);return a[0]=t,a[1]=n,a[2]=r,a[3]=o,a},copy:function(t,n){return t[0]=n[0],t[1]=n[1],t[2]=n[2],t[3]=n[3],t},set:function(t,n,e,r,o){return t[0]=n,t[1]=e,t[2]=r,t[3]=o,t},add:function(t,n,e){return t[0]=n[0]+e[0],t[1]=n[1]+e[1],t[2]=n[2]+e[2],t[3]=n[3]+e[3],t},subtract:function(t,n,e){return t[0]=n[0]-e[0],t[1]=n[1]-e[1],t[2]=n[2]-e[2],t[3]=n[3]-e[3],t}};l.sub=l.subtract,l.multiply=function(t,n,e){return t[0]=n[0]*e[0],t[1]=n[1]*e[1],t[2]=n[2]*e[2],t[3]=n[3]*e[3],t},l.mul=l.multiply,l.divide=function(t,n,e){return t[0]=n[0]/e[0],t[1]=n[1]/e[1],t[2]=n[2]/e[2],t[3]=n[3]/e[3],t},l.div=l.divide,l.min=function(t,n,e){return t[0]=Math.min(n[0],e[0]),t[1]=Math.min(n[1],e[1]),t[2]=Math.min(n[2],e[2]),t[3]=Math.min(n[3],e[3]),t},l.max=function(t,n,e){return t[0]=Math.max(n[0],e[0]),t[1]=Math.max(n[1],e[1]),t[2]=Math.max(n[2],e[2]),t[3]=Math.max(n[3],e[3]),t},l.scale=function(t,n,e){return t[0]=n[0]*e,t[1]=n[1]*e,t[2]=n[2]*e,t[3]=n[3]*e,t},l.scaleAndAdd=function(t,n,e,r){return t[0]=n[0]+e[0]*r,t[1]=n[1]+e[1]*r,t[2]=n[2]+e[2]*r,t[3]=n[3]+e[3]*r,t},l.distance=function(t,n){var e=n[0]-t[0],r=n[1]-t[1],o=n[2]-t[2],a=n[3]-t[3];return Math.sqrt(e*e+r*r+o*o+a*a)},l.dist=l.distance,l.squaredDistance=function(t,n){var e=n[0]-t[0],r=n[1]-t[1],o=n[2]-t[2],a=n[3]-t[3];return e*e+r*r+o*o+a*a},l.sqrDist=l.squaredDistance,l.length=function(t){var n=t[0],e=t[1],r=t[2],o=t[3];return Math.sqrt(n*n+e*e+r*r+o*o)},l.len=l.length,l.squaredLength=function(t){var n=t[0],e=t[1],r=t[2],o=t[3];return n*n+e*e+r*r+o*o},l.sqrLen=l.squaredLength,l.negate=function(t,n){return t[0]=-n[0],t[1]=-n[1],t[2]=-n[2],t[3]=-n[3],t},l.inverse=function(t,n){return t[0]=1/n[0],t[1]=1/n[1],t[2]=1/n[2],t[3]=1/n[3],t},l.normalize=function(t,n){var e=n[0],r=n[1],o=n[2],a=n[3],i=e*e+r*r+o*o+a*a;return i>0&&(i=1/Math.sqrt(i),t[0]=n[0]*i,t[1]=n[1]*i,t[2]=n[2]*i,t[3]=n[3]*i),t},l.dot=function(t,n){return t[0]*n[0]+t[1]*n[1]+t[2]*n[2]+t[3]*n[3]},l.lerp=function(t,n,e,r){var o=n[0],a=n[1],i=n[2],u=n[3];return t[0]=o+r*(e[0]-o),t[1]=a+r*(e[1]-a),t[2]=i+r*(e[2]-i),t[3]=u+r*(e[3]-u),t},l.random=function(t,n){return n=n||1,t[0]=r(),t[1]=r(),t[2]=r(),t[3]=r(),l.normalize(t,t),l.scale(t,t,n),t},l.transformMat4=function(t,n,e){var r=n[0],o=n[1],a=n[2],i=n[3];return t[0]=e[0]*r+e[4]*o+e[8]*a+e[12]*i,t[1]=e[1]*r+e[5]*o+e[9]*a+e[13]*i,t[2]=e[2]*r+e[6]*o+e[10]*a+e[14]*i,t[3]=e[3]*r+e[7]*o+e[11]*a+e[15]*i,t},l.transformQuat=function(t,n,e){var r=n[0],o=n[1],a=n[2],i=e[0],u=e[1],s=e[2],l=e[3],c=l*r+u*a-s*o,f=l*o+s*r-i*a,h=l*a+i*o-u*r,p=-i*r-u*o-s*a;return t[0]=c*l+p*-i+f*-s-h*-u,t[1]=f*l+p*-u+h*-i-c*-s,t[2]=h*l+p*-s+c*-u-f*-i,t},l.forEach=function(){var t=l.create();return function(n,e,r,o,a,i){var u,s;for(e||(e=4),r||(r=0),s=o?Math.min(o*e+r,n.length):n.length,u=r;u.999999?(t[0]=0,t[1]=0,t[2]=0,t[3]=1,t):(s.cross(d,n,e),t[0]=d[0],t[1]=d[1],t[2]=d[2],t[3]=1+r,y.normalize(t,t))}),y.setAxes=(v=h.create(),function(t,n,e,r){return v[0]=e[0],v[3]=e[1],v[6]=e[2],v[1]=r[0],v[4]=r[1],v[7]=r[2],v[2]=-n[0],v[5]=-n[1],v[8]=-n[2],y.normalize(t,y.fromMat3(t,v))}),y.clone=l.clone,y.fromValues=l.fromValues,y.copy=l.copy,y.set=l.set,y.identity=function(t){return t[0]=0,t[1]=0,t[2]=0,t[3]=1,t},y.setAxisAngle=function(t,n,e){e*=.5;var r=Math.sin(e);return t[0]=r*n[0],t[1]=r*n[1],t[2]=r*n[2],t[3]=Math.cos(e),t},y.add=l.add,y.multiply=function(t,n,e){var r=n[0],o=n[1],a=n[2],i=n[3],u=e[0],s=e[1],l=e[2],c=e[3];return t[0]=r*c+i*u+o*l-a*s,t[1]=o*c+i*s+a*u-r*l,t[2]=a*c+i*l+r*s-o*u,t[3]=i*c-r*u-o*s-a*l,t},y.mul=y.multiply,y.scale=l.scale,y.rotateX=function(t,n,e){e*=.5;var r=n[0],o=n[1],a=n[2],i=n[3],u=Math.sin(e),s=Math.cos(e);return t[0]=r*s+i*u,t[1]=o*s+a*u,t[2]=a*s-o*u,t[3]=i*s-r*u,t},y.rotateY=function(t,n,e){e*=.5;var r=n[0],o=n[1],a=n[2],i=n[3],u=Math.sin(e),s=Math.cos(e);return t[0]=r*s-a*u,t[1]=o*s+i*u,t[2]=a*s+r*u,t[3]=i*s-o*u,t},y.rotateZ=function(t,n,e){e*=.5;var r=n[0],o=n[1],a=n[2],i=n[3],u=Math.sin(e),s=Math.cos(e);return t[0]=r*s+o*u,t[1]=o*s-r*u,t[2]=a*s+i*u,t[3]=i*s-a*u,t},y.calculateW=function(t,n){var e=n[0],r=n[1],o=n[2];return t[0]=e,t[1]=r,t[2]=o,t[3]=Math.sqrt(Math.abs(1-e*e-r*r-o*o)),t},y.dot=l.dot,y.lerp=l.lerp,y.slerp=function(t,n,e,r){var o,a,i,u,s,l=n[0],c=n[1],f=n[2],h=n[3],p=e[0],d=e[1],m=e[2],g=e[3];return(a=l*p+c*d+f*m+h*g)<0&&(a=-a,p=-p,d=-d,m=-m,g=-g),1-a>1e-6?(o=Math.acos(a),i=Math.sin(o),u=Math.sin((1-r)*o)/i,s=Math.sin(r*o)/i):(u=1-r,s=r),t[0]=u*l+s*p,t[1]=u*c+s*d,t[2]=u*f+s*m,t[3]=u*h+s*g,t},y.invert=function(t,n){var e=n[0],r=n[1],o=n[2],a=n[3],i=e*e+r*r+o*o+a*a,u=i?1/i:0;return t[0]=-e*u,t[1]=-r*u,t[2]=-o*u,t[3]=a*u,t},y.conjugate=function(t,n){return t[0]=-n[0],t[1]=-n[1],t[2]=-n[2],t[3]=n[3],t},y.length=l.length,y.len=y.length,y.squaredLength=l.squaredLength,y.sqrLen=y.squaredLength,y.normalize=l.normalize,y.fromMat3=function(t,n){var e,r=n[0]+n[4]+n[8];if(r>0)e=Math.sqrt(r+1),t[3]=.5*e,e=.5/e,t[0]=(n[5]-n[7])*e,t[1]=(n[6]-n[2])*e,t[2]=(n[1]-n[3])*e;else{var o=0;n[4]>n[0]&&(o=1),n[8]>n[3*o+o]&&(o=2);var a=(o+1)%3,i=(o+2)%3;e=Math.sqrt(n[3*o+o]-n[3*a+a]-n[3*i+i]+1),t[o]=.5*e,e=.5/e,t[3]=(n[3*a+i]-n[3*i+a])*e,t[a]=(n[3*a+o]+n[3*o+a])*e,t[i]=(n[3*i+o]+n[3*o+i])*e}return t},y.str=function(t){return"quat("+t[0]+", "+t[1]+", "+t[2]+", "+t[3]+")"},void 0!==t&&(t.quat=y)}(e.exports)}()},function(t,n,e){"use strict";var r=e(7),o=e(6),a=e(20);function i(t,n,e){return Math.min(n,Math.max(t,e))}t.exports.new=function(){return{aspect:1,zoom:.125,translation:{x:0,y:0},atomScale:.6,relativeAtomScale:1,bondScale:.5,rotation:r.mat4.create(),ao:.75,aoRes:256,brightness:.5,outline:0,spf:32,bonds:!1,bondThreshold:1.2,bondShade:.5,atomShade:.5,resolution:768,dofStrength:0,dofPosition:.5,fxaa:1}},t.exports.center=function(t,n){for(var e=-1/0,a=1/0,i=-1/0,u=1/0,s=0;sn&&(n=u,t.farAtom=r)}return t.farAtom});t.exports.getRadius=function(t){var n=u(t),e=a.MAX_ATOM_RADIUS,r=2.5*Math.sqrt(e*e+e*e+e*e);return Math.sqrt(n.x*n.x+n.y*n.y+n.z*n.z)+r}},function(t,n,e){var o;o=function(){return function(t){var n={};function e(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return t[r].call(o.exports,o,o.exports,e),o.loaded=!0,o.exports}return e.m=t,e.c=n,e.p="",e(0)}([function(t,n,e){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.rnaPlot=n.RNAGraph=void 0;var o=e(1);Object.defineProperty(n,"RNAGraph",{enumerable:!0,get:function(){return o.RNAGraph}});var a=e(3);Object.defineProperty(n,"rnaPlot",{enumerable:!0,get:function(){return a.rnaPlot}}),n.FornaContainer=function(t,n){var e=this;if(e.options={displayAllLinks:!1,labelInterval:10,applyForce:!0,chargeDistance:110,friction:.35,middleCharge:-30,otherCharge:-30,linkDistanceMultiplier:15,initialSize:null,layout:"standard-polygonal",allowPanningAndZooming:!0,transitionDuration:500,resizeSvgOnResize:!0},arguments.length>1)for(var a in n)e.options.hasOwnProperty(a)&&(e.options[a]=n[a]);null!==e.options.initialSize?(e.options.svgW=e.options.initialSize[0],e.options.svgH=e.options.initialSize[1]):(e.options.svgW=800,e.options.svgH=800),l.default.scale.category20();var u=null,s=null,p=l.default.scale.linear().domain([0,e.options.svgW]).range([0,e.options.svgW]),d=l.default.scale.linear().domain([0,e.options.svgH]).range([0,e.options.svgH]),m=e.graph={nodes:[],links:[]};function g(t){return Math.sqrt(t[0]*t[0]+t[1]*t[1])}function v(t){var n=t,e=t.prevNode;if(null!==e&&t.linked){var r=[-(n.x-e.x),-(n.y-e.y)],o=[-(r=[r[0]/g(r),r[1]/g(r)])[1],r[0]],a=[t.radius*r[0],t.radius*r[1]],i="M"+(a[0]+6*(r[0]+o[0])/2)+","+(a[1]+6*(r[1]+o[1])/2)+"L"+a[0]+","+a[1]+"L"+(a[0]+6*(r[0]-o[0])/2)+","+(a[1]+6*(r[1]-o[1])/2);l.default.select(this).attr("d",i)}}function y(t){return"basepair"==t.linkType||"backbone"==t.linkType||"pseudoknot"==t.linkType||"label_link"==t.linkType||"external"==t.linkType||"chain_chain"==t.linkType}function b(t,n,e){if(t.hasOwnProperty(n.num)){var r=parseFloat(t[n.num]);return isNaN(r)?t[n.num]:e(r)}return"white"}function x(){}function M(){u&&(mpos=l.default.mouse(A.node()),P.attr("x1",u.x).attr("y1",u.y).attr("x2",mpos[0]).attr("y2",mpos[1]))}function w(){u&&P.attr("class","drag_line_hidden"),C()}e.linkStrengths={pseudoknot:0,proteinChain:0,chainChain:0,intermolecule:10,external:0,other:10},e.displayParameters={displayBackground:"true",displayNumbering:"true",displayNodeOutline:"true",displayNodeLabel:"true",displayLinks:"true",displayPseudoknotLinks:"true",displayProteinLinks:"true"},e.colorScheme="structure",e.customColors={},e.animation=e.options.applyForce,e.deaf=!1,e.rnas={},e.extraLinks=[],Array.prototype.equals=function(t){if(!t)return!1;if(this.length!=t.length)return!1;for(var n=0,e=this.length;n0?l.default.max(e.graph.nodes.map((function(t){return t.x}))):0,o=l.default.min(t.nodes.map((function(t){return t.x}))),t.nodes.forEach((function(t){t.x+=r-o+20,t.px+=r-o}))),t.nodes.forEach((function(n){n.rna=t})),e.rnas[t.uid]=t,e.recalculateGraph(),e.update(),e.centerView(),t},e.transitionRNA=function(t,n){var r=e.options.transitionDuration,o={uids:e.graph.nodes.filter((function(t){return"nucleotide"==t.nodeType})).map((function(t){return t.uid}))},a=e.createInitialLayout(t,o),i=T.selectAll("g.gnode").data(a.nodes,Y);0===(r=e.options.transitionDuration)?i.attr("transform",(function(t){return"translate("+[t.x,t.y]+")"})):i.transition().attr("transform",(function(t){return"translate("+[t.x,t.y]+")"})).duration(r);var u=E.selectAll("line.link").data(a.links.filter(y),X),s=e.createNewNodes(i.enter()).attr("transform",(function(t){return void 0!==t.x&&void 0!==t.y?"translate("+[0,0]+")":""}));0===r?i.exit().remove():i.exit().transition().attr("transform",(function(t){return void 0!==t.x&&void 0!==t.y?"translate("+[0,0]+")":""})),i.select("path").each(v),e.graph.nodes=i.data(),e.updateStyle(),e.centerView(r),u.exit().remove(),0===r?(u.attr("x1",(function(t){return t.source.x})).attr("y1",(function(t){return t.source.y})).attr("x2",(function(t){return t.target.x})).attr("y2",(function(t){return t.target.y})),e.createNewLinks(u.enter()),e.graph.links=u.data(),e.updateStyle()):u.transition().attr("x1",(function(t){return t.source.x})).attr("y1",(function(t){return t.source.y})).attr("x2",(function(t){return t.target.x})).attr("y2",(function(t){return t.target.y})).duration(r).call((function(t,n){0===t.size()&&setTimeout(n,r);var e=0;t.each((function(){++e})).each("end",(function(){--e||n.apply(this,arguments)}))}),(function(){e.createNewLinks(u.enter()),e.graph.links=u.data(),e.updateStyle(),void 0!==n&&n()})),0===r?s.attr("transform",(function(t){return void 0!==t.x&&void 0!==t.y?"translate("+[t.x,t.y]+")":""})):s.transition().attr("transform",(function(t){return void 0!==t.x&&void 0!==t.y?"translate("+[t.x,t.y]+")":""}))},e.recalculateGraph=function(){for(var t in e.graph.nodes=[],e.graph.links=[],e.rnas)e.graph.nodes=e.graph.nodes.concat(e.rnas[t].nodes),e.graph.links=e.graph.links.concat(e.rnas[t].links);for(var n={},r=0;r0?(maxX=l.default.max(e.graph.nodes.map((function(t){return t.x}))),maxY=l.default.max(e.graph.nodes.map((function(t){return t.y})))):(maxX=0,maxY=0),t.nodes.forEach((function(t){t.rna.uid in e.rnas||(e.rnas[t.rna.uid]=t.rna),t.x+=maxX,t.px+=maxX})),r=new o.RNAGraph("",""),r.nodes=t.nodes,r.links=t.links,e.recalculateGraph(),e.update(),e.centerView()},e.addCustomColors=function(t){e.customColors=t},e.addCustomColorsText=function(t){var n=new f.ColorScheme(t);e.customColors=n.colorsJson,e.changeColorScheme("custom")},e.clearNodes=function(){e.graph.nodes=[],e.graph.links=[],e.rnas={},e.extraLinks=[],e.update()},e.toJSON=function(){var t={rnas:e.rnas,extraLinks:e.extraLinks};return JSON.stringify(t,(function(t,n){return"rna"==t?void 0:n}),"\t")},e.fromJSON=function(t){var n,a;try{var i=JSON.parse(t);n=i.rnas,a=i.extraLinks}catch(t){throw t}for(var u in n)"rna"==n[u].type?(r=new o.RNAGraph,r.seq=n[u].seq,r.dotbracket=n[u].dotbracket,r.circular=n[u].circular,r.pairtable=n[u].pairtable,r.uid=n[u].uid,r.structName=n[u].structName,r.nodes=n[u].nodes,r.links=n[u].links,r.rnaLength=n[u].rnaLength,r.elements=n[u].elements,r.nucsToNodes=n[u].nucsToNodes,r.pseudoknotPairs=n[u].pseudoknotPairs):(r=new ProteinGraph,r.size=n[u].size,r.nodes=n[u].nodes,r.uid=n[u].uid),e.addRNAJSON(r,!1);a.forEach((function(t){e.extraLinks.push(t)})),e.recalculateGraph(),e.update()},e.setSize=function(){if(null==e.options.initialSize){var n=l.default.select(t).node().offsetHeight,r=l.default.select(t).node().offsetWidth;e.options.svgW=r,e.options.svgH=n,p.range([0,r]).domain([0,r]),d.range([0,n]).domain([0,n]),e.zoomer.x(p).y(d),e.brusher.x(p).y(d),e.centerView(),e.options.resizeSvgOnResize&&_.attr("width",r).attr("height",n)}},e.setOutlineColor=function(t){T.selectAll("g.gnode").select("[node_type=nucleotide]").style("fill",t)},e.changeColorScheme=function(t){T.selectAll("[node_type=protein]").classed("protein",!0).attr("r",(function(t){return t.radius})),T.selectAll("g.gnode"),T.selectAll("g.gnode").selectAll("circle");var n=T.selectAll("g.gnode").select("[node_type=nucleotide]");if(e.colorScheme=t,"sequence"==t){var r=l.default.scale.ordinal().range(["#dbdb8d","#98df8a","#ff9896","#aec7e8","#aec7e8"]).domain(["A","C","G","U","T"]);n.style("fill",(function(t){return r(t.name)}))}else"structure"==t?(r=l.default.scale.category10().domain(["s","m","i","e","t","h","x"]).range(["lightgreen","#ff9896","#dbdb8d","lightsalmon","lightcyan","lightblue","transparent"]),n.style("fill",(function(t){return r(t.elemType)}))):"positions"==t?n.style("fill",(function(t){return l.default.scale.linear().range(["#98df8a","#dbdb8d","#ff9896"]).interpolate(l.default.interpolateLab).domain([1,1+(t.rna.rnaLength-1)/2,t.rna.rnaLength])(t.num)})):"custom"==t&&(void 0!==e.customColors&&"domain"in e.customColors&&"range"in e.customColors&&(r=l.default.scale.linear().interpolate(l.default.interpolateLab).domain(e.customColors.domain).range(e.customColors.range)),n.style("fill",(function(t){return void 0!==e.customColors&&e.customColors.hasOwnProperty("colorValues")?e.customColors.colorValues.hasOwnProperty(t.structName)&&e.customColors.colorValues[t.structName].hasOwnProperty(t.num)?b(e.customColors.colorValues[t.structName],t,r):e.customColors.colorValues.hasOwnProperty("")?b(e.customColors.colorValues[""],t,r):"white":"white"})))},window.addEventListener("resize",e.setSize,!1),e.zoomer=l.default.behavior.zoom().scaleExtent([.1,10]).x(p).y(d).on("zoomstart",R).on("zoom",N),l.default.select(t).select("svg").remove();var _=l.default.select(t).classed("forna-container",!0).attr("tabindex",1).on("keydown.brush",B).on("keyup.brush",I).each((function(){this.focus()})).append("svg:svg").attr("width",e.options.svgW).attr("height",e.options.svgH).attr("id","plotting-area");e.options.svg=_;var k=_.append("svg:g").on("mousemove",M).on("mousedown",x).on("mouseup",w);e.options.allowPanningAndZooming&&k.call(e.zoomer);var S=k.append("g").datum((function(){return{selected:!1,previouslySelected:!1}})).attr("class","brush"),A=k.append("svg:g"),E=A.append("svg:g"),T=A.append("svg:g");function R(){var t=T.selectAll("g.gnode").selectAll(".outline_node");t.each((function(t){t.selected=!1,t.previouslySelected=!1})),t.classed("selected",!1)}function N(){A.attr("transform","translate("+l.default.event.translate+") scale("+l.default.event.scale+")")}e.brusher=l.default.svg.brush().x(p).y(d).on("brushstart",(function(t){T.selectAll("g.gnode").selectAll(".outline_node").each((function(t){t.previouslySelected=L&&t.selected}))})).on("brush",(function(){var t=T.selectAll("g.gnode").selectAll(".outline_node"),n=l.default.event.target.extent();t.classed("selected",(function(t){return t.selected=e.options.applyForce&&t.previouslySelected^(n[0][0]<=t.x&&t.xr||sa||l-1){if(t.source.rna==t.target.rna){var n=t.source.rna;n.addPseudoknots(),n.pairtable[t.source.num]=0,n.pairtable[t.target.num]=0,H(n)}else extraLinkIndex=e.extraLinks.indexOf(t),e.extraLinks.splice(extraLinkIndex,1);e.recalculateGraph()}e.update()},G=function(t){O&&(t.linkType in{backbone:!0,fake:!0,fake_fake:!0,label_link:!0}||V(t))};e.addLink=function(t){t.source.rna==t.target.rna?(r=t.source.rna,r.pairtable[t.source.num]=t.target.num,r.pairtable[t.target.num]=t.source.num,H(r)):(t.linkType="intermolecule",e.extraLinks.push(t)),e.recalculateGraph(),e.update()};var W=function(t){l.default.event.defaultPrevented||(L||T.selectAll("g.gnode").selectAll(".outline_node").classed("selected",(function(t){return t.selected=e.options.applyForce&&(t.previouslySelected=!1)})),l.default.select(this).select("circle").classed("selected",t.selected=e.options.applyForce&&!t.previouslySelected))},Z=function(t){if(u){if((s=t)==u)return void C();var n={source:u,target:s,linkType:"basepair",value:1,uid:generateUUID()};for(i=0;i0&&"*"==u.dotbracket[u.dotbracket.length-1]&&(u.dotbracket=u.dotbracket.slice(0,u.dotbracket.length-1),u.circular=!0),u.uid=a(),u.elements=[],u.pseudoknotPairs=[],u.nucsToNodes={},u.addUids=function(t){for(var n=u.nodes.filter((function(t){return"nucleotide"==t.nodeType})),e=0;e=0;)n.push(e),t=t.substring(0,e)+"oo"+t.substring(e+1,t.length);return{targetString:t,breaks:n}};var s=u.removeBreaks(u.dotbracket);u.dotbracket=s.targetString,u.dotBracketBreaks=s.breaks,s=u.removeBreaks(u.seq),u.seq=s.targetString,u.seqBreaks=s.breaks,u.calculateStartNumberArray=function(){u.startNumberArray=[];for(var t=0;t=0&&(e=!0);e?u.elements[n][2].map((function(t){0!=t&&(u.nodes[t-1].elemType="e")})):u.elements[n][2].map((function(t){0!=t&&(u.nodes[t-1].elemType=u.elements[n][0])}))}return u},u.getPositions=function(t){for(var n=[],e=u.nodes.filter((function(n){return n.nodeType==t})),r=0;r=4})),e=0;eu.dotbracket.length)){u.links.push({source:u.nodes[t[f]-1],target:u.nodes[u.nodes.length-1],linkType:"fake",value:e,uid:a()}),t.length>4&&u.links.push({source:u.nodes[t[f]-1],target:u.nodes[t[(f+Math.floor(t.length/2))%t.length]-1],linkType:"fake",value:2*e,uid:a()});var h=3.14159*(t.length-2)/t.length,p=2*Math.cos(1.570795-h/2);u.links.push({source:u.nodes[t[f]-1],target:u.nodes[t[(f+2)%t.length]-1],linkType:"fake",value:p});var d=u.nodes[t[f]-1];"x"in d&&(s+=d.x,l+=d.y,c+=1)}return c>0&&(i.x=s/c,i.y=l/c,i.px=i.x,i.py=i.y),u},u.connectFakeNodes=function(){for(var t={},n=u.nodes.filter((function(t){return"middle"==t.nodeType})),e=new Set,r=1;r<=u.nodes.length;r++)t[r]=[];for(r=0;r=0||u.dotBracketBreaks.indexOf(e-2)>=0)&&(i=""),u.nodes.push({name:i,num:e+u.startNumberArray[e-1]-1,radius:5,rna:u,nodeType:"nucleotide",structName:u.structName,elemType:n[e],uid:a(),linked:!1})}for(e=0;e1&&-1===u.dotBracketBreaks.indexOf(e-1)&&-1==u.dotBracketBreaks.indexOf(e-2)&&-1==u.dotBracketBreaks.indexOf(e-3)&&(u.links.push({source:u.nodes[e-2],target:u.nodes[e-1],linkType:"backbone",value:1,uid:a()}),u.nodes[e-1].linked=!0);for(e=0;er)return[];for(;0===t[e];e++)i.push(e);for(;0===t[r];r--)s.push(r);if(e>r){if(i.push(e),0===n)return[["e",n,i.sort(o)]];for(var l=!1,c=[],f=[],h=0;h=0&&(l=!0);return[["h",n,i.sort(o)]]}if(t[e]!=r){var p=i;for(h=e,p.push(h);h<=r;){for(a=a.concat(u.ptToElements(t,n,h,t[h])),p.push(t[h]),h=t[h]+1;0===t[h]&&h<=r;h++)p.push(h);p.push(h)}return p.pop(),(p=p.concat(s)).length>0&&(0===n?a.push(["e",n,p.sort(o)]):a.push(["m",n,p.sort(o)])),a}t[e]===r&&(i.push(e),s.push(r),i.concat(s).length>4&&(0===n?a.push(["e",n,i.concat(s).sort(o)]):a.push(["i",n,i.concat(s).sort(o)])));for(var d=[];t[e]===r&&e0)){eloop=externalLoop[0],nucs=eloop[2].sort(o),prev=nucs[0],hloop=!0,numGreater=0;for(var t=1;t1&&(numGreater+=1),prev=nucs[t];1==numGreater?eloop[0]="h":2==numGreater?eloop[0]="i":eloop[0]="m"}return u},u.reassignLinkUids=function(){for(var t=0;t1&&(u.pseudoknotPairs=u.pseudoknotPairs.concat(r.rnaUtilities.removePseudoknotsFromPairtable(u.pairtable))),u},u.addPseudoknots=function(){for(var t=u.pairtable,n=u.pseudoknotPairs,e=0;e0&&u.recalculateElements()}void 0===String.prototype.trim&&(String.prototype.trim=function(){return String(this).replace(/^\s+|\s+$/g,"")})},function(t,n,e){t.exports=function(t){function n(r){if(e[r])return e[r].exports;var o=e[r]={exports:{},id:r,loaded:!1};return t[r].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var e={};return n.m=t,n.c=e,n.p="",n(0)}([function(t,n,e){t.exports=e(1)},function(t,n){"use strict";function e(){var t=this;t.bracketLeft="([{abcdefghijklmnopqrstuvwxyz".split(""),t.inverseBrackets=function(t){for(var n={},e=0;e=r;r++){e[r]=new Array(n+1);for(var o=r;n>=o;o++)e[r][o]=0}var a=0;for(r=n-0-1;r>0;r--)for(o=r+0+1;n>=o;o++){a=e[r][o-1];for(var i=o-0-1;i>=r;i--)t[i]===o&&(a=Math.max(a,(i>r?e[r][i-1]:0)+1+(o-i-1>0?e[i+1][o-1]:0)));e[r][o]=a}return a=e[1][n],e},t.backtrackMaximumMatching=function(n,e){var r=Array.apply(null,Array(n.length)).map((function(){return 0}));return t.mmBt(n,r,e,1,n.length-1),r},t.mmBt=function(n,e,r,o,a){var i=n[o][a];if(!(0>a-o-1)){if(n[o][a-1]==i)return void t.mmBt(n,e,r,o,a-1);for(var u=a-0-1;u>=o;u--)if(r[a]===u&&(u>o?n[o][u-1]:0)+(a-u-1>0?n[u+1][a-1]:0)+1==i)return e[u]=a,e[a]=u,u>o&&t.mmBt(n,e,r,o,u-1),void t.mmBt(n,e,r,u+1,a-1);console.log("FAILED!!!"+o+","+a+": backtracking failed!")}},t.dotbracketToPairtable=function(n){var e=Array.apply(null,new Array(n.length+1)).map(Number.prototype.valueOf,0);e[0]=n.length;for(var r={},o=0;o0)throw"Unmatched base at position "+r[c][0];return e},t.insertIntoStack=function(t,n,e){for(var r=0;t[r].length>0&&t[r][t[r].length-1]r?t.bracketLeft[t.insertIntoStack(e,r,n[r])]:t.bracketRight[t.deleteFromStack(e,r)]}return a},t.findUnmatched=function(n,e,r){for(var o=[],a=[],i=e,u=r,s=e;r>=s;s++)0!==n[s]&&(n[s]r)&&a.push([s,n[s]]);for(s=i;u>=s;s++){for(;0===n[s]&&u>=s;)s++;for(r=n[s];n[s]===r;)s++,r--;o=o.concat(t.findUnmatched(n,s,r))}return a.length>0&&o.push(a),o},t.removePseudoknotsFromPairtable=function(n){for(var e=t.maximumMatching(n),r=t.backtrackMaximumMatching(e,n),o=[],a=1;aa)return[];for(;0===n[o];o++)s.push(o);for(;0===n[a];a--)l.push(a);if(o>a){if(s.push(o),0===e)return[["e",e,s.sort(r)]];for(var c=!1,f=[],h=[],p=0;p=0&&(c=!0);return[["h",e,s.sort(r)]]}if(n[o]!=a){var d=s;for(p=o,d.push(p);a>=p;){for(u=u.concat(t.ptToElements(n,e,p,n[p],i)),d.push(n[p]),p=n[p]+1;0===n[p]&&a>=p;p++)d.push(p);d.push(p)}return d.pop(),(d=d.concat(l)).length>0&&(0===e?u.push(["e",e,d.sort(r)]):u.push(["m",e,d.sort(r)])),u}if(n[o]===a){s.push(o),l.push(a);var m=s.concat(l);m.length>4&&(0===e?u.push(["e",e,s.concat(l).sort(r)]):u.push(["i",e,s.concat(l).sort(r)]))}for(var g=[];n[o]===a&&a>o;)g.push(o),g.push(a),o+=1,a-=1,e+=1;return s=[o-1],l=[a+1],u.push(["s",e,g.sort(r)]),u.concat(t.ptToElements(n,e,o,a,i))}}Object.defineProperty(n,"__esModule",{value:!0}),n.arraysEqual=function(t,n){if(t===n)return!0;if(null===t||null===n)return!1;if(t.length!=n.length)return!1;for(var e=0;e=u;u++)e.push(u);else console.log("Malformed range (too many dashes):",t)}return e},n.parseColorText=function(t){for(var e=t.split("\n"),r="",o=1,a={colorValues:{"":{}},range:["white","steelblue"]},i=[],u=0;u"!=e[u][0])for(var s=e[u].trim().split(/[\s]+/),l=0;lt&&(r=t),t>o&&(o=t));for(a in n.colorsJson.colorValues[e])"number"==typeof(t=n.colorsJson.colorValues[e][a])&&(n.colorsJson.colorValues[e][a]=(t-r)/(o-r))}return n},n.parseColorText(n.colorsText),n};var r=function(t,n){return t-n};n.rnaUtilities=new e}])},function(t,n,e){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.rnaPlot=function(){var t,n,e={width:400,height:400,nucleotideRadius:5,rnaEdgePadding:0,labelInterval:0,showNucleotideLabels:!0,startNucleotideNumber:1,bundleExternalLinks:!1};function a(a){a.each((function(a){var i=new r.RNAGraph(a.sequence,a.structure,a.name).recalculateElements().elementsToJson().addName(a.name);a.rnaGraph=i;for(var u=(new o.NAView).naview_xy_coordinates(i.pairtable),s=[],l=0;l2&&void 0!==arguments[2]?arguments[2]:"",i=d3.extent(r),u=d3.extent(o),s=30;""!=a&&(u[1]+=s),i[0]-=e.nucleotideRadius+e.rnaEdgePadding,u[0]-=e.nucleotideRadius+e.rnaEdgePadding,i[1]+=e.nucleotideRadius+e.rnaEdgePadding,u[1]+=e.nucleotideRadius+e.rnaEdgePadding;var l,c=i[1]-i[0],f=u[1]-u[0],h=c-e.width,p=f-e.height;function d(t,n,e){var r=(t.range()[1]-t.range()[0])/(t.domain()[1]-t.domain()[0]),o=(n[1]-n[0])*r,a=(e[1]-e[0]-o)/2;return{scaleFactor:r,scale:d3.scale.linear().domain(n).range([e[0]+a,e[1]-a])}}return h>p?(l=d(t=d3.scale.linear().domain(i).range([0,e.width]),u,[0,e.height]),n=l.scale):(l=d(n=d3.scale.linear().domain(u).range([0,e.height]),i,[0,e.width]),t=l.scale),t.range()[0],t.domain()[0],n.range()[0],n.domain()[0],"translate("+-(t.domain()[0]*l.scaleFactor-t.range()[0])+","+-(n.domain()[0]*l.scaleFactor-n.range()[0])+")scale("+l.scaleFactor+")"}(i.nodes.map((function(t){return t.x})),i.nodes.map((function(t){return t.y}))),f=d3.select(this).append("g").attr("transform",c),h=i.nodes.filter((function(t){return"nucleotide"==t.nodeType})),p=i.nodes.filter((function(t){return"label"==t.nodeType})),d=i.links;!function(t,n){n=n.filter((function(t){return null!==t.source&&null!==t.target})),t.selectAll(".rna-link").data(n).enter().append("svg:line").attr("x1",(function(t){return t.source.x})).attr("x2",(function(t){return t.target.x})).attr("y1",(function(t){return t.source.y})).attr("y2",(function(t){return t.target.y})).attr("link-type",(function(t){return t.linkType})).attr("extra-link-type",(function(t){return t.extraLinkType})).classed("rna-link",!0)}(f,d),function(t,n){var r=t.selectAll(".rna-base").data(n).enter().append("svg:g").attr("transform",(function(t){return"translate("+t.x+","+t.y+")"}));r.append("svg:circle").attr("r",e.nucleotideRadius).classed("rna-base",!0),e.showNucleotideLabels&&r.append("svg:text").text((function(t){return t.name})).attr("text-anchor","middle").attr("dominant-baseline","central").classed("nucleotide-label",!0).append("svg:title").text((function(t){return t.struct_name+":"+t.num}))}(f,h),function(t,n){t.selectAll(".rnaLabel").data(n).enter().append("svg:g").attr("transform",(function(t){return"translate("+t.x+","+t.y+")"})).append("svg:text").text((function(t){return t.name})).attr("text-anchor","middle").attr("font-weight","bold").attr("dominant-baseline","central").classed("number-label",!0)}(f,p),function(r,o){r.append("svg:text").attr("transform","translate("+t.invert(e.width/2)+","+n.invert(e.height)+")").attr("dy",-10).classed("rna-name",!0).text(o)}(f,a.name),e.bundleExternalLinks&&function(t,n){var e={},r=[];n=n.filter((function(t){return"correct"==t.linkType||"incorrect"==t.linkType||"extra"==t.linkType})),t.selectAll("[link-type=extra]").remove();for(var o=0;oh);if(g=v-2,v>=2&&(i[d+1+g]+=f,i[m-1-g]+=f,i[d]+=f,i[m]+=f,v>2))for(;g>=1;g--)i[d+g]=Math.PI,i[m-g]=Math.PI;s[++c]=v,h<=p&&t(h,p,r)}else n++,w++,k++;for(M=Math.PI*(w-2)/w,S[++_]=e,y=o<0?0:o,b=1;b<=_;b++){for(x=S[b]-y,g=0;g<=x;g++)i[y+g]+=M;if(b>_)break;y=S[++b]}u[++l]=k})(0,e+1,t),u[l]-=2,r=0,o[0]=100,a[0]=100;var h=[];for(h.push([o[0],a[0]]),n=1;n=0&&(1==++n?e=r:e>r&&(e=r));return t.setMark(!1),e+1}s.prototype.naview_xy_coordinates=function(t){var n,e=[],r=[];if(0===t.length||0===t[0])return 0;this.nbase=t[0],this.bases=[];for(var o=0;on&&e++;0==e&&(this.bases[1].setMate(this.nbase),this.bases[this.nbase].setMate(1))},s.prototype.find_regions=function(){var t,n=null,e=null;t=this.nbase+1;var r=[];for(n=0;nthis.nbase&&(n=0)}while(n!=t);return i},s.prototype.find_central_loop=function(){var t=new u.Loop,n=null,e=null,r=null;for(l.bind(this)(),n=0,e=-1,r=0;rn?(e=t.getDepth(),n=t.getNconnection(),this.root=t):t.getDepth()>e&&t.getNconnection()==n&&(e=t.getDepth(),this.root=t)},s.prototype.traverse_loop=function(t,n){var e,r,o,a,i,u,s,l,c,f,h,p,d,m,g,v,y,b,x,M,w,_,k,S,A,E,T,R,N,P,C,O,L,U,D,z,F,q,j,B,I,X,Y,H,V,G,W,Z,J,$,K,Q,tt,nt,et,rt,ot,at,it,ut,st,lt,ct,ft,ht,pt,dt,mt,gt,vt=0;u=2*Math.PI/(this.nbase+1),b=null,P=-1;var yt=0;for(k=0;null!=(v=t.getConnection(yt));yt++,k++)e=-Math.sin(u*v.getStart()),r=Math.cos(u*v.getStart()),o=-Math.sin(u*v.getEnd()),a=Math.cos(u*v.getEnd())-r,i=e-o,s=Math.sqrt(a*a+i*i),v.setXrad(a/s),v.setYrad(i/s),v.setAngle(Math.atan2(i,a)),v.getAngle()<0&&v.setAngle(v.getAngle()+2*Math.PI),null!=n&&n.getRegion()==v.getRegion()&&(b=v,P=k);t:for(;;){this.determine_radius(t,this.lencut),l=t.getRadius()/this.RADIUS_REDUCTION_FACTOR,null==n?c=f=0:(h=(this.bases[b.getStart()].getX()+this.bases[b.getEnd()].getX())/2,p=(this.bases[b.getStart()].getY()+this.bases[b.getEnd()].getY())/2,c=h-l*b.getXrad(),f=p-l*b.getYrad()),T=-1==P?0:P,v=t.getConnection(T),E=0,C=!1;do{if((w=T-1)<0&&(w=t.getNconnection()-1),x=t.getConnection(w),this.connected_connection(x,v)?(T=w,v=x):C=!0,++E>t.getNconnection()){for(A=-1,k=0;k=t.getNconnection()&&(w=0),v=t.getConnection(k),(ht=(y=t.getConnection(w)).getAngle()-v.getAngle())<0&&(ht+=2*Math.PI),ht>A&&(A=ht,vt=k);R=vt,(T=vt+1)>=t.getNconnection()&&(T=0),(v=t.getConnection(R)).setBroken(!0),C=!0}}while(!C);for(O=!1,G=T;!O;){for(E=0,C=!1,R=T,L=!1;!C;)if(v=t.getConnection(R),R==P&&(L=!0),(w=R+1)>=t.getNconnection()&&(w=0),y=t.getConnection(w),this.connected_connection(v,y)){if(++E>=t.getNconnection())break;R=w}else C=!0;for(k=W=Z=N=this.find_ic_middle(T,R,n,b,t),C=!1,$=0;!C;)(k=$<0?W:0==$?N:Z)>=0&&(v=t.getConnection(k),null!=n&&b==v||(0==$?(d=v.getAngle()-Math.asin(.5/l),m=v.getAngle()+Math.asin(.5/l),this.bases[v.getStart()].setX(c+l*Math.cos(d)),this.bases[v.getStart()].setY(f+l*Math.sin(d)),this.bases[v.getEnd()].setX(c+l*Math.cos(m)),this.bases[v.getEnd()].setY(f+l*Math.sin(m))):$<0?((w=k+1)>=t.getNconnection()&&(w=0),v=t.getConnection(k),y=t.getConnection(w),et=v.getXrad(),rt=v.getYrad(),ht=(v.getAngle()+y.getAngle())/2,v.getAngle()>y.getAngle()&&(ht-=Math.PI),it=Math.cos(ht),lt=Math.sin(ht),ct=-it,(S=y.getAngle()-v.getAngle())<0&&(S+=2*Math.PI),ft=v.isExtruded()?S<=Math.PI/2?2:1.5:1,this.bases[v.getEnd()].setX(this.bases[y.getStart()].getX()+ft*lt),this.bases[v.getEnd()].setY(this.bases[y.getStart()].getY()+ft*ct),this.bases[v.getStart()].setX(this.bases[v.getEnd()].getX()+rt),this.bases[v.getStart()].setY(this.bases[v.getEnd()].getY()-et)):((w=k-1)<0&&(w=t.getNconnection()-1),v=t.getConnection(w),ot=(y=t.getConnection(k)).getXrad(),at=y.getYrad(),ht=(v.getAngle()+y.getAngle())/2,v.getAngle()>y.getAngle()&&(ht-=Math.PI),it=Math.cos(ht),lt=-Math.sin(ht),ct=it,(S=y.getAngle()-v.getAngle())<0&&(S+=2*Math.PI),ft=v.isExtruded()?S<=Math.PI/2?2:1.5:1,this.bases[y.getStart()].setX(this.bases[v.getEnd()].getX()+ft*lt),this.bases[y.getStart()].setY(this.bases[v.getEnd()].getY()+ft*ct),this.bases[y.getEnd()].setX(this.bases[y.getStart()].getX()-at),this.bases[y.getEnd()].setY(this.bases[y.getStart()].getY()+ot)))),$<0?(Z==R?Z=-1:Z>=0&&++Z>=t.getNconnection()&&(Z=0),$=1):(W==T?W=-1:W>=0&&--W<0&&(W=t.getNconnection()-1),$=-1),C=-1==W&&-1==Z;if((J=R+1)>=t.getNconnection()&&(J=0),R!=T&&(T!=G||J!=G))if(v=t.getConnection(T),y=t.getConnection(R),Q=this.bases[y.getEnd()].getX()-this.bases[v.getStart()].getX(),tt=this.bases[y.getEnd()].getY()-this.bases[v.getStart()].getY(),D=this.bases[v.getStart()].getX()+Q/2,z=this.bases[v.getStart()].getY()+tt/2,j=Q/(nt=Math.sqrt(Q*Q+tt*tt)),B=tt/nt,I=c-D,X=f-z,F=(Y=(I/=nt=Math.sqrt(Q*Q+tt*tt))*j+(X/=nt)*B)*j-I,q=Y*B-X,F/=nt=Math.sqrt(F*F+q*q),q/=nt,Q=this.bases[v.getStart()].getX()-c,tt=this.bases[v.getStart()].getY()-f,(ht=Math.atan2(tt,Q))<0&&(ht+=2*Math.PI),Q=this.bases[y.getEnd()].getX()-c,tt=this.bases[y.getEnd()].getY()-f,(pt=Math.atan2(tt,Q))<0&&(pt+=2*Math.PI),ptMath.PI?-1:1)*l*F,V=f+U*l*q,L)c-=H-D,f-=V-z;else for(k=T;M=(v=t.getConnection(k)).getStart(),this.bases[M].setX(this.bases[M].getX()+H-D),this.bases[M].setY(this.bases[M].getY()+V-z),M=v.getEnd(),this.bases[M].setX(this.bases[M].getX()+H-D),this.bases[M].setY(this.bases[M].getY()+V-z),k!=R;)++k>=t.getNconnection()&&(k=0);O=(T=J)==G}for(k=0;k=t.getNconnection()&&(w=0),y=t.getConnection(w),Q=this.bases[v.getEnd()].getX()-c,tt=this.bases[v.getEnd()].getY()-f,st=Math.sqrt(Q*Q+tt*tt),(ht=Math.atan2(tt,Q))<0&&(ht+=2*Math.PI),Q=this.bases[y.getStart()].getX()-c,tt=this.bases[y.getStart()].getY()-f,ut=Math.sqrt(Q*Q+tt*tt),(pt=Math.atan2(tt,Q))<0&&(pt+=2*Math.PI),ptMath.PI)if(v.isExtruded())console.log("Warning from traverse_loop. Loop "+t.getNumber()+" has crossed regions\n");else if(y.getStart()-v.getEnd()!=1){v.setExtruded(!0);continue t}if(v.isExtruded())this.construct_extruded_segment(v,y);else for((_=y.getStart()-v.getEnd())<0&&(_+=this.nbase+1),u=K/_,w=1;w<_;w++)(M=v.getEnd()+w)>this.nbase&&(M-=this.nbase+1),nt=st+(ut-st)*((g=ht+w*u)-ht)/K,this.bases[M].setX(c+nt*Math.cos(g)),this.bases[M].setY(f+nt*Math.sin(g))}break}for(k=0;k=t.getNconnection()&&(w=0),v=t.getConnection(k),y=t.getConnection(w),_+=2,dt+=this.bases[v.getStart()].getX()+this.bases[v.getEnd()].getX(),mt+=this.bases[v.getStart()].getY()+this.bases[v.getEnd()].getY(),!v.isExtruded())for(w=v.getEnd()+1;w!=y.getStart();w++)w>this.nbase&&(w-=this.nbase+1),_++,dt+=this.bases[w].getX(),mt+=this.bases[w].getY();t.setX(dt/_),t.setY(mt/_)},s.prototype.determine_radius=function(t,n){var e,r,a,i,u,s,l,c,f,h,p,d=0,m=new o.Connection,g=new o.Connection;do{for(e=1e10,u=0,i=0,c=0;c=t.getNconnection()&&(f=0),g=t.getConnection(f),h=m.getEnd(),(p=g.getStart())1&&(e=l,d=c);(s=i/u)<.7071068&&(s=.7071068),e*s0?s=t.getRadius():t.setRadius(s)},s.prototype.find_ic_middle=function(t,n,e,r,o){var a,i,u,s,l;for(a=0,i=-1,u=t,l=!1;!l;)a++>2*o.getNconnection()&&console.log("Infinite loop in 'find_ic_middle'"),null!=e&&o.getConnection(u)==r&&(i=u),l=u==n,++u>=o.getNconnection()&&(u=0);if(-1==i){for(s=1,u=t;s<(a+1)/2;s++)++u>=o.getNconnection()&&(u=0);i=u}return i},s.prototype.construct_extruded_segment=function(t,n){var e,r,o,a,i,u,s,l,c,f,h,p,d,m,g,v,y,b;if(e=t.getAngle(),(o=r=n.getAngle())=1.5&&h<=Math.PI/2&&((v=d+1)>this.nbase&&(v-=this.nbase+1),(y=m-1)<0&&(y+=this.nbase+1),this.bases[v].setX(this.bases[d].getX()+.5*i),this.bases[v].setY(this.bases[d].getY()+.5*u),this.bases[y].setX(this.bases[m].getX()-.5*i),this.bases[y].setY(this.bases[m].getY()-.5*u),d=v,m=y);do{b=!1,this.construct_circle_segment(d,m),(v=d+1)>this.nbase&&(v-=this.nbase+1),i=this.bases[v].getX()-this.bases[d].getX(),u=this.bases[v].getY()-this.bases[d].getY(),(s=Math.atan2(u,i))<0&&(s+=2*Math.PI),(p=s-e)<0&&(p+=2*Math.PI),p>Math.PI&&(b=!0),(y=m-1)<0&&(y+=this.nbase+1),i=this.bases[y].getX()-this.bases[m].getX(),u=this.bases[y].getY()-this.bases[m].getY(),(l=Math.atan2(u,i))<0&&(l+=2*Math.PI),(p=r-l)<0&&(p+=2*Math.PI),p>Math.PI&&(b=!0),b&&(c=this.minf2(a,e+.5),this.bases[v].setX(this.bases[d].getX()+Math.cos(c)),this.bases[v].setY(this.bases[d].getY()+Math.sin(c)),d=v,c=this.maxf2(a,o-.5),this.bases[y].setX(this.bases[m].getX()+Math.cos(c)),this.bases[y].setY(this.bases[m].getY()+Math.sin(c)),m=y,g-=2)}while(b&&g>1)}},s.prototype.construct_circle_segment=function(t,n){var e,r,o,a,i,u,s,l,c,f,h,p,d,m,g;if(e=this.bases[n].getX()-this.bases[t].getX(),r=this.bases[n].getY()-this.bases[t].getY(),o=Math.sqrt(e*e+r*r),(d=n-t)<0&&(d+=this.nbase+1),o>=d)for(e/=o,r/=o,m=1;mthis.nbase&&(g-=this.nbase+1),this.bases[g].setX(this.bases[t].getX()+e*m/d),this.bases[g].setY(this.bases[t].getY()+r*m/d);else for(this.find_center_for_arc(d-1,o),e/=o,r/=o,a=this.bases[t].getX()+e*o/2,i=this.bases[t].getY()+r*o/2,u=r,s=-e,l=a+this._h*u,c=i+this._h*s,f=this.bases[t].getX()-l,h=this.bases[t].getY()-c,o=Math.sqrt(f*f+h*h),p=Math.atan2(h,f),m=1;mthis.nbase&&(g-=this.nbase+1),this.bases[g].setX(l+o*Math.cos(p+m*this.angleinc)),this.bases[g].setY(c+o*Math.sin(p+m*this.angleinc))},s.prototype.find_center_for_arc=function(t,n){var e,r,o,a,i,u,s,l;o=-(r=(t+1)/Math.PI)-n/(t+1.000001-n),n<1&&(o=0),l=0;do{e=(r+o)/2,i=1-.5/((a=Math.sqrt(e*e+n*n/4))*a),Math.abs(i)>1&&console.log("Unexpected large magnitude discriminant = "+i+" "+a),(s=(u=Math.acos(i))*(t+1)+2*Math.acos(e/a)-2*Math.PI)>0?o=e:r=e}while(Math.abs(s)>1e-4&&++l=this.MAXITER&&(noIterationFailureYet&&(console.log("Iteration failed in find_center_for_arc"),noIterationFailureYet=!1),e=0,u=0),this._h=e,this.angleinc=u},s.prototype.generate_region=function(t){var n,e,r,o,a,i;for(i=t.getRegion(),n=0,t.getStart()==i.getStart1()?(e=i.getStart1(),r=i.getEnd1()):(e=i.getStart2(),r=i.getEnd2()),(this.bases[t.getStart()].getX()>this.ANUM-100||this.bases[t.getEnd()].getX()>this.ANUM-100)&&console.log("Bad region passed to generate_region. Coordinates not defined."),o=e+1;o<=r;o++)n++,this.bases[o].setX(this.bases[t.getStart()].getX()+this.HELIX_FACTOR*n*t.getXrad()),this.bases[o].setY(this.bases[t.getStart()].getY()+this.HELIX_FACTOR*n*t.getYrad()),a=this.bases[o].getMate(),this.bases[a].setX(this.bases[t.getEnd()].getX()+this.HELIX_FACTOR*n*t.getXrad()),this.bases[a].setY(this.bases[t.getEnd()].getY()+this.HELIX_FACTOR*n*t.getYrad())},s.prototype.minf2=function(t,n){return tn?t:n},s.prototype.connected_connection=function(t,n){return!!t.isExtruded()||t.getEnd()+1==n.getStart()}},function(t,n){"use strict";function e(){this.radius=null,this.loopnumber=null,this.next=null,this.prev=null}Object.defineProperty(n,"__esModule",{value:!0}),n.Radloop=e,e.prototype.getRadius=function(){return this.radius},e.prototype.setRadius=function(t){this.radius=t},e.prototype.getLoopnumber=function(){return this.loopnumber},e.prototype.setLoopnumber=function(t){this.loopnumber=t},e.prototype.getNext=function(){return this.next},e.prototype.setNext=function(t){this.next=t},e.prototype.getPrev=function(){return this.prev},e.prototype.setPrev=function(t){this.prev=t}},function(t,n,e){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.Connection=a;var r=e(8),o=e(9);function a(){this.loop=new r.Loop,this.region=new o.Region,this.start=null,this.end=null,this.xrad=null,this.yrad=null,this.angle=null,this.extruded=null,this.broken=null,this._isNull=!1}a.prototype.isNull=function(){return this._isNull},a.prototype.setNull=function(t){this._isNull=t},a.prototype.getLoop=function(){return this.loop},a.prototype.setLoop=function(t){this.loop=t},a.prototype.getRegion=function(){return this.region},a.prototype.setRegion=function(t){this.region=t},a.prototype.getStart=function(){return this.start},a.prototype.setStart=function(t){this.start=t},a.prototype.getEnd=function(){return this.end},a.prototype.setEnd=function(t){this.end=t},a.prototype.getXrad=function(){return this.xrad},a.prototype.setXrad=function(t){this.xrad=t},a.prototype.getYrad=function(){return this.yrad},a.prototype.setYrad=function(t){this.yrad=t},a.prototype.getAngle=function(){return this.angle},a.prototype.setAngle=function(t){this.angle=t},a.prototype.isExtruded=function(){return this.extruded},a.prototype.setExtruded=function(t){this.extruded=t},a.prototype.isBroken=function(){return this.broken},a.prototype.setBroken=function(t){this.broken=t}},function(t,n,e){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.Loop=o;var r=e(7);function o(){this.nconnection=null,this.connections=[],this._connections=[],this.number=null,this.depth=null,this.mark=null,this.x=null,this.y=null,this.radius=null}o.prototype.getNconnection=function(){return this.nconnection},o.prototype.setNconnection=function(t){this.nconnection=t},o.prototype.setConnection=function(t,n){null!=n?this._connections[t]=n:(this._connections[t]||(this._connections[t]=new r.Connection),this._connections[t].setNull(!0))},o.prototype.getConnection=function(t){var n=e(7);this._connections[t]||(this._connections[t]=new n);var r=this._connections[t];return r.isNull()?null:r},o.prototype.addConnection=function(t,n){this._connections.push(n)},o.prototype.getNumber=function(){return this.number},o.prototype.setNumber=function(t){this.number=t},o.prototype.getDepth=function(){return this.depth},o.prototype.setDepth=function(t){this.depth=t},o.prototype.isMark=function(){return this.mark},o.prototype.setMark=function(t){this.mark=t},o.prototype.getX=function(){return this.x},o.prototype.setX=function(t){this.x=t},o.prototype.getY=function(){return this.y},o.prototype.setY=function(t){this.y=t},o.prototype.getRadius=function(){return this.radius},o.prototype.setRadius=function(t){this.radius=t}},function(t,n){"use strict";function e(){this._start1=null,this._end1=null,this._start2=null,this._end2=null}Object.defineProperty(n,"__esModule",{value:!0}),n.Region=e,e.prototype.getStart1=function(){return this._start1},e.prototype.setStart1=function(t){this._start1=t},e.prototype.getEnd1=function(){return this._end1},e.prototype.setEnd1=function(t){this._end1=t},e.prototype.getStart2=function(){return this._start2},e.prototype.setStart2=function(t){this._start2=t},e.prototype.getEnd2=function(){return this._end2},e.prototype.setEnd2=function(t){this._end2=t}},function(t,n,e){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.Base=o;var r=e(9);function o(){this.mate=null,this.x=null,this.y=null,this.extracted=null,this.region=new r.Region}o.prototype.getMate=function(){return this.mate},o.prototype.setMate=function(t){this.mate=t},o.prototype.getX=function(){return this.x},o.prototype.setX=function(t){this.x=t},o.prototype.getY=function(){return this.y},o.prototype.setY=function(t){this.y=t},o.prototype.isExtracted=function(){return this.extracted},o.prototype.setExtracted=function(t){this.extracted=t},o.prototype.getRegion=function(){return this.region},o.prototype.setRegion=function(t){this.region=t}},function(t,n,e){var r=e(12);"string"==typeof r&&(r=[[t.id,r,""]]),e(14)(r,{}),r.locals&&(t.exports=r.locals)},function(t,n,e){(t.exports=e(13)()).push([t.id,'.forna-container .structure-background-rect {\r\n stroke: black;\r\n stroke-width: 5;\r\n fill: transparent;\r\n}\r\n\r\n.forna-container circle.rna-base {\r\n stroke: #ccc;\r\n stroke-width: 1px;\r\n opacity: 1;\r\n fill: white;\r\n}\r\n\r\n.forna-container circle.rna-base.label {\r\n stroke: transparent;\r\n stroke-width: 0;\r\n fill: white;\r\n}\r\n\r\n.forna-container line.link {\r\n stroke: #999;\r\n stroke-opacity: 0.8;\r\n stroke-width: 2;\r\n}\r\n\r\n.forna-container line.rna-link {\r\n stroke: #999;\r\n stroke-opacity: 0.8;\r\n stroke-width: 2;\r\n}\r\n\r\n.forna-container .overlay {\r\n fill: transparent;\r\n}\r\n\r\n.forna-container .rna-name {\r\n text-anchor: middle;\r\n dy: -10;\r\n font-family: Tahoma, Geneva, sans-serif;\r\n font-size: 8pt;\r\n}\r\n\r\n.forna-container line.rna-link[link-type="backbone"] {\r\n stroke: transparent;\r\n}\r\n\r\n.forna-container line.rna-link[link-type="basepair"] {\r\n stroke: transparent;\r\n}\r\n\r\n.forna-container line.rna-link[link-type="fake"] {\r\n stroke: transparent;\r\n}\r\n\r\n.forna-container line.rna-link[link-type="extra"] {\r\n stroke: grey;\r\n}\r\n\r\n.forna-container line.rna-link[extra-link-type="correct"] {\r\n stroke: green;\r\n}\r\n\r\n.forna-container line.rna-link[extra-link-type="incorrect"] {\r\n stroke: green;\r\n}\r\n\r\n\r\n.forna-container path {\r\n stroke-width: 2;\r\n}\r\n\r\n.forna-container path[extra-link-type="correct"] {\r\n stroke: green;\r\n}\r\n\r\n.forna-container path[extra-link-type="incorrect"] {\r\n stroke: red;\r\n}\r\n\r\n\r\n.forna-container line.basepair {\r\n stroke: red;\r\n}\r\n\r\n.forna-container line.intermolecule {\r\n stroke: blue;\r\n}\r\n\r\n.forna-container line.chain_chain {\r\n stroke-dasharray: 3,3;\r\n}\r\n\r\n.forna-container line.fake {\r\n stroke: green;\r\n}\r\n\r\n.forna-container .transparent {\r\n fill: transparent;\r\n stroke-width: 0;\r\n stroke-opacity: 0;\r\n opacity: 0;\r\n}\r\n\r\n.forna-container .d3-tip {\r\n line-height: 1;\r\n font-weight: bold;\r\n padding: 6px;\r\n background: rgba(0, 0, 0, 0.6);\r\n color: #fff;\r\n border-radius: 4px;\r\n pointer-events: none;\r\n}\r\n\r\n.forna-container text.nucleotide-label {\r\n font-size: 5.5pt;\r\n font-weight: bold;\r\n font-family: Tahoma, Geneva, sans-serif;\r\n color: rgb(100,100,100);\r\n pointer-events: none;\r\n}\r\n\r\n.forna-container text.number-label {\r\n font-size: 5.5pt;\r\n font-weight: bold;\r\n font-family: Tahoma, Geneva, sans-serif;\r\n color: rgb(100,100,100);\r\n pointer-events: none;\r\n}\r\n\r\n.forna-container text {\r\n pointer-events: none;\r\n}\r\n\r\n.forna-container g.gnode {\r\n\r\n}\r\n\r\n.forna-container .brush .extent {\r\n fill-opacity: .1;\r\n stroke: #fff;\r\n shape-rendering: crispEdges;\r\n}\r\n\r\n.forna-container .noselect {\r\n -webkit-touch-callout: none;\r\n -webkit-user-select: none;\r\n -khtml-user-select: none;\r\n -moz-user-select: none;\r\n -ms-user-select: none;\r\n user-select: none;\r\n}\r\n',""])},function(t,n){t.exports=function(){var t=[];return t.toString=function(){for(var t=[],n=0;n=0&&l.splice(n,1)}function d(t){var n=document.createElement("style");return n.type="text/css",h(t,n),n}function m(t,n){var e,r,o;if(n.singleton){var a=s++;e=u||(u=d(n)),r=y.bind(null,e,a,!1),o=y.bind(null,e,a,!0)}else t.sourceMap&&"function"==typeof URL&&"function"==typeof URL.createObjectURL&&"function"==typeof URL.revokeObjectURL&&"function"==typeof Blob&&"function"==typeof btoa?(e=function(t){var n=document.createElement("link");return n.rel="stylesheet",h(t,n),n}(n),r=x.bind(null,e),o=function(){p(e),e.href&&URL.revokeObjectURL(e.href)}):(e=d(n),r=b.bind(null,e),o=function(){p(e)});return r(t),function(n){if(n){if(n.css===t.css&&n.media===t.media&&n.sourceMap===t.sourceMap)return;r(t=n)}else o()}}t.exports=function(t,n){void 0===(n=n||{}).singleton&&(n.singleton=a()),void 0===n.insertAt&&(n.insertAt="bottom");var e=f(t);return c(e,n),function(t){for(var o=[],a=0;an?1:t>=n?0:NaN}function v(t){return null===t?NaN:+t}function y(t){return!isNaN(t)}function b(t){return{left:function(n,e,r,o){for(arguments.length<3&&(r=0),arguments.length<4&&(o=n.length);r>>1;t(n[a],e)<0?r=a+1:o=a}return r},right:function(n,e,r,o){for(arguments.length<3&&(r=0),arguments.length<4&&(o=n.length);r>>1;t(n[a],e)>0?o=a:r=a+1}return r}}}a.ascending=g,a.descending=function(t,n){return nt?1:n>=t?0:NaN},a.min=function(t,n){var e,r,o=-1,a=t.length;if(1===arguments.length){for(;++o=r){e=r;break}for(;++or&&(e=r)}else{for(;++o=r){e=r;break}for(;++or&&(e=r)}return e},a.max=function(t,n){var e,r,o=-1,a=t.length;if(1===arguments.length){for(;++o=r){e=r;break}for(;++oe&&(e=r)}else{for(;++o=r){e=r;break}for(;++oe&&(e=r)}return e},a.extent=function(t,n){var e,r,o,a=-1,i=t.length;if(1===arguments.length){for(;++a=r){e=o=r;break}for(;++ar&&(e=r),o=r){e=o=r;break}for(;++ar&&(e=r),o1)return i/(s-1)},a.deviation=function(){var t=a.variance.apply(this,arguments);return t?Math.sqrt(t):t};var x=b(g);function M(t){return t.length}a.bisectLeft=x.left,a.bisect=a.bisectRight=x.right,a.bisector=function(t){return b(1===t.length?function(n,e){return g(t(n),e)}:t)},a.shuffle=function(t,n,e){(a=arguments.length)<3&&(e=t.length,a<2&&(n=0));for(var r,o,a=e-n;a;)o=Math.random()*a--|0,r=t[a+n],t[a+n]=t[o+n],t[o+n]=r;return t},a.permute=function(t,n){for(var e=n.length,r=new Array(e);e--;)r[e]=t[n[e]];return r},a.pairs=function(t){for(var n=0,e=t.length-1,r=t[0],o=new Array(e<0?0:e);n=0;)for(n=(r=t[o]).length;--n>=0;)e[--i]=r[n];return e};var w=Math.abs;function _(t){for(var n=1;t*n%1;)n*=10;return n}function k(t,n){for(var e in n)Object.defineProperty(t.prototype,e,{value:n[e],enumerable:!1})}function S(){this._=Object.create(null)}function A(t){return"__proto__"==(t+="")||"\0"===t[0]?"\0"+t:t}function E(t){return"\0"===(t+="")[0]?t.slice(1):t}function T(t){return A(t)in this._}function R(t){return(t=A(t))in this._&&delete this._[t]}function N(){var t=[];for(var n in this._)t.push(E(n));return t}function P(){var t=0;for(var n in this._)++t;return t}function C(){for(var t in this._)return!1;return!0}function O(){this._=Object.create(null)}function L(t){return t}function U(t,n,e){return function(){var r=e.apply(n,arguments);return r===n?t:r}}function D(t,n){if(n in t)return n;n=n.charAt(0).toUpperCase()+n.slice(1);for(var e=0,r=z.length;en;)o.push(r/a);else for(;(r=t+e*++i)=r.length)return n?n.call(e,a):t?a.sort(t):a;for(var s,l,c,f,h=-1,p=a.length,d=r[u++],m=new S;++h=r.length)return n;var a=[],i=o[e++];return n.forEach((function(n,r){a.push({key:n,values:t(r,e)})})),i?a.sort((function(t,n){return i(t.key,n.key)})):a}(i(a.map,t,0),0)},e.key=function(t){return r.push(t),e},e.sortKeys=function(t){return o[r.length-1]=t,e},e.sortValues=function(n){return t=n,e},e.rollup=function(t){return n=t,e},e},a.set=function(t){var n=new O;if(t)for(var e=0,r=t.length;e=0&&(r=t.slice(e+1),t=t.slice(0,e)),t)return arguments.length<2?this[t].on(r):this[t].on(r,n);if(2===arguments.length){if(null==n)for(t in this)this.hasOwnProperty(t)&&this[t].on(r,null);return this}},a.event=null,a.requote=function(t){return t.replace(Y,"\\$&")};var Y=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g,H={}.__proto__?function(t,n){t.__proto__=n}:function(t,n){for(var e in n)t[e]=n[e]};function V(t){return H(t,J),t}var G=function(t,n){return n.querySelector(t)},W=function(t,n){return n.querySelectorAll(t)},Z=function(t,n){var e=t.matches||t[D(t,"matchesSelector")];return(Z=function(t,n){return e.call(t,n)})(t,n)};"function"==typeof Sizzle&&(G=function(t,n){return Sizzle(t,n)[0]||null},W=Sizzle,Z=Sizzle.matchesSelector),a.selection=function(){return a.select(s.documentElement)};var J=a.selection.prototype=[];function $(t){return"function"==typeof t?t:function(){return G(t,this)}}function K(t){return"function"==typeof t?t:function(){return W(t,this)}}J.select=function(t){var n,e,r,o,a=[];t=$(t);for(var i=-1,u=this.length;++i=0&&"xmlns"!==(e=t.slice(0,n))&&(t=t.slice(n+1)),tt.hasOwnProperty(e)?{space:tt[e],local:t}:t}},J.attr=function(t,n){if(arguments.length<2){if("string"==typeof t){var e=this.node();return(t=a.ns.qualify(t)).local?e.getAttributeNS(t.space,t.local):e.getAttribute(t)}for(n in t)this.each(nt(n,t[n]));return this}return this.each(nt(t,n))},J.classed=function(t,n){if(arguments.length<2){if("string"==typeof t){var e=this.node(),r=(t=ot(t)).length,o=-1;if(n=e.classList){for(;++o=0;)(e=r[o])&&(a&&a!==e.nextSibling&&a.parentNode.insertBefore(e,a),a=e);return this},J.sort=function(t){t=pt.apply(this,arguments);for(var n=-1,e=this.length;++n=n&&(n=o+1);!(i=u[n])&&++n0&&(t=t.slice(0,o));var s=bt.get(t);function l(){var n=this[r];n&&(this.removeEventListener(t,n,n.$),delete this[r])}return s&&(t=s,i=Mt),o?n?function(){var o=i(n,u(arguments));l.call(this),this.addEventListener(t,this[r]=o,o.$=e),o._=n}:l:n?F:function(){var n,e=new RegExp("^__on([^.]+)"+a.requote(t)+"$");for(var r in this)if(n=r.match(e)){var o=this[r];this.removeEventListener(n[1],o,o.$),delete this[r]}}}a.selection.enter=mt,a.selection.enter.prototype=gt,gt.append=J.append,gt.empty=J.empty,gt.node=J.node,gt.call=J.call,gt.size=J.size,gt.select=function(t){for(var n,e,r,o,a,i=[],u=-1,s=this.length;++u0?1:t<0?-1:0}function zt(t,n,e){return(n[0]-t[0])*(e[1]-t[1])-(n[1]-t[1])*(e[0]-t[0])}function Ft(t){return t>1?0:t<-1?Nt:Math.acos(t)}function qt(t){return t>1?Ot:t<-1?-Ot:Math.asin(t)}function jt(t){return((t=Math.exp(t))+1/t)/2}function Bt(t){return(t=Math.sin(t/2))*t}var It=Math.SQRT2;a.interpolateZoom=function(t,n){var e,r,o=t[0],a=t[1],i=t[2],u=n[0],s=n[1],l=n[2],c=u-o,f=s-a,h=c*c+f*f;if(h0&&(t=t.transition().duration(m)),t.call(w.event)}function E(){u&&u.domain(i.range().map((function(t){return(t-h.x)/h.k})).map(i.invert)),f&&f.domain(l.range().map((function(t){return(t-h.y)/h.k})).map(l.invert))}function T(t){g++||t({type:"zoomstart"})}function R(t){E(),t({type:"zoom",scale:h.k,translate:[h.x,h.y]})}function N(t){--g||(t({type:"zoomend"}),n=null)}function P(){var t=this,n=M.of(t,arguments),e=0,r=a.select(c(t)).on(y,u).on(b,s),o=_(a.mouse(t)),i=kt(t);function u(){e=1,S(a.mouse(t),o),R(n)}function s(){r.on(y,null).on(b,null),i(e),N(n)}Mu.call(t),T(n)}function C(){var t,n=this,e=M.of(n,arguments),r={},i=0,u=".zoom-"+a.event.changedTouches[0].identifier,s="touchmove"+u,l="touchend"+u,c=[],f=a.select(n),p=kt(n);function d(){var e=a.touches(n);return t=h.k,e.forEach((function(t){t.identifier in r&&(r[t.identifier]=_(t))})),e}function m(){var t=a.event.target;a.select(t).on(s,g).on(l,y),c.push(t);for(var e=a.event.changedTouches,u=0,f=e.length;u1){v=p[0];var b=p[1],x=v[0]-b[0],M=v[1]-b[1];i=x*x+M*M}}function g(){var u,s,l,c,f=a.touches(n);Mu.call(n);for(var h=0,p=f.length;h360?t-=360:t<0&&(t+=360),t<60?r+(o-r)*t/60:t<180?o:t<240?r+(o-r)*(240-t)/60:r}(t))}return t=isNaN(t)?0:(t%=360)<0?t+360:t,n=isNaN(n)?0:n<0?0:n>1?1:n,r=2*(e=e<0?0:e>1?1:e)-(o=e<=.5?e*(1+n):e+n-e*n),new sn(a(t+120),a(t),a(t-120))}function Jt(t,n,e){return this instanceof Jt?(this.h=+t,this.c=+n,void(this.l=+e)):arguments.length<2?t instanceof Jt?new Jt(t.h,t.c,t.l):rn(t instanceof Qt?t.l:(t=mn((t=a.rgb(t)).r,t.g,t.b)).l,t.a,t.b):new Jt(t,n,e)}Wt.brighter=function(t){return t=Math.pow(.7,arguments.length?t:1),new Gt(this.h,this.s,this.l/t)},Wt.darker=function(t){return t=Math.pow(.7,arguments.length?t:1),new Gt(this.h,this.s,t*this.l)},Wt.rgb=function(){return Zt(this.h,this.s,this.l)},a.hcl=Jt;var $t=Jt.prototype=new Vt;function Kt(t,n,e){return isNaN(t)&&(t=0),isNaN(n)&&(n=0),new Qt(e,Math.cos(t*=Lt)*n,Math.sin(t)*n)}function Qt(t,n,e){return this instanceof Qt?(this.l=+t,this.a=+n,void(this.b=+e)):arguments.length<2?t instanceof Qt?new Qt(t.l,t.a,t.b):t instanceof Jt?Kt(t.h,t.c,t.l):mn((t=sn(t)).r,t.g,t.b):new Qt(t,n,e)}$t.brighter=function(t){return new Jt(this.h,this.c,Math.min(100,this.l+tn*(arguments.length?t:1)))},$t.darker=function(t){return new Jt(this.h,this.c,Math.max(0,this.l-tn*(arguments.length?t:1)))},$t.rgb=function(){return Kt(this.h,this.c,this.l).rgb()},a.lab=Qt;var tn=18,nn=Qt.prototype=new Vt;function en(t,n,e){var r=(t+16)/116,o=r+n/500,a=r-e/200;return new sn(un(3.2404542*(o=.95047*on(o))-1.5371385*(r=1*on(r))-.4985314*(a=1.08883*on(a))),un(-.969266*o+1.8760108*r+.041556*a),un(.0556434*o-.2040259*r+1.0572252*a))}function rn(t,n,e){return t>0?new Jt(Math.atan2(e,n)*Ut,Math.sqrt(n*n+e*e),t):new Jt(NaN,NaN,t)}function on(t){return t>.206893034?t*t*t:(t-4/29)/7.787037}function an(t){return t>.008856?Math.pow(t,1/3):7.787037*t+4/29}function un(t){return Math.round(255*(t<=.00304?12.92*t:1.055*Math.pow(t,1/2.4)-.055))}function sn(t,n,e){return this instanceof sn?(this.r=~~t,this.g=~~n,void(this.b=~~e)):arguments.length<2?t instanceof sn?new sn(t.r,t.g,t.b):pn(""+t,sn,Zt):new sn(t,n,e)}function ln(t){return new sn(t>>16,t>>8&255,255&t)}function cn(t){return ln(t)+""}nn.brighter=function(t){return new Qt(Math.min(100,this.l+tn*(arguments.length?t:1)),this.a,this.b)},nn.darker=function(t){return new Qt(Math.max(0,this.l-tn*(arguments.length?t:1)),this.a,this.b)},nn.rgb=function(){return en(this.l,this.a,this.b)},a.rgb=sn;var fn=sn.prototype=new Vt;function hn(t){return t<16?"0"+Math.max(0,t).toString(16):Math.min(255,t).toString(16)}function pn(t,n,e){var r,o,a,i=0,u=0,s=0;if(r=/([a-z]+)\((.*)\)/.exec(t=t.toLowerCase()))switch(o=r[2].split(","),r[1]){case"hsl":return e(parseFloat(o[0]),parseFloat(o[1])/100,parseFloat(o[2])/100);case"rgb":return n(vn(o[0]),vn(o[1]),vn(o[2]))}return(a=yn.get(t))?n(a.r,a.g,a.b):(null==t||"#"!==t.charAt(0)||isNaN(a=parseInt(t.slice(1),16))||(4===t.length?(i=(3840&a)>>4,i|=i>>4,u=240&a,u|=u>>4,s=15&a,s|=s<<4):7===t.length&&(i=(16711680&a)>>16,u=(65280&a)>>8,s=255&a)),n(i,u,s))}function dn(t,n,e){var r,o,a=Math.min(t/=255,n/=255,e/=255),i=Math.max(t,n,e),u=i-a,s=(i+a)/2;return u?(o=s<.5?u/(i+a):u/(2-i-a),r=t==i?(n-e)/u+(n0&&s<1?0:r),new Gt(r,o,s)}function mn(t,n,e){var r=an((.4124564*(t=gn(t))+.3575761*(n=gn(n))+.1804375*(e=gn(e)))/.95047),o=an((.2126729*t+.7151522*n+.072175*e)/1);return Qt(116*o-16,500*(r-o),200*(o-an((.0193339*t+.119192*n+.9503041*e)/1.08883)))}function gn(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function vn(t){var n=parseFloat(t);return"%"===t.charAt(t.length-1)?Math.round(2.55*n):n}fn.brighter=function(t){t=Math.pow(.7,arguments.length?t:1);var n=this.r,e=this.g,r=this.b,o=30;return n||e||r?(n&&n=200&&n<300||304===n){try{t=e.call(o,l)}catch(t){return void i.error.call(o,t)}i.load.call(o,t)}else i.error.call(o,l)}return!this.XDomainRequest||"withCredentials"in l||!/^(http(s)?:)?\/\//.test(t)||(l=new XDomainRequest),"onload"in l?l.onload=l.onerror=f:l.onreadystatechange=function(){l.readyState>3&&f()},l.onprogress=function(t){var n=a.event;a.event=t;try{i.progress.call(o,l)}finally{a.event=n}},o.header=function(t,n){return t=(t+"").toLowerCase(),arguments.length<2?s[t]:(null==n?delete s[t]:s[t]=n+"",o)},o.mimeType=function(t){return arguments.length?(n=null==t?null:t+"",o):n},o.responseType=function(t){return arguments.length?(c=t,o):c},o.response=function(t){return e=t,o},["get","post"].forEach((function(t){o[t]=function(){return o.send.apply(o,[t].concat(u(arguments)))}})),o.send=function(e,r,a){if(2===arguments.length&&"function"==typeof r&&(a=r,r=null),l.open(e,t,!0),null==n||"accept"in s||(s.accept=n+",*/*"),l.setRequestHeader)for(var u in s)l.setRequestHeader(u,s[u]);return null!=n&&l.overrideMimeType&&l.overrideMimeType(n),null!=c&&(l.responseType=c),null!=a&&o.on("error",a).on("load",(function(t){a(null,t)})),i.beforesend.call(o,l),l.send(null==r?null:r),o},o.abort=function(){return l.abort(),o},a.rebind(o,i,"on"),null==r?o:o.get(function(t){return 1===t.length?function(n,e){t(null==n?e:null)}:t}(r))}yn.forEach((function(t,n){yn.set(t,ln(n))})),a.functor=bn,a.xhr=xn(L),a.dsv=function(t,n){var e=new RegExp('["'+t+"\n]"),r=t.charCodeAt(0);function o(t,e,r){arguments.length<3&&(r=e,e=null);var o=Mn(t,n,null==e?a:i(e),r);return o.row=function(t){return arguments.length?o.response(null==(e=t)?a:i(t)):e},o}function a(t){return o.parse(t.responseText)}function i(t){return function(n){return o.parse(n.responseText,t)}}function u(n){return n.map(s).join(t)}function s(t){return e.test(t)?'"'+t.replace(/\"/g,'""')+'"':t}return o.parse=function(t,n){var e;return o.parseRows(t,(function(t,r){if(e)return e(t,r-1);var o=new Function("d","return {"+t.map((function(t,n){return JSON.stringify(t)+": d["+n+"]"})).join(",")+"}");e=n?function(t,e){return n(o(t),e)}:o}))},o.parseRows=function(t,n){var e,o,a={},i={},u=[],s=t.length,l=0,c=0;function f(){if(l>=s)return i;if(o)return o=!1,a;var n=l;if(34===t.charCodeAt(n)){for(var e=n;e++24?(isFinite(n)&&(clearTimeout(Sn),Sn=setTimeout(Tn,n)),kn=0):(kn=1,An(Tn))}function Rn(){for(var t=Date.now(),n=wn;n;)t>=n.t&&n.c(t-n.t)&&(n.c=null),n=n.n;return t}function Nn(){for(var t,n=wn,e=1/0;n;)n.c?(n.t8?function(t){return t/e}:function(t){return t*e},symbol:t}}));function On(t){var n=t.decimal,e=t.thousands,r=t.grouping,o=t.currency,i=r&&e?function(t,n){for(var o=t.length,a=[],i=0,u=r[0],s=0;o>0&&u>0&&(s+u+1>n&&(u=Math.max(1,n-s)),a.push(t.substring(o-=u,o+u)),!((s+=u+1)>n));)u=r[i=(i+1)%r.length];return a.reverse().join(e)}:L;return function(t){var e=Ln.exec(t),r=e[1]||" ",u=e[2]||">",s=e[3]||"-",l=e[4]||"",c=e[5],f=+e[6],h=e[7],p=e[8],d=e[9],m=1,g="",v="",y=!1,b=!0;switch(p&&(p=+p.substring(1)),(c||"0"===r&&"="===u)&&(c=r="0",u="="),d){case"n":h=!0,d="g";break;case"%":m=100,v="%",d="f";break;case"p":m=100,v="%",d="r";break;case"b":case"o":case"x":case"X":"#"===l&&(g="0"+d.toLowerCase());case"c":b=!1;case"d":y=!0,p=0;break;case"s":m=-1,d="r"}"$"===l&&(g=o[0],v=o[1]),"r"!=d||p||(d="g"),null!=p&&("g"==d?p=Math.max(1,Math.min(21,p)):"e"!=d&&"f"!=d||(p=Math.max(0,Math.min(20,p)))),d=Un.get(d)||Dn;var x=c&&h;return function(t){var e=v;if(y&&t%1)return"";var o=t<0||0===t&&1/t<0?(t=-t,"-"):"-"===s?"":s;if(m<0){var l=a.formatPrefix(t,p);t=l.scale(t),e=l.symbol+v}else t*=m;var M,w,_=(t=d(t,p)).lastIndexOf(".");if(_<0){var k=b?t.lastIndexOf("e"):-1;k<0?(M=t,w=""):(M=t.substring(0,k),w=t.substring(k))}else M=t.substring(0,_),w=n+t.substring(_+1);!c&&h&&(M=i(M,1/0));var S=g.length+M.length+w.length+(x?0:o.length),A=S"===u?A+o+t:"^"===u?A.substring(0,S>>=1)+o+t+A.substring(S):o+(x?t:A+t))+e}}}a.formatPrefix=function(t,n){var e=0;return(t=+t)&&(t<0&&(t*=-1),n&&(t=a.round(t,Pn(t,n))),e=1+Math.floor(1e-12+Math.log(t)/Math.LN10),e=Math.max(-24,Math.min(24,3*Math.floor((e-1)/3)))),Cn[8+e/3]};var Ln=/(?:([^{])?([<>=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i,Un=a.map({b:function(t){return t.toString(2)},c:function(t){return String.fromCharCode(t)},o:function(t){return t.toString(8)},x:function(t){return t.toString(16)},X:function(t){return t.toString(16).toUpperCase()},g:function(t,n){return t.toPrecision(n)},e:function(t,n){return t.toExponential(n)},f:function(t,n){return t.toFixed(n)},r:function(t,n){return(t=a.round(t,Pn(t,n))).toFixed(Math.max(0,Math.min(20,Pn(t*(1+1e-15),n))))}});function Dn(t){return t+""}var zn=a.time={},Fn=Date;function qn(){this._=new Date(arguments.length>1?Date.UTC.apply(this,arguments):arguments[0])}qn.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(){jn.setUTCDate.apply(this._,arguments)},setDay:function(){jn.setUTCDay.apply(this._,arguments)},setFullYear:function(){jn.setUTCFullYear.apply(this._,arguments)},setHours:function(){jn.setUTCHours.apply(this._,arguments)},setMilliseconds:function(){jn.setUTCMilliseconds.apply(this._,arguments)},setMinutes:function(){jn.setUTCMinutes.apply(this._,arguments)},setMonth:function(){jn.setUTCMonth.apply(this._,arguments)},setSeconds:function(){jn.setUTCSeconds.apply(this._,arguments)},setTime:function(){jn.setTime.apply(this._,arguments)}};var jn=Date.prototype;function Bn(t,n,e){function r(n){var e=t(n),r=a(e,1);return n-e1)for(;i=l)return-1;if(37===(o=n.charCodeAt(u++))){if(i=n.charAt(u++),!(a=w[i in Yn?n.charAt(u++):i])||(r=a(t,e,r))<0)return-1}else if(o!=e.charCodeAt(r++))return-1}return r}c.utc=function(t){var n=c(t);function e(t){try{var e=new(Fn=qn);return e._=t,n(e)}finally{Fn=Date}}return e.parse=function(t){try{Fn=qn;var e=n.parse(t);return e&&e._}finally{Fn=Date}},e.toString=n.toString,e},c.multi=c.utc.multi=fe;var h=a.map(),p=Wn(i),d=Zn(i),m=Wn(u),g=Zn(u),v=Wn(s),y=Zn(s),b=Wn(l),x=Zn(l);o.forEach((function(t,n){h.set(t.toLowerCase(),n)}));var M={a:function(t){return u[t.getDay()]},A:function(t){return i[t.getDay()]},b:function(t){return l[t.getMonth()]},B:function(t){return s[t.getMonth()]},c:c(n),d:function(t,n){return Gn(t.getDate(),n,2)},e:function(t,n){return Gn(t.getDate(),n,2)},H:function(t,n){return Gn(t.getHours(),n,2)},I:function(t,n){return Gn(t.getHours()%12||12,n,2)},j:function(t,n){return Gn(1+zn.dayOfYear(t),n,3)},L:function(t,n){return Gn(t.getMilliseconds(),n,3)},m:function(t,n){return Gn(t.getMonth()+1,n,2)},M:function(t,n){return Gn(t.getMinutes(),n,2)},p:function(t){return o[+(t.getHours()>=12)]},S:function(t,n){return Gn(t.getSeconds(),n,2)},U:function(t,n){return Gn(zn.sundayOfYear(t),n,2)},w:function(t){return t.getDay()},W:function(t,n){return Gn(zn.mondayOfYear(t),n,2)},x:c(e),X:c(r),y:function(t,n){return Gn(t.getFullYear()%100,n,2)},Y:function(t,n){return Gn(t.getFullYear()%1e4,n,4)},Z:le,"%":function(){return"%"}},w={a:function(t,n,e){m.lastIndex=0;var r=m.exec(n.slice(e));return r?(t.w=g.get(r[0].toLowerCase()),e+r[0].length):-1},A:function(t,n,e){p.lastIndex=0;var r=p.exec(n.slice(e));return r?(t.w=d.get(r[0].toLowerCase()),e+r[0].length):-1},b:function(t,n,e){b.lastIndex=0;var r=b.exec(n.slice(e));return r?(t.m=x.get(r[0].toLowerCase()),e+r[0].length):-1},B:function(t,n,e){v.lastIndex=0;var r=v.exec(n.slice(e));return r?(t.m=y.get(r[0].toLowerCase()),e+r[0].length):-1},c:function(t,n,e){return f(t,M.c.toString(),n,e)},d:re,e:re,H:ae,I:ae,j:oe,L:se,m:ee,M:ie,p:function(t,n,e){var r=h.get(n.slice(e,e+=2).toLowerCase());return null==r?-1:(t.p=r,e)},S:ue,U:$n,w:Jn,W:Kn,x:function(t,n,e){return f(t,M.x.toString(),n,e)},X:function(t,n,e){return f(t,M.X.toString(),n,e)},y:te,Y:Qn,Z:ne,"%":ce};return c}zn.year=Bn((function(t){return(t=zn.day(t)).setMonth(0,1),t}),(function(t,n){t.setFullYear(t.getFullYear()+n)}),(function(t){return t.getFullYear()})),zn.years=zn.year.range,zn.years.utc=zn.year.utc.range,zn.day=Bn((function(t){var n=new Fn(2e3,0);return n.setFullYear(t.getFullYear(),t.getMonth(),t.getDate()),n}),(function(t,n){t.setDate(t.getDate()+n)}),(function(t){return t.getDate()-1})),zn.days=zn.day.range,zn.days.utc=zn.day.utc.range,zn.dayOfYear=function(t){var n=zn.year(t);return Math.floor((t-n-6e4*(t.getTimezoneOffset()-n.getTimezoneOffset()))/864e5)},["sunday","monday","tuesday","wednesday","thursday","friday","saturday"].forEach((function(t,n){n=7-n;var e=zn[t]=Bn((function(t){return(t=zn.day(t)).setDate(t.getDate()-(t.getDay()+n)%7),t}),(function(t,n){t.setDate(t.getDate()+7*Math.floor(n))}),(function(t){var e=zn.year(t).getDay();return Math.floor((zn.dayOfYear(t)+(e+n)%7)/7)-(e!==n)}));zn[t+"s"]=e.range,zn[t+"s"].utc=e.utc.range,zn[t+"OfYear"]=function(t){var e=zn.year(t).getDay();return Math.floor((zn.dayOfYear(t)+(e+n)%7)/7)}})),zn.week=zn.sunday,zn.weeks=zn.sunday.range,zn.weeks.utc=zn.sunday.utc.range,zn.weekOfYear=zn.sundayOfYear;var Yn={"-":"",_:" ",0:"0"},Hn=/^\s*\d+/,Vn=/^%/;function Gn(t,n,e){var r=t<0?"-":"",o=(r?-t:t)+"",a=o.length;return r+(a68?1900:2e3),e+o[0].length):-1}function ne(t,n,e){return/^[+-]\d{4}$/.test(n=n.slice(e,e+5))?(t.Z=-n,e+5):-1}function ee(t,n,e){Hn.lastIndex=0;var r=Hn.exec(n.slice(e,e+2));return r?(t.m=r[0]-1,e+r[0].length):-1}function re(t,n,e){Hn.lastIndex=0;var r=Hn.exec(n.slice(e,e+2));return r?(t.d=+r[0],e+r[0].length):-1}function oe(t,n,e){Hn.lastIndex=0;var r=Hn.exec(n.slice(e,e+3));return r?(t.j=+r[0],e+r[0].length):-1}function ae(t,n,e){Hn.lastIndex=0;var r=Hn.exec(n.slice(e,e+2));return r?(t.H=+r[0],e+r[0].length):-1}function ie(t,n,e){Hn.lastIndex=0;var r=Hn.exec(n.slice(e,e+2));return r?(t.M=+r[0],e+r[0].length):-1}function ue(t,n,e){Hn.lastIndex=0;var r=Hn.exec(n.slice(e,e+2));return r?(t.S=+r[0],e+r[0].length):-1}function se(t,n,e){Hn.lastIndex=0;var r=Hn.exec(n.slice(e,e+3));return r?(t.L=+r[0],e+r[0].length):-1}function le(t){var n=t.getTimezoneOffset(),e=n>0?"-":"+",r=w(n)/60|0,o=w(n)%60;return e+Gn(r,"0",2)+Gn(o,"0",2)}function ce(t,n,e){Vn.lastIndex=0;var r=Vn.exec(n.slice(e,e+1));return r?e+r[0].length:-1}function fe(t){for(var n=t.length,e=-1;++e=0?1:-1,u=i*a,s=Math.cos(n),l=Math.sin(n),c=o*l,f=r*s+c*Math.cos(u),h=c*i*Math.sin(u);Oe.add(Math.atan2(h,f)),e=t,r=s,o=l}Le.point=function(i,u){Le.point=a,e=(t=i)*Lt,r=Math.cos(u=(n=u)*Lt/2+Nt/4),o=Math.sin(u)},Le.lineEnd=function(){a(t,n)}}function De(t){var n=t[0],e=t[1],r=Math.cos(e);return[r*Math.cos(n),r*Math.sin(n),Math.sin(e)]}function ze(t,n){return t[0]*n[0]+t[1]*n[1]+t[2]*n[2]}function Fe(t,n){return[t[1]*n[2]-t[2]*n[1],t[2]*n[0]-t[0]*n[2],t[0]*n[1]-t[1]*n[0]]}function qe(t,n){t[0]+=n[0],t[1]+=n[1],t[2]+=n[2]}function je(t,n){return[t[0]*n,t[1]*n,t[2]*n]}function Be(t){var n=Math.sqrt(t[0]*t[0]+t[1]*t[1]+t[2]*t[2]);t[0]/=n,t[1]/=n,t[2]/=n}function Ie(t){return[Math.atan2(t[1],t[0]),qt(t[2])]}function Xe(t,n){return w(t[0]-n[0])Tt?r=90:l<-Tt&&(n=-90),f[0]=t,f[1]=e}};function p(o,a){c.push(f=[t=o,e=o]),ar&&(r=a)}function d(a,i){var u=De([a*Lt,i*Lt]);if(s){var l=Fe(s,u),c=Fe([l[1],-l[0],0],l);Be(c),c=Ie(c);var f=a-o,h=f>0?1:-1,d=c[0]*Ut*h,m=w(f)>180;if(m^(h*or&&(r=g);else if(m^(h*o<(d=(d+360)%360-180)&&dr&&(r=i);m?ax(t,e)&&(e=a):x(a,e)>x(t,e)&&(t=a):e>=t?(ae&&(e=a)):a>o?x(t,a)>x(t,e)&&(e=a):x(a,e)>x(t,e)&&(t=a)}else p(a,i);s=u,o=a}function m(){h.point=d}function g(){f[0]=t,f[1]=e,h.point=p,s=null}function v(t,n){if(s){var e=t-o;l+=w(e)>180?e+(e>0?360:-360):e}else i=t,u=n;Le.point(t,n),d(t,n)}function y(){Le.lineStart()}function b(){v(i,u),Le.lineEnd(),w(l)>Tt&&(t=-(e=180)),f[0]=t,f[1]=e,s=null}function x(t,n){return(n-=t)<0?n+360:n}function M(t,n){return t[0]-n[0]}function _(t,n){return n[0]<=n[1]?n[0]<=t&&t<=n[1]:tx(m[0],m[1])&&(m[1]=p[1]),x(p[0],m[1])>x(m[0],m[1])&&(m[0]=p[0])):u.push(m=p);for(var s,l,p,d=-1/0,m=(i=0,u[l=u.length-1]);i<=l;m=p,++i)p=u[i],(s=x(m[1],p[0]))>d&&(d=s,t=p[0],e=m[1])}return c=f=null,t===1/0||n===1/0?[[NaN,NaN],[NaN,NaN]]:[[t,n],[e,r]]}}(),a.geo.centroid=function(t){we=_e=ke=Se=Ae=Ee=Te=Re=Ne=Pe=Ce=0,a.geo.stream(t,Ye);var n=Ne,e=Pe,r=Ce,o=n*n+e*e+r*r;return o=0;--u)o.point((f=c[u])[0],f[1]);else r(p.x,p.p.x,-1,o);p=p.p}c=(p=p.o).z,d=!d}while(!p.v);o.lineEnd()}}}function Qe(t){if(n=t.length){for(var n,e,r=0,o=t[0];++r=0?1:-1,_=w*M,k=_>Nt,S=d*b;if(Oe.add(Math.atan2(S*w*Math.sin(_),m*x+S*Math.cos(_))),a+=k?M+w*Pt:M,k^h>=e^v>=e){var A=Fe(De(f),De(t));Be(A);var E=Fe(o,A);Be(E);var T=(k^M>=0?-1:1)*qt(E[2]);(r>T||r===T&&(A[0]||A[1]))&&(i+=k^M>=0?1:-1)}if(!g++)break;h=v,d=b,m=x,f=t}}return(a<-Tt||a0){for(b||(i.polygonStart(),b=!0),i.lineStart();++a1&&2&n&&e.push(e.pop().concat(e.shift())),u.push(e.filter(er))}return c}}function er(t){return t.length>1}function rr(){var t,n=[];return{lineStart:function(){n.push(t=[])},point:function(n,e){t.push([n,e])},lineEnd:F,buffer:function(){var e=n;return n=[],t=null,e},rejoin:function(){n.length>1&&n.push(n.pop().concat(n.shift()))}}}function or(t,n){return((t=t.x)[0]<0?t[1]-Ot-Tt:Ot-t[1])-((n=n.x)[0]<0?n[1]-Ot-Tt:Ot-n[1])}var ar=nr($e,(function(t){var n,e=NaN,r=NaN,o=NaN;return{lineStart:function(){t.lineStart(),n=1},point:function(a,i){var u=a>0?Nt:-Nt,s=w(a-e);w(s-Nt)0?Ot:-Ot),t.point(o,r),t.lineEnd(),t.lineStart(),t.point(u,r),t.point(a,r),n=0):o!==u&&s>=Nt&&(w(e-o)Tt?Math.atan((Math.sin(n)*(a=Math.cos(r))*Math.sin(e)-Math.sin(r)*(o=Math.cos(n))*Math.sin(t))/(o*a*i)):(n+r)/2}(e,r,a,i),t.point(o,r),t.lineEnd(),t.lineStart(),t.point(u,r),n=0),t.point(e=a,r=i),o=u},lineEnd:function(){t.lineEnd(),e=r=NaN},clean:function(){return 2-n}}}),(function(t,n,e,r){var o;if(null==t)o=e*Ot,r.point(-Nt,o),r.point(0,o),r.point(Nt,o),r.point(Nt,0),r.point(Nt,-o),r.point(0,-o),r.point(-Nt,-o),r.point(-Nt,0),r.point(-Nt,o);else if(w(t[0]-n[0])>Tt){var a=t[0]0,r=w(n)>Tt;return nr(o,(function(t){var n,u,s,l,c;return{lineStart:function(){l=s=!1,c=1},point:function(f,h){var p,d=[f,h],m=o(f,h),g=e?m?0:i(f,h):m?i(f+(f<0?Nt:-Nt),h):0;if(!n&&(l=s=m)&&t.lineStart(),m!==s&&(p=a(n,d),(Xe(n,p)||Xe(d,p))&&(d[0]+=Tt,d[1]+=Tt,m=o(d[0],d[1]))),m!==s)c=0,m?(t.lineStart(),p=a(d,n),t.point(p[0],p[1])):(p=a(n,d),t.point(p[0],p[1]),t.lineEnd()),n=p;else if(r&&n&&e^m){var v;g&u||!(v=a(d,n,!0))||(c=0,e?(t.lineStart(),t.point(v[0][0],v[0][1]),t.point(v[1][0],v[1][1]),t.lineEnd()):(t.point(v[1][0],v[1][1]),t.lineEnd(),t.lineStart(),t.point(v[0][0],v[0][1])))}!m||n&&Xe(n,d)||t.point(d[0],d[1]),n=d,s=m,u=g},lineEnd:function(){s&&t.lineEnd(),n=null},clean:function(){return c|(l&&s)<<1}}}),Ir(t,6*Lt),e?[0,-t]:[-Nt,t-Nt]);function o(t,e){return Math.cos(t)*Math.cos(e)>n}function a(t,e,r){var o=[1,0,0],a=Fe(De(t),De(e)),i=ze(a,a),u=a[0],s=i-u*u;if(!s)return!r&&t;var l=n*i/s,c=-n*u/s,f=Fe(o,a),h=je(o,l);qe(h,je(a,c));var p=f,d=ze(h,p),m=ze(p,p),g=d*d-m*(ze(h,h)-1);if(!(g<0)){var v=Math.sqrt(g),y=je(p,(-d-v)/m);if(qe(y,h),y=Ie(y),!r)return y;var b,x=t[0],M=e[0],_=t[1],k=e[1];M0^y[1]<(w(y[0]-x)Nt^(x<=y[0]&&y[0]<=M)){var E=je(p,(-d+v)/m);return qe(E,h),[y,Ie(E)]}}}function i(n,r){var o=e?t:Nt-t,a=0;return n<-o?a|=1:n>o&&(a|=2),r<-o?a|=4:r>o&&(a|=8),a}}function ur(t,n,e,r){return function(o){var a,i=o.a,u=o.b,s=i.x,l=i.y,c=0,f=1,h=u.x-s,p=u.y-l;if(a=t-s,h||!(a>0)){if(a/=h,h<0){if(a0){if(a>f)return;a>c&&(c=a)}if(a=e-s,h||!(a<0)){if(a/=h,h<0){if(a>f)return;a>c&&(c=a)}else if(h>0){if(a0)){if(a/=p,p<0){if(a0){if(a>f)return;a>c&&(c=a)}if(a=r-l,p||!(a<0)){if(a/=p,p<0){if(a>f)return;a>c&&(c=a)}else if(p>0){if(a0&&(o.a={x:s+c*h,y:l+c*p}),f<1&&(o.b={x:s+f*h,y:l+f*p}),o}}}}}}function sr(t,n,e,r){return function(s){var l,c,f,h,p,d,m,g,v,y,b,x=s,M=rr(),w=ur(t,n,e,r),_={point:A,lineStart:function(){_.point=E,c&&c.push(f=[]),y=!0,v=!1,m=g=NaN},lineEnd:function(){l&&(E(h,p),d&&v&&M.rejoin(),l.push(M.buffer())),_.point=A,v&&s.lineEnd()},polygonStart:function(){s=M,l=[],c=[],b=!0},polygonEnd:function(){s=x,l=a.merge(l);var n=function(t){for(var n=0,e=c.length,r=t[1],o=0;or&&zt(l,a,t)>0&&++n:a[1]<=r&&zt(l,a,t)<0&&--n,l=a;return 0!==n}([t,r]),e=b&&n,o=l.length;(e||o)&&(s.polygonStart(),e&&(s.lineStart(),k(null,null,1,s),s.lineEnd()),o&&Ke(l,i,n,k,s),s.polygonEnd()),l=c=f=null}};function k(a,i,s,l){var c=0,f=0;if(null==a||(c=o(a,s))!==(f=o(i,s))||u(a,i)<0^s>0)do{l.point(0===c||3===c?t:e,c>1?r:n)}while((c=(c+s+4)%4)!==f);else l.point(i[0],i[1])}function S(o,a){return t<=o&&o<=e&&n<=a&&a<=r}function A(t,n){S(t,n)&&s.point(t,n)}function E(t,n){var e=S(t=Math.max(-1e9,Math.min(1e9,t)),n=Math.max(-1e9,Math.min(1e9,n)));if(c&&f.push([t,n]),y)h=t,p=n,d=e,y=!1,e&&(s.lineStart(),s.point(t,n));else if(e&&v)s.point(t,n);else{var r={a:{x:m,y:g},b:{x:t,y:n}};w(r)?(v||(s.lineStart(),s.point(r.a.x,r.a.y)),s.point(r.b.x,r.b.y),e||s.lineEnd(),b=!1):e&&(s.lineStart(),s.point(t,n),b=!1)}m=t,g=n,v=e}return _};function o(r,o){return w(r[0]-t)0?0:3:w(r[0]-e)0?2:1:w(r[1]-n)0?1:0:o>0?3:2}function i(t,n){return u(t.x,n.x)}function u(t,n){var e=o(t,1),r=o(n,1);return e!==r?e-r:0===e?n[1]-t[1]:1===e?t[0]-n[0]:2===e?t[1]-n[1]:n[0]-t[0]}}function lr(t){var n=0,e=Nt/3,r=Lr(t),o=r(n,e);return o.parallels=function(t){return arguments.length?r(n=t[0]*Nt/180,e=t[1]*Nt/180):[n/Nt*180,e/Nt*180]},o}function cr(t,n){var e=Math.sin(t),r=(e+Math.sin(n))/2,o=1+e*(2*r-e),a=Math.sqrt(o)/r;function i(t,n){var e=Math.sqrt(o-2*r*Math.sin(n))/r;return[e*Math.sin(t*=r),a-e*Math.cos(t)]}return i.invert=function(t,n){var e=a-n;return[Math.atan2(t,e)/r,qt((o-(t*t+e*e)*r*r)/(2*r))]},i}a.geo.clipExtent=function(){var t,n,e,r,o,a,i={stream:function(t){return o&&(o.valid=!1),(o=a(t)).valid=!0,o},extent:function(u){return arguments.length?(a=sr(t=+u[0][0],n=+u[0][1],e=+u[1][0],r=+u[1][1]),o&&(o.valid=!1,o=null),i):[[t,n],[e,r]]}};return i.extent([[0,0],[960,500]])},(a.geo.conicEqualArea=function(){return lr(cr)}).raw=cr,a.geo.albers=function(){return a.geo.conicEqualArea().rotate([96,0]).center([-.6,38.7]).parallels([29.5,45.5]).scale(1070)},a.geo.albersUsa=function(){var t,n,e,r,o=a.geo.albers(),i=a.geo.conicEqualArea().rotate([154,0]).center([-2,58.5]).parallels([55,65]),u=a.geo.conicEqualArea().rotate([157,0]).center([-3,19.9]).parallels([8,18]),s={point:function(n,e){t=[n,e]}};function l(o){var a=o[0],i=o[1];return t=null,n(a,i),t||(e(a,i),t)||r(a,i),t}return l.invert=function(t){var n=o.scale(),e=o.translate(),r=(t[0]-e[0])/n,a=(t[1]-e[1])/n;return(a>=.12&&a<.234&&r>=-.425&&r<-.214?i:a>=.166&&a<.234&&r>=-.214&&r<-.115?u:o).invert(t)},l.stream=function(t){var n=o.stream(t),e=i.stream(t),r=u.stream(t);return{point:function(t,o){n.point(t,o),e.point(t,o),r.point(t,o)},sphere:function(){n.sphere(),e.sphere(),r.sphere()},lineStart:function(){n.lineStart(),e.lineStart(),r.lineStart()},lineEnd:function(){n.lineEnd(),e.lineEnd(),r.lineEnd()},polygonStart:function(){n.polygonStart(),e.polygonStart(),r.polygonStart()},polygonEnd:function(){n.polygonEnd(),e.polygonEnd(),r.polygonEnd()}}},l.precision=function(t){return arguments.length?(o.precision(t),i.precision(t),u.precision(t),l):o.precision()},l.scale=function(t){return arguments.length?(o.scale(t),i.scale(.35*t),u.scale(t),l.translate(o.translate())):o.scale()},l.translate=function(t){if(!arguments.length)return o.translate();var a=o.scale(),c=+t[0],f=+t[1];return n=o.translate(t).clipExtent([[c-.455*a,f-.238*a],[c+.455*a,f+.238*a]]).stream(s).point,e=i.translate([c-.307*a,f+.201*a]).clipExtent([[c-.425*a+Tt,f+.12*a+Tt],[c-.214*a-Tt,f+.234*a-Tt]]).stream(s).point,r=u.translate([c-.205*a,f+.212*a]).clipExtent([[c-.214*a+Tt,f+.166*a+Tt],[c-.115*a-Tt,f+.234*a-Tt]]).stream(s).point,l},l.scale(1070)};var fr,hr,pr,dr,mr,gr,vr={point:F,lineStart:F,lineEnd:F,polygonStart:function(){hr=0,vr.lineStart=yr},polygonEnd:function(){vr.lineStart=vr.lineEnd=vr.point=F,fr+=w(hr/2)}};function yr(){var t,n,e,r;function o(t,n){hr+=r*t-e*n,e=t,r=n}vr.point=function(a,i){vr.point=o,t=e=a,n=r=i},vr.lineEnd=function(){o(t,n)}}var br={point:function(t,n){tmr&&(mr=t),ngr&&(gr=n)},lineStart:F,lineEnd:F,polygonStart:F,polygonEnd:F};function xr(){var t=Mr(4.5),n=[],e={point:r,lineStart:function(){e.point=o},lineEnd:i,polygonStart:function(){e.lineEnd=u},polygonEnd:function(){e.lineEnd=i,e.point=r},pointRadius:function(n){return t=Mr(n),e},result:function(){if(n.length){var t=n.join("");return n=[],t}}};function r(e,r){n.push("M",e,",",r,t)}function o(t,r){n.push("M",t,",",r),e.point=a}function a(t,e){n.push("L",t,",",e)}function i(){e.point=r}function u(){n.push("Z")}return e}function Mr(t){return"m0,"+t+"a"+t+","+t+" 0 1,1 0,"+-2*t+"a"+t+","+t+" 0 1,1 0,"+2*t+"z"}var wr,_r={point:kr,lineStart:Sr,lineEnd:Ar,polygonStart:function(){_r.lineStart=Er},polygonEnd:function(){_r.point=kr,_r.lineStart=Sr,_r.lineEnd=Ar}};function kr(t,n){ke+=t,Se+=n,++Ae}function Sr(){var t,n;function e(e,r){var o=e-t,a=r-n,i=Math.sqrt(o*o+a*a);Ee+=i*(t+e)/2,Te+=i*(n+r)/2,Re+=i,kr(t=e,n=r)}_r.point=function(r,o){_r.point=e,kr(t=r,n=o)}}function Ar(){_r.point=kr}function Er(){var t,n,e,r;function o(t,n){var o=t-e,a=n-r,i=Math.sqrt(o*o+a*a);Ee+=i*(e+t)/2,Te+=i*(r+n)/2,Re+=i,Ne+=(i=r*t-e*n)*(e+t),Pe+=i*(r+n),Ce+=3*i,kr(e=t,r=n)}_r.point=function(a,i){_r.point=o,kr(t=e=a,n=r=i)},_r.lineEnd=function(){o(t,n)}}function Tr(t){var n=4.5,e={point:r,lineStart:function(){e.point=o},lineEnd:i,polygonStart:function(){e.lineEnd=u},polygonEnd:function(){e.lineEnd=i,e.point=r},pointRadius:function(t){return n=t,e},result:F};function r(e,r){t.moveTo(e+n,r),t.arc(e,r,n,0,Pt)}function o(n,r){t.moveTo(n,r),e.point=a}function a(n,e){t.lineTo(n,e)}function i(){e.point=r}function u(){t.closePath()}return e}function Rr(t){var n=.5,e=Math.cos(30*Lt),r=16;function o(t){return(r?i:a)(t)}function a(n){return Cr(n,(function(e,r){e=t(e,r),n.point(e[0],e[1])}))}function i(n){var e,o,a,i,s,l,c,f,h,p,d,m,g={point:v,lineStart:y,lineEnd:x,polygonStart:function(){n.polygonStart(),g.lineStart=M},polygonEnd:function(){n.polygonEnd(),g.lineStart=y}};function v(e,r){e=t(e,r),n.point(e[0],e[1])}function y(){f=NaN,g.point=b,n.lineStart()}function b(e,o){var a=De([e,o]),i=t(e,o);u(f,h,c,p,d,m,f=i[0],h=i[1],c=e,p=a[0],d=a[1],m=a[2],r,n),n.point(f,h)}function x(){g.point=v,n.lineEnd()}function M(){y(),g.point=w,g.lineEnd=_}function w(t,n){b(e=t,n),o=f,a=h,i=p,s=d,l=m,g.point=b}function _(){u(f,h,c,p,d,m,o,a,e,i,s,l,r,n),g.lineEnd=x,x()}return g}function u(r,o,a,i,s,l,c,f,h,p,d,m,g,v){var y=c-r,b=f-o,x=y*y+b*b;if(x>4*n&&g--){var M=i+p,_=s+d,k=l+m,S=Math.sqrt(M*M+_*_+k*k),A=Math.asin(k/=S),E=w(w(k)-1)n||w((y*P+b*C)/x-.5)>.3||i*p+s*d+l*m0&&16,o):Math.sqrt(n)},o}function Nr(t){var n=Rr((function(n,e){return t([n*Ut,e*Ut])}));return function(t){return Ur(n(t))}}function Pr(t){this.stream=t}function Cr(t,n){return{point:n,sphere:function(){t.sphere()},lineStart:function(){t.lineStart()},lineEnd:function(){t.lineEnd()},polygonStart:function(){t.polygonStart()},polygonEnd:function(){t.polygonEnd()}}}function Or(t){return Lr((function(){return t}))()}function Lr(t){var n,e,r,o,i,u,s=Rr((function(t,e){return[(t=n(t,e))[0]*l+o,i-t[1]*l]})),l=150,c=480,f=250,h=0,p=0,d=0,m=0,g=0,v=ar,y=L,b=null,x=null;function M(t){return[(t=r(t[0]*Lt,t[1]*Lt))[0]*l+o,i-t[1]*l]}function w(t){return(t=r.invert((t[0]-o)/l,(i-t[1])/l))&&[t[0]*Ut,t[1]*Ut]}function _(){r=Je(e=Fr(d,m,g),n);var t=n(h,p);return o=c-t[0]*l,i=f+t[1]*l,k()}function k(){return u&&(u.valid=!1,u=null),M}return M.stream=function(t){return u&&(u.valid=!1),(u=Ur(v(e,s(y(t))))).valid=!0,u},M.clipAngle=function(t){return arguments.length?(v=null==t?(b=t,ar):ir((b=+t)*Lt),k()):b},M.clipExtent=function(t){return arguments.length?(x=t,y=t?sr(t[0][0],t[0][1],t[1][0],t[1][1]):L,k()):x},M.scale=function(t){return arguments.length?(l=+t,_()):l},M.translate=function(t){return arguments.length?(c=+t[0],f=+t[1],_()):[c,f]},M.center=function(t){return arguments.length?(h=t[0]%360*Lt,p=t[1]%360*Lt,_()):[h*Ut,p*Ut]},M.rotate=function(t){return arguments.length?(d=t[0]%360*Lt,m=t[1]%360*Lt,g=t.length>2?t[2]%360*Lt:0,_()):[d*Ut,m*Ut,g*Ut]},a.rebind(M,s,"precision"),function(){return n=t.apply(this,arguments),M.invert=n.invert&&w,_()}}function Ur(t){return Cr(t,(function(n,e){t.point(n*Lt,e*Lt)}))}function Dr(t,n){return[t,n]}function zr(t,n){return[t>Nt?t-Pt:t<-Nt?t+Pt:t,n]}function Fr(t,n,e){return t?n||e?Je(jr(t),Br(n,e)):jr(t):n||e?Br(n,e):zr}function qr(t){return function(n,e){return[(n+=t)>Nt?n-Pt:n<-Nt?n+Pt:n,e]}}function jr(t){var n=qr(t);return n.invert=qr(-t),n}function Br(t,n){var e=Math.cos(t),r=Math.sin(t),o=Math.cos(n),a=Math.sin(n);function i(t,n){var i=Math.cos(n),u=Math.cos(t)*i,s=Math.sin(t)*i,l=Math.sin(n),c=l*e+u*r;return[Math.atan2(s*o-c*a,u*e-l*r),qt(c*o+s*a)]}return i.invert=function(t,n){var i=Math.cos(n),u=Math.cos(t)*i,s=Math.sin(t)*i,l=Math.sin(n),c=l*o-s*a;return[Math.atan2(s*o+l*a,u*e+c*r),qt(c*e-u*r)]},i}function Ir(t,n){var e=Math.cos(t),r=Math.sin(t);return function(o,a,i,u){var s=i*n;null!=o?(o=Xr(e,o),a=Xr(e,a),(i>0?oa)&&(o+=i*Pt)):(o=t+i*Pt,a=t-.5*s);for(var l,c=o;i>0?c>a:c2?t[2]*Lt:0),n.invert=function(n){return(n=t.invert(n[0]*Lt,n[1]*Lt))[0]*=Ut,n[1]*=Ut,n},n},zr.invert=Dr,a.geo.circle=function(){var t,n,e=[0,0],r=6;function o(){var t="function"==typeof e?e.apply(this,arguments):e,r=Fr(-t[0]*Lt,-t[1]*Lt,0).invert,o=[];return n(null,null,1,{point:function(t,n){o.push(t=r(t,n)),t[0]*=Ut,t[1]*=Ut}}),{type:"Polygon",coordinates:[o]}}return o.origin=function(t){return arguments.length?(e=t,o):e},o.angle=function(e){return arguments.length?(n=Ir((t=+e)*Lt,r*Lt),o):t},o.precision=function(e){return arguments.length?(n=Ir(t*Lt,(r=+e)*Lt),o):r},o.angle(90)},a.geo.distance=function(t,n){var e,r=(n[0]-t[0])*Lt,o=t[1]*Lt,a=n[1]*Lt,i=Math.sin(r),u=Math.cos(r),s=Math.sin(o),l=Math.cos(o),c=Math.sin(a),f=Math.cos(a);return Math.atan2(Math.sqrt((e=f*i)*e+(e=l*c-s*f*u)*e),s*c+l*f*u)},a.geo.graticule=function(){var t,n,e,r,o,i,u,s,l,c,f,h,p=10,d=p,m=90,g=360,v=2.5;function y(){return{type:"MultiLineString",coordinates:b()}}function b(){return a.range(Math.ceil(r/m)*m,e,m).map(f).concat(a.range(Math.ceil(s/g)*g,u,g).map(h)).concat(a.range(Math.ceil(n/p)*p,t,p).filter((function(t){return w(t%m)>Tt})).map(l)).concat(a.range(Math.ceil(i/d)*d,o,d).filter((function(t){return w(t%g)>Tt})).map(c))}return y.lines=function(){return b().map((function(t){return{type:"LineString",coordinates:t}}))},y.outline=function(){return{type:"Polygon",coordinates:[f(r).concat(h(u).slice(1),f(e).reverse().slice(1),h(s).reverse().slice(1))]}},y.extent=function(t){return arguments.length?y.majorExtent(t).minorExtent(t):y.minorExtent()},y.majorExtent=function(t){return arguments.length?(r=+t[0][0],e=+t[1][0],s=+t[0][1],u=+t[1][1],r>e&&(t=r,r=e,e=t),s>u&&(t=s,s=u,u=t),y.precision(v)):[[r,s],[e,u]]},y.minorExtent=function(e){return arguments.length?(n=+e[0][0],t=+e[1][0],i=+e[0][1],o=+e[1][1],n>t&&(e=n,n=t,t=e),i>o&&(e=i,i=o,o=e),y.precision(v)):[[n,i],[t,o]]},y.step=function(t){return arguments.length?y.majorStep(t).minorStep(t):y.minorStep()},y.majorStep=function(t){return arguments.length?(m=+t[0],g=+t[1],y):[m,g]},y.minorStep=function(t){return arguments.length?(p=+t[0],d=+t[1],y):[p,d]},y.precision=function(a){return arguments.length?(v=+a,l=Yr(i,o,90),c=Hr(n,t,v),f=Yr(s,u,90),h=Hr(r,e,v),y):v},y.majorExtent([[-180,-90+Tt],[180,90-Tt]]).minorExtent([[-180,-80-Tt],[180,80+Tt]])},a.geo.greatArc=function(){var t,n,e=Vr,r=Gr;function o(){return{type:"LineString",coordinates:[t||e.apply(this,arguments),n||r.apply(this,arguments)]}}return o.distance=function(){return a.geo.distance(t||e.apply(this,arguments),n||r.apply(this,arguments))},o.source=function(n){return arguments.length?(e=n,t="function"==typeof n?null:n,o):e},o.target=function(t){return arguments.length?(r=t,n="function"==typeof t?null:t,o):r},o.precision=function(){return arguments.length?o:0},o},a.geo.interpolate=function(t,n){return e=t[0]*Lt,r=t[1]*Lt,o=n[0]*Lt,a=n[1]*Lt,i=Math.cos(r),u=Math.sin(r),s=Math.cos(a),l=Math.sin(a),c=i*Math.cos(e),f=i*Math.sin(e),h=s*Math.cos(o),p=s*Math.sin(o),d=2*Math.asin(Math.sqrt(Bt(a-r)+i*s*Bt(o-e))),m=1/Math.sin(d),(g=d?function(t){var n=Math.sin(t*=d)*m,e=Math.sin(d-t)*m,r=e*c+n*h,o=e*f+n*p,a=e*u+n*l;return[Math.atan2(o,r)*Ut,Math.atan2(a,Math.sqrt(r*r+o*o))*Ut]}:function(){return[e*Ut,r*Ut]}).distance=d,g;var e,r,o,a,i,u,s,l,c,f,h,p,d,m,g},a.geo.length=function(t){return wr=0,a.geo.stream(t,Wr),wr};var Wr={sphere:F,point:F,lineStart:function(){var t,n,e;function r(r,o){var a=Math.sin(o*=Lt),i=Math.cos(o),u=w((r*=Lt)-t),s=Math.cos(u);wr+=Math.atan2(Math.sqrt((u=i*Math.sin(u))*u+(u=e*a-n*i*s)*u),n*a+e*i*s),t=r,n=a,e=i}Wr.point=function(o,a){t=o*Lt,n=Math.sin(a*=Lt),e=Math.cos(a),Wr.point=r},Wr.lineEnd=function(){Wr.point=Wr.lineEnd=F}},lineEnd:F,polygonStart:F,polygonEnd:F};function Zr(t,n){function e(n,e){var r=Math.cos(n),o=Math.cos(e),a=t(r*o);return[a*o*Math.sin(n),a*Math.sin(e)]}return e.invert=function(t,e){var r=Math.sqrt(t*t+e*e),o=n(r),a=Math.sin(o),i=Math.cos(o);return[Math.atan2(t*a,r*i),Math.asin(r&&e*a/r)]},e}var Jr=Zr((function(t){return Math.sqrt(2/(1+t))}),(function(t){return 2*Math.asin(t/2)}));(a.geo.azimuthalEqualArea=function(){return Or(Jr)}).raw=Jr;var $r=Zr((function(t){var n=Math.acos(t);return n&&n/Math.sin(n)}),L);function Kr(t,n){var e=Math.cos(t),r=function(t){return Math.tan(Nt/4+t/2)},o=t===n?Math.sin(t):Math.log(e/Math.cos(n))/Math.log(r(n)/r(t)),a=e*Math.pow(r(t),o)/o;if(!o)return no;function i(t,n){a>0?n<-Ot+Tt&&(n=-Ot+Tt):n>Ot-Tt&&(n=Ot-Tt);var e=a/Math.pow(r(n),o);return[e*Math.sin(o*t),a-e*Math.cos(o*t)]}return i.invert=function(t,n){var e=a-n,r=Dt(o)*Math.sqrt(t*t+e*e);return[Math.atan2(t,e)/o,2*Math.atan(Math.pow(a/r,1/o))-Ot]},i}function Qr(t,n){var e=Math.cos(t),r=t===n?Math.sin(t):(e-Math.cos(n))/(n-t),o=e/r+t;if(w(r)1&&zt(t[e[r-2]],t[e[r-1]],t[o])<=0;)--r;e[r++]=o}return e.slice(0,r)}function lo(t,n){return t[0]-n[0]||t[1]-n[1]}(a.geo.stereographic=function(){return Or(oo)}).raw=oo,ao.invert=function(t,n){return[-n,2*Math.atan(Math.exp(t))-Ot]},(a.geo.transverseMercator=function(){var t=eo(ao),n=t.center,e=t.rotate;return t.center=function(t){return t?n([-t[1],t[0]]):[(t=n())[1],-t[0]]},t.rotate=function(t){return t?e([t[0],t[1],t.length>2?t[2]+90:90]):[(t=e())[0],t[1],t[2]-90]},e([0,0,90])}).raw=ao,a.geom={},a.geom.hull=function(t){var n=io,e=uo;if(arguments.length)return r(t);function r(t){if(t.length<3)return[];var r,o=bn(n),a=bn(e),i=t.length,u=[],s=[];for(r=0;r=0;--r)p.push(t[u[l[r]][2]]);for(r=+f;rTt)u=u.L;else{if(!((o=a-To(u,i))>Tt)){r>-Tt?(n=u.P,e=u):o>-Tt?(n=u,e=u.N):n=e=u;break}if(!u.R){n=u;break}u=u.R}var s=_o(t);if(vo.insert(n,s),n||e){if(n===e)return Oo(n),e=_o(n.site),vo.insert(s,e),s.edge=e.edge=Do(n.site,s.site),Co(n),void Co(e);if(e){Oo(n),Oo(e);var l=n.site,c=l.x,f=l.y,h=t.x-c,p=t.y-f,d=e.site,m=d.x-c,g=d.y-f,v=2*(h*g-p*m),y=h*h+p*p,b=m*m+g*g,x={x:(g*y-p*b)/v+c,y:(h*b-m*y)/v+f};zo(e.edge,l,d,x),s.edge=Do(l,t,null,x),e.edge=Do(t,d,null,x),Co(n),Co(e)}else s.edge=Do(n.site,s.site)}}function Eo(t,n){var e=t.site,r=e.x,o=e.y,a=o-n;if(!a)return r;var i=t.P;if(!i)return-1/0;var u=(e=i.site).x,s=e.y,l=s-n;if(!l)return u;var c=u-r,f=1/a-1/l,h=c/l;return f?(-h+Math.sqrt(h*h-2*f*(c*c/(-2*l)-s+l/2+o-a/2)))/f+r:(r+u)/2}function To(t,n){var e=t.N;if(e)return Eo(e,n);var r=t.site;return r.y===n?r.x:1/0}function Ro(t){this.site=t,this.edges=[]}function No(t,n){return n.angle-t.angle}function Po(){jo(this),this.x=this.y=this.arc=this.site=this.cy=null}function Co(t){var n=t.P,e=t.N;if(n&&e){var r=n.site,o=t.site,a=e.site;if(r!==a){var i=o.x,u=o.y,s=r.x-i,l=r.y-u,c=a.x-i,f=2*(s*(g=a.y-u)-l*c);if(!(f>=-Rt)){var h=s*s+l*l,p=c*c+g*g,d=(g*h-l*p)/f,m=(s*p-c*h)/f,g=m+u,v=Mo.pop()||new Po;v.arc=t,v.site=o,v.x=d+i,v.y=g+Math.sqrt(d*d+m*m),v.cy=g,t.circle=v;for(var y=null,b=bo._;b;)if(v.y=u)return;if(h>d){if(a){if(a.y>=l)return}else a={x:g,y:s};e={x:g,y:l}}else{if(a){if(a.y1)if(h>d){if(a){if(a.y>=l)return}else a={x:(s-o)/r,y:s};e={x:(l-o)/r,y:l}}else{if(a){if(a.y=u)return}else a={x:i,y:r*i+o};e={x:u,y:r*u+o}}else{if(a){if(a.xTt||w(o-e)>Tt)&&(u.splice(i,0,new Fo((v=a.site,y=c,b=w(r-f)Tt?{x:f,y:w(n-f)Tt?{x:w(e-d)Tt?{x:h,y:w(n-h)Tt?{x:w(e-p)=e&&l.x<=o&&l.y>=r&&l.y<=i?[[e,i],[o,i],[o,r],[e,r]]:[]).point=t[u]})),n}function u(t){return t.map((function(t,n){return{x:Math.round(r(t,n)/Tt)*Tt,y:Math.round(o(t,n)/Tt)*Tt,i:n}}))}return i.links=function(t){return Yo(u(t)).edges.filter((function(t){return t.l&&t.r})).map((function(n){return{source:t[n.l.i],target:t[n.r.i]}}))},i.triangles=function(t){var n=[];return Yo(u(t)).cells.forEach((function(e,r){for(var o,a=e.site,i=e.edges.sort(No),u=-1,s=i.length,l=i[s-1].edge,c=l.l===a?l.r:l.l;++ua||f>i||h=M)<<1|n>=x,_=w+4;w<_;++w)if(l=b[3&w])switch(3&w){case 0:t(l,c,f,x,M);break;case 1:t(l,x,f,h,M);break;case 2:t(l,c,M,x,p);break;case 3:t(l,x,M,h,p)}}}(t,r,o,a,i),u}function Ko(t,n){t=a.rgb(t),n=a.rgb(n);var e=t.r,r=t.g,o=t.b,i=n.r-e,u=n.g-r,s=n.b-o;return function(t){return"#"+hn(Math.round(e+i*t))+hn(Math.round(r+u*t))+hn(Math.round(o+s*t))}}function Qo(t,n){var e,r={},o={};for(e in t)e in n?r[e]=oa(t[e],n[e]):o[e]=t[e];for(e in n)e in t||(o[e]=n[e]);return function(t){for(e in r)o[e]=r[e](t);return o}}function ta(t,n){return t=+t,n=+n,function(e){return t*(1-e)+n*e}}function na(t,n){var e,r,o,a=ea.lastIndex=ra.lastIndex=0,i=-1,u=[],s=[];for(t+="",n+="";(e=ea.exec(t))&&(r=ra.exec(n));)(o=r.index)>a&&(o=n.slice(a,o),u[i]?u[i]+=o:u[++i]=o),(e=e[0])===(r=r[0])?u[i]?u[i]+=r:u[++i]=r:(u[++i]=null,s.push({i:i,x:ta(e,r)})),a=ra.lastIndex;return am&&(m=s.x),s.y>g&&(g=s.y),l.push(s.x),c.push(s.y);else for(f=0;fm&&(m=b),x>g&&(g=x),l.push(b),c.push(x)}var M=m-p,_=g-d;function k(t,n,e,r,o,a,i,u){if(!isNaN(e)&&!isNaN(r))if(t.leaf){var s=t.x,l=t.y;if(null!=s)if(w(s-e)+w(l-r)<.01)S(t,n,e,r,o,a,i,u);else{var c=t.point;t.x=t.y=t.point=null,S(t,c,s,l,o,a,i,u),S(t,n,e,r,o,a,i,u)}else t.x=e,t.y=r,t.point=n}else S(t,n,e,r,o,a,i,u)}function S(t,n,e,r,o,a,i,u){var s=.5*(o+i),l=.5*(a+u),c=e>=s,f=r>=l,h=f<<1|c;t.leaf=!1,c?o=s:i=s,f?a=l:u=l,k(t=t.nodes[h]||(t.nodes[h]={leaf:!0,nodes:[],point:null,x:null,y:null}),n,e,r,o,a,i,u)}M>_?g=d+M:m=p+_;var A={leaf:!0,nodes:[],point:null,x:null,y:null,add:function(t){k(A,t,+v(t,++f),+y(t,f),p,d,m,g)},visit:function(t){Jo(t,A,p,d,m,g)},find:function(t){return $o(A,t[0],t[1],p,d,m,g)}};if(f=-1,null==n){for(;++f=0&&!(e=a.interpolators[r](t,n)););return e}function aa(t,n){var e,r=[],o=[],a=t.length,i=n.length,u=Math.min(t.length,n.length);for(e=0;e=1?1:t(n)}}function ca(t){return function(n){return 1-t(1-n)}}function fa(t){return function(n){return.5*(n<.5?t(2*n):2-t(2-2*n))}}function ha(t){return t*t}function pa(t){return t*t*t}function da(t){if(t<=0)return 0;if(t>=1)return 1;var n=t*t,e=n*t;return 4*(t<.5?e:3*(t-n)+e-.75)}function ma(t){return 1-Math.cos(t*Ot)}function ga(t){return Math.pow(2,10*(t-1))}function va(t){return 1-Math.sqrt(1-t*t)}function ya(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}function ba(t,n){return n-=t,function(e){return Math.round(t+n*e)}}function xa(t){var n=[t.a,t.b],e=[t.c,t.d],r=wa(n),o=Ma(n,e),a=wa(function(t,n,e){return t[0]+=e*n[0],t[1]+=e*n[1],t}(e,n,-o))||0;n[0]*e[1]=0?t.slice(0,n):t,r=n>=0?t.slice(n+1):"in";return e=ua.get(e)||ia,la((r=sa.get(r)||L)(e.apply(null,i.call(arguments,1))))},a.interpolateHcl=function(t,n){t=a.hcl(t),n=a.hcl(n);var e=t.h,r=t.c,o=t.l,i=n.h-e,u=n.c-r,s=n.l-o;return isNaN(u)&&(u=0,r=isNaN(r)?n.c:r),isNaN(i)?(i=0,e=isNaN(e)?n.h:e):i>180?i-=360:i<-180&&(i+=360),function(t){return Kt(e+i*t,r+u*t,o+s*t)+""}},a.interpolateHsl=function(t,n){t=a.hsl(t),n=a.hsl(n);var e=t.h,r=t.s,o=t.l,i=n.h-e,u=n.s-r,s=n.l-o;return isNaN(u)&&(u=0,r=isNaN(r)?n.s:r),isNaN(i)?(i=0,e=isNaN(e)?n.h:e):i>180?i-=360:i<-180&&(i+=360),function(t){return Zt(e+i*t,r+u*t,o+s*t)+""}},a.interpolateLab=function(t,n){t=a.lab(t),n=a.lab(n);var e=t.l,r=t.a,o=t.b,i=n.l-e,u=n.a-r,s=n.b-o;return function(t){return en(e+i*t,r+u*t,o+s*t)+""}},a.interpolateRound=ba,a.transform=function(t){var n=s.createElementNS(a.ns.prefix.svg,"g");return(a.transform=function(t){if(null!=t){n.setAttribute("transform",t);var e=n.transform.baseVal.consolidate()}return new xa(e?e.matrix:_a)})(t)},xa.prototype.toString=function(){return"translate("+this.translate+")rotate("+this.rotate+")skewX("+this.skew+")scale("+this.scale+")"};var _a={a:1,b:0,c:0,d:1,e:0,f:0};function ka(t){return t.length?t.pop()+",":""}function Sa(t,n){var e=[],r=[];return t=a.transform(t),n=a.transform(n),function(t,n,e,r){if(t[0]!==n[0]||t[1]!==n[1]){var o=e.push("translate(",null,",",null,")");r.push({i:o-4,x:ta(t[0],n[0])},{i:o-2,x:ta(t[1],n[1])})}else(n[0]||n[1])&&e.push("translate("+n+")")}(t.translate,n.translate,e,r),function(t,n,e,r){t!==n?(t-n>180?n+=360:n-t>180&&(t+=360),r.push({i:e.push(ka(e)+"rotate(",null,")")-2,x:ta(t,n)})):n&&e.push(ka(e)+"rotate("+n+")")}(t.rotate,n.rotate,e,r),function(t,n,e,r){t!==n?r.push({i:e.push(ka(e)+"skewX(",null,")")-2,x:ta(t,n)}):n&&e.push(ka(e)+"skewX("+n+")")}(t.skew,n.skew,e,r),function(t,n,e,r){if(t[0]!==n[0]||t[1]!==n[1]){var o=e.push(ka(e)+"scale(",null,",",null,")");r.push({i:o-4,x:ta(t[0],n[0])},{i:o-2,x:ta(t[1],n[1])})}else 1===n[0]&&1===n[1]||e.push(ka(e)+"scale("+n+")")}(t.scale,n.scale,e,r),t=n=null,function(t){for(var n,o=-1,a=r.length;++o0?e=n:(t.c=null,t.t=NaN,t=null,s.end({type:"end",alpha:e=0})):n>0&&(s.start({type:"start",alpha:e=n}),t=En(u.tick)),u):e},u.start=function(){var t,n,e,a=v.length,s=y.length,c=l[0],d=l[1];for(t=0;t=0;)e.push(o[r])}function qa(t,n){for(var e=[t],r=[];null!=(t=e.pop());)if(r.push(t),(a=t.children)&&(o=a.length))for(var o,a,i=-1;++i=0;)i.push(c=l[s]),c.parent=a,c.depth=a.depth+1;e&&(a.value=0),a.children=l}else e&&(a.value=+e.call(r,a,a.depth)||0),delete a.children;return qa(o,(function(n){var r,o;t&&(r=n.children)&&r.sort(t),e&&(o=n.parent)&&(o.value+=n.value)})),u}return r.sort=function(n){return arguments.length?(t=n,r):t},r.children=function(t){return arguments.length?(n=t,r):n},r.value=function(t){return arguments.length?(e=t,r):e},r.revalue=function(t){return e&&(Fa(t,(function(t){t.children&&(t.value=0)})),qa(t,(function(t){var n;t.children||(t.value=+e.call(r,t,t.depth)||0),(n=t.parent)&&(n.value+=t.value)}))),t},r},a.layout.partition=function(){var t=a.layout.hierarchy(),n=[1,1];function e(e,r){var o=t.call(this,e,r);return function t(n,e,r,o){var a=n.children;if(n.x=e,n.y=n.depth*o,n.dx=r,n.dy=o,a&&(i=a.length)){var i,u,s,l=-1;for(r=n.value?r/n.value:0;++lu&&(u=r),i.push(r)}for(e=0;eo&&(r=e,o=n);return r}function Qa(t){return t.reduce(ti,0)}function ti(t,n){return t+n[1]}function ni(t,n){return ei(t,Math.ceil(Math.log(n.length)/Math.LN2+1))}function ei(t,n){for(var e=-1,r=+t[0],o=(t[1]-r)/n,a=[];++e<=n;)a[e]=o*e+r;return a}function ri(t){return[a.min(t),a.max(t)]}function oi(t,n){return t.value-n.value}function ai(t,n){var e=t._pack_next;t._pack_next=n,n._pack_prev=t,n._pack_next=e,e._pack_prev=n}function ii(t,n){t._pack_next=n,n._pack_prev=t}function ui(t,n){var e=n.x-t.x,r=n.y-t.y,o=t.r+n.r;return.999*o*o>e*e+r*r}function si(t){if((n=t.children)&&(s=n.length)){var n,e,r,o,a,i,u,s,l=1/0,c=-1/0,f=1/0,h=-1/0;if(n.forEach(li),(e=n[0]).x=-e.r,e.y=0,b(e),s>1&&((r=n[1]).x=r.r,r.y=0,b(r),s>2))for(fi(e,r,o=n[2]),b(o),ai(e,o),e._pack_prev=o,ai(o,r),r=e._pack_next,a=3;a0)for(i=-1;++i=f[0]&&s<=f[1]&&((u=l[a.bisect(h,s,1,d)-1]).y+=m,u.push(o[i]));return l}return o.value=function(t){return arguments.length?(n=t,o):n},o.range=function(t){return arguments.length?(e=bn(t),o):e},o.bins=function(t){return arguments.length?(r="number"==typeof t?function(n){return ei(n,t)}:bn(t),o):r},o.frequency=function(n){return arguments.length?(t=!!n,o):t},o},a.layout.pack=function(){var t,n=a.layout.hierarchy().sort(oi),e=0,r=[1,1];function o(o,a){var i=n.call(this,o,a),u=i[0],s=r[0],l=r[1],c=null==t?Math.sqrt:"function"==typeof t?t:function(){return t};if(u.x=u.y=0,qa(u,(function(t){t.r=+c(t.value)})),qa(u,si),e){var f=e*(t?1:Math.max(2*u.r/s,2*u.r/l))/2;qa(u,(function(t){t.r+=f})),qa(u,si),qa(u,(function(t){t.r-=f}))}return function t(n,e,r,o){var a=n.children;if(n.x=e+=o*n.x,n.y=r+=o*n.y,n.r*=o,a)for(var i=-1,u=a.length;++ip.x&&(p=t),t.depth>d.depth&&(d=t)}));var m=n(h,p)/2-h.x,g=e[0]/(p.x+n(p,h)/2+m),v=e[1]/(d.depth||1);Fa(c,(function(t){t.x=(t.x+m)*g,t.y=t.depth*v}))}return l}function i(t){var e=t.children,r=t.parent.children,o=t.i?r[t.i-1]:null;if(e.length){!function(t){for(var n,e=0,r=0,o=t.children,a=o.length;--a>=0;)(n=o[a]).z+=e,n.m+=e,e+=n.s+(r+=n.c)}(t);var a=(e[0].z+e[e.length-1].z)/2;o?(t.z=o.z+n(t._,o._),t.m=t.z-a):t.z=a}else o&&(t.z=o.z+n(t._,o._));t.parent.A=function(t,e,r){if(e){for(var o,a=t,i=t,u=e,s=a.parent.children[0],l=a.m,c=i.m,f=u.m,h=s.m;u=di(u),a=pi(a),u&&a;)s=pi(s),(i=di(i)).a=t,(o=u.z+f-a.z-l+n(u._,a._))>0&&(mi(gi(u,t,r),t,o),l+=o,c+=o),f+=u.m,l+=a.m,h+=s.m,c+=i.m;u&&!di(i)&&(i.t=u,i.m+=f-c),a&&!pi(s)&&(s.t=a,s.m+=l-h,r=t)}return r}(t,o,t.parent.A||r[0])}function u(t){t._.x=t.z+t.parent.m,t.m+=t.parent.m}function s(t){t.x*=e[0],t.y=t.depth*e[1]}return o.separation=function(t){return arguments.length?(n=t,o):n},o.size=function(t){return arguments.length?(r=null==(e=t)?s:null,o):r?null:e},o.nodeSize=function(t){return arguments.length?(r=null==(e=t)?null:s,o):r?e:null},za(o,t)},a.layout.cluster=function(){var t=a.layout.hierarchy().sort(null).value(null),n=hi,e=[1,1],r=!1;function o(o,i){var u,s=t.call(this,o,i),l=s[0],c=0;qa(l,(function(t){var e=t.children;e&&e.length?(t.x=function(t){return t.reduce((function(t,n){return t+n.x}),0)/t.length}(e),t.y=function(t){return 1+a.max(t,(function(t){return t.y}))}(e)):(t.x=u?c+=n(t,u):0,t.y=0,u=t)}));var f=function t(n){var e=n.children;return e&&e.length?t(e[0]):n}(l),h=function t(n){var e,r=n.children;return r&&(e=r.length)?t(r[e-1]):n}(l),p=f.x-n(f,h)/2,d=h.x+n(h,f)/2;return qa(l,r?function(t){t.x=(t.x-l.x)*e[0],t.y=(l.y-t.y)*e[1]}:function(t){t.x=(t.x-p)/(d-p)*e[0],t.y=(1-(l.y?t.y/l.y:1))*e[1]}),s}return o.separation=function(t){return arguments.length?(n=t,o):n},o.size=function(t){return arguments.length?(r=null==(e=t),o):r?null:e},o.nodeSize=function(t){return arguments.length?(r=null!=(e=t),o):r?e:null},za(o,t)},a.layout.treemap=function(){var t,n=a.layout.hierarchy(),e=Math.round,r=[1,1],o=null,i=vi,u=!1,s="squarify",l=.5*(1+Math.sqrt(5));function c(t,n){for(var e,r,o=-1,a=t.length;++o0;)u.push(e=l[o-1]),u.area+=e.area,"squarify"!==s||(r=p(u,m))<=h?(l.pop(),h=r):(u.area-=u.pop().area,d(u,m,a,!1),m=Math.min(a.dx,a.dy),u.length=u.area=0,h=1/0);u.length&&(d(u,m,a,!0),u.length=u.area=0),n.forEach(f)}}function h(t){var n=t.children;if(n&&n.length){var e,r=i(t),o=n.slice(),a=[];for(c(o,r.dx*r.dy/t.value),a.area=0;e=o.pop();)a.push(e),a.area+=e.area,null!=e.z&&(d(a,e.z?r.dx:r.dy,r,!o.length),a.length=a.area=0);n.forEach(h)}}function p(t,n){for(var e,r=t.area,o=0,a=1/0,i=-1,u=t.length;++io&&(o=e));return n*=n,(r*=r)?Math.max(n*o*l/r,r/(n*a*l)):1/0}function d(t,n,r,o){var a,i=-1,u=t.length,s=r.x,l=r.y,c=n?e(t.area/n):0;if(n==r.dx){for((o||c>r.dy)&&(c=r.dy);++ir.dx)&&(c=r.dx);++i1);return t+n*e*Math.sqrt(-2*Math.log(o)/o)}},logNormal:function(){var t=a.random.normal.apply(a,arguments);return function(){return Math.exp(t())}},bates:function(t){var n=a.random.irwinHall(t);return function(){return n()/t}},irwinHall:function(t){return function(){for(var n=0,e=0;e2?Si:Mi,u=o?Ea:Aa;return a=t(n,e,u,r),i=t(e,n,u,oa),s}function s(t){return a(t)}return s.invert=function(t){return i(t)},s.domain=function(t){return arguments.length?(n=t.map(Number),u()):n},s.range=function(t){return arguments.length?(e=t,u()):e},s.rangeRound=function(t){return s.range(t).interpolate(ba)},s.clamp=function(t){return arguments.length?(o=t,u()):o},s.interpolate=function(t){return arguments.length?(r=t,u()):r},s.ticks=function(t){return Ri(n,t)},s.tickFormat=function(t,e){return Ni(n,t,e)},s.nice=function(t){return Ei(n,t),u()},s.copy=function(){return t(n,e,r,o)},u()}([0,1],[0,1],oa,!1)};var Pi={s:1,g:1,p:1,r:1,e:1};function Ci(t){return-Math.floor(Math.log(t)/Math.LN10+.01)}a.scale.log=function(){return function t(n,e,r,o){function i(t){return(r?Math.log(t<0?0:t):-Math.log(t>0?0:-t))/Math.log(e)}function u(t){return r?Math.pow(e,t):-Math.pow(e,-t)}function s(t){return n(i(t))}return s.invert=function(t){return u(n.invert(t))},s.domain=function(t){return arguments.length?(r=t[0]>=0,n.domain((o=t.map(Number)).map(i)),s):o},s.base=function(t){return arguments.length?(e=+t,n.domain(o.map(i)),s):e},s.nice=function(){var t=wi(o.map(i),r?Math:Li);return n.domain(t),o=t.map(u),s},s.ticks=function(){var t=bi(o),n=[],a=t[0],s=t[1],l=Math.floor(i(a)),c=Math.ceil(i(s)),f=e%1?2:e;if(isFinite(c-l)){if(r){for(;l0;h--)n.push(u(l)*h);for(l=0;n[l]s;c--);n=n.slice(l,c)}return n},s.tickFormat=function(t,n){if(!arguments.length)return Oi;arguments.length<2?n=Oi:"function"!=typeof n&&(n=a.format(n));var r=Math.max(1,e*t/s.ticks().length);return function(t){var o=t/u(Math.round(i(t)));return o*e0?r[t-1]:n[0],tf?0:1;if(l=Ct)return s(l,p)+(u?s(u,1-p):"")+"Z";var d,m,g,v,y,b,x,M,w,_,k,S,A=0,E=0,T=[];if((v=(+i.apply(this,arguments)||0)/2)&&(g=r===Bi?Math.sqrt(u*u+l*l):+r.apply(this,arguments),p||(E*=-1),l&&(E=qt(g/l*Math.sin(v))),u&&(A=qt(g/u*Math.sin(v)))),l){y=l*Math.cos(c+E),b=l*Math.sin(c+E),x=l*Math.cos(f-E),M=l*Math.sin(f-E);var R=Math.abs(f-c-2*E)<=Nt?0:1;if(E&&Gi(y,b,x,M)===p^R){var N=(c+f)/2;y=l*Math.cos(N),b=l*Math.sin(N),x=M=null}}else y=b=0;if(u){w=u*Math.cos(f-A),_=u*Math.sin(f-A),k=u*Math.cos(c+A),S=u*Math.sin(c+A);var P=Math.abs(c-f+2*A)<=Nt?0:1;if(A&&Gi(w,_,k,S)===1-p^P){var C=(c+f)/2;w=u*Math.cos(C),_=u*Math.sin(C),k=S=null}}else w=_=0;if(h>Tt&&(d=Math.min(Math.abs(l-u)/2,+e.apply(this,arguments)))>.001){m=u0?0:1}function Wi(t,n,e,r,o){var a=t[0]-n[0],i=t[1]-n[1],u=(o?r:-r)/Math.sqrt(a*a+i*i),s=u*i,l=-u*a,c=t[0]+s,f=t[1]+l,h=n[0]+s,p=n[1]+l,d=(c+h)/2,m=(f+p)/2,g=h-c,v=p-f,y=g*g+v*v,b=e-r,x=c*p-h*f,M=(v<0?-1:1)*Math.sqrt(Math.max(0,b*b*y-x*x)),w=(x*v-g*M)/y,_=(-x*g-v*M)/y,k=(x*v+g*M)/y,S=(-x*g+v*M)/y,A=w-d,E=_-m,T=k-d,R=S-m;return A*A+E*E>T*T+R*R&&(w=k,_=S),[[w-s,_-l],[w*e/b,_*e/b]]}function Zi(t){var n=io,e=uo,r=$e,o=$i,a=o.key,i=.7;function u(a){var u,s=[],l=[],c=-1,f=a.length,h=bn(n),p=bn(e);function d(){s.push("M",o(t(l),i))}for(;++c1&&o.push("H",r[0]),o.join("")},"step-before":Qi,"step-after":tu,basis:ru,"basis-open":function(t){if(t.length<4)return $i(t);for(var n,e=[],r=-1,o=t.length,a=[0],i=[0];++r<3;)n=t[r],a.push(n[0]),i.push(n[1]);for(e.push(ou(uu,a)+","+ou(uu,i)),--r;++r9&&(o=3*n/Math.sqrt(o),i[u]=o*e,i[u+1]=o*r));for(u=-1;++u<=s;)o=(t[Math.min(s,u+1)][0]-t[Math.max(0,u-1)][0])/(6*(1+i[u]*i[u])),a.push([o||0,i[u]*o||0]);return a}(t))}});function $i(t){return t.length>1?t.join("L"):t+"Z"}function Ki(t){return t.join("L")+"Z"}function Qi(t){for(var n=0,e=t.length,r=t[0],o=[r[0],",",r[1]];++n1){u=n[1],a=t[s],s++,r+="C"+(o[0]+i[0])+","+(o[1]+i[1])+","+(a[0]-u[0])+","+(a[1]-u[1])+","+a[0]+","+a[1];for(var l=2;lNt)+",1 "+n}function s(t,n,e,r){return"Q 0,0 "+r}return a.radius=function(t){return arguments.length?(e=bn(t),a):e},a.source=function(n){return arguments.length?(t=bn(n),a):t},a.target=function(t){return arguments.length?(n=bn(t),a):n},a.startAngle=function(t){return arguments.length?(r=bn(t),a):r},a.endAngle=function(t){return arguments.length?(o=bn(t),a):o},a},a.svg.diagonal=function(){var t=Vr,n=Gr,e=pu;function r(r,o){var a=t.call(this,r,o),i=n.call(this,r,o),u=(a.y+i.y)/2,s=[a,{x:a.x,y:u},{x:i.x,y:u},i];return"M"+(s=s.map(e))[0]+"C"+s[1]+" "+s[2]+" "+s[3]}return r.source=function(n){return arguments.length?(t=bn(n),r):t},r.target=function(t){return arguments.length?(n=bn(t),r):n},r.projection=function(t){return arguments.length?(e=t,r):e},r},a.svg.diagonal.radial=function(){var t=a.svg.diagonal(),n=pu,e=t.projection;return t.projection=function(t){return arguments.length?e(du(n=t)):n},t},a.svg.symbol=function(){var t=gu,n=mu;function e(e,r){return(yu.get(t.call(this,e,r))||vu)(n.call(this,e,r))}return e.type=function(n){return arguments.length?(t=bn(n),e):t},e.size=function(t){return arguments.length?(n=bn(t),e):n},e};var yu=a.map({circle:vu,cross:function(t){var n=Math.sqrt(t/5)/2;return"M"+-3*n+","+-n+"H"+-n+"V"+-3*n+"H"+n+"V"+-n+"H"+3*n+"V"+n+"H"+n+"V"+3*n+"H"+-n+"V"+n+"H"+-3*n+"Z"},diamond:function(t){var n=Math.sqrt(t/(2*xu)),e=n*xu;return"M0,"+-n+"L"+e+",0 0,"+n+" "+-e+",0Z"},square:function(t){var n=Math.sqrt(t)/2;return"M"+-n+","+-n+"L"+n+","+-n+" "+n+","+n+" "+-n+","+n+"Z"},"triangle-down":function(t){var n=Math.sqrt(t/bu),e=n*bu/2;return"M0,"+e+"L"+n+","+-e+" "+-n+","+-e+"Z"},"triangle-up":function(t){var n=Math.sqrt(t/bu),e=n*bu/2;return"M0,"+-e+"L"+n+","+e+" "+-n+","+e+"Z"}});a.svg.symbolTypes=yu.keys();var bu=Math.sqrt(3),xu=Math.tan(30*Lt);J.transition=function(t){for(var n,e,r=ku||++Eu,o=Nu(t),a=[],i=Su||{time:Date.now(),ease:da,delay:0,duration:250},u=-1,s=this.length;++u0;)l[--h].call(t,i);if(a>=1)return f.event&&f.event.end.call(t,t.__data__,n),--c.count?delete c[r]:delete t[e],1}f||(a=o.time,i=En((function(t){var n=f.delay;if(i.t=n+a,n<=t)return h(t-n);i.c=h}),0,a),f=c[r]={tween:new S,time:a,timer:i,delay:o.delay,duration:o.duration,ease:o.ease,index:n},o=null,++c.count)}Au.call=J.call,Au.empty=J.empty,Au.node=J.node,Au.size=J.size,a.transition=function(t,n){return t&&t.transition?ku?t.transition(n):t:a.selection().transition(t)},a.transition.prototype=Au,Au.select=function(t){var n,e,r,o=this.id,a=this.namespace,i=[];t=$(t);for(var u=-1,s=this.length;++urect,.s>rect").attr("width",i[1]-i[0])}function m(t){t.select(".extent").attr("y",u[0]),t.selectAll(".extent,.e>rect,.w>rect").attr("height",u[1]-u[0])}function g(){var f,g,v=this,y=a.select(a.event.target),b=e.of(v,arguments),x=a.select(v),M=y.datum(),w=!/^(n|s)$/.test(M)&&r,_=!/^(e|w)$/.test(M)&&o,k=y.classed("extent"),S=kt(v),A=a.mouse(v),E=a.select(c(v)).on("keydown.brush",N).on("keyup.brush",P);if(a.event.changedTouches?E.on("touchmove.brush",C).on("touchend.brush",L):E.on("mousemove.brush",C).on("mouseup.brush",L),x.interrupt().selectAll("*").interrupt(),k)A[0]=i[0]-A[0],A[1]=u[0]-A[1];else if(M){var T=+/w$/.test(M),R=+/^n/.test(M);g=[i[1-T]-A[0],u[1-R]-A[1]],A[0]=i[T],A[1]=u[R]}else a.event.altKey&&(f=A.slice());function N(){32==a.event.keyCode&&(k||(f=null,A[0]-=i[1],A[1]-=u[1],k=2),B())}function P(){32==a.event.keyCode&&2==k&&(A[0]+=i[1],A[1]+=u[1],k=0,B())}function C(){var t=a.mouse(v),n=!1;g&&(t[0]+=g[0],t[1]+=g[1]),k||(a.event.altKey?(f||(f=[(i[0]+i[1])/2,(u[0]+u[1])/2]),A[0]=i[+(t[0]1?{floor:function(n){for(;u(n=t.floor(n));)n=Xu(n-1);return n},ceil:function(n){for(;u(n=t.ceil(n));)n=Xu(+n+1);return n}}:t))},r.ticks=function(t,n){var e=bi(r.domain()),a=null==t?o(e,10):"number"==typeof t?o(e,t):!t.range&&[{range:t},n];return a&&(t=a[0],n=a[1]),t.range(e[0],Xu(+e[1]+1),n<1?1:n)},r.tickFormat=function(){return e},r.copy=function(){return Iu(t.copy(),n,e)},Ai(r,t)}function Xu(t){return new Date(t)}Fu.iso=Date.prototype.toISOString&&+new Date("2000-01-01T00:00:00.000Z")?Bu:ju,Bu.parse=function(t){var n=new Date(t);return isNaN(n)?null:n},Bu.toString=ju.toString,zn.second=Bn((function(t){return new Fn(1e3*Math.floor(t/1e3))}),(function(t,n){t.setTime(t.getTime()+1e3*Math.floor(n))}),(function(t){return t.getSeconds()})),zn.seconds=zn.second.range,zn.seconds.utc=zn.second.utc.range,zn.minute=Bn((function(t){return new Fn(6e4*Math.floor(t/6e4))}),(function(t,n){t.setTime(t.getTime()+6e4*Math.floor(n))}),(function(t){return t.getMinutes()})),zn.minutes=zn.minute.range,zn.minutes.utc=zn.minute.utc.range,zn.hour=Bn((function(t){var n=t.getTimezoneOffset()/60;return new Fn(36e5*(Math.floor(t/36e5-n)+n))}),(function(t,n){t.setTime(t.getTime()+36e5*Math.floor(n))}),(function(t){return t.getHours()})),zn.hours=zn.hour.range,zn.hours.utc=zn.hour.utc.range,zn.month=Bn((function(t){return(t=zn.day(t)).setDate(1),t}),(function(t,n){t.setMonth(t.getMonth()+n)}),(function(t){return t.getMonth()})),zn.months=zn.month.range,zn.months.utc=zn.month.utc.range;var Yu=[1e3,5e3,15e3,3e4,6e4,3e5,9e5,18e5,36e5,108e5,216e5,432e5,864e5,1728e5,6048e5,2592e6,7776e6,31536e6],Hu=[[zn.second,1],[zn.second,5],[zn.second,15],[zn.second,30],[zn.minute,1],[zn.minute,5],[zn.minute,15],[zn.minute,30],[zn.hour,1],[zn.hour,3],[zn.hour,6],[zn.hour,12],[zn.day,1],[zn.day,2],[zn.week,1],[zn.month,1],[zn.month,3],[zn.year,1]],Vu=Fu.multi([[".%L",function(t){return t.getMilliseconds()}],[":%S",function(t){return t.getSeconds()}],["%I:%M",function(t){return t.getMinutes()}],["%I %p",function(t){return t.getHours()}],["%a %d",function(t){return t.getDay()&&1!=t.getDate()}],["%b %d",function(t){return 1!=t.getDate()}],["%B",function(t){return t.getMonth()}],["%Y",$e]]),Gu={range:function(t,n,e){return a.range(Math.ceil(t/e)*e,+n,e).map(Xu)},floor:L,ceil:L};Hu.year=zn.year,zn.scale=function(){return Iu(a.scale.linear(),Hu,Vu)};var Wu=Hu.map((function(t){return[t[0].utc,t[1]]})),Zu=qu.multi([[".%L",function(t){return t.getUTCMilliseconds()}],[":%S",function(t){return t.getUTCSeconds()}],["%I:%M",function(t){return t.getUTCMinutes()}],["%I %p",function(t){return t.getUTCHours()}],["%a %d",function(t){return t.getUTCDay()&&1!=t.getUTCDate()}],["%b %d",function(t){return 1!=t.getUTCDate()}],["%B",function(t){return t.getUTCMonth()}],["%Y",$e]]);function Ju(t){return JSON.parse(t.responseText)}function $u(t){var n=s.createRange();return n.selectNode(s.body),n.createContextualFragment(t.responseText)}Wu.year=zn.year.utc,zn.scale.utc=function(){return Iu(a.scale.linear(),Wu,Zu)},a.text=xn((function(t){return t.responseText})),a.json=function(t,n){return Mn(t,"application/json",Ju,n)},a.html=function(t,n){return Mn(t,"text/html",$u,n)},a.xml=xn((function(t){return t.responseXML})),this.d3=a,void 0===(o="function"==typeof(r=a)?r.call(n,e,n,t):r)||(t.exports=o)}()}])},t.exports=o()},function(t,n,e){"use strict";var r=e(24);function o(){}t.exports=function(){function t(t,n,e,o,a,i){if(i!==r){var u=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw u.name="Invariant Violation",u}}function n(){return t}t.isRequired=t;var e={array:t,bool:t,func:t,number:t,object:t,string:t,symbol:t,any:t,arrayOf:n,element:t,instanceOf:n,node:t,objectOf:n,oneOf:n,oneOfType:n,shape:n,exact:n};return e.checkPropTypes=o,e.PropTypes=e,e}},function(t,n,e){"use strict";t.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},function(t,n,e){"use strict";var r=e(7),o=e(26),a=e(27),i=e(6),u=e(8),s=e(21),l=e(28);function c(t,n){return n=n.split("// __split__"),new o.Program(t,n[0],n[1])}t.exports=function(t,n,e){var f,h,p,d,m,g,v,y,b,x,M,w,_,k,S,A,E,T,R,N,P,C,O,L,U,D,z,F=this,q=null,j=null,B=null,I=null,X=null,Y=null,H=0,V=!1,G=!1;function W(t){p.viewport(0,0,e,e);var o=u.clone(t);o.zoom=1/f,o.translation.x=0,o.translation.y=0;for(var a=r.mat4.create(),i=0;i<3;i++){var s=r.vec3.random(r.vec3.create(),1);r.mat4.rotate(a,a,10*Math.random(),s)}o.rotation=r.mat4.multiply(r.mat4.create(),a,o.rotation),E.bind(),p.clear(p.COLOR_BUFFER_BIT|p.DEPTH_BUFFER_BIT);var l=u.getRect(o),c=r.mat4.create();r.mat4.ortho(c,l.left,l.right,l.bottom,l.top,0,f);var h=r.mat4.create();r.mat4.lookAt(h,[0,0,0],[0,0,-1],[0,1,0]);var d=r.mat4.create();r.mat4.translate(d,d,[0,0,-f/2]),r.mat4.multiply(d,d,o.rotation),P.setUniform("uProjection","Matrix4fv",!1,c),P.setUniform("uView","Matrix4fv",!1,h),P.setUniform("uModel","Matrix4fv",!1,d),P.setUniform("uBottomLeft","2fv",[l.left,l.bottom]),P.setUniform("uTopRight","2fv",[l.right,l.top]),P.setUniform("uAtomScale","1f",2.5*o.atomScale),P.setUniform("uRelativeAtomScale","1f",t.relativeAtomScale),P.setUniform("uRes","1f",e),P.setUniform("uDepth","1f",f),P.setUniform("uMode","1i",0),P.setUniform("uAtomShade","1f",t.atomShade),q.render(),t.bonds&&null!=j&&(C.setUniform("uProjection","Matrix4fv",!1,c),C.setUniform("uView","Matrix4fv",!1,h),C.setUniform("uModel","Matrix4fv",!1,d),C.setUniform("uRotation","Matrix4fv",!1,o.rotation),C.setUniform("uDepth","1f",f),C.setUniform("uBottomLeft","2fv",[l.left,l.bottom]),C.setUniform("uTopRight","2fv",[l.right,l.top]),C.setUniform("uRes","1f",e),C.setUniform("uBondRadius","1f",2.5*u.getBondRadius(t)),C.setUniform("uBondShade","1f",t.bondShade),C.setUniform("uAtomScale","1f",2.5*t.atomScale),C.setUniform("uRelativeAtomScale","1f",t.relativeAtomScale),C.setUniform("uMode","1i",0),j.render()),p.viewport(0,0,n,n);var y=u.getRect(t),x=u.getRect(o),M=r.mat4.invert(r.mat4.create(),a);T.bind(),p.clear(p.COLOR_BUFFER_BIT|p.DEPTH_BUFFER_BIT),O.setUniform("uSceneDepth","1i",g.index),O.setUniform("uSceneNormal","1i",m.index),O.setUniform("uRandRotDepth","1i",v.index),O.setUniform("uAccumulator","1i",b.index),O.setUniform("uSceneBottomLeft","2fv",[y.left,y.bottom]),O.setUniform("uSceneTopRight","2fv",[y.right,y.top]),O.setUniform("uRotBottomLeft","2fv",[x.left,x.bottom]),O.setUniform("uRotTopRight","2fv",[x.right,x.top]),O.setUniform("uRes","1f",n),O.setUniform("uDepth","1f",f),O.setUniform("uRot","Matrix4fv",!1,a),O.setUniform("uInvRot","Matrix4fv",!1,M),O.setUniform("uSampleCount","1i",H),B.render(),b.activate(),b.bind(),p.copyTexImage2D(p.TEXTURE_2D,0,p.RGBA,0,0,n,n,0)}F.getAOProgress=function(){return H/1024},F.initialize=function(){t.width=t.height=n,(p=t.getContext("webgl")).enable(p.DEPTH_TEST),p.enable(p.CULL_FACE),p.clearColor(0,0,0,0),p.clearDepth(1),p.viewport(0,0,n,n),window.gl=p,o.getExtensions(p,["EXT_frag_depth","WEBGL_depth_texture"]),F.createTextures(),P=c(p,l.shaders.atom),C=c(p,l.shaders.bond),z=c(p,l.shaders["textured-quad"]),O=c(p,l.shaders.accumulator),L=c(p,l.shaders.ao),U=c(p,l.shaders.fxaa),D=c(p,l.shaders.dof);var e=[-1,-1,0,1,-1,0,1,1,0,-1,-1,0,1,1,0,-1,1,0],r=o.buildAttribs(p,{aPosition:3});r.aPosition.buffer.set(new Float32Array(e));var a=e.length/9;new o.Renderable(p,z,r,a),B=new o.Renderable(p,O,r,a),I=new o.Renderable(p,L,r,a),Y=new o.Renderable(p,U,r,a),X=new o.Renderable(p,D,r,a),0},F.createTextures=function(){y=new o.Texture(p,0,null,e,e),v=new o.Texture(p,1,null,e,e,{internalFormat:p.DEPTH_COMPONENT,format:p.DEPTH_COMPONENT,type:p.UNSIGNED_SHORT}),E=new o.Framebuffer(p,[y],v),d=new o.Texture(p,2,null,n,n),m=new o.Texture(p,3,null,n,n),g=new o.Texture(p,4,null,n,n,{internalFormat:p.DEPTH_COMPONENT,format:p.DEPTH_COMPONENT,type:p.UNSIGNED_SHORT}),S=new o.Framebuffer(p,[d],g),A=new o.Framebuffer(p,[m],g),b=new o.Texture(p,5,null,n,n),x=new o.Texture(p,6,null,n,n),T=new o.Framebuffer(p,[x]),k=new o.Texture(p,7,null,n,n),N=new o.Framebuffer(p,[k]),M=new o.Texture(p,8,null,n,n),w=new o.Texture(p,9,null,n,n),R=new o.Framebuffer(p,[w]),_=new o.Texture(p,10,null,n,n),new o.Framebuffer(p,[_])},F.setResolution=function(r,o){e=o,n=r,t.width=t.height=n,p.viewport(0,0,n,n),F.createTextures()},F.setSystem=function(t,n){function e(t){for(var n=[],e=0;e<36;e++)n.push.apply(n,t);return n}h=t;for(var r=o.buildAttribs(p,{aImposter:3,aPosition:3,aRadius:1,aColor:3}),u=[],s=[],l=[],c=[],f=0;f0)){r=o.buildAttribs(p,{aImposter:3,aPosA:3,aPosB:3,aRadA:1,aRadB:1,aColA:3,aColB:3}),u=[];var v=[],y=[],b=[],x=[],M=[],w=[];for(f=0;fn.bondThreshold)break;u.push.apply(u,a.position),v.push.apply(v,e([_.posA.x,_.posA.y,_.posA.z])),y.push.apply(y,e([_.posB.x,_.posB.y,_.posB.z])),b.push.apply(b,e([_.radA])),x.push.apply(x,e([_.radB])),M.push.apply(M,e([_.colA.r,_.colA.g,_.colA.b])),w.push.apply(w,e([_.colB.r,_.colB.g,_.colB.b]))}r.aImposter.buffer.set(new Float32Array(u)),r.aPosA.buffer.set(new Float32Array(v)),r.aPosB.buffer.set(new Float32Array(y)),r.aRadA.buffer.set(new Float32Array(b)),r.aRadB.buffer.set(new Float32Array(x)),r.aColA.buffer.set(new Float32Array(M)),r.aColB.buffer.set(new Float32Array(w));g=u.length/9;j=new o.Renderable(p,C,r,g)}},F.reset=function(){H=0,V=!1,G=!1,b.reset(),x.reset()},F.render=function(t){if(void 0!==h&&null!=q){if(f=2*s.getRadius(h),V)if(G)for(var e=0;e1024);e++)W(t),H++;else!function(t){G=!0,p.viewport(0,0,n,n),A.bind(),p.clear(p.COLOR_BUFFER_BIT|p.DEPTH_BUFFER_BIT);var e=u.getRect(t),o=r.mat4.create();r.mat4.ortho(o,e.left,e.right,e.bottom,e.top,0,f);var a=r.mat4.create();r.mat4.lookAt(a,[0,0,0],[0,0,-1],[0,1,0]);var i=r.mat4.create();r.mat4.translate(i,i,[0,0,-f/2]),r.mat4.multiply(i,i,t.rotation),P.setUniform("uProjection","Matrix4fv",!1,o),P.setUniform("uView","Matrix4fv",!1,a),P.setUniform("uModel","Matrix4fv",!1,i),P.setUniform("uBottomLeft","2fv",[e.left,e.bottom]),P.setUniform("uTopRight","2fv",[e.right,e.top]),P.setUniform("uAtomScale","1f",2.5*t.atomScale),P.setUniform("uRelativeAtomScale","1f",t.relativeAtomScale),P.setUniform("uRes","1f",n),P.setUniform("uDepth","1f",f),P.setUniform("uMode","1i",1),P.setUniform("uAtomShade","1f",t.atomShade),q.render(),t.bonds&&null!=j&&(A.bind(),C.setUniform("uProjection","Matrix4fv",!1,o),C.setUniform("uView","Matrix4fv",!1,a),C.setUniform("uModel","Matrix4fv",!1,i),C.setUniform("uRotation","Matrix4fv",!1,t.rotation),C.setUniform("uDepth","1f",f),C.setUniform("uBottomLeft","2fv",[e.left,e.bottom]),C.setUniform("uTopRight","2fv",[e.right,e.top]),C.setUniform("uRes","1f",n),C.setUniform("uBondRadius","1f",2.5*u.getBondRadius(t)),C.setUniform("uBondShade","1f",t.bondShade),C.setUniform("uAtomScale","1f",2.5*t.atomScale),C.setUniform("uRelativeAtomScale","1f",t.relativeAtomScale),C.setUniform("uMode","1i",1),j.render())}(t);else!function(t){V=!0,p.viewport(0,0,n,n),S.bind(),p.clear(p.COLOR_BUFFER_BIT|p.DEPTH_BUFFER_BIT);var e=u.getRect(t),o=r.mat4.create();r.mat4.ortho(o,e.left,e.right,e.bottom,e.top,0,f);var a=r.mat4.create();r.mat4.lookAt(a,[0,0,0],[0,0,-1],[0,1,0]);var i=r.mat4.create();r.mat4.translate(i,i,[0,0,-f/2]),r.mat4.multiply(i,i,t.rotation),P.setUniform("uProjection","Matrix4fv",!1,o),P.setUniform("uView","Matrix4fv",!1,a),P.setUniform("uModel","Matrix4fv",!1,i),P.setUniform("uBottomLeft","2fv",[e.left,e.bottom]),P.setUniform("uTopRight","2fv",[e.right,e.top]),P.setUniform("uAtomScale","1f",2.5*t.atomScale),P.setUniform("uRelativeAtomScale","1f",t.relativeAtomScale),P.setUniform("uRes","1f",n),P.setUniform("uDepth","1f",f),P.setUniform("uMode","1i",0),P.setUniform("uAtomShade","1f",t.atomShade),q.render(),t.bonds&&null!=j&&(S.bind(),C.setUniform("uProjection","Matrix4fv",!1,o),C.setUniform("uView","Matrix4fv",!1,a),C.setUniform("uModel","Matrix4fv",!1,i),C.setUniform("uRotation","Matrix4fv",!1,t.rotation),C.setUniform("uDepth","1f",f),C.setUniform("uBottomLeft","2fv",[e.left,e.bottom]),C.setUniform("uTopRight","2fv",[e.right,e.top]),C.setUniform("uRes","1f",n),C.setUniform("uBondRadius","1f",2.5*u.getBondRadius(t)),C.setUniform("uBondShade","1f",t.bondShade),C.setUniform("uAtomScale","1f",2.5*t.atomScale),C.setUniform("uRelativeAtomScale","1f",t.relativeAtomScale),C.setUniform("uMode","1i",0),j.render())}(t);!function(t){p.viewport(0,0,n,n),t.fxaa>0||t.dofStrength>0?N.bind():p.bindFramebuffer(p.FRAMEBUFFER,null);if(p.clear(p.COLOR_BUFFER_BIT|p.DEPTH_BUFFER_BIT),L.setUniform("uSceneColor","1i",d.index),L.setUniform("uSceneDepth","1i",g.index),L.setUniform("uAccumulatorOut","1i",x.index),L.setUniform("uRes","1f",n),L.setUniform("uAO","1f",2*t.ao),L.setUniform("uBrightness","1f",2*t.brightness),L.setUniform("uOutlineStrength","1f",t.outline),I.render(),t.fxaa>0){t.dofStrength>0?R.bind():p.bindFramebuffer(p.FRAMEBUFFER,null);for(var e=0;e0&&(p.bindFramebuffer(p.FRAMEBUFFER,null),p.clear(p.COLOR_BUFFER_BIT|p.DEPTH_BUFFER_BIT),t.fxaa>0?D.setUniform("uColor","1i",M.index):D.setUniform("uColor","1i",k.index),D.setUniform("uDepth","1i",g.index),D.setUniform("uDOFPosition","1f",t.dofPosition),D.setUniform("uDOFStrength","1f",t.dofStrength),D.setUniform("uRes","1f",n),X.render())}(t)}},F.initialize()}},function(t,n){function e(t){var n=this;n.initialize=function(){n.buffer=t.createBuffer()},n.bind=function(){t.bindBuffer(t.ARRAY_BUFFER,n.buffer)},n.set=function(e){n.bind(),t.bufferData(t.ARRAY_BUFFER,e,t.STATIC_DRAW)},n.initialize()}t.exports.buildAttribs=function(t,n){var r={};for(var o in n)r[o]={buffer:new e(t),size:n[o]};return r},t.exports.getExtensions=function(t,n){for(var e={},r=0;r1){for(var a=[],i=0;i 0.0) {\n float depth = texture2D(uSceneDepth, p).r;\n float r = 1.0/511.0;\n float d0 = abs(texture2D(uSceneDepth, p + vec2(-r, 0)).r - depth);\n float d1 = abs(texture2D(uSceneDepth, p + vec2( r, 0)).r - depth);\n float d2 = abs(texture2D(uSceneDepth, p + vec2( 0, -r)).r - depth);\n float d3 = abs(texture2D(uSceneDepth, p + vec2( 0, r)).r - depth);\n float d = max(d0, d1);\n d = max(d, d2);\n d = max(d, d3);\n sceneColor.rgb *= pow(1.0 - d, uOutlineStrength * 32.0);\n sceneColor.a = max(step(0.003, d), sceneColor.a);\n }\n vec4 dAccum = texture2D(uAccumulatorOut, p);\n float shade = max(0.0, 1.0 - (dAccum.r + dAccum.g + dAccum.b + dAccum.a) * 0.25 * uAO);\n shade = pow(shade, 2.0);\n gl_FragColor = vec4(uBrightness * sceneColor.rgb * shade, sceneColor.a);\n}\n",atom:"#version 100\nprecision highp float;\n\nattribute vec3 aImposter;\nattribute vec3 aPosition;\nattribute float aRadius;\nattribute vec3 aColor;\n\nuniform mat4 uView;\nuniform mat4 uProjection;\nuniform mat4 uModel;\nuniform float uAtomScale;\nuniform float uRelativeAtomScale;\nuniform float uAtomShade;\n\nvarying vec3 vColor;\nvarying vec3 vPosition;\nvarying float vRadius;\n\nvoid main() {\n vRadius = uAtomScale * (1.0 + (aRadius - 1.0) * uRelativeAtomScale);\n gl_Position = uProjection * uView * uModel * vec4(vRadius * aImposter + aPosition, 1.0);\n vColor = mix(aColor, vec3(1,1,1), uAtomShade);\n vPosition = vec3(uModel * vec4(aPosition, 1));\n}\n\n\n// __split__\n\n\n#version 100\n#extension GL_EXT_frag_depth: enable\nprecision highp float;\n\nuniform vec2 uBottomLeft;\nuniform vec2 uTopRight;\nuniform float uRes;\nuniform float uDepth;\nuniform int uMode;\n\nvarying vec3 vPosition;\nvarying float vRadius;\nvarying vec3 vColor;\n\nvec2 res = vec2(uRes, uRes);\n\nfloat raySphereIntersect(vec3 r0, vec3 rd) {\n float a = dot(rd, rd);\n vec3 s0_r0 = r0 - vPosition;\n float b = 2.0 * dot(rd, s0_r0);\n float c = dot(s0_r0, s0_r0) - (vRadius * vRadius);\n float disc = b*b - 4.0*a*c;\n if (disc <= 0.0) {\n return -1.0;\n }\n return (-b - sqrt(disc))/(2.0*a);\n}\n\nvoid main() {\n vec3 r0 = vec3(uBottomLeft + (gl_FragCoord.xy/res) * (uTopRight - uBottomLeft), 0.0);\n vec3 rd = vec3(0, 0, -1);\n float t = raySphereIntersect(r0, rd);\n if (t < 0.0) {\n discard;\n }\n vec3 coord = r0 + rd * t;\n vec3 normal = normalize(coord - vPosition);\n if (uMode == 0) {\n gl_FragColor = vec4(vColor, 1);\n } else if (uMode == 1) {\n gl_FragColor = vec4(normal * 0.5 + 0.5, 1.0);\n }\n gl_FragDepthEXT = -coord.z/uDepth;\n}\n",blur:"#version 100\nprecision highp float;\n\nattribute vec3 aPosition;\n\nvoid main() {\n gl_Position = vec4(aPosition, 1);\n}\n\n\n// __split__\n\n\n#version 100\nprecision highp float;\n\nuniform sampler2D uTexture;\nuniform float uRes;\nuniform int leftRight;\n\nvoid main() {\n vec2 dir;\n if (leftRight == 1) {\n dir = vec2(1,0)/uRes;\n } else {\n dir = vec2(0,1)/uRes;\n }\n const int range = 16;\n vec4 sample = vec4(0,0,0,0);\n for (int i = -range; i <= range; i++) {\n vec2 p = gl_FragCoord.xy/uRes + dir * float(i);\n sample += texture2D(uTexture, p);\n }\n sample /= float(range) * 2.0 + 1.0;\n gl_FragColor = sample;\n}\n",bond:"#version 100\nprecision highp float;\n\nattribute vec3 aImposter;\nattribute vec3 aPosA;\nattribute vec3 aPosB;\nattribute float aRadA;\nattribute float aRadB;\nattribute vec3 aColA;\nattribute vec3 aColB;\n\nuniform mat4 uView;\nuniform mat4 uProjection;\nuniform mat4 uModel;\nuniform mat4 uRotation;\nuniform float uBondRadius;\nuniform float uAtomScale;\nuniform float uRelativeAtomScale;\n\nvarying vec3 vNormal;\nvarying vec3 vPosA, vPosB;\nvarying float vRadA, vRadB;\nvarying vec3 vColA, vColB;\nvarying float vRadius;\n\nmat3 alignVector(vec3 a, vec3 b) {\n vec3 v = cross(a, b);\n float s = length(v);\n float c = dot(a, b);\n mat3 I = mat3(\n 1, 0, 0,\n 0, 1, 0,\n 0, 0, 1\n );\n mat3 vx = mat3(\n 0, v.z, -v.y,\n -v.z, 0, v.x,\n v.y, -v.x, 0\n );\n return I + vx + vx * vx * ((1.0 - c) / (s * s));\n}\n\nvoid main() {\n vRadius = uBondRadius;\n vec3 pos = vec3(aImposter);\n // Scale the box in x and z to be bond-radius.\n pos = pos * vec3(vRadius, 1, vRadius);\n // Shift the origin-centered cube so that the bottom is at the origin.\n pos = pos + vec3(0, 1, 0);\n // Stretch the box in y so that it is the length of the bond.\n pos = pos * vec3(1, length(aPosA - aPosB) * 0.5, 1);\n // Find the rotation that aligns vec3(0, 1, 0) with vec3(uPosB - uPosA) and apply it.\n vec3 a = normalize(vec3(-0.000001, 1.000001, 0.000001));\n vec3 b = normalize(aPosB - aPosA);\n mat3 R = alignVector(a, b);\n pos = R * pos;\n // Shift the cube so that the bottom is centered at the middle of atom A.\n pos = pos + aPosA;\n\n vec4 position = uModel * vec4(pos, 1);\n gl_Position = uProjection * uView * position;\n vPosA = aPosA;\n vPosB = aPosB;\n vRadA = uAtomScale * (1.0 + (aRadA - 1.0) * uRelativeAtomScale);\n vRadB = uAtomScale * (1.0 + (aRadB - 1.0) * uRelativeAtomScale);\n vColA = aColA;\n vColB = aColB;\n}\n\n\n// __split__\n\n\n#version 100\n#extension GL_EXT_frag_depth: enable\nprecision highp float;\n\nuniform mat4 uRotation;\nuniform vec2 uBottomLeft;\nuniform vec2 uTopRight;\nuniform float uDepth;\nuniform float uRes;\nuniform float uBondShade;\nuniform int uMode;\n\nvarying vec3 vPosA, vPosB;\nvarying float vRadA, vRadB;\nvarying vec3 vColA, vColB;\nvarying float vRadius;\n\nmat3 alignVector(vec3 a, vec3 b) {\n vec3 v = cross(a, b);\n float s = length(v);\n float c = dot(a, b);\n mat3 I = mat3(\n 1, 0, 0,\n 0, 1, 0,\n 0, 0, 1\n );\n mat3 vx = mat3(\n 0, v.z, -v.y,\n -v.z, 0, v.x,\n v.y, -v.x, 0\n );\n return I + vx + vx * vx * ((1.0 - c) / (s * s));\n}\n\nvoid main() {\n\n vec2 res = vec2(uRes, uRes);\n vec3 r0 = vec3(uBottomLeft + (gl_FragCoord.xy/res) * (uTopRight - uBottomLeft), uDepth/2.0);\n vec3 rd = vec3(0, 0, -1);\n\n vec3 i = normalize(vPosB - vPosA);\n i = vec3(uRotation * vec4(i, 0));\n vec3 j = normalize(vec3(-0.000001, 1.000001, 0.000001));\n mat3 R = alignVector(i, j);\n\n vec3 r0p = r0 - vec3(uRotation * vec4(vPosA, 0));\n r0p = R * r0p;\n vec3 rdp = R * rd;\n\n float a = dot(rdp.xz, rdp.xz);\n float b = 2.0 * dot(rdp.xz, r0p.xz);\n float c = dot(r0p.xz, r0p.xz) - vRadius*vRadius;\n float disc = b*b - 4.0*a*c;\n if (disc <= 0.0) {\n discard;\n }\n float t = (-b - sqrt(disc))/(2.0*a);\n if (t < 0.0) {\n discard;\n }\n\n vec3 coord = r0p + rdp * t;\n if (coord.y < 0.0 || coord.y > length(vPosA - vPosB)) {\n discard;\n }\n\n vec3 color;\n if (coord.y < vRadA + 0.5 * (length(vPosA - vPosB) - (vRadA + vRadB))) {\n color = vColA;\n } else {\n color = vColB;\n }\n\n color = mix(color, vec3(1,1,1), uBondShade);\n\n R = alignVector(j, i);\n vec3 normal = normalize(R * vec3(coord.x, 0, coord.z));\n\n coord = r0 + rd * t;\n if (uMode == 0) {\n gl_FragColor = vec4(color, 1);\n } else if (uMode == 1) {\n gl_FragColor = vec4(normal * 0.5 + 0.5, 1.0);\n }\n gl_FragDepthEXT = -(coord.z - uDepth/2.0)/uDepth;\n}\n",dof:"#version 100\nprecision highp float;\n\nattribute vec3 aPosition;\n\nvoid main() {\n gl_Position = vec4(aPosition, 1);\n}\n\n\n// __split__\n\n\n#version 100\nprecision highp float;\n\nuniform sampler2D uColor;\nuniform sampler2D uDepth;\nuniform float uRes;\nuniform float uDOFPosition;\nuniform float uDOFStrength;\nuniform int leftRight;\n\nvoid main() {\n\n vec2 samples[64];\n samples[0] = vec2(0.857612, 0.019885);\n samples[1] = vec2(0.563809, -0.028071);\n samples[2] = vec2(0.825599, -0.346856);\n samples[3] = vec2(0.126584, -0.380959);\n samples[4] = vec2(0.782948, 0.594322);\n samples[5] = vec2(0.292148, -0.543265);\n samples[6] = vec2(0.130700, 0.330220);\n samples[7] = vec2(0.236088, 0.159604);\n samples[8] = vec2(-0.305259, 0.810505);\n samples[9] = vec2(0.269616, 0.923026);\n samples[10] = vec2(0.484486, 0.371845);\n samples[11] = vec2(-0.638057, 0.080447);\n samples[12] = vec2(0.199629, 0.667280);\n samples[13] = vec2(-0.861043, -0.370583);\n samples[14] = vec2(-0.040652, -0.996174);\n samples[15] = vec2(0.330458, -0.282111);\n samples[16] = vec2(0.647795, -0.214354);\n samples[17] = vec2(0.030422, -0.189908);\n samples[18] = vec2(0.177430, -0.721124);\n samples[19] = vec2(-0.461163, -0.327434);\n samples[20] = vec2(-0.410012, -0.734504);\n samples[21] = vec2(-0.616334, -0.626069);\n samples[22] = vec2(0.590759, -0.726479);\n samples[23] = vec2(-0.590794, 0.805365);\n samples[24] = vec2(-0.924561, -0.163739);\n samples[25] = vec2(-0.323028, 0.526960);\n samples[26] = vec2(0.642128, 0.752577);\n samples[27] = vec2(0.173625, -0.952386);\n samples[28] = vec2(0.759014, 0.330311);\n samples[29] = vec2(-0.360526, -0.032013);\n samples[30] = vec2(-0.035320, 0.968156);\n samples[31] = vec2(0.585478, -0.431068);\n samples[32] = vec2(-0.244766, -0.906947);\n samples[33] = vec2(-0.853096, 0.184615);\n samples[34] = vec2(-0.089061, 0.104648);\n samples[35] = vec2(-0.437613, 0.285308);\n samples[36] = vec2(-0.654098, 0.379841);\n samples[37] = vec2(-0.128663, 0.456572);\n samples[38] = vec2(0.015980, -0.568170);\n samples[39] = vec2(-0.043966, -0.771940);\n samples[40] = vec2(0.346512, -0.071238);\n samples[41] = vec2(-0.207921, -0.209121);\n samples[42] = vec2(-0.624075, -0.189224);\n samples[43] = vec2(-0.120618, 0.689339);\n samples[44] = vec2(-0.664679, -0.410200);\n samples[45] = vec2(0.371945, -0.880573);\n samples[46] = vec2(-0.743251, 0.629998);\n samples[47] = vec2(-0.191926, -0.413946);\n samples[48] = vec2(0.449574, 0.833373);\n samples[49] = vec2(0.299587, 0.449113);\n samples[50] = vec2(-0.900432, 0.399319);\n samples[51] = vec2(0.762613, -0.544796);\n samples[52] = vec2(0.606462, 0.174233);\n samples[53] = vec2(0.962185, -0.167019);\n samples[54] = vec2(0.960990, 0.249552);\n samples[55] = vec2(0.570397, 0.559146);\n samples[56] = vec2(-0.537514, 0.555019);\n samples[57] = vec2(0.108491, -0.003232);\n samples[58] = vec2(-0.237693, -0.615428);\n samples[59] = vec2(-0.217313, 0.261084);\n samples[60] = vec2(-0.998966, 0.025692);\n samples[61] = vec2(-0.418554, -0.527508);\n samples[62] = vec2(-0.822629, -0.567797);\n samples[63] = vec2(0.061945, 0.522105);\n\n float invRes = 1.0/uRes;\n vec2 coord = gl_FragCoord.xy * invRes;\n\n float strength = uDOFStrength * uRes/768.0;\n\n float depth = texture2D(uDepth, coord).r;\n float range = uDOFPosition - depth;\n float scale = abs(range);\n\n vec4 sample = texture2D(uColor, coord);\n float count = 1.0;\n for(int i = 0; i < 64; i++) {\n vec2 p = samples[i];\n p = coord + scale * 64.0 * strength * p * invRes;\n float d = texture2D(uDepth, p).r;\n float r = uDOFPosition - d;\n float s = abs(r);\n sample += texture2D(uColor, p) * s;\n count += s;\n }\n\n gl_FragColor = sample/count;\n}",fxaa:"#version 100\nprecision highp float;\n\nattribute vec3 aPosition;\n\nvoid main() {\n gl_Position = vec4(aPosition, 1);\n}\n\n\n// __split__\n\n\n#version 100\nprecision highp float;\n\nuniform sampler2D uTexture;\nuniform float uRes;\n\nvoid main() {\n float FXAA_SPAN_MAX = 8.0;\n float FXAA_REDUCE_MUL = 1.0/8.0;\n float FXAA_REDUCE_MIN = 1.0/128.0;\n\n vec2 texCoords = gl_FragCoord.xy/uRes;\n\n vec4 rgbNW = texture2D(uTexture, texCoords + (vec2(-1.0, -1.0) / uRes));\n vec4 rgbNE = texture2D(uTexture, texCoords + (vec2(1.0, -1.0) / uRes));\n vec4 rgbSW = texture2D(uTexture, texCoords + (vec2(-1.0, 1.0) / uRes));\n vec4 rgbSE = texture2D(uTexture, texCoords + (vec2(1.0, 1.0) / uRes));\n vec4 rgbM = texture2D(uTexture, texCoords);\n\n vec4 luma = vec4(0.299, 0.587, 0.114, 1.0);\n float lumaNW = dot(rgbNW, luma);\n float lumaNE = dot(rgbNE, luma);\n float lumaSW = dot(rgbSW, luma);\n float lumaSE = dot(rgbSE, luma);\n float lumaM = dot(rgbM, luma);\n\n float lumaMin = min(lumaM, min(min(lumaNW, lumaNE), min(lumaSW, lumaSE)));\n float lumaMax = max(lumaM, max(max(lumaNW, lumaNE), max(lumaSW, lumaSE)));\n\n vec2 dir;\n dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE));\n dir.y = ((lumaNW + lumaSW) - (lumaNE + lumaSE));\n\n float dirReduce = max((lumaNW + lumaNE + lumaSW + lumaSE) * (0.25 * FXAA_REDUCE_MUL), FXAA_REDUCE_MIN);\n\n float rcpDirMin = 1.0/(min(abs(dir.x), abs(dir.y)) + dirReduce);\n\n dir = min(vec2(FXAA_SPAN_MAX, FXAA_SPAN_MAX), max(vec2(-FXAA_SPAN_MAX, -FXAA_SPAN_MAX), dir * rcpDirMin)) / uRes;\n\n vec4 rgbA = (1.0/2.0) * \n (texture2D(uTexture, texCoords.xy + dir * (1.0/3.0 - 0.5)) + \n texture2D(uTexture, texCoords.xy + dir * (2.0/3.0 - 0.5)));\n vec4 rgbB = rgbA * (1.0/2.0) + (1.0/4.0) * \n (texture2D(uTexture, texCoords.xy + dir * (0.0/3.0 - 0.5)) +\n texture2D(uTexture, texCoords.xy + dir * (3.0/3.0 - 0.5)));\n float lumaB = dot(rgbB, luma);\n\n if((lumaB < lumaMin) || (lumaB > lumaMax)){\n gl_FragColor = rgbA;\n } else {\n gl_FragColor = rgbB;\n }\n\n}","textured-quad":"#version 100\nprecision highp float;\n\nattribute vec3 aPosition;\n\nvoid main() {\n gl_Position = vec4(aPosition, 1);\n}\n\n\n// __split__\n\n\n#version 100\nprecision highp float;\n\nuniform sampler2D uTexture;\nuniform float uRes;\n\nvoid main() {\n gl_FragColor = texture2D(uTexture, gl_FragCoord.xy/uRes);\n}\n"};t.exports={shaders:r}},function(t,n,e){"use strict";function r(t){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var o=e(8);t.exports=function(t){if(arguments.length>1)throw"Error: The Speck Interactions module has changed!";if(0===arguments.length||"object"!==r(t))throw"Error: Arguments not provided to interactions";var n=void 0===t.scrollZoom||t.scrollZoom,e=t.container,a=t.getRotation,i=t.setRotation,u=t.getTranslation,s=t.setTranslation,l=t.getZoom,c=t.setZoom,f=t.refreshView,h={buttonDown:!1,shiftDown:!1,lastX:0,lastY:0};function p(t){0===t.button&&(h={buttonDown:!0,shiftDown:h.shiftDown,lastX:t.clientX,lastY:t.clientY})}function d(t){if(0===t.button){if(!h.buttonDown)return;h.buttonDown=!1}}function m(t){h.shiftDown=t.shiftKey}function g(t){if(h.buttonDown&&0!==t.buttons){t.preventDefault();var n=t.clientX-h.lastX,e=t.clientY-h.lastY;if(0!==n||0!==e){if(h.lastX=t.clientX,h.lastY=t.clientY,h.shiftDown){var r=u(),c=.001/l();s({x:r.x-n*c,y:r.y+e*c})}else{var p={rotation:new Float32Array(a())};o.rotate(p,n,e),i(p.rotation)}f()}}}function v(t){t.preventDefault(),c(l()*(t.deltaY<0?1/.9:.9)),f()}function y(){e.removeEventListener("mousedown",p),window.removeEventListener("mouseup",d),window.removeEventListener("keydown",m),window.removeEventListener("keyup",m),window.removeEventListener("mousemove",g),e.removeEventListener("wheel",v)}return e.addEventListener("mousedown",p),window.addEventListener("mouseup",d),window.addEventListener("keydown",m),window.addEventListener("keyup",m),window.addEventListener("mousemove",g),n&&e.addEventListener("wheel",v),y}},function(t,n){t.exports={default:{atomScale:.6,relativeAtomScale:1,bondScale:.5,ao:.75,aoRes:256,brightness:.5,outline:0,spf:32,bonds:!1,bondThreshold:1.2,bondShade:.5,atomShade:.5,dofStrength:0,dofPosition:.5,fxaa:1},stickball:{atomScale:.24,relativeAtomScale:.64,bondScale:.5,bonds:!0,bondThreshold:1.2},toon:{ao:0,spf:0,brightness:.5,outline:1},licorice:{atomScale:.1,relativeAtomScale:0,bondScale:1,bonds:!0,bondThreshold:1.2}}},function(t,n,e){"use strict";e.r(n);var r=e(10),o=e(18),a=e(1),i=e.n(a),u=e(0),s=e.n(u),l=e(22),c=e(43);function f(t){return(f="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function h(t,n){for(var e=0;e=0;)n=h[e],Object(i.a)(n,t)&&!d(r,n)&&(r[r.length]=n),e-=1;return r})):Object(s.a)((function(t){return Object(t)!==t?[]:Object.keys(t)})),g=Object(s.a)((function(t){return null===t?"Null":void 0===t?"Undefined":Object.prototype.toString.call(t).slice(8,-1)}));function v(t,n,e,r){var i=o(t);function u(t,n){return y(t,n,e.slice(),r.slice())}return!a((function(t,n){return!a(u,n,t)}),o(n),i)}function y(t,n,e,r){if(u(t,n))return!0;var o,a,s=g(t);if(s!==g(n))return!1;if(null==t||null==n)return!1;if("function"==typeof t["fantasy-land/equals"]||"function"==typeof n["fantasy-land/equals"])return"function"==typeof t["fantasy-land/equals"]&&t["fantasy-land/equals"](n)&&"function"==typeof n["fantasy-land/equals"]&&n["fantasy-land/equals"](t);if("function"==typeof t.equals||"function"==typeof n.equals)return"function"==typeof t.equals&&t.equals(n)&&"function"==typeof n.equals&&n.equals(t);switch(s){case"Arguments":case"Array":case"Object":if("function"==typeof t.constructor&&"Promise"===(o=t.constructor,null==(a=String(o).match(/^function (\w*)/))?"":a[1]))return t===n;break;case"Boolean":case"Number":case"String":if(typeof t!=typeof n||!u(t.valueOf(),n.valueOf()))return!1;break;case"Date":if(!u(t.valueOf(),n.valueOf()))return!1;break;case"Error":return t.name===n.name&&t.message===n.message;case"RegExp":if(t.source!==n.source||t.global!==n.global||t.ignoreCase!==n.ignoreCase||t.multiline!==n.multiline||t.sticky!==n.sticky||t.unicode!==n.unicode)return!1}for(var l=e.length-1;l>=0;){if(e[l]===t)return r[l]===n;l-=1}switch(s){case"Map":return t.size===n.size&&v(t.entries(),n.entries(),e.concat([t]),r.concat([n]));case"Set":return t.size===n.size&&v(t.values(),n.values(),e.concat([t]),r.concat([n]));case"Arguments":case"Array":case"Object":case"Boolean":case"Number":case"String":case"Date":case"Error":case"RegExp":case"Int8Array":case"Uint8Array":case"Uint8ClampedArray":case"Int16Array":case"Uint16Array":case"Int32Array":case"Uint32Array":case"Float32Array":case"Float64Array":case"ArrayBuffer":break;default:return!1}var c=m(t);if(c.length!==m(n).length)return!1;var f=e.concat([t]),h=r.concat([n]);for(l=c.length-1;l>=0;){var p=c[l];if(!Object(i.a)(p,n)||!y(n[p],t[p],f,h))return!1;l-=1}return!0}var b=Object(r.a)((function(t,n){return y(t,n,[],[])}));n.a=b}]); \ No newline at end of file diff --git a/dash_bio/component_factory/_clustergram.py b/dash_bio/component_factory/_clustergram.py index e3d2085fa..61a1cb6bb 100644 --- a/dash_bio/component_factory/_clustergram.py +++ b/dash_bio/component_factory/_clustergram.py @@ -66,8 +66,8 @@ def Clustergram( (observation labels). - column_labels (list; optional): List of column category labels (observation labels). -- hidden_labels (list; optional): List of labels not to display on the - final plot. +- hidden_labels (list; optional): List containing strings 'row' and/or 'col' + if row and/or column labels should be hidden on the final plot. - standardize (string; default 'none'): The dimension for standardizing values, so that the mean is 0 and the standard deviation is 1, along the specified dimension: 'row', 'column', or 'none'. @@ -162,8 +162,6 @@ def Clustergram( - width (number; default 500): The width of the graph, in px. """ - if hidden_labels is None: - hidden_labels = [] if color_threshold is None: color_threshold = dict(row=0, col=0) @@ -243,16 +241,16 @@ def __init__( hidden_labels = [] if color_threshold is None: color_threshold = dict(row=0, col=0) - if row_labels is None: - row_labels = [str(i) for i in range(data.shape[0])] - hidden_labels.append("row") - if column_labels is None: - column_labels = [str(i) for i in range(data.shape[1])] - hidden_labels.append("col") + # Always keep unique identifiers for rows + row_ids = list(range(data.shape[0])) + # Always keep unique identifiers for columns + column_ids = list(range(data.shape[1])) self._data = data self._row_labels = row_labels + self._row_ids = row_ids self._column_labels = column_labels + self._column_ids = column_ids self._cluster = cluster self._row_dist = row_dist self._col_dist = col_dist @@ -359,16 +357,23 @@ def figure(self, computed_traces=None): ( dt, self._data, - self._row_labels, - self._column_labels, + self._row_ids, + self._column_ids, ) = self._compute_clustered_data() else: # use, if available, the precomputed dendrogram and heatmap # traces (as well as the row and column labels) dt = computed_traces["dendro_traces"] heatmap = computed_traces["heatmap"] - self._row_labels = computed_traces["row_labels"] - self._column_labels = computed_traces["column_labels"] + self._row_ids = computed_traces["row_ids"] + self._column_ids = computed_traces["column_ids"] + + # Match reordered rows and columns with their respective labels + if self._row_labels: + self._row_labels = [self._row_labels[r] for r in self._row_ids] + if self._column_labels: + self._column_labels = [self._column_labels[r] + for r in self._column_ids] # this dictionary relates curve numbers (accessible from the # hoverData/clickData props) to cluster numbers @@ -501,7 +506,7 @@ def figure(self, computed_traces=None): xaxis2.update(scaleanchor="x5") if len(tickvals_col) == 0: - tickvals_col = [10 * i + 5 for i in range(len(self._column_labels))] + tickvals_col = [10 * i + 5 for i in range(len(self._column_ids))] # add in all of the labels fig["layout"]["xaxis5"].update( # pylint: disable=invalid-sequence-index @@ -518,7 +523,7 @@ def figure(self, computed_traces=None): ) if len(tickvals_row) == 0: - tickvals_row = [10 * i + 5 for i in range(len(self._row_labels))] + tickvals_row = [10 * i + 5 for i in range(len(self._row_ids))] fig["layout"]["yaxis5"].update( # pylint: disable=invalid-sequence-index tickmode="array", @@ -676,8 +681,8 @@ def figure(self, computed_traces=None): computed_traces = { "dendro_traces": dt, "heatmap": heatmap, - "row_labels": self._row_labels, - "column_labels": self._column_labels, + "row_ids": self._row_ids, + "column_ids": self._column_ids, } return (fig, computed_traces, cluster_curve_numbers) @@ -746,8 +751,8 @@ def _compute_clustered_data(self): # first, compute the clusters (Zcol, Zrow) = self._get_clusters() - clustered_column_labels = self._column_labels - clustered_row_labels = self._row_labels + clustered_column_ids = self._column_ids + clustered_row_ids = self._row_ids # calculate dendrogram from clusters; sch.dendrogram returns sets # of four coordinates that make up the 'u' shapes in the dendrogram @@ -756,10 +761,10 @@ def _compute_clustered_data(self): Zcol, orientation="top", color_threshold=self._color_threshold["col"], - labels=self._column_labels, + labels=self._column_ids, no_plot=True, ) - clustered_column_labels = Pcol["ivl"] + clustered_column_ids = Pcol["ivl"] trace_list["col"] = self._color_dendro_clusters(Pcol, "col") if Zrow is not None: @@ -767,7 +772,7 @@ def _compute_clustered_data(self): Zrow, orientation="left", color_threshold=self._color_threshold["row"], - labels=self._row_labels, + labels=self._row_ids, no_plot=True, ) # need to flip the coordinates for the row dendrogram @@ -776,21 +781,21 @@ def _compute_clustered_data(self): "dcoord": Prow["icoord"], "color_list": Prow["color_list"], } - clustered_row_labels = Prow["ivl"] + clustered_row_ids = Prow["ivl"] trace_list["row"] = self._color_dendro_clusters(Prow_tmp, "row") # now, we need to rearrange the data array to fit the labels # first get reordered indices - rl_indices = [self._row_labels.index(r) for r in clustered_row_labels] - cl_indices = [self._column_labels.index(c) for c in clustered_column_labels] + rl_indices = [self._row_ids.index(r) for r in clustered_row_ids] + cl_indices = [self._column_ids.index(c) for c in clustered_column_ids] # modify the data here; first shuffle rows, # then transpose and shuffle columns, # then transpose again clustered_data = self._data[rl_indices].T[cl_indices].T - return trace_list, clustered_data, clustered_row_labels, clustered_column_labels + return trace_list, clustered_data, clustered_row_ids, clustered_column_ids def _color_dendro_clusters(self, P, dim): """Color each cluster below the color threshold separately. diff --git a/dash_bio/package-info.json b/dash_bio/package-info.json index ed60350c3..9acc322e8 100644 --- a/dash_bio/package-info.json +++ b/dash_bio/package-info.json @@ -1 +1 @@ -{"name": "dash_bio", "version": "0.4.7", "author": "The Plotly Team "} \ No newline at end of file +{"name": "dash_bio", "version": "0.4.8", "author": "The Plotly Team "} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 33c6659d2..704132fc0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "dash-bio", - "version": "0.4.7", + "version": "0.4.8", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 48afc67ec..ac24b41dc 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "dash-bio", - "version": "0.4.7", + "version": "0.4.8", "description": "Dash components for bioinformatics", "repository": { "type": "git", diff --git a/tests/integration/test_clustergram.py b/tests/integration/test_clustergram.py index e2f226d03..250c0a6b8 100644 --- a/tests/integration/test_clustergram.py +++ b/tests/integration/test_clustergram.py @@ -212,3 +212,64 @@ def test_dbcl006_df_input_row_cluster(dash_duo): assert len(dash_duo.find_elements('g.subplot.x2y2')) == 0 assert len(dash_duo.find_elements('g.subplot.x4y4')) == 1 + + +def test_dbcl007_hidden_labels(dash_duo): + + app = dash.Dash(__name__) + + data = _mtcars_data + row_labels = list(_mtcars_data.index) + col_labels = list(_mtcars_data.columns) + + app.layout = html.Div(nested_component_layout( + dash_bio.Clustergram( + data=data, + row_labels=row_labels, + column_labels=col_labels + ) + )) + + nested_component_app_callback( + app, + dash_duo, + component=dash_bio.Clustergram, + component_data=data, + test_prop_name='hidden_labels', + test_prop_value='row', + prop_value_type='string' + ) + + # ensure that row labels are hidden + assert len(dash_duo.find_elements('g.yaxislayer-above g.y5tick')) == 0 + # ensure that column labels are displayed + assert len(dash_duo.find_elements('g.xaxislayer-above g.x5tick')) == \ + len(col_labels) + + # create a new instance of the app to test hiding of column labels + + app = dash.Dash(__name__) + + app.layout = html.Div(nested_component_layout( + dash_bio.Clustergram( + data=data, + row_labels=row_labels, + column_labels=col_labels + ) + )) + + nested_component_app_callback( + app, + dash_duo, + component=dash_bio.Clustergram, + component_data=data, + test_prop_name='hidden_labels', + test_prop_value='col', + prop_value_type='string' + ) + + # ensure that column labels are hidden + assert len(dash_duo.find_elements('g.xaxislayer-above g.x5tick')) == 0 + # ensure that row labels are displayed + assert len(dash_duo.find_elements('g.yaxislayer-above g.y5tick')) == \ + len(row_labels) diff --git a/tests/unit/test_clustergram.py b/tests/unit/test_clustergram.py index 6b8084240..4bb130f28 100644 --- a/tests/unit/test_clustergram.py +++ b/tests/unit/test_clustergram.py @@ -49,3 +49,37 @@ def test_read_dataframe(): clustered_data = CLUSTERED_DATA assert np.array_equal(curves_dict['heatmap']['z'], clustered_data) + + +def test_row_labels(): + """Test that specifying row labels preserves clustering.""" + + data = DATA + row_labels = ['a', 'b', 'b', 'b', 'b', 'b'] + _, _, curves_dict = Clustergram( + data, + generate_curves_dict=True, + return_computed_traces=True, + row_labels=row_labels, + center_values=False + ) + clustered_data = CLUSTERED_DATA + + assert np.array_equal(curves_dict['heatmap']['z'], clustered_data) + + +def test_column_labels(): + """Test that specifying column labels preserves clustering.""" + + data = DATA.T + column_labels = ['a', 'b', 'b', 'b', 'b', 'b'] + _, _, curves_dict = Clustergram( + data, + generate_curves_dict=True, + return_computed_traces=True, + column_labels=column_labels, + center_values=False + ) + clustered_data = CLUSTERED_DATA.T + + assert np.array_equal(curves_dict['heatmap']['z'], clustered_data)