diff --git a/.circleci/config.yml b/.circleci/config.yml index e53743bcd..1c6c717d4 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -18,6 +18,19 @@ jobs: password: $DASH_PAT_DOCKERHUB steps: - checkout + - run: echo $PYTHON_VERSION > ver.txt + - restore_cache: + key: dep-{{ checksum ".circleci/config.yml" }}-{{ checksum "ver.txt" }}-{{ checksum "requirements.txt" }} + - run: + name: 🐍 pip dev requirements + command: | + sudo pip install virtualenv --upgrade + python -m venv venv || virtualenv venv && . venv/bin/activate + pip install --progress-bar off --no-cache-dir -r requirements.txt + - save_cache: + key: dep-{{ checksum ".circleci/config.yml" }}-{{ checksum "ver.txt" }}-{{ checksum "requirements.txt" }} + paths: + - venv - run: name: Check current version of node command: node -v diff --git a/CHANGELOG.md b/CHANGELOG.md index 1b63b66aa..b8d278bf6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,8 @@ ### Fixed * [#561](https://github.com/plotly/dash-bio/pull/561) Repeated re-rendering of the Molecule3dViewer component caused the viewer zoom to decrease multiplicatively. This fix also exposes the `zoom` and `zoomTo` props for this component. +### Changed +- [#562](https://github.com/plotly/dash-bio/pull/562) Changed package scripts to 3 main build scripts: `build:js`, `build:backends`, and `build` to combined them. This brings the dash-bio build process in-line with the process for other Dash component libraries. As part of this change, `__init__.py` now also uses relative imports to load components (for more info, see [#534](https://github.com/plotly/dash-bio/issues/534)). ### Added * [#563](https://github.com/plotly/dash-bio/pull/563) Added component generation support for Dash Julia. diff --git a/dash_bio/__init__.py b/dash_bio/__init__.py index 0d9d8358c..ba9a89942 100644 --- a/dash_bio/__init__.py +++ b/dash_bio/__init__.py @@ -24,13 +24,8 @@ package_name = package['name'].replace(' ', '_').replace('-', '_') __version__ = package['version'] -_current_path = _os.path.dirname(_os.path.abspath(__file__)) -_components = _dash.development.component_loader.load_components( - _os.path.join(_current_path, 'metadata.json'), - package_name -) - -_this_module = _sys.modules[__name__] +from ._imports_ import * # noqa: F401, F403, E402 +from ._imports_ import __all__ # noqa: E402 async_resources = [ 'alignment', @@ -112,10 +107,6 @@ ] ) -_css_dist = [] - -for _component in _components: - setattr(_this_module, _component.__name__, _component) - setattr(_component, '_js_dist', _js_dist) - setattr(_component, '_css_dist', _css_dist) +for _component in __all__: + setattr(locals()[_component], "_js_dist", _js_dist) diff --git a/dash_bio/bundle.js b/dash_bio/bundle.js index 0b8552e74..57b6616c1 100644 --- a/dash_bio/bundle.js +++ b/dash_bio/bundle.js @@ -1,2 +1,2 @@ -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(23);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()),N.attr("x1",u.x).attr("y1",u.y).attr("x2",mpos[0]).attr("y2",mpos[1]))}function w(){u&&N.attr("class","drag_line_hidden"),O()}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",P),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 P(){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,V(n)}else extraLinkIndex=e.extraLinks.indexOf(t),e.extraLinks.splice(extraLinkIndex,1);e.recalculateGraph()}e.update()},G=function(t){C&&(t.linkType in{backbone:!0,fake:!0,fake_fake:!0,label_link:!0}||H(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,V(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 O();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,P,N,O,C,L,U,D,z,j,q,F,B,I,X,Y,V,H,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,N=-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,N=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==N?0:N,v=t.getConnection(T),E=0,O=!1;do{if((w=T-1)<0&&(w=t.getNconnection()-1),x=t.getConnection(w),this.connected_connection(x,v)?(T=w,v=x):O=!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),O=!0}}while(!O);for(C=!1,G=T;!C;){for(E=0,O=!1,R=T,L=!1;!O;)if(v=t.getConnection(R),R==N&&(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 O=!0;for(k=W=Z=P=this.find_ic_middle(T,R,n,b,t),O=!1,$=0;!O;)(k=$<0?W:0==$?P: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),O=-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,F=Q/(nt=Math.sqrt(Q*Q+tt*tt)),B=tt/nt,I=c-D,X=f-z,j=(Y=(I/=nt=Math.sqrt(Q*Q+tt*tt))*F+(X/=nt)*B)*F-I,q=Y*B-X,j/=nt=Math.sqrt(j*j+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*j,H=f+U*l*q,L)c-=V-D,f-=H-z;else for(k=T;M=(v=t.getConnection(k)).getStart(),this.bases[M].setX(this.bases[M].getX()+V-D),this.bases[M].setY(this.bases[M].getY()+H-z),M=v.getEnd(),this.bases[M].setX(this.bases[M].getX()+V-D),this.bases[M].setY(this.bases[M].getY()+H-z),k!=R;)++k>=t.getNconnection()&&(k=0);C=(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 P(){var t=[];for(var n in this._)t.push(E(n));return t}function N(){var t=0;for(var n in this._)++t;return t}function O(){for(var t in this._)return!1;return!0}function C(){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 C;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,V={}.__proto__?function(t,n){t.__proto__=n}:function(t,n){for(var e in n)t[e]=n[e]};function H(t){return V(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?j: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 jt(t){return t>1?0:t<-1?Pt:Math.acos(t)}function qt(t){return t>1?Ct:t<-1?-Ct:Math.asin(t)}function Ft(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 P(t){--g||(t({type:"zoomend"}),n=null)}function N(){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),P(n)}Mu.call(t),T(n)}function O(){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 Ht;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 Ht;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 Ht;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 Pn(){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 Cn(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,Nn(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)))),On[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,Nn(t,n))).toFixed(Math.max(0,Math.min(20,Nn(t*(1+1e-15),n))))}});function Dn(t){return t+""}var zn=a.time={},jn=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(){Fn.setUTCDate.apply(this._,arguments)},setDay:function(){Fn.setUTCDay.apply(this._,arguments)},setFullYear:function(){Fn.setUTCFullYear.apply(this._,arguments)},setHours:function(){Fn.setUTCHours.apply(this._,arguments)},setMilliseconds:function(){Fn.setUTCMilliseconds.apply(this._,arguments)},setMinutes:function(){Fn.setUTCMinutes.apply(this._,arguments)},setMonth:function(){Fn.setUTCMonth.apply(this._,arguments)},setSeconds:function(){Fn.setUTCSeconds.apply(this._,arguments)},setTime:function(){Fn.setTime.apply(this._,arguments)}};var Fn=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(jn=qn);return e._=t,n(e)}finally{jn=Date}}return e.parse=function(t){try{jn=qn;var e=n.parse(t);return e&&e._}finally{jn=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 jn(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"},Vn=/^\s*\d+/,Hn=/^%/;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){Vn.lastIndex=0;var r=Vn.exec(n.slice(e,e+2));return r?(t.m=r[0]-1,e+r[0].length):-1}function re(t,n,e){Vn.lastIndex=0;var r=Vn.exec(n.slice(e,e+2));return r?(t.d=+r[0],e+r[0].length):-1}function oe(t,n,e){Vn.lastIndex=0;var r=Vn.exec(n.slice(e,e+3));return r?(t.j=+r[0],e+r[0].length):-1}function ae(t,n,e){Vn.lastIndex=0;var r=Vn.exec(n.slice(e,e+2));return r?(t.H=+r[0],e+r[0].length):-1}function ie(t,n,e){Vn.lastIndex=0;var r=Vn.exec(n.slice(e,e+2));return r?(t.M=+r[0],e+r[0].length):-1}function ue(t,n,e){Vn.lastIndex=0;var r=Vn.exec(n.slice(e,e+2));return r?(t.S=+r[0],e+r[0].length):-1}function se(t,n,e){Vn.lastIndex=0;var r=Vn.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){Hn.lastIndex=0;var r=Hn.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);Ce.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+Pt/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 je(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 Fe(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=je(s,u),c=je([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=Pe=Ne=Oe=0,a.geo.stream(t,Ye);var n=Pe,e=Ne,r=Oe,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=_>Pt,S=d*b;if(Ce.add(Math.atan2(S*w*Math.sin(_),m*x+S*Math.cos(_))),a+=k?M+w*Nt:M,k^h>=e^v>=e){var A=je(De(f),De(t));Be(A);var E=je(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:j,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]-Ct-Tt:Ct-t[1])-((n=n.x)[0]<0?n[1]-Ct-Tt:Ct-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?Pt:-Pt,s=w(a-e);w(s-Pt)0?Ct:-Ct),t.point(o,r),t.lineEnd(),t.lineStart(),t.point(u,r),t.point(a,r),n=0):o!==u&&s>=Pt&&(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*Ct,r.point(-Pt,o),r.point(0,o),r.point(Pt,o),r.point(Pt,0),r.point(Pt,-o),r.point(0,-o),r.point(-Pt,-o),r.point(-Pt,0),r.point(-Pt,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?Pt:-Pt),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]:[-Pt,t-Pt]);function o(t,e){return Math.cos(t)*Math.cos(e)>n}function a(t,e,r){var o=[1,0,0],a=je(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=je(o,a),h=Fe(o,l);qe(h,Fe(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=Fe(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)Pt^(x<=y[0]&&y[0]<=M)){var E=Fe(p,(-d+v)/m);return qe(E,h),[y,Ie(E)]}}}function i(n,r){var o=e?t:Pt-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=Pt/3,r=Lr(t),o=r(n,e);return o.parallels=function(t){return arguments.length?r(n=t[0]*Pt/180,e=t[1]*Pt/180):[n/Pt*180,e/Pt*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:j,lineStart:j,lineEnd:j,polygonStart:function(){hr=0,vr.lineStart=yr},polygonEnd:function(){vr.lineStart=vr.lineEnd=vr.point=j,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:j,lineEnd:j,polygonStart:j,polygonEnd:j};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,Pe+=(i=r*t-e*n)*(e+t),Ne+=i*(r+n),Oe+=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:j};function r(e,r){t.moveTo(e+n,r),t.arc(e,r,n,0,Nt)}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 Or(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*N+b*O)/x-.5)>.3||i*p+s*d+l*m0&&16,o):Math.sqrt(n)},o}function Pr(t){var n=Rr((function(n,e){return t([n*Ut,e*Ut])}));return function(t){return Ur(n(t))}}function Nr(t){this.stream=t}function Or(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 Cr(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=jr(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 Or(t,(function(n,e){t.point(n*Lt,e*Lt)}))}function Dr(t,n){return[t,n]}function zr(t,n){return[t>Pt?t-Nt:t<-Pt?t+Nt:t,n]}function jr(t,n,e){return t?n||e?Je(Fr(t),Br(n,e)):Fr(t):n||e?Br(n,e):zr}function qr(t){return function(n,e){return[(n+=t)>Pt?n-Nt:n<-Pt?n+Nt:n,e]}}function Fr(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*Nt)):(o=t+i*Nt,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=jr(-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=Vr(n,t,v),f=Yr(s,u,90),h=Vr(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=Hr,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:j,point:j,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=j}},lineEnd:j,polygonStart:j,polygonEnd:j};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 Cr(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(Pt/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<-Ct+Tt&&(n=-Ct+Tt):n>Ct-Tt&&(n=Ct-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))-Ct]},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 Cr(oo)}).raw=oo,ao.invert=function(t,n){return[-n,2*Math.atan(Math.exp(t))-Ct]},(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 Co(n),e=_o(n.site),vo.insert(s,e),s.edge=e.edge=Do(n.site,s.site),Oo(n),void Oo(e);if(e){Co(n),Co(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),Oo(n),Oo(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 Po(t,n){return n.angle-t.angle}function No(){Fo(this),this.x=this.y=this.arc=this.site=this.cy=null}function Oo(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 No;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 jo((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(Po),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*Ct)}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&&(ja(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);ja(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 Pi(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 Ni={s:1,g:1,p:1,r:1,e:1};function Oi(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 Ci;arguments.length<2?n=Ci:"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=Ot)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)<=Pt?0:1;if(E&&Gi(y,b,x,M)===p^R){var P=(c+f)/2;y=l*Math.cos(P),b=l*Math.sin(P),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 N=Math.abs(c-f+2*A)<=Pt?0:1;if(A&&Gi(w,_,k,S)===1-p^N){var O=(c+f)/2;w=u*Math.cos(O),_=u*Math.sin(O),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;lPt)+",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=Hr,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=Pu(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",P).on("keyup.brush",N);if(a.event.changedTouches?E.on("touchmove.brush",O).on("touchend.brush",L):E.on("mousemove.brush",O).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 P(){32==a.event.keyCode&&(k||(f=null,A[0]-=i[1],A[1]-=u[1],k=2),B())}function N(){32==a.event.keyCode&&2==k&&(A[0]+=i[1],A[1]+=u[1],k=0,B())}function O(){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)}ju.iso=Date.prototype.toISOString&&+new Date("2000-01-01T00:00:00.000Z")?Bu:Fu,Bu.parse=function(t){var n=new Date(t);return isNaN(n)?null:n},Bu.toString=Fu.toString,zn.second=Bn((function(t){return new jn(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 jn(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 jn(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],Vu=[[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]],Hu=ju.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};Vu.year=zn.year,zn.scale=function(){return Iu(a.scale.linear(),Vu,Hu)};var Wu=Vu.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(27);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(29),a=e(30),i=e(6),u=e(8),s=e(24),l=e(31);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,P,N,O,C,L,U,D,z,j=this,q=null,F=null,B=null,I=null,X=null,Y=null,V=0,H=!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),N.setUniform("uProjection","Matrix4fv",!1,c),N.setUniform("uView","Matrix4fv",!1,h),N.setUniform("uModel","Matrix4fv",!1,d),N.setUniform("uBottomLeft","2fv",[l.left,l.bottom]),N.setUniform("uTopRight","2fv",[l.right,l.top]),N.setUniform("uAtomScale","1f",2.5*o.atomScale),N.setUniform("uRelativeAtomScale","1f",t.relativeAtomScale),N.setUniform("uRes","1f",e),N.setUniform("uDepth","1f",f),N.setUniform("uMode","1i",0),N.setUniform("uAtomShade","1f",t.atomShade),q.render(),t.bonds&&null!=F&&(O.setUniform("uProjection","Matrix4fv",!1,c),O.setUniform("uView","Matrix4fv",!1,h),O.setUniform("uModel","Matrix4fv",!1,d),O.setUniform("uRotation","Matrix4fv",!1,o.rotation),O.setUniform("uDepth","1f",f),O.setUniform("uBottomLeft","2fv",[l.left,l.bottom]),O.setUniform("uTopRight","2fv",[l.right,l.top]),O.setUniform("uRes","1f",e),O.setUniform("uBondRadius","1f",2.5*u.getBondRadius(t)),O.setUniform("uBondShade","1f",t.bondShade),O.setUniform("uAtomScale","1f",2.5*t.atomScale),O.setUniform("uRelativeAtomScale","1f",t.relativeAtomScale),O.setUniform("uMode","1i",0),F.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),C.setUniform("uSceneDepth","1i",g.index),C.setUniform("uSceneNormal","1i",m.index),C.setUniform("uRandRotDepth","1i",v.index),C.setUniform("uAccumulator","1i",b.index),C.setUniform("uSceneBottomLeft","2fv",[y.left,y.bottom]),C.setUniform("uSceneTopRight","2fv",[y.right,y.top]),C.setUniform("uRotBottomLeft","2fv",[x.left,x.bottom]),C.setUniform("uRotTopRight","2fv",[x.right,x.top]),C.setUniform("uRes","1f",n),C.setUniform("uDepth","1f",f),C.setUniform("uRot","Matrix4fv",!1,a),C.setUniform("uInvRot","Matrix4fv",!1,M),C.setUniform("uSampleCount","1i",V),B.render(),b.activate(),b.bind(),p.copyTexImage2D(p.TEXTURE_2D,0,p.RGBA,0,0,n,n,0)}j.getAOProgress=function(){return V/1024},j.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"]),j.createTextures(),N=c(p,l.shaders.atom),O=c(p,l.shaders.bond),z=c(p,l.shaders["textured-quad"]),C=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,C,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},j.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),P=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,[_])},j.setResolution=function(r,o){e=o,n=r,t.width=t.height=n,p.viewport(0,0,n,n),j.createTextures()},j.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;F=new o.Renderable(p,O,r,g)}},j.reset=function(){V=0,H=!1,G=!1,b.reset(),x.reset()},j.render=function(t){if(void 0!==h&&null!=q){if(f=2*s.getRadius(h),H)if(G)for(var e=0;e1024);e++)W(t),V++;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),N.setUniform("uProjection","Matrix4fv",!1,o),N.setUniform("uView","Matrix4fv",!1,a),N.setUniform("uModel","Matrix4fv",!1,i),N.setUniform("uBottomLeft","2fv",[e.left,e.bottom]),N.setUniform("uTopRight","2fv",[e.right,e.top]),N.setUniform("uAtomScale","1f",2.5*t.atomScale),N.setUniform("uRelativeAtomScale","1f",t.relativeAtomScale),N.setUniform("uRes","1f",n),N.setUniform("uDepth","1f",f),N.setUniform("uMode","1i",1),N.setUniform("uAtomShade","1f",t.atomShade),q.render(),t.bonds&&null!=F&&(A.bind(),O.setUniform("uProjection","Matrix4fv",!1,o),O.setUniform("uView","Matrix4fv",!1,a),O.setUniform("uModel","Matrix4fv",!1,i),O.setUniform("uRotation","Matrix4fv",!1,t.rotation),O.setUniform("uDepth","1f",f),O.setUniform("uBottomLeft","2fv",[e.left,e.bottom]),O.setUniform("uTopRight","2fv",[e.right,e.top]),O.setUniform("uRes","1f",n),O.setUniform("uBondRadius","1f",2.5*u.getBondRadius(t)),O.setUniform("uBondShade","1f",t.bondShade),O.setUniform("uAtomScale","1f",2.5*t.atomScale),O.setUniform("uRelativeAtomScale","1f",t.relativeAtomScale),O.setUniform("uMode","1i",1),F.render())}(t);else!function(t){H=!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),N.setUniform("uProjection","Matrix4fv",!1,o),N.setUniform("uView","Matrix4fv",!1,a),N.setUniform("uModel","Matrix4fv",!1,i),N.setUniform("uBottomLeft","2fv",[e.left,e.bottom]),N.setUniform("uTopRight","2fv",[e.right,e.top]),N.setUniform("uAtomScale","1f",2.5*t.atomScale),N.setUniform("uRelativeAtomScale","1f",t.relativeAtomScale),N.setUniform("uRes","1f",n),N.setUniform("uDepth","1f",f),N.setUniform("uMode","1i",0),N.setUniform("uAtomShade","1f",t.atomShade),q.render(),t.bonds&&null!=F&&(S.bind(),O.setUniform("uProjection","Matrix4fv",!1,o),O.setUniform("uView","Matrix4fv",!1,a),O.setUniform("uModel","Matrix4fv",!1,i),O.setUniform("uRotation","Matrix4fv",!1,t.rotation),O.setUniform("uDepth","1f",f),O.setUniform("uBottomLeft","2fv",[e.left,e.bottom]),O.setUniform("uTopRight","2fv",[e.right,e.top]),O.setUniform("uRes","1f",n),O.setUniform("uBondRadius","1f",2.5*u.getBondRadius(t)),O.setUniform("uBondShade","1f",t.bondShade),O.setUniform("uAtomScale","1f",2.5*t.atomScale),O.setUniform("uRelativeAtomScale","1f",t.relativeAtomScale),O.setUniform("uMode","1i",0),F.render())}(t);!function(t){p.viewport(0,0,n,n),t.fxaa>0||t.dofStrength>0?P.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)}},j.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(11),a=e(1),i=e.n(a),u=e(0),s=e.n(u),l=e(25),c=e(49);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}]); +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(23);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()),N.attr("x1",u.x).attr("y1",u.y).attr("x2",mpos[0]).attr("y2",mpos[1]))}function w(){u&&N.attr("class","drag_line_hidden"),O()}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",P),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 P(){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,V(n)}else extraLinkIndex=e.extraLinks.indexOf(t),e.extraLinks.splice(extraLinkIndex,1);e.recalculateGraph()}e.update()},G=function(t){C&&(t.linkType in{backbone:!0,fake:!0,fake_fake:!0,label_link:!0}||H(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,V(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 O();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,P,N,O,C,L,U,D,z,j,q,F,B,I,X,Y,V,H,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,N=-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,N=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==N?0:N,v=t.getConnection(T),E=0,O=!1;do{if((w=T-1)<0&&(w=t.getNconnection()-1),x=t.getConnection(w),this.connected_connection(x,v)?(T=w,v=x):O=!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),O=!0}}while(!O);for(C=!1,G=T;!C;){for(E=0,O=!1,R=T,L=!1;!O;)if(v=t.getConnection(R),R==N&&(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 O=!0;for(k=W=Z=P=this.find_ic_middle(T,R,n,b,t),O=!1,$=0;!O;)(k=$<0?W:0==$?P: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),O=-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,F=Q/(nt=Math.sqrt(Q*Q+tt*tt)),B=tt/nt,I=c-D,X=f-z,j=(Y=(I/=nt=Math.sqrt(Q*Q+tt*tt))*F+(X/=nt)*B)*F-I,q=Y*B-X,j/=nt=Math.sqrt(j*j+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*j,H=f+U*l*q,L)c-=V-D,f-=H-z;else for(k=T;M=(v=t.getConnection(k)).getStart(),this.bases[M].setX(this.bases[M].getX()+V-D),this.bases[M].setY(this.bases[M].getY()+H-z),M=v.getEnd(),this.bases[M].setX(this.bases[M].getX()+V-D),this.bases[M].setY(this.bases[M].getY()+H-z),k!=R;)++k>=t.getNconnection()&&(k=0);C=(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 P(){var t=[];for(var n in this._)t.push(E(n));return t}function N(){var t=0;for(var n in this._)++t;return t}function O(){for(var t in this._)return!1;return!0}function C(){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 C;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,V={}.__proto__?function(t,n){t.__proto__=n}:function(t,n){for(var e in n)t[e]=n[e]};function H(t){return V(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?j: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 jt(t){return t>1?0:t<-1?Pt:Math.acos(t)}function qt(t){return t>1?Ct:t<-1?-Ct:Math.asin(t)}function Ft(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 P(t){--g||(t({type:"zoomend"}),n=null)}function N(){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),P(n)}Mu.call(t),T(n)}function O(){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 Ht;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 Ht;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 Ht;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 Pn(){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 Cn(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,Nn(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)))),On[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,Nn(t,n))).toFixed(Math.max(0,Math.min(20,Nn(t*(1+1e-15),n))))}});function Dn(t){return t+""}var zn=a.time={},jn=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(){Fn.setUTCDate.apply(this._,arguments)},setDay:function(){Fn.setUTCDay.apply(this._,arguments)},setFullYear:function(){Fn.setUTCFullYear.apply(this._,arguments)},setHours:function(){Fn.setUTCHours.apply(this._,arguments)},setMilliseconds:function(){Fn.setUTCMilliseconds.apply(this._,arguments)},setMinutes:function(){Fn.setUTCMinutes.apply(this._,arguments)},setMonth:function(){Fn.setUTCMonth.apply(this._,arguments)},setSeconds:function(){Fn.setUTCSeconds.apply(this._,arguments)},setTime:function(){Fn.setTime.apply(this._,arguments)}};var Fn=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(jn=qn);return e._=t,n(e)}finally{jn=Date}}return e.parse=function(t){try{jn=qn;var e=n.parse(t);return e&&e._}finally{jn=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 jn(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"},Vn=/^\s*\d+/,Hn=/^%/;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){Vn.lastIndex=0;var r=Vn.exec(n.slice(e,e+2));return r?(t.m=r[0]-1,e+r[0].length):-1}function re(t,n,e){Vn.lastIndex=0;var r=Vn.exec(n.slice(e,e+2));return r?(t.d=+r[0],e+r[0].length):-1}function oe(t,n,e){Vn.lastIndex=0;var r=Vn.exec(n.slice(e,e+3));return r?(t.j=+r[0],e+r[0].length):-1}function ae(t,n,e){Vn.lastIndex=0;var r=Vn.exec(n.slice(e,e+2));return r?(t.H=+r[0],e+r[0].length):-1}function ie(t,n,e){Vn.lastIndex=0;var r=Vn.exec(n.slice(e,e+2));return r?(t.M=+r[0],e+r[0].length):-1}function ue(t,n,e){Vn.lastIndex=0;var r=Vn.exec(n.slice(e,e+2));return r?(t.S=+r[0],e+r[0].length):-1}function se(t,n,e){Vn.lastIndex=0;var r=Vn.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){Hn.lastIndex=0;var r=Hn.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);Ce.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+Pt/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 je(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 Fe(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=je(s,u),c=je([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=Pe=Ne=Oe=0,a.geo.stream(t,Ye);var n=Pe,e=Ne,r=Oe,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=_>Pt,S=d*b;if(Ce.add(Math.atan2(S*w*Math.sin(_),m*x+S*Math.cos(_))),a+=k?M+w*Nt:M,k^h>=e^v>=e){var A=je(De(f),De(t));Be(A);var E=je(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:j,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]-Ct-Tt:Ct-t[1])-((n=n.x)[0]<0?n[1]-Ct-Tt:Ct-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?Pt:-Pt,s=w(a-e);w(s-Pt)0?Ct:-Ct),t.point(o,r),t.lineEnd(),t.lineStart(),t.point(u,r),t.point(a,r),n=0):o!==u&&s>=Pt&&(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*Ct,r.point(-Pt,o),r.point(0,o),r.point(Pt,o),r.point(Pt,0),r.point(Pt,-o),r.point(0,-o),r.point(-Pt,-o),r.point(-Pt,0),r.point(-Pt,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?Pt:-Pt),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]:[-Pt,t-Pt]);function o(t,e){return Math.cos(t)*Math.cos(e)>n}function a(t,e,r){var o=[1,0,0],a=je(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=je(o,a),h=Fe(o,l);qe(h,Fe(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=Fe(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)Pt^(x<=y[0]&&y[0]<=M)){var E=Fe(p,(-d+v)/m);return qe(E,h),[y,Ie(E)]}}}function i(n,r){var o=e?t:Pt-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=Pt/3,r=Lr(t),o=r(n,e);return o.parallels=function(t){return arguments.length?r(n=t[0]*Pt/180,e=t[1]*Pt/180):[n/Pt*180,e/Pt*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:j,lineStart:j,lineEnd:j,polygonStart:function(){hr=0,vr.lineStart=yr},polygonEnd:function(){vr.lineStart=vr.lineEnd=vr.point=j,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:j,lineEnd:j,polygonStart:j,polygonEnd:j};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,Pe+=(i=r*t-e*n)*(e+t),Ne+=i*(r+n),Oe+=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:j};function r(e,r){t.moveTo(e+n,r),t.arc(e,r,n,0,Nt)}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 Or(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*N+b*O)/x-.5)>.3||i*p+s*d+l*m0&&16,o):Math.sqrt(n)},o}function Pr(t){var n=Rr((function(n,e){return t([n*Ut,e*Ut])}));return function(t){return Ur(n(t))}}function Nr(t){this.stream=t}function Or(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 Cr(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=jr(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 Or(t,(function(n,e){t.point(n*Lt,e*Lt)}))}function Dr(t,n){return[t,n]}function zr(t,n){return[t>Pt?t-Nt:t<-Pt?t+Nt:t,n]}function jr(t,n,e){return t?n||e?Je(Fr(t),Br(n,e)):Fr(t):n||e?Br(n,e):zr}function qr(t){return function(n,e){return[(n+=t)>Pt?n-Nt:n<-Pt?n+Nt:n,e]}}function Fr(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*Nt)):(o=t+i*Nt,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=jr(-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=Vr(n,t,v),f=Yr(s,u,90),h=Vr(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=Hr,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:j,point:j,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=j}},lineEnd:j,polygonStart:j,polygonEnd:j};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 Cr(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(Pt/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<-Ct+Tt&&(n=-Ct+Tt):n>Ct-Tt&&(n=Ct-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))-Ct]},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 Cr(oo)}).raw=oo,ao.invert=function(t,n){return[-n,2*Math.atan(Math.exp(t))-Ct]},(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 Co(n),e=_o(n.site),vo.insert(s,e),s.edge=e.edge=Do(n.site,s.site),Oo(n),void Oo(e);if(e){Co(n),Co(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),Oo(n),Oo(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 Po(t,n){return n.angle-t.angle}function No(){Fo(this),this.x=this.y=this.arc=this.site=this.cy=null}function Oo(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 No;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 jo((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(Po),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*Ct)}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&&(ja(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);ja(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 Pi(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 Ni={s:1,g:1,p:1,r:1,e:1};function Oi(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 Ci;arguments.length<2?n=Ci:"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=Ot)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)<=Pt?0:1;if(E&&Gi(y,b,x,M)===p^R){var P=(c+f)/2;y=l*Math.cos(P),b=l*Math.sin(P),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 N=Math.abs(c-f+2*A)<=Pt?0:1;if(A&&Gi(w,_,k,S)===1-p^N){var O=(c+f)/2;w=u*Math.cos(O),_=u*Math.sin(O),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;lPt)+",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=Hr,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=Pu(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",P).on("keyup.brush",N);if(a.event.changedTouches?E.on("touchmove.brush",O).on("touchend.brush",L):E.on("mousemove.brush",O).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 P(){32==a.event.keyCode&&(k||(f=null,A[0]-=i[1],A[1]-=u[1],k=2),B())}function N(){32==a.event.keyCode&&2==k&&(A[0]+=i[1],A[1]+=u[1],k=0,B())}function O(){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)}ju.iso=Date.prototype.toISOString&&+new Date("2000-01-01T00:00:00.000Z")?Bu:Fu,Bu.parse=function(t){var n=new Date(t);return isNaN(n)?null:n},Bu.toString=Fu.toString,zn.second=Bn((function(t){return new jn(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 jn(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 jn(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],Vu=[[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]],Hu=ju.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};Vu.year=zn.year,zn.scale=function(){return Iu(a.scale.linear(),Vu,Hu)};var Wu=Vu.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(27);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(29),a=e(30),i=e(6),u=e(8),s=e(24),l=e(31);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,P,N,O,C,L,U,D,z,j=this,q=null,F=null,B=null,I=null,X=null,Y=null,V=0,H=!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),N.setUniform("uProjection","Matrix4fv",!1,c),N.setUniform("uView","Matrix4fv",!1,h),N.setUniform("uModel","Matrix4fv",!1,d),N.setUniform("uBottomLeft","2fv",[l.left,l.bottom]),N.setUniform("uTopRight","2fv",[l.right,l.top]),N.setUniform("uAtomScale","1f",2.5*o.atomScale),N.setUniform("uRelativeAtomScale","1f",t.relativeAtomScale),N.setUniform("uRes","1f",e),N.setUniform("uDepth","1f",f),N.setUniform("uMode","1i",0),N.setUniform("uAtomShade","1f",t.atomShade),q.render(),t.bonds&&null!=F&&(O.setUniform("uProjection","Matrix4fv",!1,c),O.setUniform("uView","Matrix4fv",!1,h),O.setUniform("uModel","Matrix4fv",!1,d),O.setUniform("uRotation","Matrix4fv",!1,o.rotation),O.setUniform("uDepth","1f",f),O.setUniform("uBottomLeft","2fv",[l.left,l.bottom]),O.setUniform("uTopRight","2fv",[l.right,l.top]),O.setUniform("uRes","1f",e),O.setUniform("uBondRadius","1f",2.5*u.getBondRadius(t)),O.setUniform("uBondShade","1f",t.bondShade),O.setUniform("uAtomScale","1f",2.5*t.atomScale),O.setUniform("uRelativeAtomScale","1f",t.relativeAtomScale),O.setUniform("uMode","1i",0),F.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),C.setUniform("uSceneDepth","1i",g.index),C.setUniform("uSceneNormal","1i",m.index),C.setUniform("uRandRotDepth","1i",v.index),C.setUniform("uAccumulator","1i",b.index),C.setUniform("uSceneBottomLeft","2fv",[y.left,y.bottom]),C.setUniform("uSceneTopRight","2fv",[y.right,y.top]),C.setUniform("uRotBottomLeft","2fv",[x.left,x.bottom]),C.setUniform("uRotTopRight","2fv",[x.right,x.top]),C.setUniform("uRes","1f",n),C.setUniform("uDepth","1f",f),C.setUniform("uRot","Matrix4fv",!1,a),C.setUniform("uInvRot","Matrix4fv",!1,M),C.setUniform("uSampleCount","1i",V),B.render(),b.activate(),b.bind(),p.copyTexImage2D(p.TEXTURE_2D,0,p.RGBA,0,0,n,n,0)}j.getAOProgress=function(){return V/1024},j.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"]),j.createTextures(),N=c(p,l.shaders.atom),O=c(p,l.shaders.bond),z=c(p,l.shaders["textured-quad"]),C=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,C,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},j.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),P=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,[_])},j.setResolution=function(r,o){e=o,n=r,t.width=t.height=n,p.viewport(0,0,n,n),j.createTextures()},j.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;F=new o.Renderable(p,O,r,g)}},j.reset=function(){V=0,H=!1,G=!1,b.reset(),x.reset()},j.render=function(t){if(void 0!==h&&null!=q){if(f=2*s.getRadius(h),H)if(G)for(var e=0;e1024);e++)W(t),V++;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),N.setUniform("uProjection","Matrix4fv",!1,o),N.setUniform("uView","Matrix4fv",!1,a),N.setUniform("uModel","Matrix4fv",!1,i),N.setUniform("uBottomLeft","2fv",[e.left,e.bottom]),N.setUniform("uTopRight","2fv",[e.right,e.top]),N.setUniform("uAtomScale","1f",2.5*t.atomScale),N.setUniform("uRelativeAtomScale","1f",t.relativeAtomScale),N.setUniform("uRes","1f",n),N.setUniform("uDepth","1f",f),N.setUniform("uMode","1i",1),N.setUniform("uAtomShade","1f",t.atomShade),q.render(),t.bonds&&null!=F&&(A.bind(),O.setUniform("uProjection","Matrix4fv",!1,o),O.setUniform("uView","Matrix4fv",!1,a),O.setUniform("uModel","Matrix4fv",!1,i),O.setUniform("uRotation","Matrix4fv",!1,t.rotation),O.setUniform("uDepth","1f",f),O.setUniform("uBottomLeft","2fv",[e.left,e.bottom]),O.setUniform("uTopRight","2fv",[e.right,e.top]),O.setUniform("uRes","1f",n),O.setUniform("uBondRadius","1f",2.5*u.getBondRadius(t)),O.setUniform("uBondShade","1f",t.bondShade),O.setUniform("uAtomScale","1f",2.5*t.atomScale),O.setUniform("uRelativeAtomScale","1f",t.relativeAtomScale),O.setUniform("uMode","1i",1),F.render())}(t);else!function(t){H=!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),N.setUniform("uProjection","Matrix4fv",!1,o),N.setUniform("uView","Matrix4fv",!1,a),N.setUniform("uModel","Matrix4fv",!1,i),N.setUniform("uBottomLeft","2fv",[e.left,e.bottom]),N.setUniform("uTopRight","2fv",[e.right,e.top]),N.setUniform("uAtomScale","1f",2.5*t.atomScale),N.setUniform("uRelativeAtomScale","1f",t.relativeAtomScale),N.setUniform("uRes","1f",n),N.setUniform("uDepth","1f",f),N.setUniform("uMode","1i",0),N.setUniform("uAtomShade","1f",t.atomShade),q.render(),t.bonds&&null!=F&&(S.bind(),O.setUniform("uProjection","Matrix4fv",!1,o),O.setUniform("uView","Matrix4fv",!1,a),O.setUniform("uModel","Matrix4fv",!1,i),O.setUniform("uRotation","Matrix4fv",!1,t.rotation),O.setUniform("uDepth","1f",f),O.setUniform("uBottomLeft","2fv",[e.left,e.bottom]),O.setUniform("uTopRight","2fv",[e.right,e.top]),O.setUniform("uRes","1f",n),O.setUniform("uBondRadius","1f",2.5*u.getBondRadius(t)),O.setUniform("uBondShade","1f",t.bondShade),O.setUniform("uAtomScale","1f",2.5*t.atomScale),O.setUniform("uRelativeAtomScale","1f",t.relativeAtomScale),O.setUniform("uMode","1i",0),F.render())}(t);!function(t){p.viewport(0,0,n,n),t.fxaa>0||t.dofStrength>0?P.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)}},j.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(11),a=e(1),i=e.n(a),u=e(0),s=e.n(u),l=e(25),c=e(49);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}]); //# sourceMappingURL=bundle.js.map \ No newline at end of file diff --git a/dash_bio/bundle.js.map b/dash_bio/bundle.js.map index 8ba3a378a..b81a26fb2 100644 --- a/dash_bio/bundle.js.map +++ b/dash_bio/bundle.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/prop-types/index.js","webpack:///external \"React\"","webpack:///./src/lib/LazyLoader.js","webpack:///./node_modules/ramda/es/internal/_curry1.js","webpack:///./node_modules/ramda/es/internal/_isPlaceholder.js","webpack:///./node_modules/ramda/es/internal/_has.js","webpack:///./node_modules/speck/src/elements.js","webpack:///./node_modules/speck/src/gl-matrix.js","webpack:///./node_modules/speck/src/view.js","webpack:///./node_modules/ramda/es/internal/_curry2.js","webpack:///./src/lib/components/AlignmentChart.react.js","webpack:///./src/lib/components/Circos.react.js","webpack:///./src/lib/components/Ideogram.react.js","webpack:///./src/lib/components/Igv.react.js","webpack:///./src/lib/components/Pileup.react.js","webpack:///./src/lib/components/Molecule2dViewer.react.js","webpack:///./src/lib/components/Molecule3dViewer.js","webpack:///./src/lib/components/NeedlePlot.react.js","webpack:///./src/lib/components/NglMoleculeViewer.react.js","webpack:///./src/lib/components/OncoPrint.react.js","webpack:///./src/lib/components/SequenceViewer.react.js","webpack:///./src/lib/components/Speck.react.js","webpack:///./node_modules/speck/build/index.js","webpack:///./node_modules/speck/src/const.js","webpack:///./node_modules/speck/src/system.js","webpack:///./node_modules/fornac/dist/scripts/fornac.js","webpack:///./node_modules/prop-types/factoryWithThrowingShims.js","webpack:///./node_modules/prop-types/lib/ReactPropTypesSecret.js","webpack:///./node_modules/speck/src/renderer.js","webpack:///./node_modules/speck/src/webgl.js","webpack:///./node_modules/speck/src/cube.js","webpack:///./node_modules/speck/src/shaders.js","webpack:///./node_modules/speck/src/interactions.js","webpack:///./node_modules/speck/src/presets.js","webpack:///./src/lib/components/FornaContainer.react.js","webpack:///./src/lib/index.js","webpack:///external \"ReactDOM\"","webpack:///./node_modules/ramda/es/internal/_arrayFromIterator.js","webpack:///./node_modules/ramda/es/internal/_includesWith.js","webpack:///./node_modules/ramda/es/internal/_objectIs.js","webpack:///./node_modules/ramda/es/internal/_isArguments.js","webpack:///./node_modules/ramda/es/keys.js","webpack:///./node_modules/ramda/es/type.js","webpack:///./node_modules/ramda/es/internal/_equals.js","webpack:///./node_modules/ramda/es/internal/_functionName.js","webpack:///./node_modules/ramda/es/equals.js"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","installedModules","13","jsonpScriptSrc","__webpack_require__","p","exports","module","l","e","promises","installedChunkData","promise","Promise","resolve","reject","onScriptComplete","script","document","createElement","charset","timeout","nc","setAttribute","src","error","Error","event","onerror","onload","clearTimeout","chunk","errorType","type","realSrc","target","message","name","request","undefined","setTimeout","head","appendChild","all","m","c","d","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","oe","err","console","url","getCurrentScript","currentScript","doc_scripts","getElementsByTagName","scripts","filter","s","async","text","textContent","slice","split","join","__jsonpScriptSrc__","isLocal","test","isLocalScript","srcFragments","fileFragments","splice","jsonpArray","window","oldJsonpFunction","alignmentChart","circos","ideogram","igv","pileup","molecule2dViewer","molecule3dViewer","nglmoleculeViewer","needlePlot","oncoPrint","sequenceViewer","speck","_curry1","fn","f1","a","arguments","apply","this","_isPlaceholder","_has","prop","obj","_global","shim","GLMAT_EPSILON","GLMAT_ARRAY_TYPE","Float32Array","Array","GLMAT_RANDOM","Math","random","glMatrix","degree","PI","toRadian","vec","vec2","out","clone","fromValues","x","y","copy","set","add","b","subtract","sub","multiply","mul","divide","div","min","max","scale","scaleAndAdd","distance","sqrt","dist","squaredDistance","sqrDist","len","squaredLength","sqrLen","negate","inverse","normalize","dot","cross","z","lerp","ax","ay","cos","sin","transformMat2","transformMat2d","transformMat3","transformMat4","forEach","stride","offset","count","arg","str","vec3","az","bx","by","bz","zScale","w","transformQuat","q","qx","qy","qz","qw","ix","iy","iz","iw","rotateX","rotateY","rotateZ","angle","tempA","tempB","cosine","acos","vec4","aw","mat2","a1","a0","a2","a3","det","b0","b1","b2","b3","rotate","rad","v","v0","v1","frob","pow","LDU","L","D","U","mat2d","aa","ab","ac","ad","atx","aty","a4","a5","b4","b5","translate","mat3","a01","a02","a12","a00","a10","a11","a20","a21","a22","b01","b11","b21","b00","b02","b10","b12","b20","b22","fromMat2d","fromQuat","x2","y2","z2","xx","yx","yy","zx","zy","zz","wx","wy","wz","normalFromMat4","a03","a13","a23","a30","a31","a32","a33","b03","b04","b05","b06","b07","b08","b09","mat4","axis","abs","fromRotationTranslation","xy","xz","yz","frustum","left","right","bottom","top","near","far","rl","tb","nf","perspective","fovy","aspect","f","tan","ortho","lr","bt","lookAt","eye","center","up","x0","x1","y0","y1","z0","z1","eyex","eyey","eyez","upx","upy","upz","centerx","centery","centerz","identity","tmpvec3","xUnitVec3","yUnitVec3","matr","quat","rotationTo","setAxisAngle","setAxes","view","fromMat3","bw","calculateW","slerp","omega","cosom","sinom","scale0","scale1","invert","invDot","conjugate","fRoot","fTrace","j","k","glm","require","elements","consts","clamp","zoom","translation","atomScale","relativeAtomScale","bondScale","rotation","ao","aoRes","brightness","outline","spf","bonds","bondThreshold","bondShade","atomShade","resolution","dofStrength","dofPosition","fxaa","system","maxX","Infinity","minX","maxY","minY","atoms","symbol","radius","cx","cy","override","deserialize","serialize","JSON","stringify","parse","dx","dy","getRect","width","height","getBondRadius","MIN_ATOM_RADIUS","_curry2","f2","_b","_a","RealAlignmentChart","lazy","LazyLoader","AlignmentChart","fallback","props","Component","propTypes","id","PropTypes","string","setProps","func","eventDatum","extension","colorscale","oneOfType","opacity","number","textcolor","textsize","showlabel","bool","showid","showconservation","conservationcolor","conservationcolorscale","array","conservationopacity","conservationmethod","oneOf","correctgap","showgap","gapcolor","gapcolorscale","gapopacity","groupbars","showconsensus","tilewidth","tileheight","overview","numtiles","scrollskip","tickstart","ticksteps","defaultProps","RealCircos","Circos","config","size","tracks","enableDownloadSVG","enableZoomPan","style","selectEvent","layout","arrayOf","shape","isRequired","color","label","tooltipContent","source","sourceID","targetEnd","targetID","RealIdeogram","Ideogram","organism","dataDir","annotationsColor","annotationsLayout","barWidth","chrHeight","chrMargin","chrWidth","ploidy","rotatable","showBandLabels","showChromosomeLabels","showAnnotTooltip","showFullyBanded","showNonNuclearChromosomes","className","annotations","chr","start","stop","annotationsPath","annotationsData","annotationTracks","annotationHeight","histogramScaling","assembly","brush","brushData","end","extent","container","chromosomes","localOrganism","homology","chrOne","chrTwo","fullChromosomeLabels","filterable","orientation","ploidyDesc","ancestors","rangeSet","rotated","sex","RealIgv","Igv","genome","reference","locus","minimumBases","RealPileup","Pileup","range","exact","contig","viz","vizOptions","sourceOptions","RealMolecule2dViewer","Molecule2dViewer","modelData","nodes","links","selectedAtomIds","atom","bond","strength","RealMolecule3dViewer","Molecule3dViewer","selectionType","backgroundColor","backgroundOpacity","factor","animationDuration","fixedPath","zoomTo","sel","styles","visualization_type","atomLabelsShown","labels","orbital","cube_file","iso_val","positiveVolumetricColor","negativeVolumetricColor","chain","res","shapes","onRenderNewData","onChangeSelection","RealNeedlePlot","NeedlePlot","mutationData","mutationGroups","domains","xlabel","ylabel","rangeSlider","needleStyle","stemColor","stemThickness","stemConstHeight","headSize","headColor","headSymbol","domainStyle","domainColor","displayMinorDomains","RealNglMoleculeViewer","NglMoleculeViewer","filename","ext","selectedValue","aaRange","chosen","chosenAtoms","chosenResidues","input","uploaded","resetView","stageParameters","quality","cameraType","imageParameters","antialias","transparent","trim","defaultFilename","downloadImage","molStyles","representations","chosenAtomsColor","chosenAtomsRadius","molSpacingXaxis","sideByside","pdbString","residues","RealOncoPrint","OncoPrint","padding","backgroundcolor","showlegend","showoverview","RealSequenceViewer","SequenceViewer","sequence","showLineNumbers","wrapAminoAcids","charsPerLine","toolbar","search","title","sequenceMaxHeight","badge","selection","coverage","propName","componentName","bgcolor","tooltip","underscore","onclick","legend","coverageClicked","mouseSelection","subpartSelected","RealSpeck","Speck","speckView","scrollZoom","presetView","speckRenderer","speckSystem","speckInteractions","speckPresetViews","MAX_ATOM_RADIUS","getCentroid","farAtom","calculateBonds","sorted","sort","ea","eb","posA","posB","radA","radB","colA","g","colB","cutoff","addAtom","xsum","ysum","zsum","getFarAtom","maxd","rd","getRadius","factory","loaded","rnaPlot","RNAGraph","_rnagraph","_rnaplot","FornaContainer","element","passedOptions","self","options","option","initialSize","svgW","svgH","_d2","default","category20","mousedownNode","mouseupNode","xScale","linear","domain","yScale","graph","magnitude","positionAnyNode","endPoint","startPoint","prevNode","linked","u","arrowTip","path","select","attr","realLinkFilter","linkType","changeColors","moleculeColors","num","val","parseFloat","isNaN","mousedown","mousemove","mpos","mouse","vis","node","dragLine","mouseup","resetMouseVars","linkStrengths","displayParameters","colorScheme","customColors","animation","applyForce","deaf","rnas","extraLinks","equals","createInitialLayout","structure","labelInterval","rg","circularizeExternal","rnaJson","recalculateElements","positions","naview","_naview","NAView","naViewPositions","naview_xy_coordinates","pairtable","_i","nbase","_simplernaplot","simpleXyCoordinates","elementsToJson","addUids","uids","addPositions","addLabels","reinforceStems","reinforceLoops","connectFakeNodes","reassignLinkUids","breakNodesToFakeNodes","addRNA","newLinks","addExternalLinks","concat","addRNAJSON","avoidOthers","externalLinks","newLink","uid","generateUUID","toString","nucs","log","rnaGraph","map","px","rna","recalculateGraph","update","centerView","transitionRNA","newStructure","nextFunction","duration","transitionDuration","nodeType","newRNAJson","gnodes","visNodes","selectAll","nodeKey","transition","visLinks","linkKey","newNodes","createNewNodes","enter","exit","remove","each","updateStyle","createNewLinks","callback","uidsToNodes","link","fakeLinks","linkIndex","indexOf","addNodes","json","entry","addCustomColors","addCustomColorsText","customColorsText","cs","_rnautils","ColorScheme","colorsJson","changeColorScheme","clearNodes","toJSON","fromJSON","jsonString","seq","dotbracket","circular","structName","rnaLength","nucsToNodes","pseudoknotPairs","ProteinGraph","setSize","offsetHeight","offsetWidth","zoomer","brusher","resizeSvgOnResize","svg","setOutlineColor","newColorScheme","classed","ordinal","category10","elemType","interpolate","interpolateLab","colorValues","addEventListener","behavior","scaleExtent","on","zoomstart","redraw","keydown","keyup","focus","append","svgGraph","allowPanningAndZooming","datum","selected","previouslySelected","ctrlKeydown","clear","getBoundingBoxTransform","molWidth","molHeight","widthRatio","heightRatio","minRatio","newMolWidth","newMolHeight","bbTransform","force","charge","middleCharge","otherCharge","friction","linkDistance","linkDistanceMultiplier","linkStrength","other","gravity","chargeDistance","shiftKeydown","selectedNodes","mouseDownNode","dragstarted","sourceEvent","stopPropagation","d1","fixed","dragged","py","resumeForce","preventDefault","dragended","collide","nx1","nx2","ny1","ny2","quad","point","resume","drag","keyCode","updateRnaGraph","nucleotidePositions","getPositions","labelPositions","getUids","addPseudoknots","updateLinkUids","removeLink","index","extraLinkIndex","linkClick","addLink","nodeMouseclick","defaultPrevented","nodeMouseup","nodeMousedown","startAnimation","stopAnimation","setFriction","setCharge","setGravity","setPseudoknotStrength","pseudoknot","displayBackground","displayNumbering","displayNodeOutline","displayNodeLabel","displayLinks","displayPseudoknotLinks","displayProteinLinks","displayAllLinks","linksEnter","linkLines","gnodesEnter","ease","labelAndProteinNodes","nucleotideNodes","allLinks","xlink","realNodes","displayFakeLinks","geom","quadtree","visit","_d","moleculesToJson","moleculesJson","graphs","molecules","molecule","ss","header","numberSort","Date","getTime","replace","floor","startNumber","computePairtable","rnaUtilities","dotbracketToPairtable","removeBreaks","targetString","breaks","breakIndex","substring","ret","dotBracketBreaks","seqBreaks","calculateStartNumberArray","startNumberArray","arraysEqual","labelNodes","broken","pt","relevantElements","allNucs","addFakeNode","filterNucs","newNode1","newNode2","fakeNodeUid","newNode","newX","newY","coordsCounted","ia","fromNode","fakeNodes","Set","thisNode","thisNuc","has","addExtraLinks","getNodeFromNucleotides","from","to","elemTypes","nodeName","nextNode","ptToElements","level","u5","u3","external","pop","prevVec","nextVec","combinedVec","vecLength","normedVec","offsetVec","removePseudoknots","externalLoop","eloop","prev","hloop","numGreater","removePseudoknotsFromPairtable","addName","String","bracketLeft","bracketRight","inverseBrackets","maximumMatching","backtrackMaximumMatching","mmBt","Number","valueOf","insertIntoStack","deleteFromStack","pairtableToDotbracket","findUnmatched","h","RNAUtilities","colorsText","parseRange","parseInt","parseColorText","normalizeColors","MAX_VALUE","MIN_VALUE","chart","startNucleotideNumber","fillViewportTransform","xValues","yValues","molName","xExtent","d3","yExtent","NAME_OFFSET","nucleotideRadius","rnaEdgePadding","xRange","yRange","xExtra","yExtra","createOtherScale","firstScale","newDomain","newRange","scaleFactor","newWidth","newMargin","createTransformToFillViewport","gTransform","extraLinkType","createLinks","gs","showNucleotideLabels","struct_name","createNucleotides","createLabels","createName","bundleExternalLinks","nodesDict","linksList","results","ForceEdgeBundling","edges","compatibility_threshold","step_size","fbundling","d3line","line","edge_subpoint_data","makeExternalLinksBundle","_","pair_table","alpha","loop_size","stack_size","lp","stk","PIHALF","loop","i_old","partner","start_k","start_l","fill","ladder","begin","diff","polygon","bubble","remember","poss","_radloop","_connection","_region","_base","_loop","ANUM","MAXITER","bases","nregion","loop_count","root","Loop","loops","regions","rlphead","Radloop","lencut","RADIUS_REDUCTION_FACTOR","angleinc","_h","HELIX_FACTOR","BACKBONE_DISTANCE","determine_depths","setMark","setDepth","depth","getNconnection","isMark","getConnection","getLoop","Base","Region","read_in_bases","find_regions","construct_loop","find_central_loop","traverse_loop","getX","getY","npairs","setMate","setExtracted","setX","setY","nb1","mate","mark","getMate","setStart1","setEnd2","setRegion","setEnd1","setStart2","ibase","retloop","cp","Connection","rp","rlp","setNconnection","setNumber","setRadius","getNext","getLoopnumber","getRegion","getStart1","isExtracted","getEnd1","getStart2","getEnd2","setConnection","setLoop","setStart","setEnd","setExtruded","setBroken","maxconn","maxdepth","getDepth","anchor_connection","xs","ys","xe","xn","yn","xc","yc","xo","yo","astart","aend","cpnext","acp","cpprev","ic","da","maxang","icstart","icend","icmiddle","icroot","done","done_all_connections","rooted","sign","midx","midy","nrx","nry","mx","my","vx","vy","dotmv","nmidx","nmidy","icstart1","icup","icdown","icnext","direction","dan","rr","cpx","cpy","cpnextx","cpnexty","cnx","rcn","rc","lnx","lny","acn","sx","sy","dcp","imaxloop","indice","getStart","getEnd","setXrad","setYrad","setAngle","atan2","getAngle","set_radius","determine_radius","getXrad","getYrad","connected_connection","find_ic_middle","asin","isExtruded","getNumber","construct_extruded_segment","generate_region","mindit","ci","dt","sumn","sumd","dit","imindit","aend1","aend2","aave","dac","nstart","nend","collision","construct_circle_segment","minf2","maxf2","find_center_for_arc","hhi","hlow","disc","theta","iter","noIterationFailureYet","loopnumber","next","setLoopnumber","setNext","getPrev","setPrev","region","xrad","yrad","extruded","_isNull","isNull","setNull","isBroken","nconnection","connections","_connections","addConnection","_start1","_end1","_start2","_end2","start1","end1","start2","end2","extracted","content","locals","list","result","item","mediaQuery","alreadyImportedModules","stylesInDom","memoize","memo","isOldIE","navigator","userAgent","toLowerCase","getHeadElement","singletonElement","singletonCounter","styleElementsInsertedAtTop","addStylesToDom","domStyle","refs","parts","addStyle","listToStyles","newStyles","part","css","media","sourceMap","insertStyleElement","styleElement","lastStyleElementInsertedAtTop","insertAt","nextSibling","insertBefore","firstChild","removeStyleElement","parentNode","removeChild","idx","createStyleElement","singleton","styleIndex","applyToSingletonTag","URL","createObjectURL","revokeObjectURL","Blob","btoa","linkElement","rel","createLinkElement","updateLink","href","applyToTag","newObj","newList","mayRemove","textStore","replaceText","replacement","Boolean","styleSheet","cssText","cssNode","createTextNode","childNodes","unescape","encodeURIComponent","blob","oldSrc","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_RESULT__","version","d3_arraySlice","d3_array","d3_document","d3_documentElement","ownerDocument","documentElement","d3_window","defaultView","now","setProperty","d3_element_prototype","Element","d3_element_setAttribute","d3_element_setAttributeNS","setAttributeNS","d3_style_prototype","CSSStyleDeclaration","d3_style_setProperty","space","local","priority","d3_ascending","NaN","d3_number","d3_numeric","d3_bisector","compare","lo","hi","mid","ascending","descending","sum","mean","quantile","values","H","median","numbers","variance","deviation","d3_bisect","d3_transposeLength","bisectLeft","bisect","bisectRight","bisector","shuffle","i0","i1","permute","indexes","permutes","pairs","p1","transpose","matrix","row","zip","keys","entries","merge","arrays","merged","d3_range_integerScale","d3_class","ctor","properties","d3_Map","d3_map_escape","d3_map_unescape","d3_map_has","d3_map_remove","d3_map_keys","d3_map_size","d3_map_empty","d3_Set","d3_identity","d3_rebind","method","d3_vendorSymbol","charAt","toUpperCase","d3_vendorPrefixes","prefixName","step","isArray","empty","nest","sortValues","rollup","sortKeys","mapType","keyValue","setter","valuesByKey","sortKey","keyMap","order","rebind","d3_noop","d3_dispatch","d3_dispatch_event","dispatch","listeners","listenerByName","listener","d3_eventPreventDefault","d3_eventSource","d3_eventDispatch","of","thiz","argumentz","e1","e0","requote","d3_requote_re","d3_subclass","__proto__","d3_selection","groups","d3_selectionPrototype","d3_select","querySelector","d3_selectAll","querySelectorAll","d3_selectMatches","d3_selectMatcher","matches","Sizzle","matchesSelector","d3_selection_selector","selector","d3_selection_selectorAll","subgroup","subnode","group","subgroups","__data__","d3_nsXhtml","d3_nsPrefix","xhtml","xml","xmlns","d3_selection_attr","qualify","removeAttributeNS","removeAttribute","d3_collapse","d3_selection_classedRe","RegExp","d3_selection_classes","d3_selection_classed","d3_selection_classedName","re","classList","getAttribute","lastIndex","d3_selection_style","removeProperty","d3_selection_property","d3_selection_creator","createElementNS","namespace","namespaceURI","d3_selectionRemove","parent","d3_selection_dataNode","d3_selection_filter","d3_selection_sortComparator","comparator","d3_selection_each","d3_selection_enter","d3_selection_enterPrototype","prefix","getAttributeNS","contains","getComputedStyle","getPropertyValue","html","innerHTML","insert","before","groupData","nodeData","n0","updateNodes","enterNodes","exitNodes","nodeByKeyValue","keyValues","args","d3_selection_enterInsertBefore","j0","d3_selection_on","capture","wrap","d3_selection_onListener","d3_selection_onFilters","onRemove","removeEventListener","$","d3_selection_onFilter","match","upgroup","mouseenter","mouseleave","related","relatedTarget","compareDocumentPosition","d3_event_dragSelect","d3_event_dragId","d3_event_dragSuppress","click","suppressClick","off","d3_mousePoint","d3_mouse_bug44083","changedTouches","ownerSVGElement","createSVGPoint","scrollX","scrollY","ctm","position","margin","border","getScreenCTM","pageX","pageY","clientX","clientY","matrixTransform","rect","getBoundingClientRect","clientLeft","clientTop","d3_behavior_dragTouchId","identifier","touch","touches","origin","dragstart","touchstart","subject","move","dragOffset","that","correspondingElement","dragId","dragName","dragSubject","moved","ended","dragRestore","position0","position1","ε","ε2","π","τ","τε","halfπ","d3_radians","d3_degrees","d3_sgn","d3_cross2d","d3_acos","d3_asin","d3_cosh","exp","d3_haversin","ρ","SQRT2","interpolateZoom","p0","S","ux0","uy0","w0","ux1","uy1","w1","d2","r0","r1","coshr0","d3_sinh","translate0","center0","mousewheelTimer","touchtime","d3_behavior_zoomInfinity","zooming","mousedowned","d3_behavior_zoomWheel","mousewheeled","dblclicked","touchstarted","location","scaleTo","translateTo","__chart__","rescale","zoomstarted","zoomed","zoomended","location0","d3_selection_interrupt","locations0","distance0","zoomName","touchmove","touchend","targets","relocate","started","changed","LN2","l0","l1","distance1","d3_behavior_zoomDelta","shiftKey","ceil","deltaY","deltaMode","wheelDelta","detail","view1","d3_transitionInheritId","tween","d3_color","d3_hsl","d3_rgb_parse","d3_rgb_hsl","rgb","hsl","d3_hslPrototype","d3_hsl_rgb","m1","m2","vv","round","d3_rgb","d3_hcl","d3_lab_hcl","d3_lab","d3_rgb_lab","brighter","darker","hcl","d3_hclPrototype","d3_hcl_lab","d3_lab_K","lab","d3_labPrototype","d3_lab_rgb","d3_xyz_rgb","d3_lab_xyz","d3_xyz_lab","d3_rgbNumber","d3_rgbString","d3_rgbPrototype","d3_rgb_hex","format","exec","d3_rgb_parseNumber","d3_rgb_names","d3_rgb_xyz","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","d3_functor","d3_xhrType","response","mimeType","d3_xhr","xhr","headers","XMLHttpRequest","responseType","respond","status","responseText","d3_xhrHasResponse","load","XDomainRequest","onreadystatechange","readyState","onprogress","progress","send","open","setRequestHeader","overrideMimeType","beforesend","abort","d3_xhr_fixCallback","functor","dsv","delimiter","reFormat","delimiterCode","charCodeAt","typedResponse","formatRow","formatValue","parseRows","Function","eol","EOL","EOF","rows","N","I","token","formatRows","fieldSet","fields","field","csv","tsv","d3_timer_queueHead","d3_timer_queueTail","d3_timer_interval","d3_timer_timeout","d3_timer_frame","d3_timer","delay","then","time","timer","d3_timer_step","d3_timer_mark","d3_timer_sweep","isFinite","t0","t1","d3_format_precision","LN10","flush","d3_formatPrefixes","d3_locale_numberFormat","locale","locale_decimal","decimal","locale_thousands","thousands","locale_grouping","grouping","locale_currency","currency","formatGroup","reverse","specifier","d3_format_re","align","zfill","comma","precision","suffix","integer","exponent","d3_format_types","d3_format_typeDefault","zcomma","fullSuffix","negative","unit","formatPrefix","after","lastIndexOf","fromCharCode","X","toPrecision","toExponential","toFixed","d3_time","d3_date","d3_date_utc","UTC","getDate","getUTCDate","getDay","getUTCDay","getFullYear","getUTCFullYear","getHours","getUTCHours","getMilliseconds","getUTCMilliseconds","getMinutes","getUTCMinutes","getMonth","getUTCMonth","getSeconds","getUTCSeconds","getTimezoneOffset","setDate","d3_time_prototype","setUTCDate","setDay","setUTCDay","setFullYear","setUTCFullYear","setHours","setUTCHours","setMilliseconds","setUTCMilliseconds","setMinutes","setUTCMinutes","setMonth","setUTCMonth","setSeconds","setUTCSeconds","setTime","d3_time_interval","date","d0","times","utc","d3_time_interval_utc","d3_locale_timeFormat","locale_dateTime","dateTime","locale_date","locale_time","locale_periods","periods","locale_days","days","locale_shortDays","shortDays","locale_months","months","locale_shortMonths","shortMonths","d3_time_format","template","d3_time_formatPads","d3_time_formats","M","Z","d3_time_parse","localZ","W","d3_time_parsers","multi","d3_time_formatMulti","d3_time_periodLookup","d3_time_dayRe","d3_time_formatRe","d3_time_dayLookup","d3_time_formatLookup","d3_time_dayAbbrevRe","d3_time_dayAbbrevLookup","d3_time_monthRe","d3_time_monthLookup","d3_time_monthAbbrevRe","d3_time_monthAbbrevLookup","A","B","d3_time_formatPad","dayOfYear","sundayOfYear","mondayOfYear","Y","d3_time_zone","d3_time_parseDay","d3_time_parseHour24","d3_time_parseDayOfYear","d3_time_parseMilliseconds","d3_time_parseMonthNumber","d3_time_parseMinutes","d3_time_parseSeconds","d3_time_parseWeekNumberSunday","d3_time_parseWeekdayNumber","d3_time_parseWeekNumberMonday","d3_time_parseYear","d3_time_parseFullYear","d3_time_parseZone","d3_time_parseLiteralPercent","year","day","years","interval","week","sunday","weeks","weekOfYear","d3_time_numberRe","d3_time_percentRe","names","zs","zh","zm","formats","numberFormat","timeFormat","d3_locale_enUS","d3_adder","geo","d3_adderSum","d3_adderTemp","reset","bv","av","d3_geo_streamGeometry","geometry","d3_geo_streamGeometryType","stream","d3_geo_streamObjectType","Feature","feature","FeatureCollection","features","Sphere","sphere","Point","coordinates","MultiPoint","LineString","d3_geo_streamLine","MultiLineString","Polygon","d3_geo_streamPolygon","MultiPolygon","GeometryCollection","geometries","closed","coordinate","lineStart","lineEnd","polygonStart","polygonEnd","area","d3_geo_areaSum","d3_geo_area","d3_geo_centroidW0","d3_geo_centroidW1","d3_geo_centroidX0","d3_geo_centroidY0","d3_geo_centroidZ0","d3_geo_centroidX1","d3_geo_centroidY1","d3_geo_centroidZ1","d3_geo_centroidX2","d3_geo_centroidY2","d3_geo_centroidZ2","d3_geo_areaRingSum","d3_geo_areaRingStart","λ00","φ00","λ0","cosφ0","sinφ0","nextPoint","λ","φ","dλ","sdλ","adλ","cosφ","sinφ","d3_geo_cartesian","spherical","d3_geo_cartesianDot","d3_geo_cartesianCross","d3_geo_cartesianAdd","d3_geo_cartesianScale","vector","d3_geo_cartesianNormalize","d3_geo_spherical","cartesian","d3_geo_sphericalEqual","bounds","φ0","λ1","φ1","λ_","λ__","φ__","dλSum","ranges","bound","ringPoint","ringStart","ringEnd","linePoint","normal","inflection","λi","antimeridian","φi","compareRanges","withinRange","best","centroid","d3_geo_centroid","d3_geo_centroidPoint","d3_geo_centroidLineStart","d3_geo_centroidLineEnd","d3_geo_centroidRingStart","d3_geo_centroidPointXYZ","cz","d3_geo_compose","compose","d3_true","d3_geo_clipPolygon","segments","clipStartInside","clip","segment","d3_geo_clipPolygonIntersection","d3_geo_clipPolygonLinkCircular","points","current","isSubject","d3_geo_clip","pointVisible","clipLine","clipStart","rotatedClipStart","pointRing","meridian","parallel","meridianNormal","polarAngle","winding","ring","point0","arc","intersection","φarc","d3_geo_pointInPolygon","polygonStarted","d3_geo_clipSort","pointLine","buffer","d3_geo_clipBufferListener","ringListener","clean","ringSegments","d3_geo_clipSegmentLength1","lines","rejoin","d3_geo_clipAntimeridian","sλ0","sλ1","cosφ1","sinλ0_λ1","atan","d3_geo_clipAntimeridianIntersect","d3_geo_clipCircle","cr","smallRadius","notHemisphere","visible","c0","v00","point2","point1","code","intersect","d3_geo_circleInterpolate","two","n1","n2","n2n2","n1n2","determinant","c1","c2","n1xn2","uu","t2","δλ","polar","q1","d3_geom_clipLine","d3_geo_clipExtent","x__","y__","v__","x_","y_","v_","first","listener_","bufferListener","wn","insidePolygon","inside","corner","comparePoints","ca","cb","d3_geo_conic","projectAt","d3_geo_projectionMutator","parallels","d3_geo_conicEqualArea","C","ρ0","forward","ρ0_y","clipExtent","output","valid","conicEqualArea","raw","albers","albersUsa","lower48Point","alaskaPoint","hawaiiPoint","lower48","alaska","hawaii","pointStream","lower48Stream","alaskaStream","hawaiiStream","d3_geo_pathAreaSum","d3_geo_pathAreaPolygon","d3_geo_pathBoundsX0","d3_geo_pathBoundsY0","d3_geo_pathBoundsX1","d3_geo_pathBoundsY1","d3_geo_pathArea","d3_geo_pathAreaRingStart","x00","y00","d3_geo_pathBounds","d3_geo_pathBuffer","pointCircle","d3_geo_pathBufferCircle","pointLineStart","lineEndPolygon","pointRadius","d3_geo_lengthSum","d3_geo_pathCentroid","d3_geo_pathCentroidPoint","d3_geo_pathCentroidLineStart","d3_geo_pathCentroidLineEnd","d3_geo_pathCentroidRingStart","d3_geo_pathContext","context","moveTo","lineTo","closePath","d3_geo_resample","project","δ2","cosMinDistance","maxDepth","resample","resampleRecursive","resampleNone","d3_geo_transformPoint","c00","resampleLineTo","φ2","λ2","dx2","dy2","dz","d3_geo_pathProjectStream","d3_geo_projectionRadians","d3_geo_transform","d3_geo_projection","projectRotate","δx","δy","projectResample","δφ","δγ","preclip","postclip","clipAngle","projection","d3_geo_rotation","invalidate","d3_geo_equirectangular","d3_geo_identityRotation","d3_geo_rotationλ","d3_geo_rotationφγ","d3_geo_forwardRotationλ","cosδφ","sinδφ","cosδγ","sinδγ","sr","d3_geo_circleAngle","d3_geo_graticuleX","d3_geo_graticuleY","d3_source","d3_target","projectStream","contextStream","cacheStream","transform","methods","projectionMutator","equirectangular","circle","Δλ","sinΔλ","cosΔλ","sinφ1","graticule","X1","X0","Y1","Y0","DX","DY","majorExtent","minorExtent","majorStep","minorStep","greatArc","source_","target_","cy0","sy0","cy1","sy1","kx0","ky0","kx1","ky1","d3_geo_length","d3_geo_azimuthal","azimuthal","cosλ","sinc","cosc","d3_geo_azimuthalEqualArea","cosλcosφ","azimuthalEqualArea","d3_geo_azimuthalEquidistant","d3_geo_conicConformal","F","d3_geo_mercator","d3_geo_conicEquidistant","G","azimuthalEquidistant","conicConformal","conicEquidistant","d3_geo_gnomonic","d3_geo_mercatorProjection","clipAuto","gnomonic","mercator","d3_geo_orthographic","orthographic","d3_geo_stereographic","d3_geo_transverseMercator","d3_geom_pointX","d3_geom_pointY","d3_geom_hullUpper","hull","hs","d3_geom_hullOrder","stereographic","transverseMercator","vertices","fx","fy","flippedPoints","upper","lower","skipLeft","skipRight","d3_geom_polygonPrototype","d3_geom_polygonInside","d3_geom_polygonIntersect","x3","x21","x43","y3","y21","y43","ua","d3_geom_polygonClosed","d3_geom_voronoiEdges","d3_geom_voronoiCells","d3_geom_voronoiBeaches","d3_geom_voronoiFirstCircle","d3_geom_voronoiCircles","d3_geom_voronoiBeachPool","d3_geom_voronoiCirclePool","d3_geom_voronoiBeach","d3_geom_voronoiRedBlackNode","edge","site","d3_geom_voronoiCreateBeach","beach","d3_geom_voronoiDetachBeach","d3_geom_voronoiDetachCircle","d3_geom_voronoiRemoveBeach","vertex","previous","P","disappearing","lArc","unshift","rArc","iArc","nArcs","d3_geom_voronoiSetEdgeEnd","d3_geom_voronoiCreateEdge","d3_geom_voronoiAttachCircle","d3_geom_voronoiAddBeach","dxl","dxr","directrix","d3_geom_voronoiLeftBreakPoint","d3_geom_voronoiRightBreakPoint","R","newArc","lSite","rSite","hb","hc","rfocx","rfocy","pby2","lfocx","lfocy","plby2","hl","aby2","d3_geom_voronoiCell","d3_geom_voronoiHalfEdgeOrder","d3_geom_voronoiCircle","cSite","ha","d3_geom_voronoiConnectEdge","vb","fm","fb","va","lx","ly","rx","ry","d3_geom_voronoiEdge","d3_geom_voronoiHalfEdge","d3_geom_voronoiRedBlackTree","d3_geom_voronoiRedBlackRotateLeft","tree","d3_geom_voronoiRedBlackRotateRight","d3_geom_voronoiRedBlackFirst","d3_geom_voronoi","sites","bbox","d3_geom_voronoiVertexOrder","d3_geom_voronoiClipEdges","cell","iHalfEdge","halfEdges","nHalfEdges","cells","iCell","prepare","d3_geom_voronoiCloseCells","diagram","grandpa","uncle","sibling","voronoi","d3_geom_voronoiClipExtent","polygons","triangles","s0","s1","d3_geom_voronoiTriangleArea","d3_geom_quadtreeCompatX","d3_geom_quadtreeCompatY","d3_geom_quadtreeVisit","children","d3_geom_quadtreeFind","closestPoint","minDistance2","find","distance2","xm","ym","d3_interpolateRgb","ar","ag","br","bg","bb","d3_interpolateObject","d3_interpolate","d3_interpolateNumber","d3_interpolateString","am","bm","bs","bi","d3_interpolate_numberA","d3_interpolate_numberB","delaunay","compat","x1_","y1_","x2_","y2_","leaf","nx","ny","insertChild","nPoint","below","interpolateRgb","interpolateObject","interpolateNumber","interpolateString","interpolators","d3_interpolateArray","na","nb","interpolateArray","d3_ease_default","d3_ease","poly","d3_ease_quad","cubic","d3_ease_cubic","d3_ease_sin","d3_ease_exp","d3_ease_circle","elastic","back","bounce","d3_ease_bounce","d3_ease_mode","d3_ease_reverse","d3_ease_reflect","d3_ease_clamp","d3_ease_cubicInOut","t3","d3_interpolateRound","d3_transform","kx","d3_transformNormalize","kz","d3_transformDot","ky","d3_transformCombine","skew","interpolateHcl","ah","al","bh","bc","bl","interpolateHsl","as","ba","interpolateRound","baseVal","consolidate","d3_transformIdentity","d3_interpolateTransformPop","d3_interpolateTransform","ta","d3_interpolateTranslate","ra","rb","d3_interpolateRotate","wa","wb","d3_interpolateSkew","ka","kb","d3_interpolateScale","d3_uninterpolateNumber","d3_uninterpolateClamp","d3_layout_bundlePath","lca","aNodes","d3_layout_bundleAncestors","bNodes","aNode","bNode","sharedNode","d3_layout_bundleLeastCommonAncestor","d3_layout_forceDragstart","d3_layout_forceDragend","d3_layout_forceMouseover","d3_layout_forceMouseout","interpolateTransform","bundle","paths","chord","chords","sortGroups","sortSubgroups","sortChords","relayout","groupSums","groupIndex","subgroupIndex","di","dj","subindex","startAngle","endAngle","resort","distances","strengths","charges","d3_layout_forceLinkDistance","d3_layout_forceLinkStrength","chargeDistance2","d3_layout_forceChargeDistance2","theta2","repulse","dw","dn","pointCharge","dragmove","tick","weight","d3_layout_forceAccumulate","neighbors","dimension","candidates","d3_layout_hierarchyRebind","hierarchy","d3_layout_hierarchyLinks","d3_layout_hierarchyVisitBefore","d3_layout_hierarchyVisitAfter","nodes2","d3_layout_hierarchyChildren","d3_layout_hierarchyValue","d3_layout_hierarchySort","child","stack","childs","revalue","partition","pie","d3_layout_pieSortByValue","padAngle","pa","arcs","d3_layout_stackX","d3_layout_stackY","d3_layout_stackOut","d3_layout_stackOrderDefault","d3_layout_stackOffsetZero","series","orders","offsets","d3_layout_stackOrders","d3_layout_stackOffsets","d3_layout_stackMaxIndex","sums","d3_layout_stackReduceSum","tops","bottoms","silhouette","wiggle","s2","s3","o0","expand","zero","reduce","d3_layout_stackSum","d3_layout_histogramBinSturges","d3_layout_histogramBinFixed","d3_layout_histogramRange","d3_layout_packSort","d3_layout_packInsert","_pack_next","_pack_prev","d3_layout_packSplice","d3_layout_packIntersects","dr","d3_layout_packSiblings","xMin","xMax","yMin","yMax","d3_layout_packLink","d3_layout_packPlace","isect","d3_layout_packUnlink","db","dc","d3_layout_treeSeparation","d3_layout_treeLeft","d3_layout_treeRight","d3_layout_treeMove","wm","wp","change","d3_layout_treeAncestor","vim","ancestor","d3_layout_treemapPadNull","d3_layout_treemapPad","d3_scaleExtent","d3_scaleRange","rangeExtent","d3_scale_bilinear","uninterpolate","d3_scale_nice","nice","d3_scale_niceStep","d3_scale_niceIdentity","histogram","frequency","valuer","ranger","binner","bin","bins","thresholds","pack","d3_layout_packTransform","separation","nodeSize","root0","root1","node1","queue","wrapTree","firstWalk","secondWalk","sizeNode","tx","siblings","d3_layout_treeShift","midpoint","vip","vop","vom","sip","sop","sim","som","apportion","cluster","previousNode","d3_layout_clusterX","d3_layout_clusterY","d3_layout_clusterLeft","d3_layout_clusterRight","treemap","stickies","pad","sticky","ratio","squarify","score","remaining","worst","stickify","rmax","rmin","padFunction","padConstant","µ","σ","logNormal","bates","irwinHall","d3_scale_polylinear","d3_scale_linearRebind","d3_scale_linearNice","d3_scale_linearTickRange","span","d3_scale_linearTicks","d3_scale_linearTickFormat","d3_scale_linearPrecision","d3_scale_linearFormatSignificant","d3_scale_linearFormatPrecision","d3_scale_linear","rangeRound","ticks","tickFormat","d3_scale_log","base","positive","niced","d3_scale_logNiceNegative","d3_scale_logFormat","d3_scale_powPow","d3_scale_pow","powp","powb","d3_scale_ordinal","rangeBand","steps","xi","rangePoints","rangeRoundPoints","rangeBands","outerPadding","rangeRoundBands","d3_category10","d3_category20","category20b","d3_category20b","category20c","d3_category20c","d3_zero","d3_scale_quantile","quantiles","invertExtent","quantize","d3_scale_quantize","threshold","d3_scale_threshold","d3_scale_identity","innerRadius","d3_svg_arcInnerRadius","outerRadius","d3_svg_arcOuterRadius","cornerRadius","padRadius","d3_svg_arcAuto","d3_svg_arcStartAngle","d3_svg_arcEndAngle","d3_svg_arcPadAngle","cw","circleSegment","ap","d3_svg_arcSweep","h1","h0","rc1","rc0","oc","kc","lc","t30","d3_svg_arcCornerTangents","t12","t03","t21","x01","y01","ox","oy","cx0","cx1","dx0","dy0","dx1","dy1","d3_svg_line","defined","d3_svg_lineLinear","interpolateKey","tension","d3_svg_lineInterpolators","d3_svg_lineLinearClosed","d3_svg_lineStepBefore","d3_svg_lineStepAfter","basis","d3_svg_lineBasis","pi","d3_svg_lineDot4","d3_svg_lineBasisBezier3","d3_svg_lineBasisBezier","cardinal","d3_svg_lineHermite","d3_svg_lineCardinalTangents","monotone","tangents","d3_svg_lineSlope","d3_svg_lineFiniteDifferences","d3_svg_lineMonotoneTangents","p2","d3_svg_lineBasisBezier1","d3_svg_lineBasisBezier2","d3_svg_lineRadial","d3_svg_area","interpolateReverse","points0","points1","fx0","fy0","fx1","fy1","d3_svg_chordRadius","d3_svg_diagonalProjection","d3_svg_diagonalRadialProjection","d3_svg_symbolSize","d3_svg_symbolType","d3_svg_symbolCircle","radial","curve","diagonal","p3","projection_","d3_svg_symbols","diamond","d3_svg_symbolTan30","square","d3_svg_symbolSqrt3","symbolTypes","d3_transitionId","d3_transitionNamespace","d3_transitionInherit","d3_transitionNode","d3_transition","interrupt","d3_selection_interruptNS","lock","activeId","active","d3_transitionPrototype","d3_transition_tween","d3_transition_text","inherit","tweens","elapsed","cancelId","cancel","subnodes","nameNS","attrNull","attrNullNS","attrTween","attrTweenNS","styleNull","styleString","styleTween","inheritId","id0","id1","tickFormat_","orient","d3_svg_axisDefaultOrient","innerTickSize","outerTickSize","tickPadding","tickArguments_","tickValues","tickTransform","tickEnter","tickExit","tickUpdate","tickSpacing","pathUpdate","lineEnter","lineUpdate","textEnter","textUpdate","d3_svg_axisX","d3_svg_axisY","d3_svg_axisOrients","tickSize","tickSubdivide","xExtentDomain","yExtentDomain","xClamp","yClamp","resizes","d3_svg_brushResizes","brushstart","background","resize","d3_svg_brushCursor","gUpdate","backgroundUpdate","redrawX","redrawY","eventTarget","event_","resizing","resizingX","resizingY","dragging","brushmove","brushend","ex","ey","altKey","move1","extent1","extent0","yi","nw","ne","se","sw","d3_time_formatUtc","d3_time_formatIso","d3_time_formatIsoNative","toISOString","d3_time_scale","tickMethod","d3_time_scaleSteps","d3_time_scaleMilliseconds","d3_time_scaleDate","skip","skipped","iso","second","seconds","minute","minutes","hour","timezone","hours","month","d3_time_scaleLocalMethods","d3_time_scaleLocalFormat","d3_time_scaleUtcMethods","d3_time_scaleUtcFormat","d3_json","d3_html","createRange","selectNode","body","createContextualFragment","responseXML","ReactPropTypesSecret","emptyFunction","propFullName","secret","getShim","ReactPropTypes","any","instanceOf","objectOf","checkPropTypes","webgl","cube","View","System","shaders","loadProgram","gl","Program","canvas","aoResolution","tSceneColor","tSceneNormal","tSceneDepth","tRandRotDepth","tRandRotColor","tAccumulator","tAccumulatorOut","tFXAA","tFXAAOut","tDOF","tAO","fbSceneColor","fbSceneNormal","fbRandRot","fbAccumulator","fbFXAA","fbAO","progAtoms","progBonds","progAccumulator","progAO","progFXAA","progDOF","progDisplayQuad","rAtoms","rBonds","rAccumulator","rAO","rDOF","rFXAA","sampleCount","colorRendered","normalRendered","sample","viewport","rot","COLOR_BUFFER_BIT","DEPTH_BUFFER_BIT","viewMat","model","setUniform","render","sceneRect","rotRect","invRot","activate","copyTexImage2D","TEXTURE_2D","RGBA","getAOProgress","initialize","getContext","enable","DEPTH_TEST","CULL_FACE","clearColor","clearDepth","getExtensions","createTextures","attribs","buildAttribs","aPosition","Renderable","Texture","internalFormat","DEPTH_COMPONENT","UNSIGNED_SHORT","Framebuffer","setResolution","setSystem","newSystem","make36","arr","aImposter","aRadius","aColor","imposter","aPosA","aPosB","aRadA","aRadB","aColA","aColB","posa","posb","rada","radb","cola","colb","bindFramebuffer","FRAMEBUFFER","display","GLBuffer","createBuffer","bindBuffer","ARRAY_BUFFER","bufferData","STATIC_DRAW","extArray","getExtension","createFramebuffer","drawBuffers","drawBuffersWEBGL","framebufferTexture2D","texture","COLOR_ATTACHMENT0","DEPTH_ATTACHMENT","mag","NEAREST","wraps","CLAMP_TO_EDGE","wrapt","UNSIGNED_BYTE","createTexture","texParameteri","TEXTURE_MAG_FILTER","TEXTURE_MIN_FILTER","TEXTURE_WRAP_S","TEXTURE_WRAP_T","texImage2D","bindTexture","activeTexture","TEXTURE0","program","buffers","primitiveCount","use","enableVertexAttribArray","vertexAttribPointer","FLOAT","drawArrays","TRIANGLES","disableVertexAttribArray","attributes","InstancedRenderable","instancedExt","vertexAttribDivisorANGLE","divisor","drawArraysInstancedANGLE","vertexSource","fragmentSource","compileProgram","gatherAttribs","uniforms","gatherUniforms","useProgram","vertexShader","compileShader","VERTEX_SHADER","fragmentShader","FRAGMENT_SHADER","createProgram","attachShader","linkProgram","getProgramParameter","LINK_STATUS","getProgramInfoLog","shader","createShader","shaderSource","getShaderParameter","COMPILE_STATUS","getShaderInfoLog","lineno","warn","typeString","nUniforms","ACTIVE_UNIFORMS","uniform","getActiveUniform","getUniformLocation","nAttribs","ACTIVE_ATTRIBUTES","attrib","getActiveAttrib","getAttribLocation","getRotation","setRotation","getTranslation","setTranslation","getZoom","setZoom","refreshView","interactions","buttonDown","shiftDown","lastX","lastY","mousedownFn","button","mouseupFn","keychangeFn","mousemoveFn","buttons","inverseZoom","viewDummyObj","wheelFn","removeAllEventListeners","stickball","toon","licorice","renderNewSequences","containerRef","React","createRef","nodeFillColor","_fornaContainer","PreFornaContainer","sequences","unpackedOptions","assign","nextProps","ref","_arrayFromIterator","_includesWith","pred","hasEnumBug","propertyIsEnumerable","nonEnumerableProps","hasArgsEnumBug","nIdx","ks","checkArgsLength","_uniqContentEquals","aIterator","bIterator","stackA","stackB","eq","_equals","aItem","typeA","constructor","global","ignoreCase","multiline","unicode","keysA","extendedStackA","extendedStackB"],"mappings":"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","file":"bundle.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t};\n\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t13: 0\n \t};\n\n\n\n \t// script path function\n \tfunction jsonpScriptSrc(chunkId) {\n \t\treturn __webpack_require__.p + \"\" + ({\"0\":\"async-alignment\",\"1\":\"dash_bio-shared\",\"2\":\"async-circos\",\"3\":\"async-ideogram\",\"4\":\"async-igv\",\"5\":\"async-moleculeviewer2\",\"6\":\"async-moleculeviewer3\",\"7\":\"async-needle\",\"8\":\"async-nglmoleculeviewer\",\"9\":\"async-onco\",\"10\":\"async-pileup\",\"11\":\"async-sequence\",\"12\":\"async-speck\"}[chunkId]||chunkId) + \".js\"\n \t}\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n\n\n \t\t// JSONP chunk loading for javascript\n\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n \t\t\t// a Promise means \"currently loading\".\n \t\t\tif(installedChunkData) {\n \t\t\t\tpromises.push(installedChunkData[2]);\n \t\t\t} else {\n \t\t\t\t// setup Promise in chunk cache\n \t\t\t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t\t\t});\n \t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n \t\t\t\t// start chunk loading\n \t\t\t\tvar script = document.createElement('script');\n \t\t\t\tvar onScriptComplete;\n\n \t\t\t\tscript.charset = 'utf-8';\n \t\t\t\tscript.timeout = 120;\n \t\t\t\tif (__webpack_require__.nc) {\n \t\t\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t\t\t}\n \t\t\t\tscript.src = jsonpScriptSrc(chunkId);\n\n \t\t\t\t// create error before stack unwound to get useful stacktrace later\n \t\t\t\tvar error = new Error();\n \t\t\t\tonScriptComplete = function (event) {\n \t\t\t\t\t// avoid mem leaks in IE.\n \t\t\t\t\tscript.onerror = script.onload = null;\n \t\t\t\t\tclearTimeout(timeout);\n \t\t\t\t\tvar chunk = installedChunks[chunkId];\n \t\t\t\t\tif(chunk !== 0) {\n \t\t\t\t\t\tif(chunk) {\n \t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n \t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n \t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n \t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n \t\t\t\t\t\t\terror.type = errorType;\n \t\t\t\t\t\t\terror.request = realSrc;\n \t\t\t\t\t\t\tchunk[1](error);\n \t\t\t\t\t\t}\n \t\t\t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t\t\t}\n \t\t\t\t};\n \t\t\t\tvar timeout = setTimeout(function(){\n \t\t\t\t\tonScriptComplete({ type: 'timeout', target: script });\n \t\t\t\t}, 120000);\n \t\t\t\tscript.onerror = script.onload = onScriptComplete;\n \t\t\t\tdocument.head.appendChild(script);\n \t\t\t}\n \t\t}\n \t\treturn Promise.all(promises);\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n \tvar getCurrentScript = function() {\n \t var script = document.currentScript;\n \t if (!script) {\n \t /* Shim for IE11 and below */\n \t /* Do not take into account async scripts and inline scripts */\n\n \t var doc_scripts = document.getElementsByTagName('script');\n \t var scripts = [];\n\n \t for (var i = 0; i < doc_scripts.length; i++) {\n \t scripts.push(doc_scripts[i]);\n \t }\n\n \t scripts = scripts.filter(function(s) { return !s.async && !s.text && !s.textContent; });\n \t script = scripts.slice(-1)[0];\n \t }\n\n \t return script;\n \t};\n\n \tvar isLocalScript = function(script) {\n \t return /\\/_dash-component-suites\\//.test(script.src);\n \t};\n\n \tObject.defineProperty(__webpack_require__, 'p', {\n \t get: (function () {\n \t var script = getCurrentScript();\n\n \t var url = script.src.split('/').slice(0, -1).join('/') + '/';\n\n \t return function() {\n \t return url;\n \t };\n \t })()\n \t});\n\n \tif (typeof jsonpScriptSrc !== 'undefined') {\n \t var __jsonpScriptSrc__ = jsonpScriptSrc;\n \t jsonpScriptSrc = function(chunkId) {\n \t var script = getCurrentScript();\n \t var isLocal = isLocalScript(script);\n\n \t var src = __jsonpScriptSrc__(chunkId);\n\n \t if(!isLocal) {\n \t return src;\n \t }\n\n \t var srcFragments = src.split('/');\n \t var fileFragments = srcFragments.slice(-1)[0].split('.');\n\n \t fileFragments.splice(1, 0, \"v0_7_0m1624429501\");\n \t srcFragments.splice(-1, 1, fileFragments.join('.'))\n\n \t return srcFragments.join('/');\n \t };\n \t}\n\n\n \tvar jsonpArray = window[\"webpackJsonpdash_bio\"] = window[\"webpackJsonpdash_bio\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 34);\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var REACT_ELEMENT_TYPE = (typeof Symbol === 'function' &&\n Symbol.for &&\n Symbol.for('react.element')) ||\n 0xeac7;\n\n var isValidElement = function(object) {\n return typeof object === 'object' &&\n object !== null &&\n object.$$typeof === REACT_ELEMENT_TYPE;\n };\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(isValidElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n","(function() { module.exports = window[\"React\"]; }());","/* eslint-disable no-inline-comments */\nexport default {\n alignmentChart: () =>\n import(\n /* webpackChunkName: \"alignment\" */ './fragments/AlignmentChart.react'\n ),\n circos: () =>\n import(/* webpackChunkName: \"circos\" */ './fragments/Circos.react'),\n ideogram: () =>\n import(/* webpackChunkName: \"ideogram\" */ './fragments/Ideogram.react'),\n igv: () => import(/* webpackChunkName: \"igv\" */ './fragments/Igv.react'),\n pileup: () =>\n import(/* webpackChunkName: \"pileup\" */ './fragments/Pileup.react'),\n molecule2dViewer: () =>\n import(\n /* webpackChunkName: \"moleculeviewer2\" */ './fragments/Molecule2dViewer.react'\n ),\n molecule3dViewer: () =>\n import(\n /* webpackChunkName: \"moleculeviewer3\" */ './fragments/Molecule3dViewer'\n ),\n nglmoleculeViewer: () =>\n import(\n /* webpackChunkName: \"nglmoleculeviewer\" */ './fragments/NglMoleculeViewer.react'\n ),\n needlePlot: () =>\n import(/* webpackChunkName: \"needle\" */ './fragments/NeedlePlot.react'),\n oncoPrint: () =>\n import(/* webpackChunkName: \"onco\" */ './fragments/OncoPrint.react'),\n sequenceViewer: () =>\n import(\n /* webpackChunkName: \"sequence\" */ './fragments/SequenceViewer.react'\n ),\n speck: () =>\n import(/* webpackChunkName: \"speck\" */ './fragments/Speck.react'),\n};\n","import _isPlaceholder from './_isPlaceholder.js';\n\n/**\n * Optimized internal one-arity curry function.\n *\n * @private\n * @category Function\n * @param {Function} fn The function to curry.\n * @return {Function} The curried function.\n */\nexport default function _curry1(fn) {\n return function f1(a) {\n if (arguments.length === 0 || _isPlaceholder(a)) {\n return f1;\n } else {\n return fn.apply(this, arguments);\n }\n };\n}","export default function _isPlaceholder(a) {\n return a != null && typeof a === 'object' && a['@@functional/placeholder'] === true;\n}","export default function _has(prop, obj) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}","module.exports = {};\nmodule.exports[ 0] = module.exports[ 'Xx'] = {'symbol': 'Xx', 'name': 'unknown', 'mass': 1.00000000, 'radius': 1.0000, 'color': [1.000, 0.078, 0.576], 'number': 0};\nmodule.exports[ 1] = module.exports[ 'H'] = {'symbol': 'H', 'name': 'hydrogen', 'mass': 1.00794000, 'radius': 0.3100, 'color': [1.000, 1.000, 1.000], 'number': 1};\nmodule.exports[ 2] = module.exports[ 'He'] = {'symbol': 'He', 'name': 'helium', 'mass': 4.00260200, 'radius': 0.2800, 'color': [0.851, 1.000, 1.000], 'number': 2};\nmodule.exports[ 3] = module.exports[ 'Li'] = {'symbol': 'Li', 'name': 'lithium', 'mass': 6.94100000, 'radius': 1.2800, 'color': [0.800, 0.502, 1.000], 'number': 3};\nmodule.exports[ 4] = module.exports[ 'Be'] = {'symbol': 'Be', 'name': 'beryllium', 'mass': 9.01218200, 'radius': 0.9600, 'color': [0.761, 1.000, 0.000], 'number': 4};\nmodule.exports[ 5] = module.exports[ 'B'] = {'symbol': 'B', 'name': 'boron', 'mass': 10.81100000, 'radius': 0.8400, 'color': [1.000, 0.710, 0.710], 'number': 5};\nmodule.exports[ 6] = module.exports[ 'C'] = {'symbol': 'C', 'name': 'carbon', 'mass': 12.01070000, 'radius': 0.7300, 'color': [0.565, 0.565, 0.565], 'number': 6};\nmodule.exports[ 7] = module.exports[ 'N'] = {'symbol': 'N', 'name': 'nitrogen', 'mass': 14.00670000, 'radius': 0.7100, 'color': [0.188, 0.314, 0.973], 'number': 7};\nmodule.exports[ 8] = module.exports[ 'O'] = {'symbol': 'O', 'name': 'oxygen', 'mass': 15.99940000, 'radius': 0.6600, 'color': [1.000, 0.051, 0.051], 'number': 8};\nmodule.exports[ 9] = module.exports[ 'F'] = {'symbol': 'F', 'name': 'fluorine', 'mass': 18.99840320, 'radius': 0.5700, 'color': [0.565, 0.878, 0.314], 'number': 9};\nmodule.exports[ 10] = module.exports[ 'Ne'] = {'symbol': 'Ne', 'name': 'neon', 'mass': 20.17970000, 'radius': 0.5800, 'color': [0.702, 0.890, 0.961], 'number': 10};\nmodule.exports[ 11] = module.exports[ 'Na'] = {'symbol': 'Na', 'name': 'sodium', 'mass': 22.98976928, 'radius': 1.6600, 'color': [0.671, 0.361, 0.949], 'number': 11};\nmodule.exports[ 12] = module.exports[ 'Mg'] = {'symbol': 'Mg', 'name': 'magnesium', 'mass': 24.30500000, 'radius': 1.4100, 'color': [0.541, 1.000, 0.000], 'number': 12};\nmodule.exports[ 13] = module.exports[ 'Al'] = {'symbol': 'Al', 'name': 'aluminum', 'mass': 26.98153860, 'radius': 1.2100, 'color': [0.749, 0.651, 0.651], 'number': 13};\nmodule.exports[ 14] = module.exports[ 'Si'] = {'symbol': 'Si', 'name': 'silicon', 'mass': 28.08550000, 'radius': 1.1100, 'color': [0.941, 0.784, 0.627], 'number': 14};\nmodule.exports[ 15] = module.exports[ 'P'] = {'symbol': 'P', 'name': 'phosphorus', 'mass': 30.97376200, 'radius': 1.0700, 'color': [1.000, 0.502, 0.000], 'number': 15};\nmodule.exports[ 16] = module.exports[ 'S'] = {'symbol': 'S', 'name': 'sulfur', 'mass': 32.06500000, 'radius': 1.0500, 'color': [1.000, 1.000, 0.188], 'number': 16};\nmodule.exports[ 17] = module.exports[ 'Cl'] = {'symbol': 'Cl', 'name': 'chlorine', 'mass': 35.45300000, 'radius': 1.0200, 'color': [0.122, 0.941, 0.122], 'number': 17};\nmodule.exports[ 18] = module.exports[ 'Ar'] = {'symbol': 'Ar', 'name': 'argon', 'mass': 39.94800000, 'radius': 1.0600, 'color': [0.502, 0.820, 0.890], 'number': 18};\nmodule.exports[ 19] = module.exports[ 'K'] = {'symbol': 'K', 'name': 'potassium', 'mass': 39.09830000, 'radius': 2.0300, 'color': [0.561, 0.251, 0.831], 'number': 19};\nmodule.exports[ 20] = module.exports[ 'Ca'] = {'symbol': 'Ca', 'name': 'calcium', 'mass': 40.07800000, 'radius': 1.7600, 'color': [0.239, 1.000, 0.000], 'number': 20};\nmodule.exports[ 21] = module.exports[ 'Sc'] = {'symbol': 'Sc', 'name': 'scandium', 'mass': 44.95591200, 'radius': 1.7000, 'color': [0.902, 0.902, 0.902], 'number': 21};\nmodule.exports[ 22] = module.exports[ 'Ti'] = {'symbol': 'Ti', 'name': 'titanium', 'mass': 47.86700000, 'radius': 1.6000, 'color': [0.749, 0.761, 0.780], 'number': 22};\nmodule.exports[ 23] = module.exports[ 'V'] = {'symbol': 'V', 'name': 'vanadium', 'mass': 50.94150000, 'radius': 1.5300, 'color': [0.651, 0.651, 0.671], 'number': 23};\nmodule.exports[ 24] = module.exports[ 'Cr'] = {'symbol': 'Cr', 'name': 'chromium', 'mass': 51.99610000, 'radius': 1.3900, 'color': [0.541, 0.600, 0.780], 'number': 24};\nmodule.exports[ 25] = module.exports[ 'Mn'] = {'symbol': 'Mn', 'name': 'manganese', 'mass': 54.93804500, 'radius': 1.3900, 'color': [0.611, 0.478, 0.780], 'number': 25};\nmodule.exports[ 26] = module.exports[ 'Fe'] = {'symbol': 'Fe', 'name': 'iron', 'mass': 55.84500000, 'radius': 1.3200, 'color': [0.878, 0.400, 0.200], 'number': 26};\nmodule.exports[ 27] = module.exports[ 'Co'] = {'symbol': 'Co', 'name': 'cobalt', 'mass': 58.69340000, 'radius': 1.2600, 'color': [0.941, 0.565, 0.627], 'number': 27};\nmodule.exports[ 28] = module.exports[ 'Ni'] = {'symbol': 'Ni', 'name': 'nickel', 'mass': 58.93319500, 'radius': 1.2400, 'color': [0.314, 0.816, 0.314], 'number': 28};\nmodule.exports[ 29] = module.exports[ 'Cu'] = {'symbol': 'Cu', 'name': 'copper', 'mass': 63.54600000, 'radius': 1.3200, 'color': [0.784, 0.502, 0.200], 'number': 29};\nmodule.exports[ 30] = module.exports[ 'Zn'] = {'symbol': 'Zn', 'name': 'zinc', 'mass': 65.38000000, 'radius': 1.2200, 'color': [0.490, 0.502, 0.690], 'number': 30};\nmodule.exports[ 31] = module.exports[ 'Ga'] = {'symbol': 'Ga', 'name': 'gallium', 'mass': 69.72300000, 'radius': 1.2200, 'color': [0.761, 0.561, 0.561], 'number': 31};\nmodule.exports[ 32] = module.exports[ 'Ge'] = {'symbol': 'Ge', 'name': 'germanium', 'mass': 72.64000000, 'radius': 1.2000, 'color': [0.400, 0.561, 0.561], 'number': 32};\nmodule.exports[ 33] = module.exports[ 'As'] = {'symbol': 'As', 'name': 'arsenic', 'mass': 74.92160000, 'radius': 1.1900, 'color': [0.741, 0.502, 0.890], 'number': 33};\nmodule.exports[ 34] = module.exports[ 'Se'] = {'symbol': 'Se', 'name': 'selenium', 'mass': 78.96000000, 'radius': 1.2000, 'color': [1.000, 0.631, 0.000], 'number': 34};\nmodule.exports[ 35] = module.exports[ 'Br'] = {'symbol': 'Br', 'name': 'bromine', 'mass': 79.90400000, 'radius': 1.2000, 'color': [0.651, 0.161, 0.161], 'number': 35};\nmodule.exports[ 36] = module.exports[ 'Kr'] = {'symbol': 'Kr', 'name': 'krypton', 'mass': 83.79800000, 'radius': 1.1600, 'color': [0.361, 0.722, 0.820], 'number': 36};\nmodule.exports[ 37] = module.exports[ 'Rb'] = {'symbol': 'Rb', 'name': 'rubidium', 'mass': 85.46780000, 'radius': 2.2000, 'color': [0.439, 0.180, 0.690], 'number': 37};\nmodule.exports[ 38] = module.exports[ 'Sr'] = {'symbol': 'Sr', 'name': 'strontium', 'mass': 87.62000000, 'radius': 1.9500, 'color': [0.000, 1.000, 0.000], 'number': 38};\nmodule.exports[ 39] = module.exports[ 'Y'] = {'symbol': 'Y', 'name': 'yttrium', 'mass': 88.90585000, 'radius': 1.9000, 'color': [0.580, 1.000, 1.000], 'number': 39};\nmodule.exports[ 40] = module.exports[ 'Zr'] = {'symbol': 'Zr', 'name': 'zirconium', 'mass': 91.22400000, 'radius': 1.7500, 'color': [0.580, 0.878, 0.878], 'number': 40};\nmodule.exports[ 41] = module.exports[ 'Nb'] = {'symbol': 'Nb', 'name': 'niobium', 'mass': 92.90638000, 'radius': 1.6400, 'color': [0.451, 0.761, 0.788], 'number': 41};\nmodule.exports[ 42] = module.exports[ 'Mo'] = {'symbol': 'Mo', 'name': 'molybdenum', 'mass': 95.96000000, 'radius': 1.5400, 'color': [0.329, 0.710, 0.710], 'number': 42};\nmodule.exports[ 43] = module.exports[ 'Tc'] = {'symbol': 'Tc', 'name': 'technetium', 'mass': 98.00000000, 'radius': 1.4700, 'color': [0.231, 0.620, 0.620], 'number': 43};\nmodule.exports[ 44] = module.exports[ 'Ru'] = {'symbol': 'Ru', 'name': 'ruthenium', 'mass': 101.07000000, 'radius': 1.4600, 'color': [0.141, 0.561, 0.561], 'number': 44};\nmodule.exports[ 45] = module.exports[ 'Rh'] = {'symbol': 'Rh', 'name': 'rhodium', 'mass': 102.90550000, 'radius': 1.4200, 'color': [0.039, 0.490, 0.549], 'number': 45};\nmodule.exports[ 46] = module.exports[ 'Pd'] = {'symbol': 'Pd', 'name': 'palladium', 'mass': 106.42000000, 'radius': 1.3900, 'color': [0.000, 0.412, 0.522], 'number': 46};\nmodule.exports[ 47] = module.exports[ 'Ag'] = {'symbol': 'Ag', 'name': 'silver', 'mass': 107.86820000, 'radius': 1.4500, 'color': [0.753, 0.753, 0.753], 'number': 47};\nmodule.exports[ 48] = module.exports[ 'Cd'] = {'symbol': 'Cd', 'name': 'cadmium', 'mass': 112.41100000, 'radius': 1.4400, 'color': [1.000, 0.851, 0.561], 'number': 48};\nmodule.exports[ 49] = module.exports[ 'In'] = {'symbol': 'In', 'name': 'indium', 'mass': 114.81800000, 'radius': 1.4200, 'color': [0.651, 0.459, 0.451], 'number': 49};\nmodule.exports[ 50] = module.exports[ 'Sn'] = {'symbol': 'Sn', 'name': 'tin', 'mass': 118.71000000, 'radius': 1.3900, 'color': [0.400, 0.502, 0.502], 'number': 50};\nmodule.exports[ 51] = module.exports[ 'Sb'] = {'symbol': 'Sb', 'name': 'antimony', 'mass': 121.76000000, 'radius': 1.3900, 'color': [0.620, 0.388, 0.710], 'number': 51};\nmodule.exports[ 52] = module.exports[ 'Te'] = {'symbol': 'Te', 'name': 'tellurium', 'mass': 127.60000000, 'radius': 1.3800, 'color': [0.831, 0.478, 0.000], 'number': 52};\nmodule.exports[ 53] = module.exports[ 'I'] = {'symbol': 'I', 'name': 'iodine', 'mass': 126.90470000, 'radius': 1.3900, 'color': [0.580, 0.000, 0.580], 'number': 53};\nmodule.exports[ 54] = module.exports[ 'Xe'] = {'symbol': 'Xe', 'name': 'xenon', 'mass': 131.29300000, 'radius': 1.4000, 'color': [0.259, 0.620, 0.690], 'number': 54};\nmodule.exports[ 55] = module.exports[ 'Cs'] = {'symbol': 'Cs', 'name': 'cesium', 'mass': 132.90545190, 'radius': 2.4400, 'color': [0.341, 0.090, 0.561], 'number': 55};\nmodule.exports[ 56] = module.exports[ 'Ba'] = {'symbol': 'Ba', 'name': 'barium', 'mass': 137.32700000, 'radius': 2.1500, 'color': [0.000, 0.788, 0.000], 'number': 56};\nmodule.exports[ 57] = module.exports[ 'La'] = {'symbol': 'La', 'name': 'lanthanum', 'mass': 138.90547000, 'radius': 2.0700, 'color': [0.439, 0.831, 1.000], 'number': 57};\nmodule.exports[ 58] = module.exports[ 'Ce'] = {'symbol': 'Ce', 'name': 'cerium', 'mass': 140.11600000, 'radius': 2.0400, 'color': [1.000, 1.000, 0.780], 'number': 58};\nmodule.exports[ 59] = module.exports[ 'Pr'] = {'symbol': 'Pr', 'name': 'praseodymium', 'mass': 140.90765000, 'radius': 2.0300, 'color': [0.851, 1.000, 0.780], 'number': 59};\nmodule.exports[ 60] = module.exports[ 'Nd'] = {'symbol': 'Nd', 'name': 'neodymium', 'mass': 144.24200000, 'radius': 2.0100, 'color': [0.780, 1.000, 0.780], 'number': 60};\nmodule.exports[ 61] = module.exports[ 'Pm'] = {'symbol': 'Pm', 'name': 'promethium', 'mass': 145.00000000, 'radius': 1.9900, 'color': [0.639, 1.000, 0.780], 'number': 61};\nmodule.exports[ 62] = module.exports[ 'Sm'] = {'symbol': 'Sm', 'name': 'samarium', 'mass': 150.36000000, 'radius': 1.9800, 'color': [0.561, 1.000, 0.780], 'number': 62};\nmodule.exports[ 63] = module.exports[ 'Eu'] = {'symbol': 'Eu', 'name': 'europium', 'mass': 151.96400000, 'radius': 1.9800, 'color': [0.380, 1.000, 0.780], 'number': 63};\nmodule.exports[ 64] = module.exports[ 'Gd'] = {'symbol': 'Gd', 'name': 'gadolinium', 'mass': 157.25000000, 'radius': 1.9600, 'color': [0.271, 1.000, 0.780], 'number': 64};\nmodule.exports[ 65] = module.exports[ 'Tb'] = {'symbol': 'Tb', 'name': 'terbium', 'mass': 158.92535000, 'radius': 1.9400, 'color': [0.189, 1.000, 0.780], 'number': 65};\nmodule.exports[ 66] = module.exports[ 'Dy'] = {'symbol': 'Dy', 'name': 'dysprosium', 'mass': 162.50000000, 'radius': 1.9200, 'color': [0.122, 1.000, 0.780], 'number': 66};\nmodule.exports[ 67] = module.exports[ 'Ho'] = {'symbol': 'Ho', 'name': 'holmium', 'mass': 164.93032000, 'radius': 1.9200, 'color': [0.000, 1.000, 0.612], 'number': 67};\nmodule.exports[ 68] = module.exports[ 'Er'] = {'symbol': 'Er', 'name': 'erbium', 'mass': 167.25900000, 'radius': 1.8900, 'color': [0.000, 0.902, 0.459], 'number': 68};\nmodule.exports[ 69] = module.exports[ 'Tm'] = {'symbol': 'Tm', 'name': 'thulium', 'mass': 168.93421000, 'radius': 1.9000, 'color': [0.000, 0.831, 0.322], 'number': 69};\nmodule.exports[ 70] = module.exports[ 'Yb'] = {'symbol': 'Yb', 'name': 'ytterbium', 'mass': 173.05400000, 'radius': 1.8700, 'color': [0.000, 0.749, 0.220], 'number': 70};\nmodule.exports[ 71] = module.exports[ 'Lu'] = {'symbol': 'Lu', 'name': 'lutetium', 'mass': 174.96680000, 'radius': 1.8700, 'color': [0.000, 0.671, 0.141], 'number': 71};\nmodule.exports[ 72] = module.exports[ 'Hf'] = {'symbol': 'Hf', 'name': 'hafnium', 'mass': 178.49000000, 'radius': 1.7500, 'color': [0.302, 0.761, 1.000], 'number': 72};\nmodule.exports[ 73] = module.exports[ 'Ta'] = {'symbol': 'Ta', 'name': 'tantalum', 'mass': 180.94788000, 'radius': 1.7000, 'color': [0.302, 0.651, 1.000], 'number': 73};\nmodule.exports[ 74] = module.exports[ 'W'] = {'symbol': 'W', 'name': 'tungsten', 'mass': 183.84000000, 'radius': 1.6200, 'color': [0.129, 0.580, 0.839], 'number': 74};\nmodule.exports[ 75] = module.exports[ 'Re'] = {'symbol': 'Re', 'name': 'rhenium', 'mass': 186.20700000, 'radius': 1.5100, 'color': [0.149, 0.490, 0.671], 'number': 75};\nmodule.exports[ 76] = module.exports[ 'Os'] = {'symbol': 'Os', 'name': 'osmium', 'mass': 190.23000000, 'radius': 1.4400, 'color': [0.149, 0.400, 0.588], 'number': 76};\nmodule.exports[ 77] = module.exports[ 'Ir'] = {'symbol': 'Ir', 'name': 'iridium', 'mass': 192.21700000, 'radius': 1.4100, 'color': [0.090, 0.329, 0.529], 'number': 77};\nmodule.exports[ 78] = module.exports[ 'Pt'] = {'symbol': 'Pt', 'name': 'platinum', 'mass': 195.08400000, 'radius': 1.3600, 'color': [0.816, 0.816, 0.878], 'number': 78};\nmodule.exports[ 79] = module.exports[ 'Au'] = {'symbol': 'Au', 'name': 'gold', 'mass': 196.96656900, 'radius': 1.3600, 'color': [1.000, 0.820, 0.137], 'number': 79};\nmodule.exports[ 80] = module.exports[ 'Hg'] = {'symbol': 'Hg', 'name': 'mercury', 'mass': 200.59000000, 'radius': 1.3200, 'color': [0.722, 0.722, 0.816], 'number': 80};\nmodule.exports[ 81] = module.exports[ 'Tl'] = {'symbol': 'Tl', 'name': 'thallium', 'mass': 204.38330000, 'radius': 1.4500, 'color': [0.651, 0.329, 0.302], 'number': 81};\nmodule.exports[ 82] = module.exports[ 'Pb'] = {'symbol': 'Pb', 'name': 'lead', 'mass': 207.20000000, 'radius': 1.4600, 'color': [0.341, 0.349, 0.380], 'number': 82};\nmodule.exports[ 83] = module.exports[ 'Bi'] = {'symbol': 'Bi', 'name': 'bismuth', 'mass': 208.98040000, 'radius': 1.4800, 'color': [0.620, 0.310, 0.710], 'number': 83};\nmodule.exports[ 84] = module.exports[ 'Po'] = {'symbol': 'Po', 'name': 'polonium', 'mass': 210.00000000, 'radius': 1.4000, 'color': [0.671, 0.361, 0.000], 'number': 84};\nmodule.exports[ 85] = module.exports[ 'At'] = {'symbol': 'At', 'name': 'astatine', 'mass': 210.00000000, 'radius': 1.5000, 'color': [0.459, 0.310, 0.271], 'number': 85};\nmodule.exports[ 86] = module.exports[ 'Rn'] = {'symbol': 'Rn', 'name': 'radon', 'mass': 220.00000000, 'radius': 1.5000, 'color': [0.259, 0.510, 0.588], 'number': 86};\nmodule.exports[ 87] = module.exports[ 'Fr'] = {'symbol': 'Fr', 'name': 'francium', 'mass': 223.00000000, 'radius': 2.6000, 'color': [0.259, 0.000, 0.400], 'number': 87};\nmodule.exports[ 88] = module.exports[ 'Ra'] = {'symbol': 'Ra', 'name': 'radium', 'mass': 226.00000000, 'radius': 2.2100, 'color': [0.000, 0.490, 0.000], 'number': 88};\nmodule.exports[ 89] = module.exports[ 'Ac'] = {'symbol': 'Ac', 'name': 'actinium', 'mass': 227.00000000, 'radius': 2.1500, 'color': [0.439, 0.671, 0.980], 'number': 89};\nmodule.exports[ 90] = module.exports[ 'Th'] = {'symbol': 'Th', 'name': 'thorium', 'mass': 231.03588000, 'radius': 2.0600, 'color': [0.000, 0.729, 1.000], 'number': 90};\nmodule.exports[ 91] = module.exports[ 'Pa'] = {'symbol': 'Pa', 'name': 'protactinium', 'mass': 232.03806000, 'radius': 2.0000, 'color': [0.000, 0.631, 1.000], 'number': 91};\nmodule.exports[ 92] = module.exports[ 'U'] = {'symbol': 'U', 'name': 'uranium', 'mass': 237.00000000, 'radius': 1.9600, 'color': [0.000, 0.561, 1.000], 'number': 92};\nmodule.exports[ 93] = module.exports[ 'Np'] = {'symbol': 'Np', 'name': 'neptunium', 'mass': 238.02891000, 'radius': 1.9000, 'color': [0.000, 0.502, 1.000], 'number': 93};\nmodule.exports[ 94] = module.exports[ 'Pu'] = {'symbol': 'Pu', 'name': 'plutonium', 'mass': 243.00000000, 'radius': 1.8700, 'color': [0.000, 0.420, 1.000], 'number': 94};\nmodule.exports[ 95] = module.exports[ 'Am'] = {'symbol': 'Am', 'name': 'americium', 'mass': 244.00000000, 'radius': 1.8000, 'color': [0.329, 0.361, 0.949], 'number': 95};\nmodule.exports[ 96] = module.exports[ 'Cm'] = {'symbol': 'Cm', 'name': 'curium', 'mass': 247.00000000, 'radius': 1.6900, 'color': [0.471, 0.361, 0.890], 'number': 96};\nmodule.exports[ 97] = module.exports[ 'Bk'] = {'symbol': 'Bk', 'name': 'berkelium', 'mass': 247.00000000, 'radius': 1.6600, 'color': [0.541, 0.310, 0.890], 'number': 97};\nmodule.exports[ 98] = module.exports[ 'Cf'] = {'symbol': 'Cf', 'name': 'californium', 'mass': 251.00000000, 'radius': 1.6800, 'color': [0.631, 0.212, 0.831], 'number': 98};\nmodule.exports[ 99] = module.exports[ 'Es'] = {'symbol': 'Es', 'name': 'einsteinium', 'mass': 252.00000000, 'radius': 1.6500, 'color': [0.702, 0.122, 0.831], 'number': 99};\nmodule.exports[100] = module.exports[ 'Fm'] = {'symbol': 'Fm', 'name': 'fermium', 'mass': 257.00000000, 'radius': 1.6700, 'color': [0.702, 0.122, 0.729], 'number': 100};\nmodule.exports[101] = module.exports[ 'Md'] = {'symbol': 'Md', 'name': 'mendelevium', 'mass': 258.00000000, 'radius': 1.7300, 'color': [0.702, 0.051, 0.651], 'number': 101};\nmodule.exports[102] = module.exports[ 'No'] = {'symbol': 'No', 'name': 'nobelium', 'mass': 259.00000000, 'radius': 1.7600, 'color': [0.741, 0.051, 0.529], 'number': 102};\nmodule.exports[103] = module.exports[ 'Lr'] = {'symbol': 'Lr', 'name': 'lawrencium', 'mass': 262.00000000, 'radius': 1.6100, 'color': [0.780, 0.000, 0.400], 'number': 103};\nmodule.exports[104] = module.exports[ 'Rf'] = {'symbol': 'Rf', 'name': 'rutherfordium', 'mass': 261.00000000, 'radius': 1.5700, 'color': [0.800, 0.000, 0.349], 'number': 104};\nmodule.exports[105] = module.exports[ 'Db'] = {'symbol': 'Db', 'name': 'dubnium', 'mass': 262.00000000, 'radius': 1.4900, 'color': [0.820, 0.000, 0.310], 'number': 105};\nmodule.exports[106] = module.exports[ 'Sg'] = {'symbol': 'Sg', 'name': 'seaborgium', 'mass': 266.00000000, 'radius': 1.4300, 'color': [0.851, 0.000, 0.271], 'number': 106};\nmodule.exports[107] = module.exports[ 'Bh'] = {'symbol': 'Bh', 'name': 'bohrium', 'mass': 264.00000000, 'radius': 1.4100, 'color': [0.878, 0.000, 0.220], 'number': 107};\nmodule.exports[108] = module.exports[ 'Hs'] = {'symbol': 'Hs', 'name': 'hassium', 'mass': 277.00000000, 'radius': 1.3400, 'color': [0.902, 0.000, 0.180], 'number': 108};\nmodule.exports[109] = module.exports[ 'Mt'] = {'symbol': 'Mt', 'name': 'meitnerium', 'mass': 268.00000000, 'radius': 1.2900, 'color': [0.922, 0.000, 0.149], 'number': 109};\nmodule.exports[110] = module.exports[ 'Ds'] = {'symbol': 'Ds', 'name': 'Ds', 'mass': 271.00000000, 'radius': 1.2800, 'color': [0.922, 0.000, 0.149], 'number': 110};\nmodule.exports[111] = module.exports['Uuu'] = {'symbol': 'Uuu', 'name': 'Uuu', 'mass': 272.00000000, 'radius': 1.2100, 'color': [0.922, 0.000, 0.149], 'number': 111};\nmodule.exports[112] = module.exports['Uub'] = {'symbol': 'Uub', 'name': 'Uub', 'mass': 285.00000000, 'radius': 1.2200, 'color': [0.922, 0.000, 0.149], 'number': 112};\nmodule.exports[113] = module.exports['Uut'] = {'symbol': 'Uut', 'name': 'Uut', 'mass': 284.00000000, 'radius': 1.3600, 'color': [0.922, 0.000, 0.149], 'number': 113};\nmodule.exports[114] = module.exports['Uuq'] = {'symbol': 'Uuq', 'name': 'Uuq', 'mass': 289.00000000, 'radius': 1.4300, 'color': [0.922, 0.000, 0.149], 'number': 114};\nmodule.exports[115] = module.exports['Uup'] = {'symbol': 'Uup', 'name': 'Uup', 'mass': 288.00000000, 'radius': 1.6200, 'color': [0.922, 0.000, 0.149], 'number': 115};\nmodule.exports[116] = module.exports['Uuh'] = {'symbol': 'Uuh', 'name': 'Uuh', 'mass': 292.00000000, 'radius': 1.7500, 'color': [0.922, 0.000, 0.149], 'number': 116};\nmodule.exports[117] = module.exports['Uus'] = {'symbol': 'Uus', 'name': 'Uus', 'mass': 294.00000000, 'radius': 1.6500, 'color': [0.922, 0.000, 0.149], 'number': 117};\nmodule.exports[118] = module.exports['Uuo'] = {'symbol': 'Uuo', 'name': 'Uuo', 'mass': 296.00000000, 'radius': 1.5700, 'color': [0.922, 0.000, 0.149], 'number': 118};\n","/**\n * @fileoverview gl-matrix - High performance matrix and vector operations\n * @author Brandon Jones\n * @author Colin MacKenzie IV\n * @version 2.2.2\n */\n\n/* Copyright (c) 2013, Brandon Jones, Colin MacKenzie IV. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */\n\n\n(function(_global) {\n \"use strict\";\n\n var shim = {};\n if (typeof(exports) === 'undefined') {\n if(typeof define == 'function' && typeof define.amd == 'object' && define.amd) {\n shim.exports = {};\n define(function() {\n return shim.exports;\n });\n } else {\n // gl-matrix lives in a browser, define its namespaces in global\n shim.exports = typeof(window) !== 'undefined' ? window : _global;\n }\n }\n else {\n // gl-matrix lives in commonjs, define its namespaces in exports\n shim.exports = exports;\n }\n\n (function(exports) {\n /* Copyright (c) 2013, Brandon Jones, Colin MacKenzie IV. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation \n and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE \nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */\n\n\nif(!GLMAT_EPSILON) {\n var GLMAT_EPSILON = 0.000001;\n}\n\nif(!GLMAT_ARRAY_TYPE) {\n var GLMAT_ARRAY_TYPE = (typeof Float32Array !== 'undefined') ? Float32Array : Array;\n}\n\nif(!GLMAT_RANDOM) {\n var GLMAT_RANDOM = Math.random;\n}\n\n/**\n * @class Common utilities\n * @name glMatrix\n */\nvar glMatrix = {};\n\n/**\n * Sets the type of array used when creating new vectors and matrices\n *\n * @param {Type} type Array type, such as Float32Array or Array\n */\nglMatrix.setMatrixArrayType = function(type) {\n GLMAT_ARRAY_TYPE = type;\n}\n\nif(typeof(exports) !== 'undefined') {\n exports.glMatrix = glMatrix;\n}\n\nvar degree = Math.PI / 180;\n\n/**\n* Convert Degree To Radian\n*\n* @param {Number} Angle in Degrees\n*/\nglMatrix.toRadian = function(a){\n return a * degree;\n}\n;\n/* Copyright (c) 2013, Brandon Jones, Colin MacKenzie IV. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation \n and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE \nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */\n\n/**\n * @class 2 Dimensional Vector\n * @name vec2\n */\n\nvar vec2 = {};\n\n/**\n * Creates a new, empty vec2\n *\n * @returns {vec2} a new 2D vector\n */\nvec2.create = function() {\n var out = new GLMAT_ARRAY_TYPE(2);\n out[0] = 0;\n out[1] = 0;\n return out;\n};\n\n/**\n * Creates a new vec2 initialized with values from an existing vector\n *\n * @param {vec2} a vector to clone\n * @returns {vec2} a new 2D vector\n */\nvec2.clone = function(a) {\n var out = new GLMAT_ARRAY_TYPE(2);\n out[0] = a[0];\n out[1] = a[1];\n return out;\n};\n\n/**\n * Creates a new vec2 initialized with the given values\n *\n * @param {Number} x X component\n * @param {Number} y Y component\n * @returns {vec2} a new 2D vector\n */\nvec2.fromValues = function(x, y) {\n var out = new GLMAT_ARRAY_TYPE(2);\n out[0] = x;\n out[1] = y;\n return out;\n};\n\n/**\n * Copy the values from one vec2 to another\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a the source vector\n * @returns {vec2} out\n */\nvec2.copy = function(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n return out;\n};\n\n/**\n * Set the components of a vec2 to the given values\n *\n * @param {vec2} out the receiving vector\n * @param {Number} x X component\n * @param {Number} y Y component\n * @returns {vec2} out\n */\nvec2.set = function(out, x, y) {\n out[0] = x;\n out[1] = y;\n return out;\n};\n\n/**\n * Adds two vec2's\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a the first operand\n * @param {vec2} b the second operand\n * @returns {vec2} out\n */\nvec2.add = function(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n return out;\n};\n\n/**\n * Subtracts vector b from vector a\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a the first operand\n * @param {vec2} b the second operand\n * @returns {vec2} out\n */\nvec2.subtract = function(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n return out;\n};\n\n/**\n * Alias for {@link vec2.subtract}\n * @function\n */\nvec2.sub = vec2.subtract;\n\n/**\n * Multiplies two vec2's\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a the first operand\n * @param {vec2} b the second operand\n * @returns {vec2} out\n */\nvec2.multiply = function(out, a, b) {\n out[0] = a[0] * b[0];\n out[1] = a[1] * b[1];\n return out;\n};\n\n/**\n * Alias for {@link vec2.multiply}\n * @function\n */\nvec2.mul = vec2.multiply;\n\n/**\n * Divides two vec2's\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a the first operand\n * @param {vec2} b the second operand\n * @returns {vec2} out\n */\nvec2.divide = function(out, a, b) {\n out[0] = a[0] / b[0];\n out[1] = a[1] / b[1];\n return out;\n};\n\n/**\n * Alias for {@link vec2.divide}\n * @function\n */\nvec2.div = vec2.divide;\n\n/**\n * Returns the minimum of two vec2's\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a the first operand\n * @param {vec2} b the second operand\n * @returns {vec2} out\n */\nvec2.min = function(out, a, b) {\n out[0] = Math.min(a[0], b[0]);\n out[1] = Math.min(a[1], b[1]);\n return out;\n};\n\n/**\n * Returns the maximum of two vec2's\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a the first operand\n * @param {vec2} b the second operand\n * @returns {vec2} out\n */\nvec2.max = function(out, a, b) {\n out[0] = Math.max(a[0], b[0]);\n out[1] = Math.max(a[1], b[1]);\n return out;\n};\n\n/**\n * Scales a vec2 by a scalar number\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a the vector to scale\n * @param {Number} b amount to scale the vector by\n * @returns {vec2} out\n */\nvec2.scale = function(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n return out;\n};\n\n/**\n * Adds two vec2's after scaling the second operand by a scalar value\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a the first operand\n * @param {vec2} b the second operand\n * @param {Number} scale the amount to scale b by before adding\n * @returns {vec2} out\n */\nvec2.scaleAndAdd = function(out, a, b, scale) {\n out[0] = a[0] + (b[0] * scale);\n out[1] = a[1] + (b[1] * scale);\n return out;\n};\n\n/**\n * Calculates the euclidian distance between two vec2's\n *\n * @param {vec2} a the first operand\n * @param {vec2} b the second operand\n * @returns {Number} distance between a and b\n */\nvec2.distance = function(a, b) {\n var x = b[0] - a[0],\n y = b[1] - a[1];\n return Math.sqrt(x*x + y*y);\n};\n\n/**\n * Alias for {@link vec2.distance}\n * @function\n */\nvec2.dist = vec2.distance;\n\n/**\n * Calculates the squared euclidian distance between two vec2's\n *\n * @param {vec2} a the first operand\n * @param {vec2} b the second operand\n * @returns {Number} squared distance between a and b\n */\nvec2.squaredDistance = function(a, b) {\n var x = b[0] - a[0],\n y = b[1] - a[1];\n return x*x + y*y;\n};\n\n/**\n * Alias for {@link vec2.squaredDistance}\n * @function\n */\nvec2.sqrDist = vec2.squaredDistance;\n\n/**\n * Calculates the length of a vec2\n *\n * @param {vec2} a vector to calculate length of\n * @returns {Number} length of a\n */\nvec2.length = function (a) {\n var x = a[0],\n y = a[1];\n return Math.sqrt(x*x + y*y);\n};\n\n/**\n * Alias for {@link vec2.length}\n * @function\n */\nvec2.len = vec2.length;\n\n/**\n * Calculates the squared length of a vec2\n *\n * @param {vec2} a vector to calculate squared length of\n * @returns {Number} squared length of a\n */\nvec2.squaredLength = function (a) {\n var x = a[0],\n y = a[1];\n return x*x + y*y;\n};\n\n/**\n * Alias for {@link vec2.squaredLength}\n * @function\n */\nvec2.sqrLen = vec2.squaredLength;\n\n/**\n * Negates the components of a vec2\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a vector to negate\n * @returns {vec2} out\n */\nvec2.negate = function(out, a) {\n out[0] = -a[0];\n out[1] = -a[1];\n return out;\n};\n\n/**\n * Returns the inverse of the components of a vec2\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a vector to invert\n * @returns {vec2} out\n */\nvec2.inverse = function(out, a) {\n out[0] = 1.0 / a[0];\n out[1] = 1.0 / a[1];\n return out;\n};\n\n/**\n * Normalize a vec2\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a vector to normalize\n * @returns {vec2} out\n */\nvec2.normalize = function(out, a) {\n var x = a[0],\n y = a[1];\n var len = x*x + y*y;\n if (len > 0) {\n //TODO: evaluate use of glm_invsqrt here?\n len = 1 / Math.sqrt(len);\n out[0] = a[0] * len;\n out[1] = a[1] * len;\n }\n return out;\n};\n\n/**\n * Calculates the dot product of two vec2's\n *\n * @param {vec2} a the first operand\n * @param {vec2} b the second operand\n * @returns {Number} dot product of a and b\n */\nvec2.dot = function (a, b) {\n return a[0] * b[0] + a[1] * b[1];\n};\n\n/**\n * Computes the cross product of two vec2's\n * Note that the cross product must by definition produce a 3D vector\n *\n * @param {vec3} out the receiving vector\n * @param {vec2} a the first operand\n * @param {vec2} b the second operand\n * @returns {vec3} out\n */\nvec2.cross = function(out, a, b) {\n var z = a[0] * b[1] - a[1] * b[0];\n out[0] = out[1] = 0;\n out[2] = z;\n return out;\n};\n\n/**\n * Performs a linear interpolation between two vec2's\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a the first operand\n * @param {vec2} b the second operand\n * @param {Number} t interpolation amount between the two inputs\n * @returns {vec2} out\n */\nvec2.lerp = function (out, a, b, t) {\n var ax = a[0],\n ay = a[1];\n out[0] = ax + t * (b[0] - ax);\n out[1] = ay + t * (b[1] - ay);\n return out;\n};\n\n/**\n * Generates a random vector with the given scale\n *\n * @param {vec2} out the receiving vector\n * @param {Number} [scale] Length of the resulting vector. If ommitted, a unit vector will be returned\n * @returns {vec2} out\n */\nvec2.random = function (out, scale) {\n scale = scale || 1.0;\n var r = GLMAT_RANDOM() * 2.0 * Math.PI;\n out[0] = Math.cos(r) * scale;\n out[1] = Math.sin(r) * scale;\n return out;\n};\n\n/**\n * Transforms the vec2 with a mat2\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a the vector to transform\n * @param {mat2} m matrix to transform with\n * @returns {vec2} out\n */\nvec2.transformMat2 = function(out, a, m) {\n var x = a[0],\n y = a[1];\n out[0] = m[0] * x + m[2] * y;\n out[1] = m[1] * x + m[3] * y;\n return out;\n};\n\n/**\n * Transforms the vec2 with a mat2d\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a the vector to transform\n * @param {mat2d} m matrix to transform with\n * @returns {vec2} out\n */\nvec2.transformMat2d = function(out, a, m) {\n var x = a[0],\n y = a[1];\n out[0] = m[0] * x + m[2] * y + m[4];\n out[1] = m[1] * x + m[3] * y + m[5];\n return out;\n};\n\n/**\n * Transforms the vec2 with a mat3\n * 3rd vector component is implicitly '1'\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a the vector to transform\n * @param {mat3} m matrix to transform with\n * @returns {vec2} out\n */\nvec2.transformMat3 = function(out, a, m) {\n var x = a[0],\n y = a[1];\n out[0] = m[0] * x + m[3] * y + m[6];\n out[1] = m[1] * x + m[4] * y + m[7];\n return out;\n};\n\n/**\n * Transforms the vec2 with a mat4\n * 3rd vector component is implicitly '0'\n * 4th vector component is implicitly '1'\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a the vector to transform\n * @param {mat4} m matrix to transform with\n * @returns {vec2} out\n */\nvec2.transformMat4 = function(out, a, m) {\n var x = a[0], \n y = a[1];\n out[0] = m[0] * x + m[4] * y + m[12];\n out[1] = m[1] * x + m[5] * y + m[13];\n return out;\n};\n\n/**\n * Perform some operation over an array of vec2s.\n *\n * @param {Array} a the array of vectors to iterate over\n * @param {Number} stride Number of elements between the start of each vec2. If 0 assumes tightly packed\n * @param {Number} offset Number of elements to skip at the beginning of the array\n * @param {Number} count Number of vec2s to iterate over. If 0 iterates over entire array\n * @param {Function} fn Function to call for each vector in the array\n * @param {Object} [arg] additional argument to pass to fn\n * @returns {Array} a\n * @function\n */\nvec2.forEach = (function() {\n var vec = vec2.create();\n\n return function(a, stride, offset, count, fn, arg) {\n var i, l;\n if(!stride) {\n stride = 2;\n }\n\n if(!offset) {\n offset = 0;\n }\n \n if(count) {\n l = Math.min((count * stride) + offset, a.length);\n } else {\n l = a.length;\n }\n\n for(i = offset; i < l; i += stride) {\n vec[0] = a[i]; vec[1] = a[i+1];\n fn(vec, vec, arg);\n a[i] = vec[0]; a[i+1] = vec[1];\n }\n \n return a;\n };\n})();\n\n/**\n * Returns a string representation of a vector\n *\n * @param {vec2} vec vector to represent as a string\n * @returns {String} string representation of the vector\n */\nvec2.str = function (a) {\n return 'vec2(' + a[0] + ', ' + a[1] + ')';\n};\n\nif(typeof(exports) !== 'undefined') {\n exports.vec2 = vec2;\n}\n;\n/* Copyright (c) 2013, Brandon Jones, Colin MacKenzie IV. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation \n and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE \nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */\n\n/**\n * @class 3 Dimensional Vector\n * @name vec3\n */\n\nvar vec3 = {};\n\n/**\n * Creates a new, empty vec3\n *\n * @returns {vec3} a new 3D vector\n */\nvec3.create = function() {\n var out = new GLMAT_ARRAY_TYPE(3);\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n return out;\n};\n\n/**\n * Creates a new vec3 initialized with values from an existing vector\n *\n * @param {vec3} a vector to clone\n * @returns {vec3} a new 3D vector\n */\nvec3.clone = function(a) {\n var out = new GLMAT_ARRAY_TYPE(3);\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n return out;\n};\n\n/**\n * Creates a new vec3 initialized with the given values\n *\n * @param {Number} x X component\n * @param {Number} y Y component\n * @param {Number} z Z component\n * @returns {vec3} a new 3D vector\n */\nvec3.fromValues = function(x, y, z) {\n var out = new GLMAT_ARRAY_TYPE(3);\n out[0] = x;\n out[1] = y;\n out[2] = z;\n return out;\n};\n\n/**\n * Copy the values from one vec3 to another\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the source vector\n * @returns {vec3} out\n */\nvec3.copy = function(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n return out;\n};\n\n/**\n * Set the components of a vec3 to the given values\n *\n * @param {vec3} out the receiving vector\n * @param {Number} x X component\n * @param {Number} y Y component\n * @param {Number} z Z component\n * @returns {vec3} out\n */\nvec3.set = function(out, x, y, z) {\n out[0] = x;\n out[1] = y;\n out[2] = z;\n return out;\n};\n\n/**\n * Adds two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the first operand\n * @param {vec3} b the second operand\n * @returns {vec3} out\n */\nvec3.add = function(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n out[2] = a[2] + b[2];\n return out;\n};\n\n/**\n * Subtracts vector b from vector a\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the first operand\n * @param {vec3} b the second operand\n * @returns {vec3} out\n */\nvec3.subtract = function(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n out[2] = a[2] - b[2];\n return out;\n};\n\n/**\n * Alias for {@link vec3.subtract}\n * @function\n */\nvec3.sub = vec3.subtract;\n\n/**\n * Multiplies two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the first operand\n * @param {vec3} b the second operand\n * @returns {vec3} out\n */\nvec3.multiply = function(out, a, b) {\n out[0] = a[0] * b[0];\n out[1] = a[1] * b[1];\n out[2] = a[2] * b[2];\n return out;\n};\n\n/**\n * Alias for {@link vec3.multiply}\n * @function\n */\nvec3.mul = vec3.multiply;\n\n/**\n * Divides two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the first operand\n * @param {vec3} b the second operand\n * @returns {vec3} out\n */\nvec3.divide = function(out, a, b) {\n out[0] = a[0] / b[0];\n out[1] = a[1] / b[1];\n out[2] = a[2] / b[2];\n return out;\n};\n\n/**\n * Alias for {@link vec3.divide}\n * @function\n */\nvec3.div = vec3.divide;\n\n/**\n * Returns the minimum of two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the first operand\n * @param {vec3} b the second operand\n * @returns {vec3} out\n */\nvec3.min = function(out, a, b) {\n out[0] = Math.min(a[0], b[0]);\n out[1] = Math.min(a[1], b[1]);\n out[2] = Math.min(a[2], b[2]);\n return out;\n};\n\n/**\n * Returns the maximum of two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the first operand\n * @param {vec3} b the second operand\n * @returns {vec3} out\n */\nvec3.max = function(out, a, b) {\n out[0] = Math.max(a[0], b[0]);\n out[1] = Math.max(a[1], b[1]);\n out[2] = Math.max(a[2], b[2]);\n return out;\n};\n\n/**\n * Scales a vec3 by a scalar number\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the vector to scale\n * @param {Number} b amount to scale the vector by\n * @returns {vec3} out\n */\nvec3.scale = function(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n out[2] = a[2] * b;\n return out;\n};\n\n/**\n * Adds two vec3's after scaling the second operand by a scalar value\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the first operand\n * @param {vec3} b the second operand\n * @param {Number} scale the amount to scale b by before adding\n * @returns {vec3} out\n */\nvec3.scaleAndAdd = function(out, a, b, scale) {\n out[0] = a[0] + (b[0] * scale);\n out[1] = a[1] + (b[1] * scale);\n out[2] = a[2] + (b[2] * scale);\n return out;\n};\n\n/**\n * Calculates the euclidian distance between two vec3's\n *\n * @param {vec3} a the first operand\n * @param {vec3} b the second operand\n * @returns {Number} distance between a and b\n */\nvec3.distance = function(a, b) {\n var x = b[0] - a[0],\n y = b[1] - a[1],\n z = b[2] - a[2];\n return Math.sqrt(x*x + y*y + z*z);\n};\n\n/**\n * Alias for {@link vec3.distance}\n * @function\n */\nvec3.dist = vec3.distance;\n\n/**\n * Calculates the squared euclidian distance between two vec3's\n *\n * @param {vec3} a the first operand\n * @param {vec3} b the second operand\n * @returns {Number} squared distance between a and b\n */\nvec3.squaredDistance = function(a, b) {\n var x = b[0] - a[0],\n y = b[1] - a[1],\n z = b[2] - a[2];\n return x*x + y*y + z*z;\n};\n\n/**\n * Alias for {@link vec3.squaredDistance}\n * @function\n */\nvec3.sqrDist = vec3.squaredDistance;\n\n/**\n * Calculates the length of a vec3\n *\n * @param {vec3} a vector to calculate length of\n * @returns {Number} length of a\n */\nvec3.length = function (a) {\n var x = a[0],\n y = a[1],\n z = a[2];\n return Math.sqrt(x*x + y*y + z*z);\n};\n\n/**\n * Alias for {@link vec3.length}\n * @function\n */\nvec3.len = vec3.length;\n\n/**\n * Calculates the squared length of a vec3\n *\n * @param {vec3} a vector to calculate squared length of\n * @returns {Number} squared length of a\n */\nvec3.squaredLength = function (a) {\n var x = a[0],\n y = a[1],\n z = a[2];\n return x*x + y*y + z*z;\n};\n\n/**\n * Alias for {@link vec3.squaredLength}\n * @function\n */\nvec3.sqrLen = vec3.squaredLength;\n\n/**\n * Negates the components of a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a vector to negate\n * @returns {vec3} out\n */\nvec3.negate = function(out, a) {\n out[0] = -a[0];\n out[1] = -a[1];\n out[2] = -a[2];\n return out;\n};\n\n/**\n * Returns the inverse of the components of a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a vector to invert\n * @returns {vec3} out\n */\nvec3.inverse = function(out, a) {\n out[0] = 1.0 / a[0];\n out[1] = 1.0 / a[1];\n out[2] = 1.0 / a[2];\n return out;\n};\n\n/**\n * Normalize a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a vector to normalize\n * @returns {vec3} out\n */\nvec3.normalize = function(out, a) {\n var x = a[0],\n y = a[1],\n z = a[2];\n var len = x*x + y*y + z*z;\n if (len > 0) {\n //TODO: evaluate use of glm_invsqrt here?\n len = 1 / Math.sqrt(len);\n out[0] = a[0] * len;\n out[1] = a[1] * len;\n out[2] = a[2] * len;\n }\n return out;\n};\n\n/**\n * Calculates the dot product of two vec3's\n *\n * @param {vec3} a the first operand\n * @param {vec3} b the second operand\n * @returns {Number} dot product of a and b\n */\nvec3.dot = function (a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n};\n\n/**\n * Computes the cross product of two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the first operand\n * @param {vec3} b the second operand\n * @returns {vec3} out\n */\nvec3.cross = function(out, a, b) {\n var ax = a[0], ay = a[1], az = a[2],\n bx = b[0], by = b[1], bz = b[2];\n\n out[0] = ay * bz - az * by;\n out[1] = az * bx - ax * bz;\n out[2] = ax * by - ay * bx;\n return out;\n};\n\n/**\n * Performs a linear interpolation between two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the first operand\n * @param {vec3} b the second operand\n * @param {Number} t interpolation amount between the two inputs\n * @returns {vec3} out\n */\nvec3.lerp = function (out, a, b, t) {\n var ax = a[0],\n ay = a[1],\n az = a[2];\n out[0] = ax + t * (b[0] - ax);\n out[1] = ay + t * (b[1] - ay);\n out[2] = az + t * (b[2] - az);\n return out;\n};\n\n/**\n * Generates a random vector with the given scale\n *\n * @param {vec3} out the receiving vector\n * @param {Number} [scale] Length of the resulting vector. If ommitted, a unit vector will be returned\n * @returns {vec3} out\n */\nvec3.random = function (out, scale) {\n scale = scale || 1.0;\n\n var r = GLMAT_RANDOM() * 2.0 * Math.PI;\n var z = (GLMAT_RANDOM() * 2.0) - 1.0;\n var zScale = Math.sqrt(1.0-z*z) * scale;\n\n out[0] = Math.cos(r) * zScale;\n out[1] = Math.sin(r) * zScale;\n out[2] = z * scale;\n return out;\n};\n\n/**\n * Transforms the vec3 with a mat4.\n * 4th vector component is implicitly '1'\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the vector to transform\n * @param {mat4} m matrix to transform with\n * @returns {vec3} out\n */\nvec3.transformMat4 = function(out, a, m) {\n var x = a[0], y = a[1], z = a[2],\n w = m[3] * x + m[7] * y + m[11] * z + m[15];\n w = w || 1.0;\n out[0] = (m[0] * x + m[4] * y + m[8] * z + m[12]) / w;\n out[1] = (m[1] * x + m[5] * y + m[9] * z + m[13]) / w;\n out[2] = (m[2] * x + m[6] * y + m[10] * z + m[14]) / w;\n return out;\n};\n\n/**\n * Transforms the vec3 with a mat3.\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the vector to transform\n * @param {mat4} m the 3x3 matrix to transform with\n * @returns {vec3} out\n */\nvec3.transformMat3 = function(out, a, m) {\n var x = a[0], y = a[1], z = a[2];\n out[0] = x * m[0] + y * m[3] + z * m[6];\n out[1] = x * m[1] + y * m[4] + z * m[7];\n out[2] = x * m[2] + y * m[5] + z * m[8];\n return out;\n};\n\n/**\n * Transforms the vec3 with a quat\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the vector to transform\n * @param {quat} q quaternion to transform with\n * @returns {vec3} out\n */\nvec3.transformQuat = function(out, a, q) {\n // benchmarks: http://jsperf.com/quaternion-transform-vec3-implementations\n\n var x = a[0], y = a[1], z = a[2],\n qx = q[0], qy = q[1], qz = q[2], qw = q[3],\n\n // calculate quat * vec\n ix = qw * x + qy * z - qz * y,\n iy = qw * y + qz * x - qx * z,\n iz = qw * z + qx * y - qy * x,\n iw = -qx * x - qy * y - qz * z;\n\n // calculate result * inverse quat\n out[0] = ix * qw + iw * -qx + iy * -qz - iz * -qy;\n out[1] = iy * qw + iw * -qy + iz * -qx - ix * -qz;\n out[2] = iz * qw + iw * -qz + ix * -qy - iy * -qx;\n return out;\n};\n\n/**\n * Rotate a 3D vector around the x-axis\n * @param {vec3} out The receiving vec3\n * @param {vec3} a The vec3 point to rotate\n * @param {vec3} b The origin of the rotation\n * @param {Number} c The angle of rotation\n * @returns {vec3} out\n */\nvec3.rotateX = function(out, a, b, c){\n var p = [], r=[];\n\t //Translate point to the origin\n\t p[0] = a[0] - b[0];\n\t p[1] = a[1] - b[1];\n \tp[2] = a[2] - b[2];\n\n\t //perform rotation\n\t r[0] = p[0];\n\t r[1] = p[1]*Math.cos(c) - p[2]*Math.sin(c);\n\t r[2] = p[1]*Math.sin(c) + p[2]*Math.cos(c);\n\n\t //translate to correct position\n\t out[0] = r[0] + b[0];\n\t out[1] = r[1] + b[1];\n\t out[2] = r[2] + b[2];\n\n \treturn out;\n};\n\n/**\n * Rotate a 3D vector around the y-axis\n * @param {vec3} out The receiving vec3\n * @param {vec3} a The vec3 point to rotate\n * @param {vec3} b The origin of the rotation\n * @param {Number} c The angle of rotation\n * @returns {vec3} out\n */\nvec3.rotateY = function(out, a, b, c){\n \tvar p = [], r=[];\n \t//Translate point to the origin\n \tp[0] = a[0] - b[0];\n \tp[1] = a[1] - b[1];\n \tp[2] = a[2] - b[2];\n \n \t//perform rotation\n \tr[0] = p[2]*Math.sin(c) + p[0]*Math.cos(c);\n \tr[1] = p[1];\n \tr[2] = p[2]*Math.cos(c) - p[0]*Math.sin(c);\n \n \t//translate to correct position\n \tout[0] = r[0] + b[0];\n \tout[1] = r[1] + b[1];\n \tout[2] = r[2] + b[2];\n \n \treturn out;\n};\n\n/**\n * Rotate a 3D vector around the z-axis\n * @param {vec3} out The receiving vec3\n * @param {vec3} a The vec3 point to rotate\n * @param {vec3} b The origin of the rotation\n * @param {Number} c The angle of rotation\n * @returns {vec3} out\n */\nvec3.rotateZ = function(out, a, b, c){\n \tvar p = [], r=[];\n \t//Translate point to the origin\n \tp[0] = a[0] - b[0];\n \tp[1] = a[1] - b[1];\n \tp[2] = a[2] - b[2];\n \n \t//perform rotation\n \tr[0] = p[0]*Math.cos(c) - p[1]*Math.sin(c);\n \tr[1] = p[0]*Math.sin(c) + p[1]*Math.cos(c);\n \tr[2] = p[2];\n \n \t//translate to correct position\n \tout[0] = r[0] + b[0];\n \tout[1] = r[1] + b[1];\n \tout[2] = r[2] + b[2];\n \n \treturn out;\n};\n\n/**\n * Perform some operation over an array of vec3s.\n *\n * @param {Array} a the array of vectors to iterate over\n * @param {Number} stride Number of elements between the start of each vec3. If 0 assumes tightly packed\n * @param {Number} offset Number of elements to skip at the beginning of the array\n * @param {Number} count Number of vec3s to iterate over. If 0 iterates over entire array\n * @param {Function} fn Function to call for each vector in the array\n * @param {Object} [arg] additional argument to pass to fn\n * @returns {Array} a\n * @function\n */\nvec3.forEach = (function() {\n var vec = vec3.create();\n\n return function(a, stride, offset, count, fn, arg) {\n var i, l;\n if(!stride) {\n stride = 3;\n }\n\n if(!offset) {\n offset = 0;\n }\n \n if(count) {\n l = Math.min((count * stride) + offset, a.length);\n } else {\n l = a.length;\n }\n\n for(i = offset; i < l; i += stride) {\n vec[0] = a[i]; vec[1] = a[i+1]; vec[2] = a[i+2];\n fn(vec, vec, arg);\n a[i] = vec[0]; a[i+1] = vec[1]; a[i+2] = vec[2];\n }\n \n return a;\n };\n})();\n\n/**\n * Get the angle between two 3D vectors\n * @param {vec3} a The first operand\n * @param {vec3} b The second operand\n * @returns {Number} The angle in radians\n */\nvec3.angle = function(a, b) {\n \n var tempA = vec3.fromValues(a[0], a[1], a[2]);\n var tempB = vec3.fromValues(b[0], b[1], b[2]);\n \n vec3.normalize(tempA, tempA);\n vec3.normalize(tempB, tempB);\n \n var cosine = vec3.dot(tempA, tempB);\n\n if(cosine > 1.0){\n return 0;\n } else {\n return Math.acos(cosine);\n } \n};\n\n/**\n * Returns a string representation of a vector\n *\n * @param {vec3} vec vector to represent as a string\n * @returns {String} string representation of the vector\n */\nvec3.str = function (a) {\n return 'vec3(' + a[0] + ', ' + a[1] + ', ' + a[2] + ')';\n};\n\nif(typeof(exports) !== 'undefined') {\n exports.vec3 = vec3;\n}\n;\n/* Copyright (c) 2013, Brandon Jones, Colin MacKenzie IV. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation \n and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE \nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */\n\n/**\n * @class 4 Dimensional Vector\n * @name vec4\n */\n\nvar vec4 = {};\n\n/**\n * Creates a new, empty vec4\n *\n * @returns {vec4} a new 4D vector\n */\nvec4.create = function() {\n var out = new GLMAT_ARRAY_TYPE(4);\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n return out;\n};\n\n/**\n * Creates a new vec4 initialized with values from an existing vector\n *\n * @param {vec4} a vector to clone\n * @returns {vec4} a new 4D vector\n */\nvec4.clone = function(a) {\n var out = new GLMAT_ARRAY_TYPE(4);\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n return out;\n};\n\n/**\n * Creates a new vec4 initialized with the given values\n *\n * @param {Number} x X component\n * @param {Number} y Y component\n * @param {Number} z Z component\n * @param {Number} w W component\n * @returns {vec4} a new 4D vector\n */\nvec4.fromValues = function(x, y, z, w) {\n var out = new GLMAT_ARRAY_TYPE(4);\n out[0] = x;\n out[1] = y;\n out[2] = z;\n out[3] = w;\n return out;\n};\n\n/**\n * Copy the values from one vec4 to another\n *\n * @param {vec4} out the receiving vector\n * @param {vec4} a the source vector\n * @returns {vec4} out\n */\nvec4.copy = function(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n return out;\n};\n\n/**\n * Set the components of a vec4 to the given values\n *\n * @param {vec4} out the receiving vector\n * @param {Number} x X component\n * @param {Number} y Y component\n * @param {Number} z Z component\n * @param {Number} w W component\n * @returns {vec4} out\n */\nvec4.set = function(out, x, y, z, w) {\n out[0] = x;\n out[1] = y;\n out[2] = z;\n out[3] = w;\n return out;\n};\n\n/**\n * Adds two vec4's\n *\n * @param {vec4} out the receiving vector\n * @param {vec4} a the first operand\n * @param {vec4} b the second operand\n * @returns {vec4} out\n */\nvec4.add = function(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n out[2] = a[2] + b[2];\n out[3] = a[3] + b[3];\n return out;\n};\n\n/**\n * Subtracts vector b from vector a\n *\n * @param {vec4} out the receiving vector\n * @param {vec4} a the first operand\n * @param {vec4} b the second operand\n * @returns {vec4} out\n */\nvec4.subtract = function(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n out[2] = a[2] - b[2];\n out[3] = a[3] - b[3];\n return out;\n};\n\n/**\n * Alias for {@link vec4.subtract}\n * @function\n */\nvec4.sub = vec4.subtract;\n\n/**\n * Multiplies two vec4's\n *\n * @param {vec4} out the receiving vector\n * @param {vec4} a the first operand\n * @param {vec4} b the second operand\n * @returns {vec4} out\n */\nvec4.multiply = function(out, a, b) {\n out[0] = a[0] * b[0];\n out[1] = a[1] * b[1];\n out[2] = a[2] * b[2];\n out[3] = a[3] * b[3];\n return out;\n};\n\n/**\n * Alias for {@link vec4.multiply}\n * @function\n */\nvec4.mul = vec4.multiply;\n\n/**\n * Divides two vec4's\n *\n * @param {vec4} out the receiving vector\n * @param {vec4} a the first operand\n * @param {vec4} b the second operand\n * @returns {vec4} out\n */\nvec4.divide = function(out, a, b) {\n out[0] = a[0] / b[0];\n out[1] = a[1] / b[1];\n out[2] = a[2] / b[2];\n out[3] = a[3] / b[3];\n return out;\n};\n\n/**\n * Alias for {@link vec4.divide}\n * @function\n */\nvec4.div = vec4.divide;\n\n/**\n * Returns the minimum of two vec4's\n *\n * @param {vec4} out the receiving vector\n * @param {vec4} a the first operand\n * @param {vec4} b the second operand\n * @returns {vec4} out\n */\nvec4.min = function(out, a, b) {\n out[0] = Math.min(a[0], b[0]);\n out[1] = Math.min(a[1], b[1]);\n out[2] = Math.min(a[2], b[2]);\n out[3] = Math.min(a[3], b[3]);\n return out;\n};\n\n/**\n * Returns the maximum of two vec4's\n *\n * @param {vec4} out the receiving vector\n * @param {vec4} a the first operand\n * @param {vec4} b the second operand\n * @returns {vec4} out\n */\nvec4.max = function(out, a, b) {\n out[0] = Math.max(a[0], b[0]);\n out[1] = Math.max(a[1], b[1]);\n out[2] = Math.max(a[2], b[2]);\n out[3] = Math.max(a[3], b[3]);\n return out;\n};\n\n/**\n * Scales a vec4 by a scalar number\n *\n * @param {vec4} out the receiving vector\n * @param {vec4} a the vector to scale\n * @param {Number} b amount to scale the vector by\n * @returns {vec4} out\n */\nvec4.scale = function(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n out[2] = a[2] * b;\n out[3] = a[3] * b;\n return out;\n};\n\n/**\n * Adds two vec4's after scaling the second operand by a scalar value\n *\n * @param {vec4} out the receiving vector\n * @param {vec4} a the first operand\n * @param {vec4} b the second operand\n * @param {Number} scale the amount to scale b by before adding\n * @returns {vec4} out\n */\nvec4.scaleAndAdd = function(out, a, b, scale) {\n out[0] = a[0] + (b[0] * scale);\n out[1] = a[1] + (b[1] * scale);\n out[2] = a[2] + (b[2] * scale);\n out[3] = a[3] + (b[3] * scale);\n return out;\n};\n\n/**\n * Calculates the euclidian distance between two vec4's\n *\n * @param {vec4} a the first operand\n * @param {vec4} b the second operand\n * @returns {Number} distance between a and b\n */\nvec4.distance = function(a, b) {\n var x = b[0] - a[0],\n y = b[1] - a[1],\n z = b[2] - a[2],\n w = b[3] - a[3];\n return Math.sqrt(x*x + y*y + z*z + w*w);\n};\n\n/**\n * Alias for {@link vec4.distance}\n * @function\n */\nvec4.dist = vec4.distance;\n\n/**\n * Calculates the squared euclidian distance between two vec4's\n *\n * @param {vec4} a the first operand\n * @param {vec4} b the second operand\n * @returns {Number} squared distance between a and b\n */\nvec4.squaredDistance = function(a, b) {\n var x = b[0] - a[0],\n y = b[1] - a[1],\n z = b[2] - a[2],\n w = b[3] - a[3];\n return x*x + y*y + z*z + w*w;\n};\n\n/**\n * Alias for {@link vec4.squaredDistance}\n * @function\n */\nvec4.sqrDist = vec4.squaredDistance;\n\n/**\n * Calculates the length of a vec4\n *\n * @param {vec4} a vector to calculate length of\n * @returns {Number} length of a\n */\nvec4.length = function (a) {\n var x = a[0],\n y = a[1],\n z = a[2],\n w = a[3];\n return Math.sqrt(x*x + y*y + z*z + w*w);\n};\n\n/**\n * Alias for {@link vec4.length}\n * @function\n */\nvec4.len = vec4.length;\n\n/**\n * Calculates the squared length of a vec4\n *\n * @param {vec4} a vector to calculate squared length of\n * @returns {Number} squared length of a\n */\nvec4.squaredLength = function (a) {\n var x = a[0],\n y = a[1],\n z = a[2],\n w = a[3];\n return x*x + y*y + z*z + w*w;\n};\n\n/**\n * Alias for {@link vec4.squaredLength}\n * @function\n */\nvec4.sqrLen = vec4.squaredLength;\n\n/**\n * Negates the components of a vec4\n *\n * @param {vec4} out the receiving vector\n * @param {vec4} a vector to negate\n * @returns {vec4} out\n */\nvec4.negate = function(out, a) {\n out[0] = -a[0];\n out[1] = -a[1];\n out[2] = -a[2];\n out[3] = -a[3];\n return out;\n};\n\n/**\n * Returns the inverse of the components of a vec4\n *\n * @param {vec4} out the receiving vector\n * @param {vec4} a vector to invert\n * @returns {vec4} out\n */\nvec4.inverse = function(out, a) {\n out[0] = 1.0 / a[0];\n out[1] = 1.0 / a[1];\n out[2] = 1.0 / a[2];\n out[3] = 1.0 / a[3];\n return out;\n};\n\n/**\n * Normalize a vec4\n *\n * @param {vec4} out the receiving vector\n * @param {vec4} a vector to normalize\n * @returns {vec4} out\n */\nvec4.normalize = function(out, a) {\n var x = a[0],\n y = a[1],\n z = a[2],\n w = a[3];\n var len = x*x + y*y + z*z + w*w;\n if (len > 0) {\n len = 1 / Math.sqrt(len);\n out[0] = a[0] * len;\n out[1] = a[1] * len;\n out[2] = a[2] * len;\n out[3] = a[3] * len;\n }\n return out;\n};\n\n/**\n * Calculates the dot product of two vec4's\n *\n * @param {vec4} a the first operand\n * @param {vec4} b the second operand\n * @returns {Number} dot product of a and b\n */\nvec4.dot = function (a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];\n};\n\n/**\n * Performs a linear interpolation between two vec4's\n *\n * @param {vec4} out the receiving vector\n * @param {vec4} a the first operand\n * @param {vec4} b the second operand\n * @param {Number} t interpolation amount between the two inputs\n * @returns {vec4} out\n */\nvec4.lerp = function (out, a, b, t) {\n var ax = a[0],\n ay = a[1],\n az = a[2],\n aw = a[3];\n out[0] = ax + t * (b[0] - ax);\n out[1] = ay + t * (b[1] - ay);\n out[2] = az + t * (b[2] - az);\n out[3] = aw + t * (b[3] - aw);\n return out;\n};\n\n/**\n * Generates a random vector with the given scale\n *\n * @param {vec4} out the receiving vector\n * @param {Number} [scale] Length of the resulting vector. If ommitted, a unit vector will be returned\n * @returns {vec4} out\n */\nvec4.random = function (out, scale) {\n scale = scale || 1.0;\n\n //TODO: This is a pretty awful way of doing this. Find something better.\n out[0] = GLMAT_RANDOM();\n out[1] = GLMAT_RANDOM();\n out[2] = GLMAT_RANDOM();\n out[3] = GLMAT_RANDOM();\n vec4.normalize(out, out);\n vec4.scale(out, out, scale);\n return out;\n};\n\n/**\n * Transforms the vec4 with a mat4.\n *\n * @param {vec4} out the receiving vector\n * @param {vec4} a the vector to transform\n * @param {mat4} m matrix to transform with\n * @returns {vec4} out\n */\nvec4.transformMat4 = function(out, a, m) {\n var x = a[0], y = a[1], z = a[2], w = a[3];\n out[0] = m[0] * x + m[4] * y + m[8] * z + m[12] * w;\n out[1] = m[1] * x + m[5] * y + m[9] * z + m[13] * w;\n out[2] = m[2] * x + m[6] * y + m[10] * z + m[14] * w;\n out[3] = m[3] * x + m[7] * y + m[11] * z + m[15] * w;\n return out;\n};\n\n/**\n * Transforms the vec4 with a quat\n *\n * @param {vec4} out the receiving vector\n * @param {vec4} a the vector to transform\n * @param {quat} q quaternion to transform with\n * @returns {vec4} out\n */\nvec4.transformQuat = function(out, a, q) {\n var x = a[0], y = a[1], z = a[2],\n qx = q[0], qy = q[1], qz = q[2], qw = q[3],\n\n // calculate quat * vec\n ix = qw * x + qy * z - qz * y,\n iy = qw * y + qz * x - qx * z,\n iz = qw * z + qx * y - qy * x,\n iw = -qx * x - qy * y - qz * z;\n\n // calculate result * inverse quat\n out[0] = ix * qw + iw * -qx + iy * -qz - iz * -qy;\n out[1] = iy * qw + iw * -qy + iz * -qx - ix * -qz;\n out[2] = iz * qw + iw * -qz + ix * -qy - iy * -qx;\n return out;\n};\n\n/**\n * Perform some operation over an array of vec4s.\n *\n * @param {Array} a the array of vectors to iterate over\n * @param {Number} stride Number of elements between the start of each vec4. If 0 assumes tightly packed\n * @param {Number} offset Number of elements to skip at the beginning of the array\n * @param {Number} count Number of vec4s to iterate over. If 0 iterates over entire array\n * @param {Function} fn Function to call for each vector in the array\n * @param {Object} [arg] additional argument to pass to fn\n * @returns {Array} a\n * @function\n */\nvec4.forEach = (function() {\n var vec = vec4.create();\n\n return function(a, stride, offset, count, fn, arg) {\n var i, l;\n if(!stride) {\n stride = 4;\n }\n\n if(!offset) {\n offset = 0;\n }\n \n if(count) {\n l = Math.min((count * stride) + offset, a.length);\n } else {\n l = a.length;\n }\n\n for(i = offset; i < l; i += stride) {\n vec[0] = a[i]; vec[1] = a[i+1]; vec[2] = a[i+2]; vec[3] = a[i+3];\n fn(vec, vec, arg);\n a[i] = vec[0]; a[i+1] = vec[1]; a[i+2] = vec[2]; a[i+3] = vec[3];\n }\n \n return a;\n };\n})();\n\n/**\n * Returns a string representation of a vector\n *\n * @param {vec4} vec vector to represent as a string\n * @returns {String} string representation of the vector\n */\nvec4.str = function (a) {\n return 'vec4(' + a[0] + ', ' + a[1] + ', ' + a[2] + ', ' + a[3] + ')';\n};\n\nif(typeof(exports) !== 'undefined') {\n exports.vec4 = vec4;\n}\n;\n/* Copyright (c) 2013, Brandon Jones, Colin MacKenzie IV. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation \n and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE \nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */\n\n/**\n * @class 2x2 Matrix\n * @name mat2\n */\n\nvar mat2 = {};\n\n/**\n * Creates a new identity mat2\n *\n * @returns {mat2} a new 2x2 matrix\n */\nmat2.create = function() {\n var out = new GLMAT_ARRAY_TYPE(4);\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 1;\n return out;\n};\n\n/**\n * Creates a new mat2 initialized with values from an existing matrix\n *\n * @param {mat2} a matrix to clone\n * @returns {mat2} a new 2x2 matrix\n */\nmat2.clone = function(a) {\n var out = new GLMAT_ARRAY_TYPE(4);\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n return out;\n};\n\n/**\n * Copy the values from one mat2 to another\n *\n * @param {mat2} out the receiving matrix\n * @param {mat2} a the source matrix\n * @returns {mat2} out\n */\nmat2.copy = function(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n return out;\n};\n\n/**\n * Set a mat2 to the identity matrix\n *\n * @param {mat2} out the receiving matrix\n * @returns {mat2} out\n */\nmat2.identity = function(out) {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 1;\n return out;\n};\n\n/**\n * Transpose the values of a mat2\n *\n * @param {mat2} out the receiving matrix\n * @param {mat2} a the source matrix\n * @returns {mat2} out\n */\nmat2.transpose = function(out, a) {\n // If we are transposing ourselves we can skip a few steps but have to cache some values\n if (out === a) {\n var a1 = a[1];\n out[1] = a[2];\n out[2] = a1;\n } else {\n out[0] = a[0];\n out[1] = a[2];\n out[2] = a[1];\n out[3] = a[3];\n }\n \n return out;\n};\n\n/**\n * Inverts a mat2\n *\n * @param {mat2} out the receiving matrix\n * @param {mat2} a the source matrix\n * @returns {mat2} out\n */\nmat2.invert = function(out, a) {\n var a0 = a[0], a1 = a[1], a2 = a[2], a3 = a[3],\n\n // Calculate the determinant\n det = a0 * a3 - a2 * a1;\n\n if (!det) {\n return null;\n }\n det = 1.0 / det;\n \n out[0] = a3 * det;\n out[1] = -a1 * det;\n out[2] = -a2 * det;\n out[3] = a0 * det;\n\n return out;\n};\n\n/**\n * Calculates the adjugate of a mat2\n *\n * @param {mat2} out the receiving matrix\n * @param {mat2} a the source matrix\n * @returns {mat2} out\n */\nmat2.adjoint = function(out, a) {\n // Caching this value is nessecary if out == a\n var a0 = a[0];\n out[0] = a[3];\n out[1] = -a[1];\n out[2] = -a[2];\n out[3] = a0;\n\n return out;\n};\n\n/**\n * Calculates the determinant of a mat2\n *\n * @param {mat2} a the source matrix\n * @returns {Number} determinant of a\n */\nmat2.determinant = function (a) {\n return a[0] * a[3] - a[2] * a[1];\n};\n\n/**\n * Multiplies two mat2's\n *\n * @param {mat2} out the receiving matrix\n * @param {mat2} a the first operand\n * @param {mat2} b the second operand\n * @returns {mat2} out\n */\nmat2.multiply = function (out, a, b) {\n var a0 = a[0], a1 = a[1], a2 = a[2], a3 = a[3];\n var b0 = b[0], b1 = b[1], b2 = b[2], b3 = b[3];\n out[0] = a0 * b0 + a2 * b1;\n out[1] = a1 * b0 + a3 * b1;\n out[2] = a0 * b2 + a2 * b3;\n out[3] = a1 * b2 + a3 * b3;\n return out;\n};\n\n/**\n * Alias for {@link mat2.multiply}\n * @function\n */\nmat2.mul = mat2.multiply;\n\n/**\n * Rotates a mat2 by the given angle\n *\n * @param {mat2} out the receiving matrix\n * @param {mat2} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat2} out\n */\nmat2.rotate = function (out, a, rad) {\n var a0 = a[0], a1 = a[1], a2 = a[2], a3 = a[3],\n s = Math.sin(rad),\n c = Math.cos(rad);\n out[0] = a0 * c + a2 * s;\n out[1] = a1 * c + a3 * s;\n out[2] = a0 * -s + a2 * c;\n out[3] = a1 * -s + a3 * c;\n return out;\n};\n\n/**\n * Scales the mat2 by the dimensions in the given vec2\n *\n * @param {mat2} out the receiving matrix\n * @param {mat2} a the matrix to rotate\n * @param {vec2} v the vec2 to scale the matrix by\n * @returns {mat2} out\n **/\nmat2.scale = function(out, a, v) {\n var a0 = a[0], a1 = a[1], a2 = a[2], a3 = a[3],\n v0 = v[0], v1 = v[1];\n out[0] = a0 * v0;\n out[1] = a1 * v0;\n out[2] = a2 * v1;\n out[3] = a3 * v1;\n return out;\n};\n\n/**\n * Returns a string representation of a mat2\n *\n * @param {mat2} mat matrix to represent as a string\n * @returns {String} string representation of the matrix\n */\nmat2.str = function (a) {\n return 'mat2(' + a[0] + ', ' + a[1] + ', ' + a[2] + ', ' + a[3] + ')';\n};\n\n/**\n * Returns Frobenius norm of a mat2\n *\n * @param {mat2} a the matrix to calculate Frobenius norm of\n * @returns {Number} Frobenius norm\n */\nmat2.frob = function (a) {\n return(Math.sqrt(Math.pow(a[0], 2) + Math.pow(a[1], 2) + Math.pow(a[2], 2) + Math.pow(a[3], 2)))\n};\n\n/**\n * Returns L, D and U matrices (Lower triangular, Diagonal and Upper triangular) by factorizing the input matrix\n * @param {mat2} L the lower triangular matrix \n * @param {mat2} D the diagonal matrix \n * @param {mat2} U the upper triangular matrix \n * @param {mat2} a the input matrix to factorize\n */\n\nmat2.LDU = function (L, D, U, a) { \n L[2] = a[2]/a[0]; \n U[0] = a[0]; \n U[1] = a[1]; \n U[3] = a[3] - L[2] * U[1]; \n return [L, D, U]; \n}; \n\nif(typeof(exports) !== 'undefined') {\n exports.mat2 = mat2;\n}\n;\n/* Copyright (c) 2013, Brandon Jones, Colin MacKenzie IV. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation \n and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE \nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */\n\n/**\n * @class 2x3 Matrix\n * @name mat2d\n * \n * @description \n * A mat2d contains six elements defined as:\n *
\n * [a, c, tx,\n *  b, d, ty]\n * 
\n * This is a short form for the 3x3 matrix:\n *
\n * [a, c, tx,\n *  b, d, ty,\n *  0, 0, 1]\n * 
\n * The last row is ignored so the array is shorter and operations are faster.\n */\n\nvar mat2d = {};\n\n/**\n * Creates a new identity mat2d\n *\n * @returns {mat2d} a new 2x3 matrix\n */\nmat2d.create = function() {\n var out = new GLMAT_ARRAY_TYPE(6);\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 1;\n out[4] = 0;\n out[5] = 0;\n return out;\n};\n\n/**\n * Creates a new mat2d initialized with values from an existing matrix\n *\n * @param {mat2d} a matrix to clone\n * @returns {mat2d} a new 2x3 matrix\n */\nmat2d.clone = function(a) {\n var out = new GLMAT_ARRAY_TYPE(6);\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[4] = a[4];\n out[5] = a[5];\n return out;\n};\n\n/**\n * Copy the values from one mat2d to another\n *\n * @param {mat2d} out the receiving matrix\n * @param {mat2d} a the source matrix\n * @returns {mat2d} out\n */\nmat2d.copy = function(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[4] = a[4];\n out[5] = a[5];\n return out;\n};\n\n/**\n * Set a mat2d to the identity matrix\n *\n * @param {mat2d} out the receiving matrix\n * @returns {mat2d} out\n */\nmat2d.identity = function(out) {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 1;\n out[4] = 0;\n out[5] = 0;\n return out;\n};\n\n/**\n * Inverts a mat2d\n *\n * @param {mat2d} out the receiving matrix\n * @param {mat2d} a the source matrix\n * @returns {mat2d} out\n */\nmat2d.invert = function(out, a) {\n var aa = a[0], ab = a[1], ac = a[2], ad = a[3],\n atx = a[4], aty = a[5];\n\n var det = aa * ad - ab * ac;\n if(!det){\n return null;\n }\n det = 1.0 / det;\n\n out[0] = ad * det;\n out[1] = -ab * det;\n out[2] = -ac * det;\n out[3] = aa * det;\n out[4] = (ac * aty - ad * atx) * det;\n out[5] = (ab * atx - aa * aty) * det;\n return out;\n};\n\n/**\n * Calculates the determinant of a mat2d\n *\n * @param {mat2d} a the source matrix\n * @returns {Number} determinant of a\n */\nmat2d.determinant = function (a) {\n return a[0] * a[3] - a[1] * a[2];\n};\n\n/**\n * Multiplies two mat2d's\n *\n * @param {mat2d} out the receiving matrix\n * @param {mat2d} a the first operand\n * @param {mat2d} b the second operand\n * @returns {mat2d} out\n */\nmat2d.multiply = function (out, a, b) {\n var a0 = a[0], a1 = a[1], a2 = a[2], a3 = a[3], a4 = a[4], a5 = a[5],\n b0 = b[0], b1 = b[1], b2 = b[2], b3 = b[3], b4 = b[4], b5 = b[5];\n out[0] = a0 * b0 + a2 * b1;\n out[1] = a1 * b0 + a3 * b1;\n out[2] = a0 * b2 + a2 * b3;\n out[3] = a1 * b2 + a3 * b3;\n out[4] = a0 * b4 + a2 * b5 + a4;\n out[5] = a1 * b4 + a3 * b5 + a5;\n return out;\n};\n\n/**\n * Alias for {@link mat2d.multiply}\n * @function\n */\nmat2d.mul = mat2d.multiply;\n\n\n/**\n * Rotates a mat2d by the given angle\n *\n * @param {mat2d} out the receiving matrix\n * @param {mat2d} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat2d} out\n */\nmat2d.rotate = function (out, a, rad) {\n var a0 = a[0], a1 = a[1], a2 = a[2], a3 = a[3], a4 = a[4], a5 = a[5],\n s = Math.sin(rad),\n c = Math.cos(rad);\n out[0] = a0 * c + a2 * s;\n out[1] = a1 * c + a3 * s;\n out[2] = a0 * -s + a2 * c;\n out[3] = a1 * -s + a3 * c;\n out[4] = a4;\n out[5] = a5;\n return out;\n};\n\n/**\n * Scales the mat2d by the dimensions in the given vec2\n *\n * @param {mat2d} out the receiving matrix\n * @param {mat2d} a the matrix to translate\n * @param {vec2} v the vec2 to scale the matrix by\n * @returns {mat2d} out\n **/\nmat2d.scale = function(out, a, v) {\n var a0 = a[0], a1 = a[1], a2 = a[2], a3 = a[3], a4 = a[4], a5 = a[5],\n v0 = v[0], v1 = v[1];\n out[0] = a0 * v0;\n out[1] = a1 * v0;\n out[2] = a2 * v1;\n out[3] = a3 * v1;\n out[4] = a4;\n out[5] = a5;\n return out;\n};\n\n/**\n * Translates the mat2d by the dimensions in the given vec2\n *\n * @param {mat2d} out the receiving matrix\n * @param {mat2d} a the matrix to translate\n * @param {vec2} v the vec2 to translate the matrix by\n * @returns {mat2d} out\n **/\nmat2d.translate = function(out, a, v) {\n var a0 = a[0], a1 = a[1], a2 = a[2], a3 = a[3], a4 = a[4], a5 = a[5],\n v0 = v[0], v1 = v[1];\n out[0] = a0;\n out[1] = a1;\n out[2] = a2;\n out[3] = a3;\n out[4] = a0 * v0 + a2 * v1 + a4;\n out[5] = a1 * v0 + a3 * v1 + a5;\n return out;\n};\n\n/**\n * Returns a string representation of a mat2d\n *\n * @param {mat2d} a matrix to represent as a string\n * @returns {String} string representation of the matrix\n */\nmat2d.str = function (a) {\n return 'mat2d(' + a[0] + ', ' + a[1] + ', ' + a[2] + ', ' + \n a[3] + ', ' + a[4] + ', ' + a[5] + ')';\n};\n\n/**\n * Returns Frobenius norm of a mat2d\n *\n * @param {mat2d} a the matrix to calculate Frobenius norm of\n * @returns {Number} Frobenius norm\n */\nmat2d.frob = function (a) { \n return(Math.sqrt(Math.pow(a[0], 2) + Math.pow(a[1], 2) + Math.pow(a[2], 2) + Math.pow(a[3], 2) + Math.pow(a[4], 2) + Math.pow(a[5], 2) + 1))\n}; \n\nif(typeof(exports) !== 'undefined') {\n exports.mat2d = mat2d;\n}\n;\n/* Copyright (c) 2013, Brandon Jones, Colin MacKenzie IV. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation \n and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE \nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */\n\n/**\n * @class 3x3 Matrix\n * @name mat3\n */\n\nvar mat3 = {};\n\n/**\n * Creates a new identity mat3\n *\n * @returns {mat3} a new 3x3 matrix\n */\nmat3.create = function() {\n var out = new GLMAT_ARRAY_TYPE(9);\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 1;\n out[5] = 0;\n out[6] = 0;\n out[7] = 0;\n out[8] = 1;\n return out;\n};\n\n/**\n * Copies the upper-left 3x3 values into the given mat3.\n *\n * @param {mat3} out the receiving 3x3 matrix\n * @param {mat4} a the source 4x4 matrix\n * @returns {mat3} out\n */\nmat3.fromMat4 = function(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[4];\n out[4] = a[5];\n out[5] = a[6];\n out[6] = a[8];\n out[7] = a[9];\n out[8] = a[10];\n return out;\n};\n\n/**\n * Creates a new mat3 initialized with values from an existing matrix\n *\n * @param {mat3} a matrix to clone\n * @returns {mat3} a new 3x3 matrix\n */\nmat3.clone = function(a) {\n var out = new GLMAT_ARRAY_TYPE(9);\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n return out;\n};\n\n/**\n * Copy the values from one mat3 to another\n *\n * @param {mat3} out the receiving matrix\n * @param {mat3} a the source matrix\n * @returns {mat3} out\n */\nmat3.copy = function(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n return out;\n};\n\n/**\n * Set a mat3 to the identity matrix\n *\n * @param {mat3} out the receiving matrix\n * @returns {mat3} out\n */\nmat3.identity = function(out) {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 1;\n out[5] = 0;\n out[6] = 0;\n out[7] = 0;\n out[8] = 1;\n return out;\n};\n\n/**\n * Transpose the values of a mat3\n *\n * @param {mat3} out the receiving matrix\n * @param {mat3} a the source matrix\n * @returns {mat3} out\n */\nmat3.transpose = function(out, a) {\n // If we are transposing ourselves we can skip a few steps but have to cache some values\n if (out === a) {\n var a01 = a[1], a02 = a[2], a12 = a[5];\n out[1] = a[3];\n out[2] = a[6];\n out[3] = a01;\n out[5] = a[7];\n out[6] = a02;\n out[7] = a12;\n } else {\n out[0] = a[0];\n out[1] = a[3];\n out[2] = a[6];\n out[3] = a[1];\n out[4] = a[4];\n out[5] = a[7];\n out[6] = a[2];\n out[7] = a[5];\n out[8] = a[8];\n }\n \n return out;\n};\n\n/**\n * Inverts a mat3\n *\n * @param {mat3} out the receiving matrix\n * @param {mat3} a the source matrix\n * @returns {mat3} out\n */\nmat3.invert = function(out, a) {\n var a00 = a[0], a01 = a[1], a02 = a[2],\n a10 = a[3], a11 = a[4], a12 = a[5],\n a20 = a[6], a21 = a[7], a22 = a[8],\n\n b01 = a22 * a11 - a12 * a21,\n b11 = -a22 * a10 + a12 * a20,\n b21 = a21 * a10 - a11 * a20,\n\n // Calculate the determinant\n det = a00 * b01 + a01 * b11 + a02 * b21;\n\n if (!det) { \n return null; \n }\n det = 1.0 / det;\n\n out[0] = b01 * det;\n out[1] = (-a22 * a01 + a02 * a21) * det;\n out[2] = (a12 * a01 - a02 * a11) * det;\n out[3] = b11 * det;\n out[4] = (a22 * a00 - a02 * a20) * det;\n out[5] = (-a12 * a00 + a02 * a10) * det;\n out[6] = b21 * det;\n out[7] = (-a21 * a00 + a01 * a20) * det;\n out[8] = (a11 * a00 - a01 * a10) * det;\n return out;\n};\n\n/**\n * Calculates the adjugate of a mat3\n *\n * @param {mat3} out the receiving matrix\n * @param {mat3} a the source matrix\n * @returns {mat3} out\n */\nmat3.adjoint = function(out, a) {\n var a00 = a[0], a01 = a[1], a02 = a[2],\n a10 = a[3], a11 = a[4], a12 = a[5],\n a20 = a[6], a21 = a[7], a22 = a[8];\n\n out[0] = (a11 * a22 - a12 * a21);\n out[1] = (a02 * a21 - a01 * a22);\n out[2] = (a01 * a12 - a02 * a11);\n out[3] = (a12 * a20 - a10 * a22);\n out[4] = (a00 * a22 - a02 * a20);\n out[5] = (a02 * a10 - a00 * a12);\n out[6] = (a10 * a21 - a11 * a20);\n out[7] = (a01 * a20 - a00 * a21);\n out[8] = (a00 * a11 - a01 * a10);\n return out;\n};\n\n/**\n * Calculates the determinant of a mat3\n *\n * @param {mat3} a the source matrix\n * @returns {Number} determinant of a\n */\nmat3.determinant = function (a) {\n var a00 = a[0], a01 = a[1], a02 = a[2],\n a10 = a[3], a11 = a[4], a12 = a[5],\n a20 = a[6], a21 = a[7], a22 = a[8];\n\n return a00 * (a22 * a11 - a12 * a21) + a01 * (-a22 * a10 + a12 * a20) + a02 * (a21 * a10 - a11 * a20);\n};\n\n/**\n * Multiplies two mat3's\n *\n * @param {mat3} out the receiving matrix\n * @param {mat3} a the first operand\n * @param {mat3} b the second operand\n * @returns {mat3} out\n */\nmat3.multiply = function (out, a, b) {\n var a00 = a[0], a01 = a[1], a02 = a[2],\n a10 = a[3], a11 = a[4], a12 = a[5],\n a20 = a[6], a21 = a[7], a22 = a[8],\n\n b00 = b[0], b01 = b[1], b02 = b[2],\n b10 = b[3], b11 = b[4], b12 = b[5],\n b20 = b[6], b21 = b[7], b22 = b[8];\n\n out[0] = b00 * a00 + b01 * a10 + b02 * a20;\n out[1] = b00 * a01 + b01 * a11 + b02 * a21;\n out[2] = b00 * a02 + b01 * a12 + b02 * a22;\n\n out[3] = b10 * a00 + b11 * a10 + b12 * a20;\n out[4] = b10 * a01 + b11 * a11 + b12 * a21;\n out[5] = b10 * a02 + b11 * a12 + b12 * a22;\n\n out[6] = b20 * a00 + b21 * a10 + b22 * a20;\n out[7] = b20 * a01 + b21 * a11 + b22 * a21;\n out[8] = b20 * a02 + b21 * a12 + b22 * a22;\n return out;\n};\n\n/**\n * Alias for {@link mat3.multiply}\n * @function\n */\nmat3.mul = mat3.multiply;\n\n/**\n * Translate a mat3 by the given vector\n *\n * @param {mat3} out the receiving matrix\n * @param {mat3} a the matrix to translate\n * @param {vec2} v vector to translate by\n * @returns {mat3} out\n */\nmat3.translate = function(out, a, v) {\n var a00 = a[0], a01 = a[1], a02 = a[2],\n a10 = a[3], a11 = a[4], a12 = a[5],\n a20 = a[6], a21 = a[7], a22 = a[8],\n x = v[0], y = v[1];\n\n out[0] = a00;\n out[1] = a01;\n out[2] = a02;\n\n out[3] = a10;\n out[4] = a11;\n out[5] = a12;\n\n out[6] = x * a00 + y * a10 + a20;\n out[7] = x * a01 + y * a11 + a21;\n out[8] = x * a02 + y * a12 + a22;\n return out;\n};\n\n/**\n * Rotates a mat3 by the given angle\n *\n * @param {mat3} out the receiving matrix\n * @param {mat3} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat3} out\n */\nmat3.rotate = function (out, a, rad) {\n var a00 = a[0], a01 = a[1], a02 = a[2],\n a10 = a[3], a11 = a[4], a12 = a[5],\n a20 = a[6], a21 = a[7], a22 = a[8],\n\n s = Math.sin(rad),\n c = Math.cos(rad);\n\n out[0] = c * a00 + s * a10;\n out[1] = c * a01 + s * a11;\n out[2] = c * a02 + s * a12;\n\n out[3] = c * a10 - s * a00;\n out[4] = c * a11 - s * a01;\n out[5] = c * a12 - s * a02;\n\n out[6] = a20;\n out[7] = a21;\n out[8] = a22;\n return out;\n};\n\n/**\n * Scales the mat3 by the dimensions in the given vec2\n *\n * @param {mat3} out the receiving matrix\n * @param {mat3} a the matrix to rotate\n * @param {vec2} v the vec2 to scale the matrix by\n * @returns {mat3} out\n **/\nmat3.scale = function(out, a, v) {\n var x = v[0], y = v[1];\n\n out[0] = x * a[0];\n out[1] = x * a[1];\n out[2] = x * a[2];\n\n out[3] = y * a[3];\n out[4] = y * a[4];\n out[5] = y * a[5];\n\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n return out;\n};\n\n/**\n * Copies the values from a mat2d into a mat3\n *\n * @param {mat3} out the receiving matrix\n * @param {mat2d} a the matrix to copy\n * @returns {mat3} out\n **/\nmat3.fromMat2d = function(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = 0;\n\n out[3] = a[2];\n out[4] = a[3];\n out[5] = 0;\n\n out[6] = a[4];\n out[7] = a[5];\n out[8] = 1;\n return out;\n};\n\n/**\n* Calculates a 3x3 matrix from the given quaternion\n*\n* @param {mat3} out mat3 receiving operation result\n* @param {quat} q Quaternion to create matrix from\n*\n* @returns {mat3} out\n*/\nmat3.fromQuat = function (out, q) {\n var x = q[0], y = q[1], z = q[2], w = q[3],\n x2 = x + x,\n y2 = y + y,\n z2 = z + z,\n\n xx = x * x2,\n yx = y * x2,\n yy = y * y2,\n zx = z * x2,\n zy = z * y2,\n zz = z * z2,\n wx = w * x2,\n wy = w * y2,\n wz = w * z2;\n\n out[0] = 1 - yy - zz;\n out[3] = yx - wz;\n out[6] = zx + wy;\n\n out[1] = yx + wz;\n out[4] = 1 - xx - zz;\n out[7] = zy - wx;\n\n out[2] = zx - wy;\n out[5] = zy + wx;\n out[8] = 1 - xx - yy;\n\n return out;\n};\n\n/**\n* Calculates a 3x3 normal matrix (transpose inverse) from the 4x4 matrix\n*\n* @param {mat3} out mat3 receiving operation result\n* @param {mat4} a Mat4 to derive the normal matrix from\n*\n* @returns {mat3} out\n*/\nmat3.normalFromMat4 = function (out, a) {\n var a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3],\n a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7],\n a20 = a[8], a21 = a[9], a22 = a[10], a23 = a[11],\n a30 = a[12], a31 = a[13], a32 = a[14], a33 = a[15],\n\n b00 = a00 * a11 - a01 * a10,\n b01 = a00 * a12 - a02 * a10,\n b02 = a00 * a13 - a03 * a10,\n b03 = a01 * a12 - a02 * a11,\n b04 = a01 * a13 - a03 * a11,\n b05 = a02 * a13 - a03 * a12,\n b06 = a20 * a31 - a21 * a30,\n b07 = a20 * a32 - a22 * a30,\n b08 = a20 * a33 - a23 * a30,\n b09 = a21 * a32 - a22 * a31,\n b10 = a21 * a33 - a23 * a31,\n b11 = a22 * a33 - a23 * a32,\n\n // Calculate the determinant\n det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n\n if (!det) { \n return null; \n }\n det = 1.0 / det;\n\n out[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det;\n out[1] = (a12 * b08 - a10 * b11 - a13 * b07) * det;\n out[2] = (a10 * b10 - a11 * b08 + a13 * b06) * det;\n\n out[3] = (a02 * b10 - a01 * b11 - a03 * b09) * det;\n out[4] = (a00 * b11 - a02 * b08 + a03 * b07) * det;\n out[5] = (a01 * b08 - a00 * b10 - a03 * b06) * det;\n\n out[6] = (a31 * b05 - a32 * b04 + a33 * b03) * det;\n out[7] = (a32 * b02 - a30 * b05 - a33 * b01) * det;\n out[8] = (a30 * b04 - a31 * b02 + a33 * b00) * det;\n\n return out;\n};\n\n/**\n * Returns a string representation of a mat3\n *\n * @param {mat3} mat matrix to represent as a string\n * @returns {String} string representation of the matrix\n */\nmat3.str = function (a) {\n return 'mat3(' + a[0] + ', ' + a[1] + ', ' + a[2] + ', ' + \n a[3] + ', ' + a[4] + ', ' + a[5] + ', ' + \n a[6] + ', ' + a[7] + ', ' + a[8] + ')';\n};\n\n/**\n * Returns Frobenius norm of a mat3\n *\n * @param {mat3} a the matrix to calculate Frobenius norm of\n * @returns {Number} Frobenius norm\n */\nmat3.frob = function (a) {\n return(Math.sqrt(Math.pow(a[0], 2) + Math.pow(a[1], 2) + Math.pow(a[2], 2) + Math.pow(a[3], 2) + Math.pow(a[4], 2) + Math.pow(a[5], 2) + Math.pow(a[6], 2) + Math.pow(a[7], 2) + Math.pow(a[8], 2)))\n};\n\n\nif(typeof(exports) !== 'undefined') {\n exports.mat3 = mat3;\n}\n;\n/* Copyright (c) 2013, Brandon Jones, Colin MacKenzie IV. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation \n and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE \nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */\n\n/**\n * @class 4x4 Matrix\n * @name mat4\n */\n\nvar mat4 = {};\n\n/**\n * Creates a new identity mat4\n *\n * @returns {mat4} a new 4x4 matrix\n */\nmat4.create = function() {\n var out = new GLMAT_ARRAY_TYPE(16);\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = 1;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 1;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n};\n\n/**\n * Creates a new mat4 initialized with values from an existing matrix\n *\n * @param {mat4} a matrix to clone\n * @returns {mat4} a new 4x4 matrix\n */\nmat4.clone = function(a) {\n var out = new GLMAT_ARRAY_TYPE(16);\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n out[9] = a[9];\n out[10] = a[10];\n out[11] = a[11];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n return out;\n};\n\n/**\n * Copy the values from one mat4 to another\n *\n * @param {mat4} out the receiving matrix\n * @param {mat4} a the source matrix\n * @returns {mat4} out\n */\nmat4.copy = function(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n out[9] = a[9];\n out[10] = a[10];\n out[11] = a[11];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n return out;\n};\n\n/**\n * Set a mat4 to the identity matrix\n *\n * @param {mat4} out the receiving matrix\n * @returns {mat4} out\n */\nmat4.identity = function(out) {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = 1;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 1;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n};\n\n/**\n * Transpose the values of a mat4\n *\n * @param {mat4} out the receiving matrix\n * @param {mat4} a the source matrix\n * @returns {mat4} out\n */\nmat4.transpose = function(out, a) {\n // If we are transposing ourselves we can skip a few steps but have to cache some values\n if (out === a) {\n var a01 = a[1], a02 = a[2], a03 = a[3],\n a12 = a[6], a13 = a[7],\n a23 = a[11];\n\n out[1] = a[4];\n out[2] = a[8];\n out[3] = a[12];\n out[4] = a01;\n out[6] = a[9];\n out[7] = a[13];\n out[8] = a02;\n out[9] = a12;\n out[11] = a[14];\n out[12] = a03;\n out[13] = a13;\n out[14] = a23;\n } else {\n out[0] = a[0];\n out[1] = a[4];\n out[2] = a[8];\n out[3] = a[12];\n out[4] = a[1];\n out[5] = a[5];\n out[6] = a[9];\n out[7] = a[13];\n out[8] = a[2];\n out[9] = a[6];\n out[10] = a[10];\n out[11] = a[14];\n out[12] = a[3];\n out[13] = a[7];\n out[14] = a[11];\n out[15] = a[15];\n }\n \n return out;\n};\n\n/**\n * Inverts a mat4\n *\n * @param {mat4} out the receiving matrix\n * @param {mat4} a the source matrix\n * @returns {mat4} out\n */\nmat4.invert = function(out, a) {\n var a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3],\n a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7],\n a20 = a[8], a21 = a[9], a22 = a[10], a23 = a[11],\n a30 = a[12], a31 = a[13], a32 = a[14], a33 = a[15],\n\n b00 = a00 * a11 - a01 * a10,\n b01 = a00 * a12 - a02 * a10,\n b02 = a00 * a13 - a03 * a10,\n b03 = a01 * a12 - a02 * a11,\n b04 = a01 * a13 - a03 * a11,\n b05 = a02 * a13 - a03 * a12,\n b06 = a20 * a31 - a21 * a30,\n b07 = a20 * a32 - a22 * a30,\n b08 = a20 * a33 - a23 * a30,\n b09 = a21 * a32 - a22 * a31,\n b10 = a21 * a33 - a23 * a31,\n b11 = a22 * a33 - a23 * a32,\n\n // Calculate the determinant\n det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n\n if (!det) { \n return null; \n }\n det = 1.0 / det;\n\n out[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det;\n out[1] = (a02 * b10 - a01 * b11 - a03 * b09) * det;\n out[2] = (a31 * b05 - a32 * b04 + a33 * b03) * det;\n out[3] = (a22 * b04 - a21 * b05 - a23 * b03) * det;\n out[4] = (a12 * b08 - a10 * b11 - a13 * b07) * det;\n out[5] = (a00 * b11 - a02 * b08 + a03 * b07) * det;\n out[6] = (a32 * b02 - a30 * b05 - a33 * b01) * det;\n out[7] = (a20 * b05 - a22 * b02 + a23 * b01) * det;\n out[8] = (a10 * b10 - a11 * b08 + a13 * b06) * det;\n out[9] = (a01 * b08 - a00 * b10 - a03 * b06) * det;\n out[10] = (a30 * b04 - a31 * b02 + a33 * b00) * det;\n out[11] = (a21 * b02 - a20 * b04 - a23 * b00) * det;\n out[12] = (a11 * b07 - a10 * b09 - a12 * b06) * det;\n out[13] = (a00 * b09 - a01 * b07 + a02 * b06) * det;\n out[14] = (a31 * b01 - a30 * b03 - a32 * b00) * det;\n out[15] = (a20 * b03 - a21 * b01 + a22 * b00) * det;\n\n return out;\n};\n\n/**\n * Calculates the adjugate of a mat4\n *\n * @param {mat4} out the receiving matrix\n * @param {mat4} a the source matrix\n * @returns {mat4} out\n */\nmat4.adjoint = function(out, a) {\n var a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3],\n a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7],\n a20 = a[8], a21 = a[9], a22 = a[10], a23 = a[11],\n a30 = a[12], a31 = a[13], a32 = a[14], a33 = a[15];\n\n out[0] = (a11 * (a22 * a33 - a23 * a32) - a21 * (a12 * a33 - a13 * a32) + a31 * (a12 * a23 - a13 * a22));\n out[1] = -(a01 * (a22 * a33 - a23 * a32) - a21 * (a02 * a33 - a03 * a32) + a31 * (a02 * a23 - a03 * a22));\n out[2] = (a01 * (a12 * a33 - a13 * a32) - a11 * (a02 * a33 - a03 * a32) + a31 * (a02 * a13 - a03 * a12));\n out[3] = -(a01 * (a12 * a23 - a13 * a22) - a11 * (a02 * a23 - a03 * a22) + a21 * (a02 * a13 - a03 * a12));\n out[4] = -(a10 * (a22 * a33 - a23 * a32) - a20 * (a12 * a33 - a13 * a32) + a30 * (a12 * a23 - a13 * a22));\n out[5] = (a00 * (a22 * a33 - a23 * a32) - a20 * (a02 * a33 - a03 * a32) + a30 * (a02 * a23 - a03 * a22));\n out[6] = -(a00 * (a12 * a33 - a13 * a32) - a10 * (a02 * a33 - a03 * a32) + a30 * (a02 * a13 - a03 * a12));\n out[7] = (a00 * (a12 * a23 - a13 * a22) - a10 * (a02 * a23 - a03 * a22) + a20 * (a02 * a13 - a03 * a12));\n out[8] = (a10 * (a21 * a33 - a23 * a31) - a20 * (a11 * a33 - a13 * a31) + a30 * (a11 * a23 - a13 * a21));\n out[9] = -(a00 * (a21 * a33 - a23 * a31) - a20 * (a01 * a33 - a03 * a31) + a30 * (a01 * a23 - a03 * a21));\n out[10] = (a00 * (a11 * a33 - a13 * a31) - a10 * (a01 * a33 - a03 * a31) + a30 * (a01 * a13 - a03 * a11));\n out[11] = -(a00 * (a11 * a23 - a13 * a21) - a10 * (a01 * a23 - a03 * a21) + a20 * (a01 * a13 - a03 * a11));\n out[12] = -(a10 * (a21 * a32 - a22 * a31) - a20 * (a11 * a32 - a12 * a31) + a30 * (a11 * a22 - a12 * a21));\n out[13] = (a00 * (a21 * a32 - a22 * a31) - a20 * (a01 * a32 - a02 * a31) + a30 * (a01 * a22 - a02 * a21));\n out[14] = -(a00 * (a11 * a32 - a12 * a31) - a10 * (a01 * a32 - a02 * a31) + a30 * (a01 * a12 - a02 * a11));\n out[15] = (a00 * (a11 * a22 - a12 * a21) - a10 * (a01 * a22 - a02 * a21) + a20 * (a01 * a12 - a02 * a11));\n return out;\n};\n\n/**\n * Calculates the determinant of a mat4\n *\n * @param {mat4} a the source matrix\n * @returns {Number} determinant of a\n */\nmat4.determinant = function (a) {\n var a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3],\n a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7],\n a20 = a[8], a21 = a[9], a22 = a[10], a23 = a[11],\n a30 = a[12], a31 = a[13], a32 = a[14], a33 = a[15],\n\n b00 = a00 * a11 - a01 * a10,\n b01 = a00 * a12 - a02 * a10,\n b02 = a00 * a13 - a03 * a10,\n b03 = a01 * a12 - a02 * a11,\n b04 = a01 * a13 - a03 * a11,\n b05 = a02 * a13 - a03 * a12,\n b06 = a20 * a31 - a21 * a30,\n b07 = a20 * a32 - a22 * a30,\n b08 = a20 * a33 - a23 * a30,\n b09 = a21 * a32 - a22 * a31,\n b10 = a21 * a33 - a23 * a31,\n b11 = a22 * a33 - a23 * a32;\n\n // Calculate the determinant\n return b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n};\n\n/**\n * Multiplies two mat4's\n *\n * @param {mat4} out the receiving matrix\n * @param {mat4} a the first operand\n * @param {mat4} b the second operand\n * @returns {mat4} out\n */\nmat4.multiply = function (out, a, b) {\n var a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3],\n a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7],\n a20 = a[8], a21 = a[9], a22 = a[10], a23 = a[11],\n a30 = a[12], a31 = a[13], a32 = a[14], a33 = a[15];\n\n // Cache only the current line of the second matrix\n var b0 = b[0], b1 = b[1], b2 = b[2], b3 = b[3]; \n out[0] = b0*a00 + b1*a10 + b2*a20 + b3*a30;\n out[1] = b0*a01 + b1*a11 + b2*a21 + b3*a31;\n out[2] = b0*a02 + b1*a12 + b2*a22 + b3*a32;\n out[3] = b0*a03 + b1*a13 + b2*a23 + b3*a33;\n\n b0 = b[4]; b1 = b[5]; b2 = b[6]; b3 = b[7];\n out[4] = b0*a00 + b1*a10 + b2*a20 + b3*a30;\n out[5] = b0*a01 + b1*a11 + b2*a21 + b3*a31;\n out[6] = b0*a02 + b1*a12 + b2*a22 + b3*a32;\n out[7] = b0*a03 + b1*a13 + b2*a23 + b3*a33;\n\n b0 = b[8]; b1 = b[9]; b2 = b[10]; b3 = b[11];\n out[8] = b0*a00 + b1*a10 + b2*a20 + b3*a30;\n out[9] = b0*a01 + b1*a11 + b2*a21 + b3*a31;\n out[10] = b0*a02 + b1*a12 + b2*a22 + b3*a32;\n out[11] = b0*a03 + b1*a13 + b2*a23 + b3*a33;\n\n b0 = b[12]; b1 = b[13]; b2 = b[14]; b3 = b[15];\n out[12] = b0*a00 + b1*a10 + b2*a20 + b3*a30;\n out[13] = b0*a01 + b1*a11 + b2*a21 + b3*a31;\n out[14] = b0*a02 + b1*a12 + b2*a22 + b3*a32;\n out[15] = b0*a03 + b1*a13 + b2*a23 + b3*a33;\n return out;\n};\n\n/**\n * Alias for {@link mat4.multiply}\n * @function\n */\nmat4.mul = mat4.multiply;\n\n/**\n * Translate a mat4 by the given vector\n *\n * @param {mat4} out the receiving matrix\n * @param {mat4} a the matrix to translate\n * @param {vec3} v vector to translate by\n * @returns {mat4} out\n */\nmat4.translate = function (out, a, v) {\n var x = v[0], y = v[1], z = v[2],\n a00, a01, a02, a03,\n a10, a11, a12, a13,\n a20, a21, a22, a23;\n\n if (a === out) {\n out[12] = a[0] * x + a[4] * y + a[8] * z + a[12];\n out[13] = a[1] * x + a[5] * y + a[9] * z + a[13];\n out[14] = a[2] * x + a[6] * y + a[10] * z + a[14];\n out[15] = a[3] * x + a[7] * y + a[11] * z + a[15];\n } else {\n a00 = a[0]; a01 = a[1]; a02 = a[2]; a03 = a[3];\n a10 = a[4]; a11 = a[5]; a12 = a[6]; a13 = a[7];\n a20 = a[8]; a21 = a[9]; a22 = a[10]; a23 = a[11];\n\n out[0] = a00; out[1] = a01; out[2] = a02; out[3] = a03;\n out[4] = a10; out[5] = a11; out[6] = a12; out[7] = a13;\n out[8] = a20; out[9] = a21; out[10] = a22; out[11] = a23;\n\n out[12] = a00 * x + a10 * y + a20 * z + a[12];\n out[13] = a01 * x + a11 * y + a21 * z + a[13];\n out[14] = a02 * x + a12 * y + a22 * z + a[14];\n out[15] = a03 * x + a13 * y + a23 * z + a[15];\n }\n\n return out;\n};\n\n/**\n * Scales the mat4 by the dimensions in the given vec3\n *\n * @param {mat4} out the receiving matrix\n * @param {mat4} a the matrix to scale\n * @param {vec3} v the vec3 to scale the matrix by\n * @returns {mat4} out\n **/\nmat4.scale = function(out, a, v) {\n var x = v[0], y = v[1], z = v[2];\n\n out[0] = a[0] * x;\n out[1] = a[1] * x;\n out[2] = a[2] * x;\n out[3] = a[3] * x;\n out[4] = a[4] * y;\n out[5] = a[5] * y;\n out[6] = a[6] * y;\n out[7] = a[7] * y;\n out[8] = a[8] * z;\n out[9] = a[9] * z;\n out[10] = a[10] * z;\n out[11] = a[11] * z;\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n return out;\n};\n\n/**\n * Rotates a mat4 by the given angle\n *\n * @param {mat4} out the receiving matrix\n * @param {mat4} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @param {vec3} axis the axis to rotate around\n * @returns {mat4} out\n */\nmat4.rotate = function (out, a, rad, axis) {\n var x = axis[0], y = axis[1], z = axis[2],\n len = Math.sqrt(x * x + y * y + z * z),\n s, c, t,\n a00, a01, a02, a03,\n a10, a11, a12, a13,\n a20, a21, a22, a23,\n b00, b01, b02,\n b10, b11, b12,\n b20, b21, b22;\n\n if (Math.abs(len) < GLMAT_EPSILON) { return null; }\n \n len = 1 / len;\n x *= len;\n y *= len;\n z *= len;\n\n s = Math.sin(rad);\n c = Math.cos(rad);\n t = 1 - c;\n\n a00 = a[0]; a01 = a[1]; a02 = a[2]; a03 = a[3];\n a10 = a[4]; a11 = a[5]; a12 = a[6]; a13 = a[7];\n a20 = a[8]; a21 = a[9]; a22 = a[10]; a23 = a[11];\n\n // Construct the elements of the rotation matrix\n b00 = x * x * t + c; b01 = y * x * t + z * s; b02 = z * x * t - y * s;\n b10 = x * y * t - z * s; b11 = y * y * t + c; b12 = z * y * t + x * s;\n b20 = x * z * t + y * s; b21 = y * z * t - x * s; b22 = z * z * t + c;\n\n // Perform rotation-specific matrix multiplication\n out[0] = a00 * b00 + a10 * b01 + a20 * b02;\n out[1] = a01 * b00 + a11 * b01 + a21 * b02;\n out[2] = a02 * b00 + a12 * b01 + a22 * b02;\n out[3] = a03 * b00 + a13 * b01 + a23 * b02;\n out[4] = a00 * b10 + a10 * b11 + a20 * b12;\n out[5] = a01 * b10 + a11 * b11 + a21 * b12;\n out[6] = a02 * b10 + a12 * b11 + a22 * b12;\n out[7] = a03 * b10 + a13 * b11 + a23 * b12;\n out[8] = a00 * b20 + a10 * b21 + a20 * b22;\n out[9] = a01 * b20 + a11 * b21 + a21 * b22;\n out[10] = a02 * b20 + a12 * b21 + a22 * b22;\n out[11] = a03 * b20 + a13 * b21 + a23 * b22;\n\n if (a !== out) { // If the source and destination differ, copy the unchanged last row\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n }\n return out;\n};\n\n/**\n * Rotates a matrix by the given angle around the X axis\n *\n * @param {mat4} out the receiving matrix\n * @param {mat4} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat4} out\n */\nmat4.rotateX = function (out, a, rad) {\n var s = Math.sin(rad),\n c = Math.cos(rad),\n a10 = a[4],\n a11 = a[5],\n a12 = a[6],\n a13 = a[7],\n a20 = a[8],\n a21 = a[9],\n a22 = a[10],\n a23 = a[11];\n\n if (a !== out) { // If the source and destination differ, copy the unchanged rows\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n }\n\n // Perform axis-specific matrix multiplication\n out[4] = a10 * c + a20 * s;\n out[5] = a11 * c + a21 * s;\n out[6] = a12 * c + a22 * s;\n out[7] = a13 * c + a23 * s;\n out[8] = a20 * c - a10 * s;\n out[9] = a21 * c - a11 * s;\n out[10] = a22 * c - a12 * s;\n out[11] = a23 * c - a13 * s;\n return out;\n};\n\n/**\n * Rotates a matrix by the given angle around the Y axis\n *\n * @param {mat4} out the receiving matrix\n * @param {mat4} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat4} out\n */\nmat4.rotateY = function (out, a, rad) {\n var s = Math.sin(rad),\n c = Math.cos(rad),\n a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a03 = a[3],\n a20 = a[8],\n a21 = a[9],\n a22 = a[10],\n a23 = a[11];\n\n if (a !== out) { // If the source and destination differ, copy the unchanged rows\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n }\n\n // Perform axis-specific matrix multiplication\n out[0] = a00 * c - a20 * s;\n out[1] = a01 * c - a21 * s;\n out[2] = a02 * c - a22 * s;\n out[3] = a03 * c - a23 * s;\n out[8] = a00 * s + a20 * c;\n out[9] = a01 * s + a21 * c;\n out[10] = a02 * s + a22 * c;\n out[11] = a03 * s + a23 * c;\n return out;\n};\n\n/**\n * Rotates a matrix by the given angle around the Z axis\n *\n * @param {mat4} out the receiving matrix\n * @param {mat4} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat4} out\n */\nmat4.rotateZ = function (out, a, rad) {\n var s = Math.sin(rad),\n c = Math.cos(rad),\n a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a03 = a[3],\n a10 = a[4],\n a11 = a[5],\n a12 = a[6],\n a13 = a[7];\n\n if (a !== out) { // If the source and destination differ, copy the unchanged last row\n out[8] = a[8];\n out[9] = a[9];\n out[10] = a[10];\n out[11] = a[11];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n }\n\n // Perform axis-specific matrix multiplication\n out[0] = a00 * c + a10 * s;\n out[1] = a01 * c + a11 * s;\n out[2] = a02 * c + a12 * s;\n out[3] = a03 * c + a13 * s;\n out[4] = a10 * c - a00 * s;\n out[5] = a11 * c - a01 * s;\n out[6] = a12 * c - a02 * s;\n out[7] = a13 * c - a03 * s;\n return out;\n};\n\n/**\n * Creates a matrix from a quaternion rotation and vector translation\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.translate(dest, vec);\n * var quatMat = mat4.create();\n * quat4.toMat4(quat, quatMat);\n * mat4.multiply(dest, quatMat);\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {quat4} q Rotation quaternion\n * @param {vec3} v Translation vector\n * @returns {mat4} out\n */\nmat4.fromRotationTranslation = function (out, q, v) {\n // Quaternion math\n var x = q[0], y = q[1], z = q[2], w = q[3],\n x2 = x + x,\n y2 = y + y,\n z2 = z + z,\n\n xx = x * x2,\n xy = x * y2,\n xz = x * z2,\n yy = y * y2,\n yz = y * z2,\n zz = z * z2,\n wx = w * x2,\n wy = w * y2,\n wz = w * z2;\n\n out[0] = 1 - (yy + zz);\n out[1] = xy + wz;\n out[2] = xz - wy;\n out[3] = 0;\n out[4] = xy - wz;\n out[5] = 1 - (xx + zz);\n out[6] = yz + wx;\n out[7] = 0;\n out[8] = xz + wy;\n out[9] = yz - wx;\n out[10] = 1 - (xx + yy);\n out[11] = 0;\n out[12] = v[0];\n out[13] = v[1];\n out[14] = v[2];\n out[15] = 1;\n \n return out;\n};\n\nmat4.fromQuat = function (out, q) {\n var x = q[0], y = q[1], z = q[2], w = q[3],\n x2 = x + x,\n y2 = y + y,\n z2 = z + z,\n\n xx = x * x2,\n yx = y * x2,\n yy = y * y2,\n zx = z * x2,\n zy = z * y2,\n zz = z * z2,\n wx = w * x2,\n wy = w * y2,\n wz = w * z2;\n\n out[0] = 1 - yy - zz;\n out[1] = yx + wz;\n out[2] = zx - wy;\n out[3] = 0;\n\n out[4] = yx - wz;\n out[5] = 1 - xx - zz;\n out[6] = zy + wx;\n out[7] = 0;\n\n out[8] = zx + wy;\n out[9] = zy - wx;\n out[10] = 1 - xx - yy;\n out[11] = 0;\n\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n\n return out;\n};\n\n/**\n * Generates a frustum matrix with the given bounds\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {Number} left Left bound of the frustum\n * @param {Number} right Right bound of the frustum\n * @param {Number} bottom Bottom bound of the frustum\n * @param {Number} top Top bound of the frustum\n * @param {Number} near Near bound of the frustum\n * @param {Number} far Far bound of the frustum\n * @returns {mat4} out\n */\nmat4.frustum = function (out, left, right, bottom, top, near, far) {\n var rl = 1 / (right - left),\n tb = 1 / (top - bottom),\n nf = 1 / (near - far);\n out[0] = (near * 2) * rl;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = (near * 2) * tb;\n out[6] = 0;\n out[7] = 0;\n out[8] = (right + left) * rl;\n out[9] = (top + bottom) * tb;\n out[10] = (far + near) * nf;\n out[11] = -1;\n out[12] = 0;\n out[13] = 0;\n out[14] = (far * near * 2) * nf;\n out[15] = 0;\n return out;\n};\n\n/**\n * Generates a perspective projection matrix with the given bounds\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {number} fovy Vertical field of view in radians\n * @param {number} aspect Aspect ratio. typically viewport width/height\n * @param {number} near Near bound of the frustum\n * @param {number} far Far bound of the frustum\n * @returns {mat4} out\n */\nmat4.perspective = function (out, fovy, aspect, near, far) {\n var f = 1.0 / Math.tan(fovy / 2),\n nf = 1 / (near - far);\n out[0] = f / aspect;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = f;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = (far + near) * nf;\n out[11] = -1;\n out[12] = 0;\n out[13] = 0;\n out[14] = (2 * far * near) * nf;\n out[15] = 0;\n return out;\n};\n\n/**\n * Generates a orthogonal projection matrix with the given bounds\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {number} left Left bound of the frustum\n * @param {number} right Right bound of the frustum\n * @param {number} bottom Bottom bound of the frustum\n * @param {number} top Top bound of the frustum\n * @param {number} near Near bound of the frustum\n * @param {number} far Far bound of the frustum\n * @returns {mat4} out\n */\nmat4.ortho = function (out, left, right, bottom, top, near, far) {\n var lr = 1 / (left - right),\n bt = 1 / (bottom - top),\n nf = 1 / (near - far);\n out[0] = -2 * lr;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = -2 * bt;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 2 * nf;\n out[11] = 0;\n out[12] = (left + right) * lr;\n out[13] = (top + bottom) * bt;\n out[14] = (far + near) * nf;\n out[15] = 1;\n return out;\n};\n\n/**\n * Generates a look-at matrix with the given eye position, focal point, and up axis\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {vec3} eye Position of the viewer\n * @param {vec3} center Point the viewer is looking at\n * @param {vec3} up vec3 pointing up\n * @returns {mat4} out\n */\nmat4.lookAt = function (out, eye, center, up) {\n var x0, x1, x2, y0, y1, y2, z0, z1, z2, len,\n eyex = eye[0],\n eyey = eye[1],\n eyez = eye[2],\n upx = up[0],\n upy = up[1],\n upz = up[2],\n centerx = center[0],\n centery = center[1],\n centerz = center[2];\n\n if (Math.abs(eyex - centerx) < GLMAT_EPSILON &&\n Math.abs(eyey - centery) < GLMAT_EPSILON &&\n Math.abs(eyez - centerz) < GLMAT_EPSILON) {\n return mat4.identity(out);\n }\n\n z0 = eyex - centerx;\n z1 = eyey - centery;\n z2 = eyez - centerz;\n\n len = 1 / Math.sqrt(z0 * z0 + z1 * z1 + z2 * z2);\n z0 *= len;\n z1 *= len;\n z2 *= len;\n\n x0 = upy * z2 - upz * z1;\n x1 = upz * z0 - upx * z2;\n x2 = upx * z1 - upy * z0;\n len = Math.sqrt(x0 * x0 + x1 * x1 + x2 * x2);\n if (!len) {\n x0 = 0;\n x1 = 0;\n x2 = 0;\n } else {\n len = 1 / len;\n x0 *= len;\n x1 *= len;\n x2 *= len;\n }\n\n y0 = z1 * x2 - z2 * x1;\n y1 = z2 * x0 - z0 * x2;\n y2 = z0 * x1 - z1 * x0;\n\n len = Math.sqrt(y0 * y0 + y1 * y1 + y2 * y2);\n if (!len) {\n y0 = 0;\n y1 = 0;\n y2 = 0;\n } else {\n len = 1 / len;\n y0 *= len;\n y1 *= len;\n y2 *= len;\n }\n\n out[0] = x0;\n out[1] = y0;\n out[2] = z0;\n out[3] = 0;\n out[4] = x1;\n out[5] = y1;\n out[6] = z1;\n out[7] = 0;\n out[8] = x2;\n out[9] = y2;\n out[10] = z2;\n out[11] = 0;\n out[12] = -(x0 * eyex + x1 * eyey + x2 * eyez);\n out[13] = -(y0 * eyex + y1 * eyey + y2 * eyez);\n out[14] = -(z0 * eyex + z1 * eyey + z2 * eyez);\n out[15] = 1;\n\n return out;\n};\n\n/**\n * Returns a string representation of a mat4\n *\n * @param {mat4} mat matrix to represent as a string\n * @returns {String} string representation of the matrix\n */\nmat4.str = function (a) {\n return 'mat4(' + a[0] + ', ' + a[1] + ', ' + a[2] + ', ' + a[3] + ', ' +\n a[4] + ', ' + a[5] + ', ' + a[6] + ', ' + a[7] + ', ' +\n a[8] + ', ' + a[9] + ', ' + a[10] + ', ' + a[11] + ', ' + \n a[12] + ', ' + a[13] + ', ' + a[14] + ', ' + a[15] + ')';\n};\n\n/**\n * Returns Frobenius norm of a mat4\n *\n * @param {mat4} a the matrix to calculate Frobenius norm of\n * @returns {Number} Frobenius norm\n */\nmat4.frob = function (a) {\n return(Math.sqrt(Math.pow(a[0], 2) + Math.pow(a[1], 2) + Math.pow(a[2], 2) + Math.pow(a[3], 2) + Math.pow(a[4], 2) + Math.pow(a[5], 2) + Math.pow(a[6], 2) + Math.pow(a[7], 2) + Math.pow(a[8], 2) + Math.pow(a[9], 2) + Math.pow(a[10], 2) + Math.pow(a[11], 2) + Math.pow(a[12], 2) + Math.pow(a[13], 2) + Math.pow(a[14], 2) + Math.pow(a[15], 2) ))\n};\n\n\nif(typeof(exports) !== 'undefined') {\n exports.mat4 = mat4;\n}\n;\n/* Copyright (c) 2013, Brandon Jones, Colin MacKenzie IV. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation \n and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE \nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */\n\n/**\n * @class Quaternion\n * @name quat\n */\n\nvar quat = {};\n\n/**\n * Creates a new identity quat\n *\n * @returns {quat} a new quaternion\n */\nquat.create = function() {\n var out = new GLMAT_ARRAY_TYPE(4);\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n out[3] = 1;\n return out;\n};\n\n/**\n * Sets a quaternion to represent the shortest rotation from one\n * vector to another.\n *\n * Both vectors are assumed to be unit length.\n *\n * @param {quat} out the receiving quaternion.\n * @param {vec3} a the initial vector\n * @param {vec3} b the destination vector\n * @returns {quat} out\n */\nquat.rotationTo = (function() {\n var tmpvec3 = vec3.create();\n var xUnitVec3 = vec3.fromValues(1,0,0);\n var yUnitVec3 = vec3.fromValues(0,1,0);\n\n return function(out, a, b) {\n var dot = vec3.dot(a, b);\n if (dot < -0.999999) {\n vec3.cross(tmpvec3, xUnitVec3, a);\n if (vec3.length(tmpvec3) < 0.000001)\n vec3.cross(tmpvec3, yUnitVec3, a);\n vec3.normalize(tmpvec3, tmpvec3);\n quat.setAxisAngle(out, tmpvec3, Math.PI);\n return out;\n } else if (dot > 0.999999) {\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n out[3] = 1;\n return out;\n } else {\n vec3.cross(tmpvec3, a, b);\n out[0] = tmpvec3[0];\n out[1] = tmpvec3[1];\n out[2] = tmpvec3[2];\n out[3] = 1 + dot;\n return quat.normalize(out, out);\n }\n };\n})();\n\n/**\n * Sets the specified quaternion with values corresponding to the given\n * axes. Each axis is a vec3 and is expected to be unit length and\n * perpendicular to all other specified axes.\n *\n * @param {vec3} view the vector representing the viewing direction\n * @param {vec3} right the vector representing the local \"right\" direction\n * @param {vec3} up the vector representing the local \"up\" direction\n * @returns {quat} out\n */\nquat.setAxes = (function() {\n var matr = mat3.create();\n\n return function(out, view, right, up) {\n matr[0] = right[0];\n matr[3] = right[1];\n matr[6] = right[2];\n\n matr[1] = up[0];\n matr[4] = up[1];\n matr[7] = up[2];\n\n matr[2] = -view[0];\n matr[5] = -view[1];\n matr[8] = -view[2];\n\n return quat.normalize(out, quat.fromMat3(out, matr));\n };\n})();\n\n/**\n * Creates a new quat initialized with values from an existing quaternion\n *\n * @param {quat} a quaternion to clone\n * @returns {quat} a new quaternion\n * @function\n */\nquat.clone = vec4.clone;\n\n/**\n * Creates a new quat initialized with the given values\n *\n * @param {Number} x X component\n * @param {Number} y Y component\n * @param {Number} z Z component\n * @param {Number} w W component\n * @returns {quat} a new quaternion\n * @function\n */\nquat.fromValues = vec4.fromValues;\n\n/**\n * Copy the values from one quat to another\n *\n * @param {quat} out the receiving quaternion\n * @param {quat} a the source quaternion\n * @returns {quat} out\n * @function\n */\nquat.copy = vec4.copy;\n\n/**\n * Set the components of a quat to the given values\n *\n * @param {quat} out the receiving quaternion\n * @param {Number} x X component\n * @param {Number} y Y component\n * @param {Number} z Z component\n * @param {Number} w W component\n * @returns {quat} out\n * @function\n */\nquat.set = vec4.set;\n\n/**\n * Set a quat to the identity quaternion\n *\n * @param {quat} out the receiving quaternion\n * @returns {quat} out\n */\nquat.identity = function(out) {\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n out[3] = 1;\n return out;\n};\n\n/**\n * Sets a quat from the given angle and rotation axis,\n * then returns it.\n *\n * @param {quat} out the receiving quaternion\n * @param {vec3} axis the axis around which to rotate\n * @param {Number} rad the angle in radians\n * @returns {quat} out\n **/\nquat.setAxisAngle = function(out, axis, rad) {\n rad = rad * 0.5;\n var s = Math.sin(rad);\n out[0] = s * axis[0];\n out[1] = s * axis[1];\n out[2] = s * axis[2];\n out[3] = Math.cos(rad);\n return out;\n};\n\n/**\n * Adds two quat's\n *\n * @param {quat} out the receiving quaternion\n * @param {quat} a the first operand\n * @param {quat} b the second operand\n * @returns {quat} out\n * @function\n */\nquat.add = vec4.add;\n\n/**\n * Multiplies two quat's\n *\n * @param {quat} out the receiving quaternion\n * @param {quat} a the first operand\n * @param {quat} b the second operand\n * @returns {quat} out\n */\nquat.multiply = function(out, a, b) {\n var ax = a[0], ay = a[1], az = a[2], aw = a[3],\n bx = b[0], by = b[1], bz = b[2], bw = b[3];\n\n out[0] = ax * bw + aw * bx + ay * bz - az * by;\n out[1] = ay * bw + aw * by + az * bx - ax * bz;\n out[2] = az * bw + aw * bz + ax * by - ay * bx;\n out[3] = aw * bw - ax * bx - ay * by - az * bz;\n return out;\n};\n\n/**\n * Alias for {@link quat.multiply}\n * @function\n */\nquat.mul = quat.multiply;\n\n/**\n * Scales a quat by a scalar number\n *\n * @param {quat} out the receiving vector\n * @param {quat} a the vector to scale\n * @param {Number} b amount to scale the vector by\n * @returns {quat} out\n * @function\n */\nquat.scale = vec4.scale;\n\n/**\n * Rotates a quaternion by the given angle about the X axis\n *\n * @param {quat} out quat receiving operation result\n * @param {quat} a quat to rotate\n * @param {number} rad angle (in radians) to rotate\n * @returns {quat} out\n */\nquat.rotateX = function (out, a, rad) {\n rad *= 0.5; \n\n var ax = a[0], ay = a[1], az = a[2], aw = a[3],\n bx = Math.sin(rad), bw = Math.cos(rad);\n\n out[0] = ax * bw + aw * bx;\n out[1] = ay * bw + az * bx;\n out[2] = az * bw - ay * bx;\n out[3] = aw * bw - ax * bx;\n return out;\n};\n\n/**\n * Rotates a quaternion by the given angle about the Y axis\n *\n * @param {quat} out quat receiving operation result\n * @param {quat} a quat to rotate\n * @param {number} rad angle (in radians) to rotate\n * @returns {quat} out\n */\nquat.rotateY = function (out, a, rad) {\n rad *= 0.5; \n\n var ax = a[0], ay = a[1], az = a[2], aw = a[3],\n by = Math.sin(rad), bw = Math.cos(rad);\n\n out[0] = ax * bw - az * by;\n out[1] = ay * bw + aw * by;\n out[2] = az * bw + ax * by;\n out[3] = aw * bw - ay * by;\n return out;\n};\n\n/**\n * Rotates a quaternion by the given angle about the Z axis\n *\n * @param {quat} out quat receiving operation result\n * @param {quat} a quat to rotate\n * @param {number} rad angle (in radians) to rotate\n * @returns {quat} out\n */\nquat.rotateZ = function (out, a, rad) {\n rad *= 0.5; \n\n var ax = a[0], ay = a[1], az = a[2], aw = a[3],\n bz = Math.sin(rad), bw = Math.cos(rad);\n\n out[0] = ax * bw + ay * bz;\n out[1] = ay * bw - ax * bz;\n out[2] = az * bw + aw * bz;\n out[3] = aw * bw - az * bz;\n return out;\n};\n\n/**\n * Calculates the W component of a quat from the X, Y, and Z components.\n * Assumes that quaternion is 1 unit in length.\n * Any existing W component will be ignored.\n *\n * @param {quat} out the receiving quaternion\n * @param {quat} a quat to calculate W component of\n * @returns {quat} out\n */\nquat.calculateW = function (out, a) {\n var x = a[0], y = a[1], z = a[2];\n\n out[0] = x;\n out[1] = y;\n out[2] = z;\n out[3] = Math.sqrt(Math.abs(1.0 - x * x - y * y - z * z));\n return out;\n};\n\n/**\n * Calculates the dot product of two quat's\n *\n * @param {quat} a the first operand\n * @param {quat} b the second operand\n * @returns {Number} dot product of a and b\n * @function\n */\nquat.dot = vec4.dot;\n\n/**\n * Performs a linear interpolation between two quat's\n *\n * @param {quat} out the receiving quaternion\n * @param {quat} a the first operand\n * @param {quat} b the second operand\n * @param {Number} t interpolation amount between the two inputs\n * @returns {quat} out\n * @function\n */\nquat.lerp = vec4.lerp;\n\n/**\n * Performs a spherical linear interpolation between two quat\n *\n * @param {quat} out the receiving quaternion\n * @param {quat} a the first operand\n * @param {quat} b the second operand\n * @param {Number} t interpolation amount between the two inputs\n * @returns {quat} out\n */\nquat.slerp = function (out, a, b, t) {\n // benchmarks:\n // http://jsperf.com/quaternion-slerp-implementations\n\n var ax = a[0], ay = a[1], az = a[2], aw = a[3],\n bx = b[0], by = b[1], bz = b[2], bw = b[3];\n\n var omega, cosom, sinom, scale0, scale1;\n\n // calc cosine\n cosom = ax * bx + ay * by + az * bz + aw * bw;\n // adjust signs (if necessary)\n if ( cosom < 0.0 ) {\n cosom = -cosom;\n bx = - bx;\n by = - by;\n bz = - bz;\n bw = - bw;\n }\n // calculate coefficients\n if ( (1.0 - cosom) > 0.000001 ) {\n // standard case (slerp)\n omega = Math.acos(cosom);\n sinom = Math.sin(omega);\n scale0 = Math.sin((1.0 - t) * omega) / sinom;\n scale1 = Math.sin(t * omega) / sinom;\n } else { \n // \"from\" and \"to\" quaternions are very close \n // ... so we can do a linear interpolation\n scale0 = 1.0 - t;\n scale1 = t;\n }\n // calculate final values\n out[0] = scale0 * ax + scale1 * bx;\n out[1] = scale0 * ay + scale1 * by;\n out[2] = scale0 * az + scale1 * bz;\n out[3] = scale0 * aw + scale1 * bw;\n \n return out;\n};\n\n/**\n * Calculates the inverse of a quat\n *\n * @param {quat} out the receiving quaternion\n * @param {quat} a quat to calculate inverse of\n * @returns {quat} out\n */\nquat.invert = function(out, a) {\n var a0 = a[0], a1 = a[1], a2 = a[2], a3 = a[3],\n dot = a0*a0 + a1*a1 + a2*a2 + a3*a3,\n invDot = dot ? 1.0/dot : 0;\n \n // TODO: Would be faster to return [0,0,0,0] immediately if dot == 0\n\n out[0] = -a0*invDot;\n out[1] = -a1*invDot;\n out[2] = -a2*invDot;\n out[3] = a3*invDot;\n return out;\n};\n\n/**\n * Calculates the conjugate of a quat\n * If the quaternion is normalized, this function is faster than quat.inverse and produces the same result.\n *\n * @param {quat} out the receiving quaternion\n * @param {quat} a quat to calculate conjugate of\n * @returns {quat} out\n */\nquat.conjugate = function (out, a) {\n out[0] = -a[0];\n out[1] = -a[1];\n out[2] = -a[2];\n out[3] = a[3];\n return out;\n};\n\n/**\n * Calculates the length of a quat\n *\n * @param {quat} a vector to calculate length of\n * @returns {Number} length of a\n * @function\n */\nquat.length = vec4.length;\n\n/**\n * Alias for {@link quat.length}\n * @function\n */\nquat.len = quat.length;\n\n/**\n * Calculates the squared length of a quat\n *\n * @param {quat} a vector to calculate squared length of\n * @returns {Number} squared length of a\n * @function\n */\nquat.squaredLength = vec4.squaredLength;\n\n/**\n * Alias for {@link quat.squaredLength}\n * @function\n */\nquat.sqrLen = quat.squaredLength;\n\n/**\n * Normalize a quat\n *\n * @param {quat} out the receiving quaternion\n * @param {quat} a quaternion to normalize\n * @returns {quat} out\n * @function\n */\nquat.normalize = vec4.normalize;\n\n/**\n * Creates a quaternion from the given 3x3 rotation matrix.\n *\n * NOTE: The resultant quaternion is not normalized, so you should be sure\n * to renormalize the quaternion yourself where necessary.\n *\n * @param {quat} out the receiving quaternion\n * @param {mat3} m rotation matrix\n * @returns {quat} out\n * @function\n */\nquat.fromMat3 = function(out, m) {\n // Algorithm in Ken Shoemake's article in 1987 SIGGRAPH course notes\n // article \"Quaternion Calculus and Fast Animation\".\n var fTrace = m[0] + m[4] + m[8];\n var fRoot;\n\n if ( fTrace > 0.0 ) {\n // |w| > 1/2, may as well choose w > 1/2\n fRoot = Math.sqrt(fTrace + 1.0); // 2w\n out[3] = 0.5 * fRoot;\n fRoot = 0.5/fRoot; // 1/(4w)\n out[0] = (m[5]-m[7])*fRoot;\n out[1] = (m[6]-m[2])*fRoot;\n out[2] = (m[1]-m[3])*fRoot;\n } else {\n // |w| <= 1/2\n var i = 0;\n if ( m[4] > m[0] )\n i = 1;\n if ( m[8] > m[i*3+i] )\n i = 2;\n var j = (i+1)%3;\n var k = (i+2)%3;\n \n fRoot = Math.sqrt(m[i*3+i]-m[j*3+j]-m[k*3+k] + 1.0);\n out[i] = 0.5 * fRoot;\n fRoot = 0.5 / fRoot;\n out[3] = (m[j*3+k] - m[k*3+j]) * fRoot;\n out[j] = (m[j*3+i] + m[i*3+j]) * fRoot;\n out[k] = (m[k*3+i] + m[i*3+k]) * fRoot;\n }\n \n return out;\n};\n\n/**\n * Returns a string representation of a quatenion\n *\n * @param {quat} vec vector to represent as a string\n * @returns {String} string representation of the vector\n */\nquat.str = function (a) {\n return 'quat(' + a[0] + ', ' + a[1] + ', ' + a[2] + ', ' + a[3] + ')';\n};\n\nif(typeof(exports) !== 'undefined') {\n exports.quat = quat;\n}\n;\n\n\n\n\n\n\n\n\n\n\n\n\n\n })(shim.exports);\n})(this);\n","\"use strict\";\n\n\nvar glm = require(\"./gl-matrix\");\nvar elements = require(\"./elements\");\nvar consts = require(\"./const\");\n\nfunction clamp(min, max, value) {\n return Math.min(max, Math.max(min, value));\n}\n\n\nvar newView = module.exports.new = function() {\n return {\n aspect: 1.0,\n zoom: 0.125,\n translation: {\n x: 0.0,\n y: 0.0\n },\n atomScale: 0.6,\n relativeAtomScale: 1.0,\n bondScale: 0.5,\n rotation: glm.mat4.create(),\n ao: 0.75,\n aoRes: 256,\n brightness: 0.5,\n outline: 0.0,\n spf: 32,\n bonds: false,\n bondThreshold: 1.2,\n bondShade: 0.5,\n atomShade: 0.5,\n resolution: 768,\n dofStrength: 0.0,\n dofPosition: 0.5,\n fxaa: 1\n };\n};\n\n\nvar center = module.exports.center = function(v, system) {\n var maxX = -Infinity;\n var minX = Infinity;\n var maxY = -Infinity;\n var minY = Infinity;\n for(var i = 0; i < system.atoms.length; i++) {\n var a = system.atoms[i];\n var r = elements[a.symbol].radius;\n r = 2.5 * v.atomScale * (1 + (r - 1) * v.relativeAtomScale);\n var p = glm.vec4.fromValues(a.x, a.y, a.z, 0);\n glm.vec4.transformMat4(p, p, v.rotation);\n maxX = Math.max(maxX, p[0] + r);\n minX = Math.min(minX, p[0] - r);\n maxY = Math.max(maxY, p[1] + r);\n minY = Math.min(minY, p[1] - r);\n }\n var cx = minX + (maxX - minX) / 2.0;\n var cy = minY + (maxY - minY) / 2.0;\n v.translation.x = cx;\n v.translation.y = cy;\n var scale = Math.max(maxX - minX, maxY - minY);\n v.zoom = 1/(scale * 1.01);\n};\n\n\nvar override = module.exports.override = function(v, data) {\n for (var key in data) {\n v[key] = data[key];\n }\n resolve(v);\n};\n\n\nvar clone = module.exports.clone = function(v) {\n return deserialize(serialize(v));\n};\n\n\nvar serialize = module.exports.serialize = function(v) {\n return JSON.stringify(v);\n};\n\n\nvar deserialize = module.exports.deserialize = function(v) {\n v = JSON.parse(v);\n v.rotation = glm.mat4.clone(v.rotation);\n return v;\n};\n\n\nvar resolve = module.exports.resolve = function(v) {\n v.dofStrength = clamp(0, 1, v.dofStrength);\n v.dofPosition = clamp(0, 1, v.dofPosition);\n v.zoom = clamp(0.001, 2.0, v.zoom);\n v.atomScale = clamp(0, 1, v.atomScale);\n v.relativeAtomScale = clamp(0, 1, v.relativeAtomScale);\n v.bondScale = clamp(0, 1, v.bondScale);\n v.bondShade = clamp(0, 1, v.bondShade);\n v.atomShade = clamp(0, 1, v.atomShade);\n v.ao = clamp(0, 1, v.ao);\n v.brightness = clamp(0, 1, v.brightness);\n v.outline = clamp(0, 1, v.outline);\n};\n\n\nvar translate = module.exports.translate = function(v, dx, dy) {\n v.translation.x -= dx/(v.resolution * v.zoom);\n v.translation.y += dy/(v.resolution * v.zoom);\n resolve(v);\n};\n\n\nvar rotate = module.exports.rotate = function(v, dx, dy) {\n var m = glm.mat4.create();\n glm.mat4.rotateY(m, m, dx * 0.005);\n glm.mat4.rotateX(m, m, dy * 0.005);\n glm.mat4.multiply(v.rotation, m, v.rotation);\n const ao = v.ao; \n v.ao = 0; \n resolve(v);\n v.ao = ao;\n};\n\n\nvar getRect = module.exports.getRect = function(v) {\n var width = 1.0/v.zoom;\n var height = width/v.aspect;\n var bottom = -height/2 + v.translation.y;\n var top = height/2 + v.translation.y;\n var left = -width/2 + v.translation.x;\n var right = width/2 + v.translation.x;\n return {\n bottom: bottom,\n top: top,\n left: left,\n right: right\n };\n};\n\n\nvar getBondRadius = module.exports.getBondRadius = function(v) {\n return v.bondScale * v.atomScale * \n (1 + (consts.MIN_ATOM_RADIUS - 1) * v.relativeAtomScale);\n};\n\n\n","import _curry1 from './_curry1.js';\nimport _isPlaceholder from './_isPlaceholder.js';\n\n/**\n * Optimized internal two-arity curry function.\n *\n * @private\n * @category Function\n * @param {Function} fn The function to curry.\n * @return {Function} The curried function.\n */\nexport default function _curry2(fn) {\n return function f2(a, b) {\n switch (arguments.length) {\n case 0:\n return f2;\n case 1:\n return _isPlaceholder(a) ? f2 : _curry1(function (_b) {\n return fn(a, _b);\n });\n default:\n return _isPlaceholder(a) && _isPlaceholder(b) ? f2 : _isPlaceholder(a) ? _curry1(function (_a) {\n return fn(_a, b);\n }) : _isPlaceholder(b) ? _curry1(function (_b) {\n return fn(a, _b);\n }) : fn(a, b);\n }\n };\n}","import PropTypes from 'prop-types';\nimport React, {Component, lazy, Suspense} from 'react';\nimport LazyLoader from '../LazyLoader';\n\nconst RealAlignmentChart = lazy(LazyLoader.alignmentChart);\n\n/**\n * The Alignment Chart (MSA) component is used to align multiple genomic\n * or proteomic sequences from a FASTA or Clustal file. Among its\n * extensive set of features, the multiple sequence alignment chart\n * can display multiple subplots showing gap and conservation info,\n * alongside industry standard colorscale support and consensus sequence.\n * No matter what size your alignment is, Alignment Chart is able to display\n * your genes or proteins snappily thanks to the underlying WebGL architecture\n * powering the component. You can quickly scroll through your long sequence\n * with a slider or a heatmap overview.\n * Read more about the component here:\n * https://github.com/plotly/react-alignment-viewer\n */\nexport default class AlignmentChart extends Component {\n render() {\n return (\n \n \n \n );\n }\n}\n\nAlignmentChart.propTypes = {\n /**\n * The ID of this component, used to identify dash components\n * in callbacks. The ID needs to be unique across all of the\n * components in an app.\n */\n id: PropTypes.string,\n\n /**\n * Dash-assigned callback that should be called whenever any of the\n * properties change.\n */\n setProps: PropTypes.func,\n\n /**\n * A Dash prop that returns data on clicking, hovering or resizing the viewer.\n */\n eventDatum: PropTypes.string,\n\n /**\n * Input data, either in FASTA or Clustal format.\n */\n data: PropTypes.string,\n\n /**\n *Format type of the input data, either in FASTA or Clustal.\n */\n extension: PropTypes.string,\n\n /**\n * Colorscale in 'buried', 'cinema', 'clustal', 'clustal2', 'helix', 'hydrophobicity'\n * 'lesk', 'mae', 'nucleotide', 'purine', 'strand', 'taylor', 'turn', 'zappo',\n * or your own colorscale as a {'nucleotide': COLOR} dict.\n * Note that this is NOT a standard plotly colorscale.\n */\n colorscale: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n /**\n * Opacity of the main plot as a value between 0 and 1.\n */\n opacity: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n\n /**\n * Color of the nucleotide labels, in common name, hex, rgb or rgba format.\n * If left blank, handled by the colorscale automatically.\n */\n textcolor: PropTypes.string,\n\n /**\n * Size of the nucleotide labels, as a number.\n */\n textsize: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n\n /**\n * Toggles displaying sequence labels at left of alignment\n */\n showlabel: PropTypes.bool,\n\n /**\n * Toggles displaying sequence IDs at left of alignment.\n */\n showid: PropTypes.bool,\n\n /**\n * Enables the display of conservation secondary barplot where the most conserved\n * nucleotides or amino acids get greater bars.\n */\n showconservation: PropTypes.bool,\n\n /**\n * Color of the conservation secondary barplot, in common name, hex, rgb or rgba format.\n */\n conservationcolor: PropTypes.string,\n\n /**\n * Colorscale of the conservation barplot, in Plotly colorscales (e.g. 'Viridis')\n * or as custom Plotly colorscale under a list format.\n * Note that this conservationcolorscale argument\n * does NOT follow the same format as the colorscale argument.\n */\n conservationcolorscale: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.array,\n ]),\n\n /**\n * Opacity of the conservation secondary barplot as a value between 0 and 1.\n */\n conservationopacity: PropTypes.oneOfType([\n PropTypes.number,\n PropTypes.string,\n ]),\n\n /**\n * Whether to use most conserved ratio (MLE) 'conservation'\n * or normalized entropy 'entropy' to determine conservation,\n * which is a value between 0 and 1 where 1 is most conserved.\n */\n conservationmethod: PropTypes.oneOf(['conservation', 'entropy']),\n\n /**\n * Whether to normalize the conservation barchart\n * By multiplying it elementwise with the gap barchart, as to\n * lower the conservation values across sequences regions with many gaps.\n */\n correctgap: PropTypes.bool,\n\n /**\n * Enables the display of gap secondary barplot where the sequence regions\n * with the fewest gaps get the greatest bars.\n */\n showgap: PropTypes.bool,\n\n /**\n * Color of the gap secondary barplot, in common name, hex, rgb or rgba format.\n */\n gapcolor: PropTypes.string,\n\n /**\n * Colorscale of the gap barplot, in Plotly colorscales (e.g. 'Viridis')\n * or as custom Plotly colorscale under a list format.\n * Note that this conservationcolorscale argument\n * does NOT follow the same format as the colorscale argument.\n */\n gapcolorscale: PropTypes.oneOfType([PropTypes.string, PropTypes.array]),\n\n /**\n * Opacity of the gap secondary barplot as a value between 0 and 1.\n */\n gapopacity: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n\n /**\n * If both conservation and gap are enabled,\n * toggles whether to group bars or to stack them as separate subplots.\n * No effect if not both gap and conservation are shown.\n */\n groupbars: PropTypes.bool,\n\n /**\n * Displays toggling the consensus sequence, where each nucleotide in the\n * consensus sequence is the argmax of its distribution at a set nucleotide.\n */\n showconsensus: PropTypes.bool,\n\n /**\n * Sets how many pixels each nucleotide/amino acid on the Alignment Chart\n * takes up horizontally. The total number of tiles (numtiles) seen\n * horizontally is automatically determined by rounding\n * the Viewer width divided by the tile width.\n * the Viewwer width divided by the tile witdth.\n */\n tilewidth: PropTypes.number,\n\n /**\n * Sets how many pixels each nucleotide/amino acid on the Alignment Chart\n * takes up vertically.\n * If enabled, set height dynamically.\n */\n tileheight: PropTypes.number,\n\n /**\n * Toggles whether the overview should be a heatmap, a slider, or none.\n */\n overview: PropTypes.oneOf(['heatmap', 'slider', 'none']),\n\n /**\n * Sets how many tiles to display across horitontally. If enabled,\n * overrides tilewidth and sets the amount of tiles directly based off\n * that value.\n */\n numtiles: PropTypes.number,\n\n /**\n * If overview is set to 'scroll', determines how many tiles to skip\n * with each slider movement.\n * Has no effect if scroll is not enabled (such as with overview or none).\n */\n scrollskip: PropTypes.number,\n\n /**\n * Determines where to start annotating the first tile.\n * If let blank will be automatically determined by Plotly.\n * Equivalent to Plotly's tick0 property.\n * Does not function if overview mode 'slider' is applied. (Current bug)\n */\n tickstart: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n\n /**\n * Determines at what interval to keep annotating the tiles.\n * If left blank will be automatially determined by Plotly.\n * Equivalent to Plotly's dtick property.\n * Does not function if overview mode 'slider' is applied. (Current bug)\n */\n ticksteps: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n\n /**\n * Width of the Viewer.\n * Property takes precedence over tileswidth and numtiles\n * if either of them is set.\n */\n width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n\n /**\n * Width of the Viewer.\n * Property takes precedence over tilesheight if both\n * are set.\n */\n height: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n};\n\nAlignmentChart.defaultProps = {\n // Data\n extension: 'fasta',\n colorscale: 'clustal2',\n opacity: null,\n textcolor: null,\n textsize: 10,\n showlabel: true,\n showid: true,\n showconservation: true,\n conservationcolor: null,\n conservationcolorscale: 'Viridis',\n conservationopacity: null,\n conservationmethod: 'entropy',\n correctgap: true,\n showgap: true,\n gapcolor: 'grey',\n gapcolorscale: null,\n gapopacity: null,\n groupbars: false,\n showconsensus: true,\n // Layout\n tilewidth: 16,\n tileheight: 16,\n numtiles: null,\n overview: 'heatmap',\n scrollskip: 10,\n tickstart: null,\n ticksteps: null,\n // Other\n width: null,\n height: 900,\n};\n\nexport const propTypes = AlignmentChart.propTypes;\nexport const defaultProps = AlignmentChart.defaultProps;\n","import PropTypes from 'prop-types';\nimport React, {Component, lazy, Suspense} from 'react';\nimport LazyLoader from '../LazyLoader';\n\nconst RealCircos = lazy(LazyLoader.circos);\n\n/**\n * Dash Circos is a library used to analyze and interpret\n * data using a circular layout, based on the popular\n * 'Circos' graph. This Dash Bio component is a useful tool\n * for showcasing relationships bewtween data/datasets in a\n * beautiful way. Please checkout the Dash Bio repository\n * on github to learn more about this API.\n */\nexport default class Circos extends Component {\n render() {\n return (\n \n \n \n );\n }\n}\n\nCircos.defaultProps = {\n config: {},\n size: 800,\n tracks: [],\n};\n\nCircos.propTypes = {\n /**\n * Allow for an SVG snapshot of the Circos graph to be downloaded.\n **/\n enableDownloadSVG: PropTypes.bool,\n\n /**\n * Allow for zooming and panning the Circos graph.\n **/\n enableZoomPan: PropTypes.bool,\n\n /**\n * The ID of the component to be used in Dash callbacks\n */\n id: PropTypes.string,\n\n /**\n * The CSS styling of the div wrapping the component\n */\n style: PropTypes.object,\n\n /**\n * A Dash prop that returns data on clicking or hovering of the tracks.\n * Depending on what is specified for prop \"selectEvent\".\n */\n eventDatum: PropTypes.object,\n\n /**\n * A dictionary used to choose whether tracks should return\n * data on click, hover, or both, with the dash prop \"eventDatum\".\n * The keys of the dictionary represent the index of the list\n * specified for \"tracks\".\n * Ex:\n * selectEvent={\n \"0\": \"hover\",\n \"1\": \"click\",\n \"2\": \"both\"\n },\n */\n selectEvent: PropTypes.object,\n\n /**\n * Dash provided setProps.\n */\n setProps: PropTypes.func,\n\n /**\n * The overall layout of the Circos graph, provided\n * as a list of dictionaries.\n */\n layout: PropTypes.arrayOf(\n PropTypes.shape({\n /**\n * The length of the block.\n */\n len: PropTypes.number.isRequired,\n\n /**\n * The color of the block.\n */\n color: PropTypes.string.isRequired,\n\n /**\n * The labels of the block.\n */\n label: PropTypes.string.isRequired,\n\n /**\n * The id of the block, where it will recieve\n * data from the specified \"track\" id.\n */\n id: PropTypes.string.isRequired,\n })\n ).isRequired,\n\n /**\n * Configuration of overall layout of the graph.\n */\n config: PropTypes.object,\n\n /**\n * The overall size of the SVG container holding the\n * graph. Set on initilization and unchangeable thereafter.\n */\n size: PropTypes.number,\n\n /**\n * Tracks that specify specific layouts.\n * For a complete list of tracks and usage,\n * please check the docs.\n */\n tracks: PropTypes.arrayOf(\n PropTypes.shape({\n /**\n * The id of a specific piece of track data.\n */\n id: PropTypes.string,\n\n /**\n * The data that makes up the track. It can\n * be a Json object.\n */\n data: PropTypes.array.isRequired,\n\n /**\n * The layout of the tracks, where the user\n * can configure innerRadius, outterRadius, ticks,\n * labels, and more.\n */\n config: PropTypes.object,\n\n /**\n * Specify the type of track this is.\n * Please check the docs for a list of tracks you can use,\n * and ensure the name is typed in all capitals.\n **/\n type: PropTypes.oneOf([\n 'CHORDS',\n 'HEATMAP',\n 'HIGHLIGHT',\n 'HISTOGRAM',\n 'LINE',\n 'SCATTER',\n 'STACK',\n 'TEXT',\n ]),\n\n /**\n * Specify what data for tooltipContent is\n * displayed.\n * The entry for the \"name\" key, is any of the keys used in the data loaded into tracks.\n * Ex: \"tooltipContent\": {\"name\": \"block_id\"},\n * To display all data in the dataset use \"all\" as the entry for the key \"name\".\n * Ex: \"tooltipContent\": {\"name\": \"all\"}\n * Ex: This will return (source) + ' > ' + (target) + ': ' + (targetEnd)'.\n * \"tooltipContent\": {\n \"source\": \"block_id\",\n \"target\": \"position\",\n \"targetEnd\": \"value\"\n },\n * Ex: This will return (source)(sourceID) + ' > ' + (target)(targetID) + ': ' (target)(targetEnd)'.\n * \"tooltipContent\": {\n \"source\": \"source\",\n \"sourceID\": \"id\",\n \"target\": \"target\",\n \"targetID\": \"id\",\n \"targetEnd\": \"end\"\n }\n **/\n tooltipContent: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.shape({\n name: PropTypes.string.isRequired,\n }),\n PropTypes.shape({\n source: PropTypes.string.isRequired,\n sourceID: PropTypes.string,\n target: PropTypes.string.isRequired,\n targetEnd: PropTypes.string.isRequired,\n targetID: PropTypes.string,\n }),\n ]),\n /**\n * Specify which dictonary key to grab color values from, in the passed in dataset.\n * This can be a string or an object.\n * If using a string, you can specify hex,\n * RGB, and colors from d3 scale chromatic (Ex: RdYlBu).\n * The key \"name\" is required for this dictionary,\n * where the input for \"name\" points to some list of\n * dictionaries color values.\n * Ex: \"color\": {\"name\": \"some key that refers to color in a data set\"}\n *\n **/\n color: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.shape({\n name: PropTypes.string.isRequired,\n }),\n ]),\n })\n ),\n};\n\nexport const propTypes = Circos.propTypes;\nexport const defaultProps = Circos.defaultProps;\n","import PropTypes from 'prop-types';\nimport React, {Component, lazy, Suspense} from 'react';\nimport LazyLoader from '../LazyLoader';\n\nconst RealIdeogram = lazy(LazyLoader.ideogram);\n\n/**\n * The Ideogram component is used to draw and animate genome-wide\n * datasets for organisms such as human, mouse, and any other\n * eukaryote. The Ideogram component can be used to compare\n * homologous features between chromosomes, and depict\n * haploid, diploid, aneuploid genomes. It can also display\n * annotations on genomic data using histograms and overlays.\n *\n * Reference: https://eweitz.github.io/ideogram/\n * Component's props: https://github.com/eweitz/ideogram/blob/master/api.md\n */\n\nexport default class Ideogram extends Component {\n render() {\n return (\n \n \n \n );\n }\n}\n\nIdeogram.defaultProps = {\n organism: 'human',\n dataDir: 'https://unpkg.com/ideogram@1.5.0/dist/data/bands/native/',\n annotationsColor: '#F00',\n annotationsLayout: 'tracks',\n barWidth: 3,\n chrHeight: 400,\n chrMargin: 10,\n chrWidth: 10,\n ploidy: 1,\n rotatable: true,\n showBandLabels: false,\n showChromosomeLabels: true,\n showAnnotTooltip: true,\n showFullyBanded: true,\n showNonNuclearChromosomes: false,\n};\n\nIdeogram.propTypes = {\n /**\n * The ID used to identify this component in Dash callbacks and used to identify Ideogram\n * instances.\n */\n id: PropTypes.string.isRequired,\n\n /**\n * The component's inline styles\n */\n style: PropTypes.object,\n\n /**\n * Dash specific prop type connecting event handlers to front end.\n */\n setProps: PropTypes.func,\n\n /**\n * The CSS class of the component wrapper\n */\n className: PropTypes.string,\n\n /**\n * Layout of ideogram annotations.\n * One of \"tracks\", \"histogram\", or \"overlay\".\n *\n * \"tracks\": display annotations in tracks beside each chromosome.\n *\n * \"histogram\": display annotations in a histogram. Clusters annotations by location. Each\n * cluster/bin is shown as a bar, the height of which represents the number of annotations on\n * genomic range.\n *\n * \"overlay\": display annotations directly over chromosomes.\n */\n annotationsLayout: PropTypes.oneOf(['tracks', 'histogram', 'overlay']),\n\n /**\n * A list of annotation objects. Annotation objects can also have a name, color, shape, and\n * track index. At the moment there is more keys specified and the docs need updating.\n */\n annotations: PropTypes.arrayOf(\n PropTypes.shape({\n name: PropTypes.string,\n chr: PropTypes.string,\n start: PropTypes.number,\n stop: PropTypes.number,\n })\n ),\n\n /**\n * An absolute or relative URL directing to a JSON file containing annotation objects (JSON).\n */\n annotationsPath: PropTypes.string,\n\n /**\n * Use this prop in a dash callback to return annotationData when hovered.\n * It is read-only, i.e., it cannot be used with dash.dependencies.Output but only with\n * dash.dependencies.Input\n */\n annotationsData: PropTypes.string,\n\n /**\n * A list of objects with metadata for each track, e.g., id, display name, color, shape.\n */\n annotationTracks: PropTypes.arrayOf(PropTypes.object),\n\n /**\n * Not used if annotationsLayout is set to \"overlay\".\n * The height of histogram bars or the size of annotations tracks symbols\n */\n annotationHeight: PropTypes.number,\n\n /**\n * Color of annotations.\n */\n annotationsColor: PropTypes.string,\n\n /**\n * Scaling of histogram bars height\n * Only used if annotationsLayout is set to \"histogram\".\n * One of \"absolute\" or \"relative\".\n *\n * \"absolute\": sets bar height relative to tallest bar in all chromosomes.\n * \"relative\": sets bar height relative to tallest bar in each chromosome.\n */\n histogramScaling: PropTypes.oneOf(['absolute', 'relative']),\n\n /**\n * Pixel width of histogram bars.\n * Only used if annotationsLayout is set to \"histogram\".\n **/\n barWidth: PropTypes.number,\n\n /**\n * Whether to show a tooltip upon mousing over an annotation.\n */\n showAnnotTooltip: PropTypes.bool,\n\n /**\n * Default: latest RefSeq assembly for specified organism.\n * The genome assembly to display.\n * Takes assembly name (e.g., \"GRCh37\"),\n * RefSeq accession (e.g., \"GCF_000306695.2\"),\n * or GenBank accession (e.g., \"GCA_000005005.5\")\n */\n assembly: PropTypes.string,\n\n /**\n * Genomic coordinate range (e.g., \"chr1:104325484-119977655\") for a brush on a\n * chromosome. Useful when ideogram consists of one chromosome and you want to be\n * able to focus on a region within that chromosome,\n * and create an interactive sliding window to other regions\n */\n\n brush: PropTypes.string,\n\n /**\n * A dash callback that is activated when the 'brush' prop is used.\n * It will return an dictionary like so:\n * {'start': , 'end': , 'extent': }\n * where start is the left most edge, end is right most edge, and extent is the total width of\n * the brush.\n * It is read-only, i.e., it cannot be used with dash.dependencies.Output but only with\n * dash.dependencies.Input\n */\n brushData: PropTypes.shape({\n start: PropTypes.string,\n end: PropTypes.string,\n extent: PropTypes.string,\n }),\n\n /**\n * CSS styling and the id of the container holding the Ideogram in\n * react-ideogram.js, this is where all the d3 magic happens.\n */\n container: PropTypes.string,\n\n /**\n * The pixel height of the tallest chromosome in the ideogram\n */\n chrHeight: PropTypes.number,\n\n /**\n * The pixel space of margin between each chromosome.\n */\n chrMargin: PropTypes.number,\n\n /**\n * The pixel width of each chromosome.\n */\n chrWidth: PropTypes.number,\n\n /**\n * A list of the names of chromosomes to display. Useful for depicting a subset of the\n * chromosomes in the genome, e.g., a single chromosome.\n *\n * If Homology (between two different species):\n * Ex: chromosomes={\n * 'human': ['1'],\n * 'mouse': ['4']\n * }\n *\n * General case to specify specific chromosomes:\n * Ex: chromosomes=['1', '2']\n */\n chromosomes: PropTypes.oneOfType([\n PropTypes.arrayOf(PropTypes.string),\n PropTypes.object,\n ]),\n\n /**\n * Absolute or relative URL of the directory containing data needed to draw banded chromosomes.\n * You will need to set up your own database to grab data from a custom database.\n */\n dataDir: PropTypes.string,\n\n /**\n * Organism(s) to show chromosomes for. Supply organism's name as a string (e.g., \"human\") or\n * organism's NCBI Taxonomy ID (taxid, e.g., 9606) to display chromosomes from a single\n * organism, or an array of organisms' names or taxids to display chromosomes from multiple\n * species.\n */\n organism: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n\n /**\n * Provide local JSON organism into this prop from a local user JSON file.\n * DataDir must not be initialized.\n */\n localOrganism: PropTypes.object,\n\n /**\n * Used to compare two chromosomes.\n * The keys \"chrOne\" and \"chrTwo\" represent one chromosome each. Organism is the taxID or name.\n * Start is an array, containing start one and start two, in this order. Stop is an array,\n * containing stop one, and stop two, in this order.\n * Ex: homology={\n * \"chrOne\": {\n * organism\": \"9606\",\n * \"start\": [50000, 155701383],\n * \"stop\": [900000, 156030895]\n * },\n * \"chrTwo\": {\n * organism\": \"10090\",\n * \"start\": [10001, 50000000],\n * \"stop\": [2781479, 57217415]\n * }\n * }\n */\n homology: PropTypes.shape({\n chrOne: PropTypes.shape({\n organism: PropTypes.string.isRequired,\n start: PropTypes.arrayOf(PropTypes.number.isRequired),\n stop: PropTypes.arrayOf(PropTypes.number.isRequired),\n }),\n chrTwo: PropTypes.shape({\n organism: PropTypes.string.isRequired,\n start: PropTypes.arrayOf(PropTypes.number.isRequired),\n stop: PropTypes.arrayOf(PropTypes.number.isRequired),\n }),\n }),\n\n /**\n * Use perspective: 'comparative' to enable annotations between two chromosomes,\n * either within the same organism or different organisms. Used for homology.\n */\n perspective: PropTypes.oneOf(['comparative']),\n\n /**\n * Whether to include abbreviation species name in chromosome label. Used for homology.\n */\n fullChromosomeLabels: PropTypes.bool,\n\n /**\n * The resolution of cytogenetic bands to show for each chromosome.\n * The quantity refers to an approximate value in bands per haploid set (bphs).\n * One of 450, 550, or 850.\n */\n resolution: PropTypes.number,\n\n /**\n * Whether annotations should be filterable or not.\n */\n filterable: PropTypes.bool,\n\n /**\n * The orientation of chromosomes on the page.\n */\n orientation: PropTypes.oneOf(['vertical', 'horizontal']),\n\n /**\n * The ploidy - number of chromosomes to depict for each chromosome set.\n */\n ploidy: PropTypes.number,\n\n /**\n * Description of ploidy in each chromosome set in terms of ancestry composition.\n */\n ploidyDesc: PropTypes.arrayOf(PropTypes.object),\n\n /**\n * A map associating ancestor labels to colors. Used to color\n * chromosomes from different ancestors in polyploid genomes.\n */\n ancestors: PropTypes.object,\n\n /**\n * List of objects describing segments of recombination among chromosomes in a chromosome set.\n */\n rangeSet: PropTypes.arrayOf(PropTypes.object),\n\n /**\n * Whether chromosomes are rotatable on click.\n */\n rotatable: PropTypes.bool,\n\n /**\n * Dash callback that returns true if rotated, and false if not.\n *\n */\n rotated: PropTypes.bool,\n\n /**\n * Useful for omitting chromosome Y in female animals.\n * Currently only supported for organisms that use XY sex-determination.\n */\n sex: PropTypes.oneOf(['male', 'female']),\n\n /**\n * Whether to show chromosome labels, e.g., 1, 2, 3, X, Y.\n */\n showChromosomeLabels: PropTypes.bool,\n\n /**\n * Whether to show cytogenetic band labels, e.g., 1q21.\n **/\n showBandLabels: PropTypes.bool,\n\n /**\n * Whether to show fully banded chromosomes for genomes that have sufficient data. Useful for\n * showing simpler chromosomes of cytogenetically well-characterized organisms, e.g., human,\n * beside chromosomes of less studied organisms, e.g., chimpanzee.\n */\n showFullyBanded: PropTypes.bool,\n\n /**\n * Whether to show non-nuclear chromosomes,\n * e.g., for mitochondrial (MT) and chloroplast (CP) DNA.\n */\n showNonNuclearChromosomes: PropTypes.bool,\n\n /**\n * Callback function to invoke after chromosome has rotated. (React)\n * onDidRotate: PropTypes.func,\n */\n\n /**\n * Dash event callback for hovering over data.\n * onMouseOver: PropTypes.func,\n */\n\n /**\n * Callback function to invoke when brush moves.\n * onBrushMove: PropTypes.func,\n */\n\n /**\n * Callback function to invoke when annotations are drawn. (React)\n * onDrawAnnots: PropTypes.func,\n */\n\n /**\n * Callback function to invoke when chromosomes are loaded,\n * i.e., rendered on the page. (React)\n * onLoad: PropTypes.func,\n */\n\n /**\n * Useful for putting ideogram into a small container,\n * or when dealing with genomes that have many chromosomes.\n * Note: Not fully working, needs to be fixed by developer.\n * rows: PropTypes.number,\n */\n\n /**\n * This is a work in progess and will hopefully be fixed in future releases.\n * https://eweitz.github.io/ideogram/annotations-heatmap\n * heatmaps: PropTypes.arrayOf(PropTypes.object),\n */\n};\n\nexport const defaultProps = Ideogram.defaultProps;\nexport const propTypes = Ideogram.propTypes;\n","import React, {Component, lazy, Suspense} from 'react';\nimport LazyLoader from '../LazyLoader';\nimport PropTypes from 'prop-types';\n\nconst RealIgv = lazy(LazyLoader.igv);\n/**\n * The Igv component is an interactive genome visualization component\n * developed by the Integrative Genomics Viewer (IGV) team. It uses an\n * example integration of igv.js and React (https://www.npmjs.com/package/igv).\n */\nexport default class Igv extends Component {\n render() {\n return (\n \n \n \n );\n }\n}\n\nIgv.defaultProps = {};\n\nIgv.propTypes = {\n /**\n * The ID of this component, used to identify dash components in callbacks.\n * The ID needs to be unique across all of the components in an app.\n */\n id: PropTypes.string,\n\n /**\n * Dash-assigned callback that should be called to report property changes\n * to Dash, to make them available for callbacks.\n */\n setProps: PropTypes.func,\n\n /**\n * Generic style overrides on the plot div\n */\n style: PropTypes.object,\n\n /**\n * className of the component div.\n */\n className: PropTypes.string,\n\n /**\n String identifier defining genome (e.g. \"hg19\"). See https://github.com/igvteam/igv.js/wiki/Reference-Genome\n for details and list of supported identifiers. Note: One (but only one) of\n either genome or reference properties must be set. If both are set,\n the genome property will be ignored.\n */\n\n genome: PropTypes.string,\n\n /**\n Object defining reference genome. see https://github.com/igvteam/igv.js/wiki/Reference-Genome\n Note: One (but only one) of either genome or reference properties must be set. If both are set,\n the genome property will be ignored.\n */\n reference: PropTypes.object,\n\n /**\n Initial genomic location(s). Either a string or an array of strings.\n If an array a viewport is created for each location.\n */\n locus: PropTypes.string,\n\n /**\n * Minimum window size in base pairs when zooming in\n */\n minimumBases: PropTypes.number,\n\n /**\n Array of configuration objects defining tracks initially displayed when app launches.\n see https://github.com/igvteam/igv.js/wiki/Tracks-2.0\n */\n tracks: PropTypes.array,\n};\n\nexport const defaultProps = Igv.defaultProps;\nexport const propTypes = Igv.propTypes;\n","import React, {Component, lazy, Suspense} from 'react';\nimport LazyLoader from '../LazyLoader';\nimport PropTypes from 'prop-types';\n\nconst RealPileup = lazy(LazyLoader.pileup);\n/**\n * The Pileup component is a genome visualization component\n * developed by the the Hammerlab. It uses an\n * example integration of pileup.js and React (https://www.npmjs.com/package/pileup).\n */\nexport default class Pileup extends Component {\n render() {\n return (\n \n \n \n );\n }\n}\n\nPileup.defaultProps = {};\n\nPileup.propTypes = {\n /**\n * The ID of this component, used to identify dash components in callbacks.\n * The ID needs to be unique across all of the components in an app.\n */\n id: PropTypes.string,\n\n /**\n * Dash-assigned callback that should be called to report property changes\n * to Dash, to make them available for callbacks.\n */\n setProps: PropTypes.func,\n\n /**\n * Generic style overrides on the plot div\n */\n style: PropTypes.object,\n\n /**\n * className of the component div.\n */\n className: PropTypes.string,\n\n /**\n Object defining genomic location.\n Of the format: {contig: 'chr17', start: 7512384, stop: 7512544}\n */\n range: PropTypes.exact({\n /**\n * Name of contig to display. (ie. chr17)\n */\n contig: PropTypes.string,\n\n /**\n * Start location to display\n */\n start: PropTypes.number,\n\n /**\n * Stop location to display\n */\n stop: PropTypes.number,\n }),\n\n /**\n Object defining genomic reference.\n */\n reference: PropTypes.exact({\n /**\n * Label to display by reference\n */\n label: PropTypes.string,\n\n /**\n * Url of 2bit file.\n https://genome.ucsc.edu/goldenPath/help/twoBit.html\n */\n url: PropTypes.string,\n }),\n\n /**\n Array of configuration objects defining tracks initially displayed when app launches.\n See https://github.com/hammerlab/pileup.js#usage\n */\n tracks: PropTypes.arrayOf(\n PropTypes.exact({\n /**\n * Name of visualization. Must be one of\n (coverage, genome, genes, features, idiogram, location, scale,\n variants, genotypes, or pileup). For more info on visualization\n types supported by pileup.js see https://github.com/akmorrow13/pileup.js/blob/master/src/main/pileup.js.\n\n */\n\n viz: PropTypes.oneOf([\n 'coverage',\n 'genome',\n 'genes',\n 'features',\n 'idiogram',\n 'location',\n 'scale',\n 'variants',\n 'genotypes',\n 'pileup',\n ]),\n\n /**\n * Options that define viz details.\n Options depend on the viz type selected.\n */\n vizOptions: PropTypes.Object,\n\n /**\n * Label to display by track\n */\n label: PropTypes.string,\n\n /**\n * Data source to visualize. Must be one of\n (bam, vcf, alignmentJson, variantJson, featureJson, idiogramJson, cytoBand,\n vcf, twoBit, bigBed, GAReadAlignment, GAVariant, GAFeature, GAGene). For more info on\n data source types supported by pileup.js see https://github.com/hammerlab/pileup.js/blob/master/src/main/pileup.js\n */\n source: PropTypes.oneOf([\n 'bam',\n 'alignmentJson',\n 'variantJson',\n 'featureJson',\n 'idiogramJson',\n 'cytoBand',\n 'vcf',\n 'twoBit',\n 'bigBed',\n 'GAReadAlignment',\n 'GAVariant',\n 'GAFeature',\n 'GAGene',\n ]),\n\n /**\n * Options that define data source.\n Options depend on the source selected.\n */\n sourceOptions: PropTypes.Object,\n })\n ),\n};\n\nexport const defaultProps = Pileup.defaultProps;\nexport const propTypes = Pileup.propTypes;\n","import PropTypes from 'prop-types';\nimport React, {Component, lazy, Suspense} from 'react';\nimport LazyLoader from '../LazyLoader';\n\nconst RealMolecule2dViewer = lazy(LazyLoader.molecule2dViewer);\n\n/**\n * The Molecule2dViewer component is used to render structural\n * formulae of molecules.\n * Read more about the component here:\n * https://github.com/Autodesk/molecule-2d-for-react\n */\nexport default class Molecule2dViewer extends Component {\n render() {\n return (\n \n \n \n );\n }\n}\n\nMolecule2dViewer.defaultProps = {\n width: 500,\n height: 500,\n modelData: {\n nodes: [],\n links: [],\n },\n};\n\nMolecule2dViewer.propTypes = {\n /**\n * The ID used to identify this component in callbacks.\n */\n id: PropTypes.string,\n\n /**\n * Dash-assigned callback that should be called whenever properties change.\n */\n setProps: PropTypes.func,\n\n /**\n * The selected atom IDs.\n */\n selectedAtomIds: PropTypes.arrayOf(PropTypes.number),\n\n /**\n * The width of the SVG element.\n */\n width: PropTypes.number,\n\n /**\n * The height of the SVG element.\n */\n height: PropTypes.number,\n\n /**\n * Description of the molecule to display.\n */\n modelData: PropTypes.shape({\n nodes: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.number,\n atom: PropTypes.string,\n })\n ),\n links: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.number,\n source: PropTypes.number | PropTypes.shape,\n target: PropTypes.number | PropTypes.shape,\n bond: PropTypes.number,\n strength: PropTypes.number,\n distance: PropTypes.number,\n })\n ),\n }),\n};\n\nexport const defaultProps = Molecule2dViewer.defaultProps;\nexport const propTypes = Molecule2dViewer.propTypes;\n","import PropTypes from 'prop-types';\nimport React, {Component, lazy, Suspense} from 'react';\nimport LazyLoader from '../LazyLoader';\n\nconst RealMolecule3dViewer = lazy(LazyLoader.molecule3dViewer);\n\n/**\n * The Molecule3dViewer component is used to render schematic diagrams\n * of biomolecules. It can display ribbon-structure diagrams, or\n * render atoms in the molecule as sticks or spheres.\n * Read more about the component here:\n * https://github.com/Autodesk/molecule-3d-for-react\n */\nexport default class Molecule3dViewer extends Component {\n render() {\n return (\n \n \n \n );\n }\n}\n\nMolecule3dViewer.defaultProps = {\n selectionType: 'atom',\n backgroundColor: '#FFFFFF',\n backgroundOpacity: 0,\n zoom: {\n factor: 0.8,\n animationDuration: 0,\n fixedPath: false,\n },\n zoomTo: {\n sel: {},\n animationDuration: 0,\n fixedPath: false,\n },\n};\n\nMolecule3dViewer.propTypes = {\n /**\n * The ID used to identify this component in callbacks\n */\n id: PropTypes.string,\n\n /**\n * Dash-assigned callback that should be called whenever properties change\n */\n setProps: PropTypes.func,\n\n /**\n * The selection type - may be atom, residue or chain\n */\n selectionType: PropTypes.oneOf(['atom', 'residue', 'chain']),\n\n /**\n * Property to change the background color of the molecule viewer\n */\n backgroundColor: PropTypes.string,\n\n /**\n * Property to change the background opacity - ranges from 0 to 1\n */\n backgroundOpacity: PropTypes.number,\n\n /**\n * Property that can be used to change the representation of\n * the molecule. Options include sticks, cartoon and sphere\n */\n styles: PropTypes.arrayOf(\n PropTypes.shape({\n color: PropTypes.string,\n visualization_type: PropTypes.oneOf(['cartoon', 'sphere', 'stick']),\n })\n ),\n\n /**\n * The data that will be used to display the molecule in 3D\n * The data will be in JSON format\n * and should have two main dictionaries - atoms, bonds\n */\n modelData: PropTypes.shape({\n atoms: PropTypes.array,\n bonds: PropTypes.array,\n }),\n\n /**\n * Property to either show or hide labels\n */\n atomLabelsShown: PropTypes.bool,\n\n /**\n * Property that stores a list of all selected atoms\n */\n selectedAtomIds: PropTypes.array,\n\n /**\n * Labels corresponding to the atoms of the molecule.\n * Each label has a `text` field, a string containing the label content,\n * and can have many other styling fields as described in\n * https://3dmol.csb.pitt.edu/doc/types.html#LabelSpec\n */\n labels: PropTypes.arrayOf(PropTypes.object),\n\n /**\n * Add an isosurface from volumetric data provided in the `cube_file`\n */\n orbital: PropTypes.exact({\n /**\n * The filepath containing raw volumetric data for vertex coloring\n */\n cube_file: PropTypes.string,\n /**\n * The isovalue to draw the surface at\n */\n iso_val: PropTypes.number,\n /**\n * Transparency of the surface, between 0 and 1\n */\n opacity: PropTypes.number,\n /**\n * Color for the positive value of the isosurface orbital\n */\n positiveVolumetricColor: PropTypes.string,\n /**\n * Color for the negative value of the isosurface orbital\n */\n negativeVolumetricColor: PropTypes.string,\n }),\n\n /**\n * Zoom the current view by a constant factor, with optional parameters\n * to modify the duration and motion of the zoom animation.\n */\n zoom: PropTypes.exact({\n /**\n * Magnification factor. Values greater than 1 will zoom,\n * in, less than one will zoom out. Default 2.\n */\n factor: PropTypes.number,\n /**\n * An optional parameter that denotes the duration of a\n * zoom animation, in milliseconds.\n */\n animationDuration: PropTypes.number,\n /**\n * If true, animation is constrained to requested motion,\n * overriding updates that happen during the animation.\n */\n fixedPath: PropTypes.bool,\n }),\n\n /**\n * Zoom to center of atom selection.\n */\n zoomTo: PropTypes.exact({\n /**\n * Selection specification specifying model and atom properties\n * to select. Default: all atoms in viewer.\n */\n sel: PropTypes.exact({\n /**\n * Chain that the residue is located on.\n */\n chain: PropTypes.string,\n /**\n * The index value used to identify the residue;\n * residues are numbered sequentially starting from 1.\n */\n res: PropTypes.number,\n }),\n /**\n * An optional parameter that denotes the duration of a zoom animation\n * , in milliseconds.\n */\n animationDuration: PropTypes.number,\n /**\n * If true, animation is constrained to requested motion,\n * overriding updates that happen during the animation.\n */\n fixedPath: PropTypes.bool,\n }),\n\n /**\n * Add a predefined renderable shape objects to the molecule.\n * Valid shape types are Arrow, Sphere, and Cylinder.\n */\n shapes: PropTypes.arrayOf(PropTypes.object),\n\n /**\n * Callback to re-render molecule viewer\n * when modelData is changed\n */\n onRenderNewData: PropTypes.func,\n\n /**\n * Callback to change append selectedAtomIds\n * when a selection is made\n */\n onChangeSelection: PropTypes.func,\n};\n\nexport const defaultProps = Molecule3dViewer.defaultProps;\nexport const propTypes = Molecule3dViewer.propTypes;\n","import PropTypes from 'prop-types';\nimport React, {Component, lazy, Suspense} from 'react';\nimport LazyLoader from '../LazyLoader';\n\nconst RealNeedlePlot = lazy(LazyLoader.needlePlot);\n\n/**\n * The Needle Plot component is used to visualize large datasets\n * containing categorical or numerical data. The lines and markers in\n * the plot correspond to bars in a histogram.\n **/\nexport default class NeedlePlot extends Component {\n render() {\n return (\n \n \n \n );\n }\n}\n\nNeedlePlot.propTypes = {\n /**\n * The ID of this component, used to identify dash components\n * in callbacks. The ID needs to be unique across all of the\n * components in an app.\n */\n id: PropTypes.string,\n\n /**\n * The data that are displayed on the plot\n */\n mutationData: PropTypes.shape({\n /*\n coordinate of mutations on the protein sequence\n */\n x: PropTypes.oneOfType([PropTypes.string, PropTypes.array]),\n /* value (could be the sample count), this property is not necessarily\n relevant, should match x in size\n */\n y: PropTypes.oneOfType([PropTypes.string, PropTypes.array]),\n /*\n type of mutations, should match x in size\n */\n mutationGroups: PropTypes.arrayOf(PropTypes.string),\n /*\n protein domains coordinates on the protein sequence\n */\n domains: PropTypes.array,\n }),\n\n /**\n * Title of the x-axis.\n **/\n xlabel: PropTypes.string,\n\n /**\n * Title of the y-axis.\n **/\n ylabel: PropTypes.string,\n\n /**\n * If true, enables a rangeslider for the x-axis.\n **/\n rangeSlider: PropTypes.bool,\n\n /**\n * Options for the needle marking single site mutations\n */\n needleStyle: PropTypes.shape({\n // Color of the stems of the needles\n stemColor: PropTypes.string,\n // Thickness of the stems of the needles\n stemThickness: PropTypes.number,\n // Decides whether all stems have same height or not\n stemConstHeight: PropTypes.bool,\n // Size of the heads of the needlehead\n headSize: PropTypes.number,\n // Color of the heads of the needlehead\n headColor: PropTypes.oneOfType([\n /* different color for different mutations, must be larger or\n\t equal to the size of the mutationGroup prop\n\t */\n PropTypes.array,\n // same color for all needles\n PropTypes.string,\n ]),\n // Style of the heads of the needlehead\n headSymbol: PropTypes.oneOfType([\n /* different marker for different mutations, must be larger or\n\t equal to the size of the mutationGroup prop\n\t */\n PropTypes.array,\n // same marker for all needles\n PropTypes.string,\n ]),\n }),\n\n /**\n * Options for the protein domain coloring\n */\n domainStyle: PropTypes.shape({\n // Color of the protein domains\n domainColor: PropTypes.array,\n /*\n\tthe prop x sometimes contains smaller domains (e.g. multi-site\n\tmutations), if true, they are displayed\n\t*/\n displayMinorDomains: PropTypes.bool,\n }),\n\n /**\n * Dash-assigned callback that should be called whenever any of the\n * properties change\n */\n setProps: PropTypes.func,\n};\n\nNeedlePlot.defaultProps = {\n mutationData: {\n x: [],\n y: [],\n domains: [],\n mutationGroups: [],\n },\n rangeSlider: false,\n needleStyle: {\n stemColor: '#444',\n stemThickness: 0.5,\n stemConstHeight: false,\n headSize: 5,\n headColor: [\n '#e41a1c',\n '#377eb8',\n '#4daf4a',\n '#984ea3',\n '#ff7f00',\n '#ffff33',\n '#a65628',\n '#f781bf',\n '#999999',\n '#e41a1c',\n '#377eb8',\n '#4daf4a',\n '#984ea3',\n '#ff7f00',\n '#ffff33',\n '#a65628',\n '#f781bf',\n '#999999',\n '#e41a1c',\n ],\n headSymbol: 'circle',\n },\n domainStyle: {\n displayMinorDomains: false,\n domainColor: [\n '#8dd3c7',\n '#ffffb3',\n '#bebada',\n '#fb8072',\n '#80b1d3',\n '#fdb462',\n '#b3de69',\n '#fccde5',\n '#d9d9d9',\n '#bc80bd',\n '#ccebc5',\n '#ffed6f',\n '#8dd3c7',\n '#ffffb3',\n '#bebada',\n '#fb8072',\n '#80b1d3',\n '#fdb462',\n '#b3de69',\n ],\n },\n};\n\nexport const defaultProps = NeedlePlot.defaultProps;\nexport const propTypes = NeedlePlot.propTypes;\n","import React, {Component, lazy, Suspense} from 'react';\nimport LazyLoader from '../LazyLoader';\nimport PropTypes from 'prop-types';\n\nconst RealNglMoleculeViewer = lazy(LazyLoader.nglmoleculeViewer);\n/**\n * The NglMoleculeViewer is used to render schematic diagrams\n * of biomolecules in ribbon-structure representations.\n * Read more about the component here:\n * https://github.com/IvoLeist/dash_ngl\n * Read more about the used WebGL protein viewer here:\n * https://github.com/arose/ngl\n */\nexport default class NglMoleculeViewer extends Component {\n render() {\n return (\n \n \n \n );\n }\n}\n\nconst defaultHeight = '600px';\n\nconst defaultWidth = '600px';\n\nconst defaultStageParameters = {\n quality: 'medium',\n backgroundColor: 'white',\n cameraType: 'perspective',\n};\n\nconst defaultImageParameters = {\n antialias: true,\n transparent: true,\n trim: true,\n defaultFilename: 'dash-bio_ngl_output',\n};\n\nconst defaultData = [\n {\n filename: 'placeholder',\n ext: '',\n selectedValue: 'placeholder',\n chain: 'ALL',\n aaRange: 'ALL',\n chosen: {\n chosenAtoms: '',\n chosenResidues: '',\n },\n color: 'red',\n config: {\n input: '',\n type: 'text/plain',\n },\n uploaded: false,\n resetView: false,\n },\n];\n\nNglMoleculeViewer.defaultProps = {\n data: defaultData,\n width: defaultWidth,\n height: defaultHeight,\n stageParameters: defaultStageParameters,\n imageParameters: defaultImageParameters,\n downloadImage: false,\n molStyles: {\n representations: ['cartoon', 'axes+box'],\n chosenAtomsColor: '#ffffff',\n chosenAtomsRadius: 1,\n molSpacingXaxis: 100,\n sideByside: false,\n },\n};\n\nNglMoleculeViewer.propTypes = {\n /**\n * The ID of this component, used to identify dash components in callbacks.\n * The ID needs to be unique across all of the components in an app.\n */\n id: PropTypes.string,\n\n /**\n * Dash-assigned callback that should be called whenever properties change.\n */\n setProps: PropTypes.func,\n\n /**\n * The width (in px or as a number) of the container\n * in which the molecules will be displayed.\n */\n width: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n\n /**\n * The height (in px or as a number) of the container\n * in which the molecules will be displayed.\n */\n height: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n\n /**\n * Parameters (in JSON format) for the stage object of ngl.\n * Currently implemented are render quality, background color and camera type\n * quality: auto, low, medium, high (default: auto)\n * backgroundColor: white / black (default: white)\n * cameraType: perspective / orthographic (default: perspective)\n */\n stageParameters: PropTypes.exact({\n quality: PropTypes.string,\n backgroundColor: PropTypes.string,\n cameraType: PropTypes.string,\n }),\n\n /**\n * Parameters (in JSON format) for exporting the image\n */\n imageParameters: PropTypes.exact({\n antialias: PropTypes.bool,\n transparent: PropTypes.bool,\n trim: PropTypes.bool,\n defaultFilename: PropTypes.string,\n }),\n\n /**\n * flag if download image was selected\n */\n downloadImage: PropTypes.bool,\n\n /**\n * Variable which defines how many molecules should be shown and/or which chain\n * The following format needs to be used:\n * pdbID1.chain:start-end@atom1,atom2_pdbID2.chain:start-end\n * . indicates that only one chain should be shown\n * : indicates that a specific amino acids range should be shown (e.g. 1-50)\n * @ indicates that chosen atoms should be highlighted (e.g. @50,100,150)\n * _ indicates that more than one protein should be shown\n */\n pdbString: PropTypes.string,\n\n /**\n * The data (in JSON format) that will be used to display the molecule\n * filename: name of the used pdb/cif file\n * ext: file extensions (pdb or cif)\n * selectedValue: pdbString\n * chain: ALL if the whole molecule shoud be displayed, e.g. A for showing only chain A\n * aaRange: ALL if the whole molecule should be displayed, e.g. 1:50 for showing only 50 atoms\n * color: chain color\n * chosen.atoms: string of the chosen Atoms, e.g. 50,100,150\n * --> chosen eatoms changed to colored 'ball'\n * chosen.residues: string of the chosen residues, e.g. 50,100,150\n * --> C alpha of chosen residue changed to colored 'ball'\n * config.input: content of the pdb file\n * config.type: format of config.input\n * uploaded: bool if file from local storage (false) or uploaded by user (true)\n * resetView: bool if the selection did not change but the view should be resettet (true)\n */\n data: PropTypes.arrayOf(\n PropTypes.exact({\n filename: PropTypes.string.isRequired,\n ext: PropTypes.string,\n selectedValue: PropTypes.string.isRequired,\n chain: PropTypes.string.isRequired,\n aaRange: PropTypes.string.isRequired,\n color: PropTypes.string.isRequired,\n chosen: PropTypes.exact({\n residues: PropTypes.string.isRequired,\n atoms: PropTypes.string.isRequired,\n }),\n config: PropTypes.exact({\n input: PropTypes.string.isRequired,\n type: PropTypes.string.isRequired,\n }),\n uploaded: PropTypes.bool.isRequired,\n resetView: PropTypes.bool.isRequired,\n })\n ),\n /**\n * The data (in JSON format) that will be used to style the displayed molecule\n * representations: one or multiple selected molecule representation\n * - Possible molecule styles:\n * 'backbone,'ball+stick','cartoon', 'hyperball','licorice','line',\n * 'ribbon',''rope','spacefill','surface','trace','tube'\n * - Possible additional representations:\n * 'axes','axes+box','helixorient','unitcell'\n * chosenAtomsColor: color of the 'ball+stick' representation of the chosen atoms\n * chosenAtomsRadius: radius of the 'ball+stick' representation of the chosen atoms\n * molSpacingXaxis: distance on the xAxis between each molecule\n */\n molStyles: PropTypes.exact({\n representations: PropTypes.arrayOf(PropTypes.string),\n chosenAtomsColor: PropTypes.string.isRequired,\n chosenAtomsRadius: PropTypes.number.isRequired,\n molSpacingXaxis: PropTypes.number.isRequired,\n sideByside: PropTypes.bool.isRequired,\n }),\n};\n\nexport const defaultProps = NglMoleculeViewer.defaultProps;\nexport const propTypes = NglMoleculeViewer.propTypes;\n","import PropTypes from 'prop-types';\nimport React, {Component, lazy, Suspense} from 'react';\nimport LazyLoader from '../LazyLoader';\n\nconst RealOncoPrint = lazy(LazyLoader.oncoPrint);\n\n/**\n * The OncoPrint component is used to view multiple genetic alteration events\n * through an interactive and zoomable heatmap. It is a React/Dash port of the\n * popular oncoPrint() function from the BioConductor R package.\n * Under the hood, the rendering is done using Plotly.js built upon D3.\n * Plotly's interactivity allows the user to bind clicks and hovers to genetic\n * events, allowing the user to create complex bioinformatic apps or workflows\n * that rely on crossfiltering.\n * Read more about the component here:\n * https://github.com/plotly/react-oncoprint\n */\nexport default class OncoPrint extends Component {\n render() {\n return (\n \n \n \n );\n }\n}\n\nOncoPrint.propTypes = {\n /**\n * The ID of this component, used to identify dash components\n * in callbacks. The ID needs to be unique to the component.\n */\n id: PropTypes.string,\n\n /**\n * Dash-assigned callback that should be called whenever any of the\n * properties change.\n */\n setProps: PropTypes.func,\n\n /**\n * A Dash prop that returns data on clicking, hovering or resizing the viewer.\n */\n eventDatum: PropTypes.object,\n\n /**\n * Input data, in CBioPortal format where each list entry is a dict\n * consisting of 'sample', 'gene', 'alteration', and 'type'\n */\n data: PropTypes.array,\n\n // TODO: Add remove empty columns prop\n\n /**\n * Adjusts the padding (as a proportion of whitespace) between two tracks.\n * Value is a ratio between 0 and 1.\n * Defaults to 0.05 (i.e., 5 percent). If set to 0, plot will look like a heatmap.\n */\n padding: PropTypes.number,\n\n /**\n * If not null, will override the default OncoPrint colorscale.\n * Default OncoPrint colorscale same as CBioPortal implementation.\n * Make your own colrscale as a {'mutation': COLOR} dict.\n * Supported mutation keys are ['MISSENSE, 'INFRAME', 'FUSION',\n * 'AMP', 'GAIN', 'HETLOSS', 'HMODEL', 'UP', 'DOWN']\n * Note that this is NOT a standard plotly colorscale.\n */\n colorscale: PropTypes.oneOfType([PropTypes.bool, PropTypes.object]),\n\n /**\n * Default color for the tracks, in common name, hex, rgb or rgba format.\n * If left blank, will default to a light grey rgb(190, 190, 190).\n */\n backgroundcolor: PropTypes.string,\n\n /**\n *.Toogles whether or not to show a legend on the right side of the plot,\n * with mutation information.\n */\n range: PropTypes.array,\n\n /**\n *.Toogles whether or not to show a legend on the right side of the plot,\n * with mutation information.\n */\n showlegend: PropTypes.bool,\n\n /**\n *.Toogles whether or not to show a heatmap overview of the tracks.\n */\n showoverview: PropTypes.bool,\n\n /**\n * Width of the OncoPrint.\n * Will disable auto-resizing of plots if set.\n */\n width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n\n /**\n * Height of the OncoPrint.\n * Will disable auto-resizing of plots if set.\n */\n height: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n};\n\nOncoPrint.defaultProps = {\n // Layout\n padding: 0.05,\n colorscale: null,\n backgroundcolor: 'rgb(190, 190, 190)',\n range: [null, null],\n showlegend: true,\n showoverview: true,\n width: null,\n height: 500,\n};\n\nexport const defaultProps = OncoPrint.defaultProps;\nexport const propTypes = OncoPrint.propTypes;\n","import PropTypes from 'prop-types';\nimport React, {Component, lazy, Suspense} from 'react';\nimport LazyLoader from '../LazyLoader';\n\nconst RealSequenceViewer = lazy(LazyLoader.sequenceViewer);\n\n/**\n * The sequence viewer component is used to display sequences\n * that represent proteins, strands of genomic information, and\n * more. It can apply a coverage to the sequence supplied (with\n * clickable coverage sections that can display specific information,\n * and an optional legend to describe the color codes used),\n * search through the sequence for specific regex, capture\n * mouse selection events of subparts of the sequence, display a\n * count of the number of nucleotides or amino acids in the\n * sequence,\n * Read more about the component here:\n * https://github.com/FlyBase/react-sequence-viewer\n */\nexport default class SequenceViewer extends Component {\n render() {\n return (\n \n \n \n );\n }\n}\n\nSequenceViewer.defaultProps = {\n sequence: '-',\n showLineNumbers: true,\n wrapAminoAcids: true,\n charsPerLine: 40,\n toolbar: false,\n search: true,\n title: '',\n sequenceMaxHeight: '400px',\n badge: true,\n selection: [],\n coverage: [],\n};\n\n/* eslint-disable consistent-return, no-unused-vars */\n\nSequenceViewer.propTypes = {\n /**\n * The ID used to identify this component in Dash callbacks.\n */\n id: PropTypes.string,\n\n /**\n * The amino acid sequence that will be displayed.\n */\n\n sequence: PropTypes.string,\n\n /**\n * The option of whether or not to display line numbers.\n */\n showLineNumbers: PropTypes.bool,\n\n /**\n * The option of whether or not to display the list of amino acids\n * as broken up into separate lines of a fixed length set by\n * charsPerLine.\n */\n wrapAminoAcids: PropTypes.bool,\n\n /**\n * The number of amino acids that will display per line.\n */\n charsPerLine: PropTypes.number,\n\n /**\n * The option of whether or not to display a toolbar at the top\n * that allows the user to choose the number of letters per line.\n */\n toolbar: PropTypes.bool,\n\n /**\n * The option of whether or not to include a search bar in\n * the header. This supports regex.\n */\n search: PropTypes.bool,\n\n /**\n * A string that displays at the top of the component.\n */\n title: PropTypes.string,\n\n /**\n * The maximum height of the sequence.\n */\n sequenceMaxHeight: PropTypes.string,\n\n /**\n * The option of whether or not to display a badge showing the\n * amino acid count at the top of the component beside the title.\n */\n badge: PropTypes.bool,\n\n /**\n * A highlighted section of the sequence; the color of the highlight\n * can also be defined. Takes a list of format [min, max, color] where\n * min is a number that represents the starting index of the selection,\n * max is a number that represents the stopping index of the selection,\n * and color is a string that defines the highlight color.\n * Cannot be used at the same time as coverage.\n */\n selection: function(props, propName, componentName) {\n if (\n props[propName] !== undefined &&\n ((typeof props[propName][0] !== 'undefined' &&\n typeof props[propName][0] !== 'number') ||\n (typeof props[propName][1] !== 'undefined' &&\n typeof props[propName][1] !== 'number') ||\n (typeof props[propName][2] !== 'undefined' &&\n typeof props[propName][2] !== 'string'))\n ) {\n return new Error(\n 'Invalid prop value. Selection should be an array with type [number, number, string].'\n );\n }\n },\n\n /**\n * A coverage of the entire sequence; each section of the sequence\n * can have its own text color, background color, tooltip (on hover),\n * and an optional underscore. The props start and end represent the\n * beginning and terminating indices of the section in question.\n * Cannot be used at the same time as selection.\n */\n coverage: PropTypes.arrayOf(\n PropTypes.shape({\n start: PropTypes.number,\n end: PropTypes.number,\n color: PropTypes.string,\n bgcolor: PropTypes.string,\n tooltip: PropTypes.string,\n underscore: PropTypes.bool,\n onclick: PropTypes.func,\n })\n ),\n\n /**\n * A legend corresponding to the color codes above (optionally displayed).\n */\n legend: PropTypes.arrayOf(\n PropTypes.shape({\n name: PropTypes.string,\n color: PropTypes.string,\n underscore: PropTypes.bool,\n })\n ),\n\n /**\n * Contains the index of the section that was clicked last in\n * the coverage list supplied.\n */\n\n coverageClicked: PropTypes.number,\n\n /**\n * Contains information about the subsequence selected\n * by the mouse. Start and end refer to the initial and\n * final indices, respectively, of the subsequence, and\n * \"selection\" contains the string that is selected.\n */\n mouseSelection: PropTypes.shape({\n start: PropTypes.number,\n end: PropTypes.number,\n selection: PropTypes.string,\n }),\n\n /**\n * A list of the subparts selected using the\n * \"search\" function or the \"selection\" property.\n */\n subpartSelected: PropTypes.arrayOf(\n PropTypes.shape({\n start: PropTypes.number,\n end: PropTypes.number,\n sequence: PropTypes.string,\n })\n ),\n\n /**\n * Dash-assigned callback that should be called whenever any of the\n * properties change.\n */\n setProps: PropTypes.func,\n};\n\nexport const defaultProps = SequenceViewer.defaultProps;\nexport const propTypes = SequenceViewer.propTypes;\n","import PropTypes from 'prop-types';\nimport React, {Component, lazy, Suspense} from 'react';\nimport LazyLoader from '../LazyLoader';\n\nimport {speckView} from 'speck';\n\nconst RealSpeck = lazy(LazyLoader.speck);\n\n/**\n * The Speck component is a WebGL-based 3D molecule renderer.\n * Read more about the component here:\n * https://github.com/wwwtyro/speck\n **/\nexport default class Speck extends Component {\n render() {\n return (\n \n \n \n );\n }\n}\n\nSpeck.defaultProps = {\n view: speckView.new(),\n data: [],\n};\n\nSpeck.propTypes = {\n /**\n * The ID used to identify this component in Dash callbacks.\n */\n\n id: PropTypes.string,\n\n /**\n * The xyz file data; a list of atoms such that each atom\n * has a dictionary defining the x, y, and z coordinates\n * along with the atom's symbol.\n */\n\n data: PropTypes.arrayOf(\n PropTypes.shape({\n symbol: PropTypes.string,\n x: PropTypes.number,\n y: PropTypes.number,\n z: PropTypes.number,\n })\n ),\n\n /**\n * The option of whether or not to allow scrolling to control\n * the zoom.\n */\n\n scrollZoom: PropTypes.bool,\n\n /**\n * An object that determines and controls various parameters\n * related to how the molecule is displayed.\n */\n view: PropTypes.shape({\n aspect: PropTypes.number,\n zoom: PropTypes.number,\n translation: PropTypes.shape({\n x: PropTypes.number,\n y: PropTypes.number,\n }),\n atomScale: PropTypes.number,\n relativeAtomScale: PropTypes.number,\n bondScale: PropTypes.number,\n rotation: PropTypes.shape({}),\n ao: PropTypes.number,\n aoRes: PropTypes.number,\n brightness: PropTypes.number,\n outline: PropTypes.number,\n spf: PropTypes.number,\n bonds: PropTypes.bool,\n bondThreshold: PropTypes.number,\n bondShade: PropTypes.number,\n atomShade: PropTypes.number,\n resolution: PropTypes.number,\n dofStrength: PropTypes.number,\n dofPosition: PropTypes.number,\n fxaa: PropTypes.number,\n }),\n\n /**\n * One of several pre-loaded views: default, stick-ball, toon,\n * and licorice\n */\n presetView: PropTypes.oneOf(['default', 'stickball', 'toon', 'licorice']),\n\n /**\n * Dash-assigned callback that should be called whenever any of the\n * properties change.\n */\n\n setProps: PropTypes.func,\n};\n\nexport const defaultProps = Speck.defaultProps;\nexport const propTypes = Speck.propTypes;\n","const speckRenderer = require('../src/renderer.js');\nconst speckSystem = require('../src/system.js');\nconst speckView = require('../src/view.js');\nconst speckInteractions = require('../src/interactions.js');\nconst speckPresetViews = require('../src/presets.js');\n\nmodule.exports = {\n speckRenderer,\n speckSystem,\n speckView,\n speckInteractions,\n speckPresetViews\n}\n","\"use strict\";\n\nvar elements = require(\"./elements\");\n\nvar MIN_ATOM_RADIUS = Infinity;\nvar MAX_ATOM_RADIUS = -Infinity;\nfor (var i = 0; i <= 118; i++) {\n MIN_ATOM_RADIUS = Math.min(MIN_ATOM_RADIUS, elements[i].radius);\n MAX_ATOM_RADIUS = Math.max(MAX_ATOM_RADIUS, elements[i].radius);\n}\n\nmodule.exports.MIN_ATOM_RADIUS = MIN_ATOM_RADIUS;\nmodule.exports.MAX_ATOM_RADIUS = MAX_ATOM_RADIUS;","\"use strict\";\n\nvar glm = require(\"./gl-matrix\")\n\nvar elements = require(\"./elements\");\nvar consts = require(\"./const\");\n\nvar newSystem = module.exports.new = function() {\n return {\n atoms: [],\n farAtom: undefined,\n bonds: []\n }\n};\n\n\nvar calculateBonds = module.exports.calculateBonds = function(s) {\n var bonds = [];\n var sorted = s.atoms.slice();\n sorted.sort(function(a, b) {\n return a.z - b.z;\n });\n for (var i = 0; i < sorted.length; i++) {\n var a = sorted[i];\n var j = i + 1;\n while(j < sorted.length && sorted[j].z < sorted[i].z + 2.5 * 2 * consts.MAX_ATOM_RADIUS) {\n var b = sorted[j];\n var l = glm.vec3.fromValues(a.x, a.y, a.z);\n var m = glm.vec3.fromValues(b.x, b.y, b.z);\n var d = glm.vec3.distance(l, m);\n var ea = elements[a.symbol];\n var eb = elements[b.symbol];\n if (d < 2.5*(ea.radius+eb.radius)) {\n bonds.push({\n posA: {\n x: a.x,\n y: a.y,\n z: a.z\n },\n posB: {\n x: b.x,\n y: b.y,\n z: b.z\n },\n radA: ea.radius,\n radB: eb.radius,\n colA: {\n r: ea.color[0],\n g: ea.color[1],\n b: ea.color[2]\n },\n colB: {\n r: eb.color[0],\n g: eb.color[1],\n b: eb.color[2]\n },\n cutoff: d/(ea.radius+eb.radius)\n });\n }\n j++;\n }\n }\n bonds.sort(function(a, b) {\n return a.cutoff - b.cutoff;\n });\n s.bonds = bonds;\n}\n\n\nvar addAtom = module.exports.addAtom = function(s, symbol, x, y, z) {\n s.atoms.push({\n symbol: symbol,\n x: x,\n y: y,\n z: z,\n });\n};\n\nvar getCentroid = module.exports.getCentroid = function(s) {\n var xsum = 0;\n var ysum = 0;\n var zsum = 0;\n for (var i = 0; i < s.atoms.length; i++) {\n xsum += s.atoms[i].x;\n ysum += s.atoms[i].y;\n zsum += s.atoms[i].z;\n }\n return {\n x: xsum/s.atoms.length,\n y: ysum/s.atoms.length,\n z: zsum/s.atoms.length\n };\n};\n\nvar center = module.exports.center = function(s) {\n var shift = getCentroid(s);\n for (var i = 0; i < s.atoms.length; i++) {\n var atom = s.atoms[i];\n atom.x -= shift.x;\n atom.y -= shift.y;\n atom.z -= shift.z;\n }\n}\n\nvar getFarAtom = module.exports.getFarAtom = function(s) {\n if (s.farAtom !== undefined) {\n return s.farAtom;\n }\n s.farAtom = s.atoms[0];\n var maxd = 0.0;\n for (var i = 0; i < s.atoms.length; i++) {\n var atom = s.atoms[i];\n var r = elements[atom.symbol].radius;\n var rd = Math.sqrt(r*r + r*r + r*r) * 2.5;\n var d = Math.sqrt(atom.x*atom.x + atom.y*atom.y + atom.z*atom.z) + rd;\n if (d > maxd) {\n maxd = d;\n s.farAtom = atom;\n }\n }\n return s.farAtom;\n}\n\nvar getRadius = module.exports.getRadius = function(s) {\n var atom = getFarAtom(s);\n var r = consts.MAX_ATOM_RADIUS;\n var rd = Math.sqrt(r*r + r*r + r*r) * 2.5;\n return Math.sqrt(atom.x*atom.x + atom.y*atom.y + atom.z*atom.z) + rd;\n}\n","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"fornac\"] = factory();\n\telse\n\t\troot[\"fornac\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\texports.rnaPlot = exports.RNAGraph = undefined;\n\n\tvar _rnagraph = __webpack_require__(1);\n\n\tObject.defineProperty(exports, 'RNAGraph', {\n\t enumerable: true,\n\t get: function get() {\n\t return _rnagraph.RNAGraph;\n\t }\n\t});\n\n\tvar _rnaplot = __webpack_require__(3);\n\n\tObject.defineProperty(exports, 'rnaPlot', {\n\t enumerable: true,\n\t get: function get() {\n\t return _rnaplot.rnaPlot;\n\t }\n\t});\n\texports.FornaContainer = FornaContainer;\n\n\t__webpack_require__(15);\n\n\tvar _d = __webpack_require__(17);\n\n\tvar _d2 = _interopRequireDefault(_d);\n\n\tvar _simplernaplot = __webpack_require__(4);\n\n\tvar _rnautils = __webpack_require__(2);\n\n\tvar _naview = __webpack_require__(5);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\tfunction FornaContainer(element, passedOptions) {\n\t var self = this;\n\n\t self.options = {\n\t 'displayAllLinks': false,\n\t 'labelInterval': 10,\n\t 'applyForce': true,\n\t 'chargeDistance': 110,\n\t 'friction': 0.35,\n\t 'middleCharge': -30,\n\t 'otherCharge': -30,\n\t 'linkDistanceMultiplier': 15,\n\t 'initialSize': null,\n\t 'layout': 'standard-polygonal',\n\t 'allowPanningAndZooming': true,\n\t 'transitionDuration': 500,\n\t 'resizeSvgOnResize': true //change the size of the svg when resizing the container\n\t //sometimes its beneficial to turn this off, especially when\n\t //performance is an issue\n\t };\n\n\t if (arguments.length > 1) {\n\t for (var option in passedOptions) {\n\t if (self.options.hasOwnProperty(option)) self.options[option] = passedOptions[option];\n\t }\n\t }\n\n\t if (self.options.initialSize !== null) {\n\t self.options.svgW = self.options.initialSize[0];\n\t self.options.svgH = self.options.initialSize[1];\n\t } else {\n\t self.options.svgW = 800;\n\t self.options.svgH = 800;\n\t }\n\n\t var fill = _d2.default.scale.category20();\n\n\t // mouse event vars\n\t var mousedownLink = null,\n\t mousedownNode = null,\n\t mouseupNode = null;\n\n\t var xScale = _d2.default.scale.linear().domain([0, self.options.svgW]).range([0, self.options.svgW]);\n\t var yScale = _d2.default.scale.linear().domain([0, self.options.svgH]).range([0, self.options.svgH]);\n\n\t var graph = self.graph = {\n\t 'nodes': [],\n\t 'links': []\n\t };\n\n\t self.linkStrengths = {\n\t 'pseudoknot': 0.00,\n\t 'proteinChain': 0.00,\n\t 'chainChain': 0.00,\n\t 'intermolecule': 10.00,\n\t 'external': 0.00,\n\t 'other': 10.00\n\t };\n\n\t self.displayParameters = {\n\t 'displayBackground': 'true',\n\t 'displayNumbering': 'true',\n\t 'displayNodeOutline': 'true',\n\t 'displayNodeLabel': 'true',\n\t 'displayLinks': 'true',\n\t 'displayPseudoknotLinks': 'true',\n\t 'displayProteinLinks': 'true'\n\t };\n\n\t self.colorScheme = 'structure';\n\t self.customColors = {};\n\t self.animation = self.options.applyForce;\n\t // don't listen to events because a model window is open somewhere\n\t self.deaf = false;\n\t self.rnas = {};\n\t self.extraLinks = []; //store links between different RNAs\n\n\t Array.prototype.equals = function (array) {\n\t // if the other array is a falsy value, return\n\t if (!array) return false;\n\n\t // compare lengths - can save a lot of time\n\t if (this.length != array.length) return false;\n\n\t for (var i = 0, l = this.length; i < l; i++) {\n\t // Check if we have nested arrays\n\t if (this[i] instanceof Array && array[i] instanceof Array) {\n\t // recurse into the nested arrays\n\t if (!this[i].equals(array[i])) return false;\n\t } else if (this[i] != array[i]) {\n\t // Warning - two different object instances will never be equal: {x:20} != {x:20}\n\t return false;\n\t }\n\t }\n\t return true;\n\t };\n\n\t self.createInitialLayout = function (structure, passedOptions) {\n\t // the default options\n\t var options = {\n\t 'sequence': '',\n\t 'name': 'empty',\n\t 'positions': [],\n\t 'labelInterval': self.options.labelInterval,\n\t 'avoidOthers': true,\n\t 'uids': [],\n\t 'circularizeExternal': true\n\t };\n\n\t if (arguments.length == 2) {\n\t for (var option in passedOptions) {\n\t if (options.hasOwnProperty(option)) options[option] = passedOptions[option];\n\t }\n\t }\n\n\t var rg = new _rnagraph.RNAGraph(options.sequence, structure, options.name);\n\t rg.circularizeExternal = options.circularizeExternal;\n\n\t var rnaJson = rg.recalculateElements();\n\n\t if (options.positions.length === 0) {\n\t // no provided positions means we need to calculate an initial layout\n\n\t if (self.options.layout == 'naview') {\n\t var naview = new _naview.NAView();\n\n\t var naViewPositions = naview.naview_xy_coordinates(rg.pairtable);\n\t options.positions = [];\n\t for (var _i = 0; _i < naViewPositions.nbase; _i++) {\n\t options.positions.push([naViewPositions.x[_i], naViewPositions.y[_i]]);\n\t }\n\t } else {\n\t options.positions = (0, _simplernaplot.simpleXyCoordinates)(rnaJson.pairtable);\n\t }\n\t }\n\n\t rnaJson = rnaJson.elementsToJson().addUids(options.uids).addPositions('nucleotide', options.positions).addLabels(1, options.labelInterval).reinforceStems().reinforceLoops().connectFakeNodes().reassignLinkUids().breakNodesToFakeNodes();\n\n\t return rnaJson;\n\t };\n\n\t self.addRNA = function (structure, passedOptions) {\n\t var rnaJson = self.createInitialLayout(structure, passedOptions);\n\n\t /*\n\t * Code to display the JSONs representing the structure\n\t *\n\t rnaJson.nodes[0].rna = null;\n\t rnaJson.nodes[0].nextNode = null;\n\t rnaJson.links[0].source = null;\n\t rnaJson.links[0].target = null;\n\t console.log(rnaJson.nodes[0]);\n\t console.log(rnaJson.links[0]);\n\t console.log(JSON.stringify(rnaJson.nodes[0],null,2));\n\t console.log(JSON.stringify(rnaJson.links[0],null,2));\n\t */\n\n\t if (arguments.length === 1) passedOptions = {};\n\n\t if ('extraLinks' in passedOptions) {\n\t // presumably the passed in links are within the passed molecule\n\t var newLinks = self.addExternalLinks(rnaJson, passedOptions.extraLinks);\n\n\t self.extraLinks = self.extraLinks.concat(newLinks);\n\t }\n\n\t if ('avoidOthers' in passedOptions) self.addRNAJSON(rnaJson, passedOptions.avoidOthers);else self.addRNAJSON(rnaJson, true);\n\n\t return rnaJson;\n\t };\n\n\t self.addExternalLinks = function (rnaJson, externalLinks) {\n\t var newLinks = [];\n\n\t for (var i = 0; i < externalLinks.length; i++) {\n\t var newLink = { linkType: 'external', value: 1, uid: generateUUID(),\n\t source: null, target: null };\n\t // check if the source node is an array\n\t if (Object.prototype.toString.call(externalLinks[i][0]) === '[object Array]') {\n\t for (var j = 0; j < rnaJson.nodes.length; j++) {\n\t if ('nucs' in rnaJson.nodes[j]) {\n\t if (rnaJson.nodes[j].nucs.equals(externalLinks[i][0])) {\n\t newLink.source = rnaJson.nodes[j];\n\t break;\n\t }\n\t }\n\t }\n\t } else {\n\t for (var j = 0; j < rnaJson.nodes.length; j++) {\n\t if (rnaJson.nodes[j].num == externalLinks[i][0]) {\n\t newLink.source = rnaJson.nodes[j];\n\t }\n\t }\n\t }\n\n\t // check if the target node is an array\n\t if (Object.prototype.toString.call(externalLinks[i][1]) === '[object Array]') {\n\t for (var j = 0; j < rnaJson.nodes.length; j++) {\n\t if ('nucs' in rnaJson.nodes[j]) {\n\t if (rnaJson.nodes[j].nucs.equals(externalLinks[i][1])) {\n\t newLink.target = rnaJson.nodes[j];\n\t }\n\t }\n\t }\n\t } else {\n\t for (var j = 0; j < rnaJson.nodes.length; j++) {\n\t if (rnaJson.nodes[j].num == externalLinks[i][1]) {\n\t newLink.target = rnaJson.nodes[j];\n\t }\n\t }\n\t }\n\n\t if (newLink.source == null || newLink.target == null) {\n\t console.log('ERROR: source or target of new link not found:', newLink, externalLinks[i]);\n\t continue;\n\t }\n\n\t newLinks.push(newLink);\n\t }\n\n\t return newLinks;\n\t };\n\n\t self.addRNAJSON = function (rnaGraph, avoidOthers) {\n\t // Add an RNAGraph, which contains nodes and links as part of the\n\t // structure\n\t // Each RNA will have uid to identify it\n\t // when it is modified, it is replaced in the global list of RNAs\n\t //\n\t var maxX, minX;\n\n\t if (avoidOthers) {\n\t if (self.graph.nodes.length > 0) maxX = _d2.default.max(self.graph.nodes.map(function (d) {\n\t return d.x;\n\t }));else maxX = 0;\n\n\t minX = _d2.default.min(rnaGraph.nodes.map(function (d) {\n\t return d.x;\n\t }));\n\n\t rnaGraph.nodes.forEach(function (node) {\n\t node.x += maxX - minX + 20;\n\t node.px += maxX - minX;\n\t });\n\t }\n\n\t rnaGraph.nodes.forEach(function (node) {\n\t node.rna = rnaGraph;\n\t });\n\n\t self.rnas[rnaGraph.uid] = rnaGraph;\n\t self.recalculateGraph();\n\n\t self.update();\n\t self.centerView();\n\n\t return rnaGraph;\n\t };\n\n\t function magnitude(x) {\n\t return Math.sqrt(x[0] * x[0] + x[1] * x[1]);\n\t }\n\n\t function positionAnyNode(d) {\n\t var endPoint = d;\n\t var startPoint = d.prevNode;\n\t var lengthMult = 6;\n\n\t if (startPoint === null) return;\n\n\t // does this node have a link pointing to it?\n\t if (!d.linked) return;\n\n\t // point back toward the previous node\n\t var u = [-(endPoint.x - startPoint.x), -(endPoint.y - startPoint.y)];\n\t u = [u[0] / magnitude(u), u[1] / magnitude(u)];\n\t var v = [-u[1], u[0]];\n\n\t var arrowTip = [d.radius * u[0], d.radius * u[1]];\n\n\t var path = 'M' + (arrowTip[0] + lengthMult * (u[0] + v[0]) / 2) + ',' + (arrowTip[1] + lengthMult * (u[1] + v[1]) / 2) + 'L' + arrowTip[0] + ',' + arrowTip[1] + 'L' + (arrowTip[0] + lengthMult * (u[0] - v[0]) / 2) + ',' + (arrowTip[1] + lengthMult * (u[1] - v[1]) / 2);\n\n\t _d2.default.select(this).attr('d', path);\n\t }\n\n\t function realLinkFilter(d) {\n\t return d.linkType == 'basepair' || d.linkType == 'backbone' || d.linkType == 'pseudoknot' || d.linkType == 'label_link' || d.linkType == 'external' || d.linkType == 'chain_chain';\n\t }\n\n\t self.transitionRNA = function (newStructure, nextFunction) {\n\t //transition from an RNA which is already displayed to a new structure\n\t var duration = self.options.transitionDuration;\n\n\t var uids = self.graph.nodes.filter(function (d) {\n\t return d.nodeType == 'nucleotide';\n\t }).map(function (d) {\n\t return d.uid;\n\t });\n\n\t var options = { 'uids': uids };\n\t var newRNAJson = self.createInitialLayout(newStructure, options);\n\n\t var gnodes = visNodes.selectAll('g.gnode').data(newRNAJson.nodes, nodeKey);\n\t var duration = self.options.transitionDuration;\n\n\t if (duration === 0) gnodes.attr('transform', function (d) {\n\t return 'translate(' + [d.x, d.y] + ')';\n\t });else {\n\t gnodes.transition().attr('transform', function (d) {\n\t return 'translate(' + [d.x, d.y] + ')';\n\t }).duration(duration);\n\t }\n\n\t var links = visLinks.selectAll('line.link').data(newRNAJson.links.filter(realLinkFilter), linkKey);\n\t var newNodes = self.createNewNodes(gnodes.enter()).attr('transform', function (d) {\n\t if (typeof d.x != 'undefined' && typeof d.y != 'undefined') return 'translate(' + [0, 0] + ')';else return '';\n\t });\n\n\t if (duration === 0) gnodes.exit().remove();else gnodes.exit().transition().attr('transform', function (d) {\n\t if (typeof d.x != 'undefined' && typeof d.y != 'undefined') return 'translate(' + [0, 0] + ')';else return '';\n\t });\n\n\t gnodes.select('path').each(positionAnyNode);\n\n\t self.graph.nodes = gnodes.data();\n\t self.updateStyle();\n\t self.centerView(duration);\n\n\t function endall(transition, callback) {\n\t if (transition.size() === 0) {\n\t setTimeout(callback, duration);\n\t }\n\t var n = 0;\n\t transition.each(function () {\n\t ++n;\n\t }).each('end', function () {\n\t if (! --n) callback.apply(this, arguments);\n\t });\n\t }\n\n\t function addNewLinks() {\n\t var newLinks = self.createNewLinks(links.enter());\n\t self.graph.links = links.data();\n\n\t self.updateStyle();\n\n\t if (typeof nextFunction != 'undefined') nextFunction();\n\t }\n\n\t links.exit().remove();\n\n\t if (duration === 0) {\n\t links.attr('x1', function (d) {\n\t return d.source.x;\n\t }).attr('y1', function (d) {\n\t return d.source.y;\n\t }).attr('x2', function (d) {\n\t return d.target.x;\n\t }).attr('y2', function (d) {\n\t return d.target.y;\n\t });\n\n\t var newLinks = self.createNewLinks(links.enter());\n\t self.graph.links = links.data();\n\n\t self.updateStyle();\n\t } else {\n\t links.transition().attr('x1', function (d) {\n\t return d.source.x;\n\t }).attr('y1', function (d) {\n\t return d.source.y;\n\t }).attr('x2', function (d) {\n\t return d.target.x;\n\t }).attr('y2', function (d) {\n\t return d.target.y;\n\t }).duration(duration).call(endall, addNewLinks);\n\t }\n\n\t if (duration === 0) {\n\t newNodes.attr('transform', function (d) {\n\t if (typeof d.x != 'undefined' && typeof d.y != 'undefined') return 'translate(' + [d.x, d.y] + ')';else return '';\n\t });\n\t } else {\n\t newNodes.transition().attr('transform', function (d) {\n\t if (typeof d.x != 'undefined' && typeof d.y != 'undefined') return 'translate(' + [d.x, d.y] + ')';else return '';\n\t });\n\t }\n\t };\n\n\t self.recalculateGraph = function () {\n\t // Condense all of the individual RNAs into one\n\t // collection of nodes and links\n\t self.graph.nodes = [];\n\t self.graph.links = [];\n\t for (var uid in self.rnas) {\n\t self.graph.nodes = self.graph.nodes.concat(self.rnas[uid].nodes);\n\t self.graph.links = self.graph.links.concat(self.rnas[uid].links);\n\t }\n\n\t // Create a lookup table so that we can access each node\n\t // based on its uid. This will be used to create the links\n\t // between different RNAs\n\t var uidsToNodes = {};\n\n\t for (var i = 0; i < self.graph.nodes.length; i++) {\n\t uidsToNodes[self.graph.nodes[i].uid] = self.graph.nodes[i];\n\t }self.graph.links.forEach(function (link) {\n\t link.source = uidsToNodes[link.source.uid];\n\t link.target = uidsToNodes[link.target.uid];\n\t });\n\n\t for (i = 0; i < self.extraLinks.length; i++) {\n\t // the actual node objects may have changed, so we hae to recreate\n\t // the extra links based on the uids\n\n\t if (!(self.extraLinks[i].target.uid in uidsToNodes)) {\n\t console.log('not there:', self.extraLinks[i]);\n\t }\n\n\t self.extraLinks[i].source = uidsToNodes[self.extraLinks[i].source.uid];\n\t self.extraLinks[i].target = uidsToNodes[self.extraLinks[i].target.uid];\n\n\t if (self.extraLinks[i].linkType == 'intermolecule') {\n\t //remove links to middle nodes\n\t fakeLinks = self.graph.links.filter(function (d) {\n\t return (d.source == self.extraLinks[i].source || d.source == self.extraLinks[i].target || d.target == self.extraLinks[i].source || d.target == self.extraLinks[i].source) && d.linkType == 'fake';\n\t });\n\n\t for (var j = 0; j < fakeLinks.length; j++) {\n\t var linkIndex = self.graph.links.indexOf(fakeLinks[j]);\n\t self.graph.links.splice(linkIndex, 1);\n\t }\n\t }\n\n\t graph.links.push(self.extraLinks[i]);\n\t }\n\t };\n\n\t self.addNodes = function addNodes(json) {\n\t // add a new set of nodes from a json file\n\n\t // Resolve the sources and targets of the links so that they\n\t // are not just indeces into an array\n\t json.links.forEach(function (entry) {\n\t if (typeof entry.source == 'number') entry.source = json.nodes[entry.source];\n\t if (typeof entry.target == 'number') entry.target = json.nodes[entry.target];\n\t });\n\n\t // Get the maximum x and y values of the current graph\n\t // so that we don't place a new structure on top of the\n\t // old one\n\t if (self.graph.nodes.length > 0) {\n\t maxX = _d2.default.max(self.graph.nodes.map(function (d) {\n\t return d.x;\n\t }));\n\t maxY = _d2.default.max(self.graph.nodes.map(function (d) {\n\t return d.y;\n\t }));\n\t } else {\n\t maxX = 0;\n\t maxY = 0;\n\t }\n\n\t json.nodes.forEach(function (entry) {\n\t if (!(entry.rna.uid in self.rnas)) {\n\t self.rnas[entry.rna.uid] = entry.rna;\n\t }\n\n\t entry.x += maxX;\n\t //entry.y += maxY;\n\n\t entry.px += maxX;\n\t //entry.py += maxY;\n\t });\n\n\t r = new _rnagraph.RNAGraph('', '');\n\t r.nodes = json.nodes;\n\t r.links = json.links;\n\n\t //self.addRNA(r);\n\t self.recalculateGraph();\n\n\t self.update();\n\t self.centerView();\n\t };\n\n\t self.addCustomColors = function addCustomColors(json) {\n\t // Add a json file containing the custom colors\n\t self.customColors = json;\n\t };\n\n\t self.addCustomColorsText = function (customColorsText) {\n\t var cs = new _rnautils.ColorScheme(customColorsText);\n\t self.customColors = cs.colorsJson;\n\t self.changeColorScheme('custom');\n\t };\n\n\t self.clearNodes = function clearNodes() {\n\t self.graph.nodes = [];\n\t self.graph.links = [];\n\n\t self.rnas = {};\n\t self.extraLinks = [];\n\n\t self.update();\n\t };\n\n\t self.toJSON = function toJSON() {\n\t var data = { 'rnas': self.rnas, 'extraLinks': self.extraLinks };\n\t var dataString = JSON.stringify(data, function (key, value) {\n\t //remove circular references\n\t if (key == 'rna') {\n\t return;\n\t } else {\n\t return value;\n\t }\n\t }, '\\t');\n\t return dataString;\n\t };\n\n\t self.fromJSON = function (jsonString) {\n\t var rnas, extraLinks;\n\n\t try {\n\t var data = JSON.parse(jsonString);\n\t rnas = data.rnas;\n\t extraLinks = data.extraLinks;\n\t } catch (err) {\n\t throw err;\n\t }\n\n\t for (var uid in rnas) {\n\t if (rnas[uid].type == 'rna') {\n\t r = new _rnagraph.RNAGraph();\n\n\t r.seq = rnas[uid].seq;\n\t r.dotbracket = rnas[uid].dotbracket;\n\t r.circular = rnas[uid].circular;\n\t r.pairtable = rnas[uid].pairtable;\n\t r.uid = rnas[uid].uid;\n\t r.structName = rnas[uid].structName;\n\t r.nodes = rnas[uid].nodes;\n\t r.links = rnas[uid].links;\n\t r.rnaLength = rnas[uid].rnaLength;\n\t r.elements = rnas[uid].elements;\n\t r.nucsToNodes = rnas[uid].nucsToNodes;\n\t r.pseudoknotPairs = rnas[uid].pseudoknotPairs;\n\t } else {\n\t r = new ProteinGraph();\n\t r.size = rnas[uid].size;\n\t r.nodes = rnas[uid].nodes;\n\t r.uid = rnas[uid].uid;\n\t }\n\n\t self.addRNAJSON(r, false);\n\t }\n\n\t extraLinks.forEach(function (link) {\n\t self.extraLinks.push(link);\n\t });\n\n\t self.recalculateGraph();\n\t self.update();\n\t };\n\n\t self.setSize = function () {\n\t if (self.options.initialSize != null) return;\n\n\t var svgH = _d2.default.select(element).node().offsetHeight;\n\t var svgW = _d2.default.select(element).node().offsetWidth;\n\n\t self.options.svgW = svgW;\n\t self.options.svgH = svgH;\n\n\t //Set the output range of the scales\n\t xScale.range([0, svgW]).domain([0, svgW]);\n\t yScale.range([0, svgH]).domain([0, svgH]);\n\n\t //re-attach the scales to the zoom behaviour\n\t self.zoomer.x(xScale).y(yScale);\n\n\t self.brusher.x(xScale).y(yScale);\n\n\t self.centerView();\n\n\t if (!self.options.resizeSvgOnResize) {\n\t return;\n\t }\n\n\t //resize the background\n\t /*\n\t rect.attr('width', svgW)\n\t .attr('height', svgH);\n\t */\n\n\t svg.attr('width', svgW).attr('height', svgH);\n\t };\n\n\t function changeColors(moleculeColors, d, scale) {\n\t if (moleculeColors.hasOwnProperty(d.num)) {\n\t var val = parseFloat(moleculeColors[d.num]);\n\n\t if (isNaN(val)) {\n\t // passed in color is not a scalar, so\n\t // treat it as a color\n\t return moleculeColors[d.num];\n\t } else {\n\t // the user passed in a float, let's use a colormap\n\t // to convert it to a color\n\t return scale(val);\n\t }\n\t } else {\n\t return 'white';\n\t }\n\t }\n\n\t self.setOutlineColor = function (color) {\n\t var nodes = visNodes.selectAll('g.gnode').select('[node_type=nucleotide]');\n\t nodes.style('fill', color);\n\t };\n\n\t self.changeColorScheme = function (newColorScheme) {\n\t var proteinNodes = visNodes.selectAll('[node_type=protein]');\n\n\t proteinNodes.classed('protein', true).attr('r', function (d) {\n\t return d.radius;\n\t });\n\n\t var gnodes = visNodes.selectAll('g.gnode');\n\t var circles = visNodes.selectAll('g.gnode').selectAll('circle');\n\t var nodes = visNodes.selectAll('g.gnode').select('[node_type=nucleotide]');\n\t self.colorScheme = newColorScheme;\n\n\t if (newColorScheme == 'sequence') {\n\t var scale = _d2.default.scale.ordinal().range(['#dbdb8d', '#98df8a', '#ff9896', '#aec7e8', '#aec7e8']).domain(['A', 'C', 'G', 'U', 'T']);\n\t nodes.style('fill', function (d) {\n\t return scale(d.name);\n\t });\n\t } else if (newColorScheme == 'structure') {\n\t var scale = _d2.default.scale.category10().domain(['s', 'm', 'i', 'e', 't', 'h', 'x']).range(['lightgreen', '#ff9896', '#dbdb8d', 'lightsalmon', 'lightcyan', 'lightblue', 'transparent']);\n\n\t nodes.style('fill', function (d) {\n\t return scale(d.elemType);\n\t });\n\t } else if (newColorScheme == 'positions') {\n\t nodes.style('fill', function (d) {\n\t var scale = _d2.default.scale.linear().range(['#98df8a', '#dbdb8d', '#ff9896']).interpolate(_d2.default.interpolateLab).domain([1, 1 + (d.rna.rnaLength - 1) / 2, d.rna.rnaLength]);\n\n\t return scale(d.num);\n\t });\n\t } else if (newColorScheme == 'custom') {\n\t // scale to be used in case the user passes scalar\n\t // values rather than color names\n\t if (typeof self.customColors != 'undefined' && 'domain' in self.customColors && 'range' in self.customColors) {\n\t var scale = _d2.default.scale.linear().interpolate(_d2.default.interpolateLab).domain(self.customColors.domain).range(self.customColors.range);\n\t }\n\n\t nodes.style('fill', function (d) {\n\t if (typeof self.customColors == 'undefined' || !self.customColors.hasOwnProperty('colorValues')) {\n\t return 'white';\n\t }\n\n\t if (self.customColors.colorValues.hasOwnProperty(d.structName) && self.customColors.colorValues[d.structName].hasOwnProperty(d.num)) {\n\t // if a molecule name is specified, it supercedes the default colors\n\t // (for which no molecule name has been specified)\n\t var moleculeColors = self.customColors.colorValues[d.structName];\n\t return changeColors(moleculeColors, d, scale);\n\t } else if (self.customColors.colorValues.hasOwnProperty('')) {\n\t var _moleculeColors = self.customColors.colorValues[''];\n\t return changeColors(_moleculeColors, d, scale);\n\t }\n\n\t return 'white';\n\t });\n\t }\n\t };\n\n\t function mousedown() {}\n\n\t function mousemove() {\n\t if (!mousedownNode) return;\n\n\t mpos = _d2.default.mouse(vis.node());\n\t // update drag line\n\t dragLine.attr('x1', mousedownNode.x).attr('y1', mousedownNode.y).attr('x2', mpos[0]).attr('y2', mpos[1]);\n\t }\n\n\t function mouseup() {\n\t if (mousedownNode) {\n\t dragLine.attr('class', 'drag_line_hidden');\n\t }\n\n\t // clear mouse event vars\n\t resetMouseVars();\n\t //update()\n\t }\n\t //adapt size to window changes:\n\t window.addEventListener('resize', self.setSize, false);\n\n\t self.zoomer = _d2.default.behavior.zoom().scaleExtent([0.1, 10]).x(xScale).y(yScale).on('zoomstart', zoomstart).on('zoom', redraw);\n\n\t _d2.default.select(element).select('svg').remove();\n\n\t var svg = _d2.default.select(element).classed('forna-container', true).attr('tabindex', 1).on('keydown.brush', keydown).on('keyup.brush', keyup).each(function () {\n\t this.focus();\n\t }).append('svg:svg').attr('width', self.options.svgW).attr('height', self.options.svgH).attr('id', 'plotting-area');\n\n\t self.options.svg = svg;\n\n\t var svgGraph = svg.append('svg:g').on('mousemove', mousemove).on('mousedown', mousedown).on('mouseup', mouseup);\n\n\t if (self.options.allowPanningAndZooming) svgGraph.call(self.zoomer);\n\n\t /*\n\t var rect = svgGraph.append('svg:rect')\n\t .attr('width', self.options.svgW)\n\t .attr('height', self.options.svgH)\n\t .attr('fill', 'white')\n\t //.attr('stroke', 'grey')\n\t //.attr('stroke-width', 1)\n\t //.attr('pointer-events', 'all')\n\t .attr('id', 'zrect');\n\t */\n\n\t var brush = svgGraph.append('g').datum(function () {\n\t return { selected: false, previouslySelected: false };\n\t }).attr('class', 'brush');\n\n\t var vis = svgGraph.append('svg:g');\n\t var visLinks = vis.append('svg:g');\n\t var visNodes = vis.append('svg:g');\n\n\t self.brusher = _d2.default.svg.brush().x(xScale).y(yScale).on('brushstart', function (d) {\n\t var gnodes = visNodes.selectAll('g.gnode').selectAll('.outline_node');\n\t gnodes.each(function (d) {\n\t d.previouslySelected = ctrlKeydown && d.selected;\n\t });\n\t }).on('brush', function () {\n\t var gnodes = visNodes.selectAll('g.gnode').selectAll('.outline_node');\n\t var extent = _d2.default.event.target.extent();\n\n\t gnodes.classed('selected', function (d) {\n\t return d.selected = self.options.applyForce && d.previouslySelected ^ (extent[0][0] <= d.x && d.x < extent[1][0] && extent[0][1] <= d.y && d.y < extent[1][1]);\n\t });\n\t }).on('brushend', function () {\n\t _d2.default.event.target.clear();\n\t _d2.default.select(this).call(_d2.default.event.target);\n\t });\n\n\t brush.call(self.brusher).on('mousedown.brush', null).on('touchstart.brush', null).on('touchmove.brush', null).on('touchend.brush', null);\n\t brush.select('.background').style('cursor', 'auto');\n\n\t function zoomstart() {\n\t var node = visNodes.selectAll('g.gnode').selectAll('.outline_node');\n\t node.each(function (d) {\n\t d.selected = false;\n\t d.previouslySelected = false;\n\t });\n\t node.classed('selected', false);\n\t }\n\n\t function redraw() {\n\t vis.attr('transform', 'translate(' + _d2.default.event.translate + ')' + ' scale(' + _d2.default.event.scale + ')');\n\t }\n\n\t self.getBoundingBoxTransform = function () {\n\t // Center the view on the molecule(s) and scale it so that everything\n\t // fits in the window\n\n\t //no molecules, nothing to do\n\t if (self.graph.nodes.length === 0) return { 'translate': [0, 0], 'scale': 1 };\n\n\t // Get the bounding box\n\t var minX = _d2.default.min(self.graph.nodes.map(function (d) {\n\t return d.x;\n\t }));\n\t var minY = _d2.default.min(self.graph.nodes.map(function (d) {\n\t return d.y;\n\t }));\n\n\t var maxX = _d2.default.max(self.graph.nodes.map(function (d) {\n\t return d.x;\n\t }));\n\t var maxY = _d2.default.max(self.graph.nodes.map(function (d) {\n\t return d.y;\n\t }));\n\n\t // The width and the height of the molecule\n\t var molWidth = maxX - minX;\n\t var molHeight = maxY - minY;\n\n\t // how much larger the drawing area is than the width and the height\n\t var widthRatio = self.options.svgW / (molWidth + 1);\n\t var heightRatio = self.options.svgH / (molHeight + 1);\n\n\t // we need to fit it in both directions, so we scale according to\n\t // the direction in which we need to shrink the most\n\t var minRatio = Math.min(widthRatio, heightRatio) * 0.8;\n\n\t // the new dimensions of the molecule\n\t var newMolWidth = molWidth * minRatio;\n\t var newMolHeight = molHeight * minRatio;\n\n\t // translate so that it's in the center of the window\n\t var xTrans = -minX * minRatio + (self.options.svgW - newMolWidth) / 2;\n\t var yTrans = -minY * minRatio + (self.options.svgH - newMolHeight) / 2;\n\n\t return { 'translate': [xTrans, yTrans], 'scale': minRatio };\n\t };\n\n\t self.centerView = function (duration) {\n\t if (arguments.length === 0) duration = 0;\n\n\t var bbTransform = self.getBoundingBoxTransform();\n\n\t if (bbTransform === null) return;\n\n\t // do the actual moving\n\t vis.transition().attr('transform', 'translate(' + bbTransform.translate + ')' + ' scale(' + bbTransform.scale + ')').duration(duration);\n\n\t // tell the zoomer what we did so that next we zoom, it uses the\n\t // transformation we entered here\n\t self.zoomer.translate(bbTransform.translate);\n\t self.zoomer.scale(bbTransform.scale);\n\t };\n\n\t self.force = _d2.default.layout.force().charge(function (d) {\n\t if (d.nodeType == 'middle') {\n\t return self.options.middleCharge;\n\t } else return self.options.otherCharge;\n\t }).friction(self.options.friction).linkDistance(function (d) {\n\t return self.options.linkDistanceMultiplier * d.value;\n\t }).linkStrength(function (d) {\n\t if (d.linkType in self.linkStrengths) {\n\t return self.linkStrengths[d.linkType];\n\t } else {\n\t return self.linkStrengths.other;\n\t }\n\t }).gravity(0.000).nodes(self.graph.nodes).links(self.graph.links).chargeDistance(self.options.chargeDistance).size([self.options.svgW, self.options.svgH]);\n\n\t // line displayed when dragging new nodes\n\t var dragLine = vis.append('line').attr('class', 'drag_line').attr('x1', 0).attr('y1', 0).attr('x2', 0).attr('y2', 0);\n\n\t function resetMouseVars() {\n\t mousedownNode = null;\n\t mouseupNode = null;\n\t mousedownLink = null;\n\t }\n\n\t var shiftKeydown = false;\n\t var ctrlKeydown = false;\n\n\t function selectedNodes(mouseDownNode) {\n\t var gnodes = visNodes.selectAll('g.gnode');\n\n\t if (ctrlKeydown) {\n\t return gnodes.filter(function (d) {\n\t return d.selected;\n\t });\n\n\t //return d3.selectAll('[struct_name=' + mouseDownNode.struct_name + ']');\n\t } else {\n\t return gnodes.filter(function (d) {\n\t return d.selected;\n\t });\n\t //return d3.select(this);\n\t }\n\t }\n\n\t function dragstarted(d) {\n\t _d2.default.event.sourceEvent.stopPropagation();\n\n\t if (!d.selected && !ctrlKeydown) {\n\t // if this node isn't selected, then we have to unselect every other node\n\t var node = visNodes.selectAll('g.gnode').selectAll('.outline_node');\n\t node.classed('selected', function (p) {\n\t return p.selected = self.options.applyForce && (p.previouslySelected = false);\n\t });\n\t }\n\n\t _d2.default.select(this).select('.outline_node').classed('selected', function (p) {\n\t d.previouslySelected = d.selected;return d.selected = self.options.applyForce && true;\n\t });\n\n\t var toDrag = selectedNodes(d);\n\t toDrag.each(function (d1) {\n\t d1.fixed |= 2;\n\t });\n\n\t //d3.event.sourceEvent.stopPropagation();\n\t //d3.select(self).classed('dragging', true);\n\t //\n\t }\n\n\t function dragged(d) {\n\n\t var toDrag = selectedNodes(d);\n\n\t toDrag.each(function (d1) {\n\t d1.x += _d2.default.event.dx;\n\t d1.y += _d2.default.event.dy;\n\n\t d1.px += _d2.default.event.dx;\n\t d1.py += _d2.default.event.dy;\n\t });\n\n\t self.resumeForce();\n\t _d2.default.event.sourceEvent.preventDefault();\n\t }\n\n\t self.resumeForce = function () {\n\t if (self.animation) self.force.resume();\n\t };\n\n\t function dragended(d) {\n\t var toDrag = selectedNodes(d);\n\n\t toDrag.each(function (d1) {\n\t d1.fixed &= ~6;\n\t });\n\t }\n\n\t function collide(node) {\n\t var r = node.radius + 16,\n\t nx1 = node.x - r,\n\t nx2 = node.x + r,\n\t ny1 = node.y - r,\n\t ny2 = node.y + r;\n\t return function (quad, x1, y1, x2, y2) {\n\t if (quad.point && quad.point !== node) {\n\t var x = node.x - quad.point.x,\n\t y = node.y - quad.point.y,\n\t l = Math.sqrt(x * x + y * y),\n\t r = node.radius + quad.point.radius;\n\t if (l < r) {\n\t l = (l - r) / l * 0.1;\n\t node.x -= x *= l;\n\t node.y -= y *= l;\n\t quad.point.x += x;\n\t quad.point.y += y;\n\t }\n\t }\n\t return x1 > nx2 || x2 < nx1 || y1 > ny2 || y2 < ny1;\n\t };\n\t }\n\n\t var drag = _d2.default.behavior.drag()\n\t //.origin(function(d) { return d; })\n\t .on('dragstart', dragstarted).on('drag', dragged).on('dragend', dragended);\n\n\t function keydown() {\n\t if (self.deaf)\n\t // lalalalal, not listening\n\t return;\n\n\t if (shiftKeydown) return;\n\n\t switch (_d2.default.event.keyCode) {\n\t case 16:\n\t shiftKeydown = true;\n\t break;\n\t case 17:\n\t ctrlKeydown = true;\n\t break;\n\t case 67:\n\t //c\n\t self.centerView();\n\t break;\n\t }\n\n\t if (shiftKeydown || ctrlKeydown) {\n\t svgGraph.call(self.zoomer).on('mousedown.zoom', null).on('touchstart.zoom', null).on('touchmove.zoom', null).on('touchend.zoom', null);\n\n\t //svgGraph.on('zoom', null);\n\t vis.selectAll('g.gnode').on('mousedown.drag', null);\n\t }\n\n\t if (ctrlKeydown) {\n\t brush.select('.background').style('cursor', 'crosshair');\n\t brush.call(self.brusher);\n\t }\n\t }\n\n\t function keyup() {\n\t shiftKeydown = false;\n\t ctrlKeydown = false;\n\n\t brush.call(self.brusher).on('mousedown.brush', null).on('touchstart.brush', null).on('touchmove.brush', null).on('touchend.brush', null);\n\n\t brush.select('.background').style('cursor', 'auto');\n\t svgGraph.call(self.zoomer);\n\n\t vis.selectAll('g.gnode').call(drag);\n\t }\n\n\t _d2.default.select(element).on('keydown', keydown).on('keyup', keyup).on('contextmenu', function () {\n\t _d2.default.event.preventDefault();\n\t });\n\n\t var linkKey = function linkKey(d) {\n\t return d.uid;\n\t };\n\n\t var nodeKey = function nodeKey(d) {\n\t var key = d.uid;\n\t return key;\n\t };\n\n\t var updateRnaGraph = function updateRnaGraph(r) {\n\t var nucleotidePositions = r.getPositions('nucleotide');\n\t var labelPositions = r.getPositions('label');\n\n\t var uids = r.getUids();\n\n\t r.recalculateElements().elementsToJson().addPseudoknots().addPositions('nucleotide', nucleotidePositions).addUids(uids).addLabels(1, self.options.labelInterval).addPositions('label', labelPositions).reinforceStems().reinforceLoops().updateLinkUids();\n\t };\n\n\t var removeLink = function removeLink(d) {\n\t // remove a link between two nodes\n\t index = self.graph.links.indexOf(d);\n\n\t if (index > -1) {\n\t //remove a link\n\t //graph.links.splice(index, 1);\n\n\t // there should be two cases\n\t // 1. The link is within a single molecule\n\n\t if (d.source.rna == d.target.rna) {\n\t var r = d.source.rna;\n\n\t r.addPseudoknots();\n\t r.pairtable[d.source.num] = 0;\n\t r.pairtable[d.target.num] = 0;\n\n\t updateRnaGraph(r);\n\t } else {\n\t // 2. The link is between two different molecules\n\t extraLinkIndex = self.extraLinks.indexOf(d);\n\n\t self.extraLinks.splice(extraLinkIndex, 1);\n\t }\n\n\t self.recalculateGraph();\n\t }\n\n\t self.update();\n\t };\n\n\t var linkClick = function linkClick(d) {\n\t if (!shiftKeydown) {\n\t return;\n\t }\n\n\t var invalidLinks = { 'backbone': true,\n\t 'fake': true,\n\t 'fake_fake': true,\n\t 'label_link': true };\n\n\t if (d.linkType in invalidLinks) return;\n\n\t removeLink(d);\n\t };\n\n\t self.addLink = function (newLink) {\n\t // this means we have a new json, which means we have\n\t // to recalculate the structure and change the colors\n\t // appropriately\n\t //\n\t if (newLink.source.rna == newLink.target.rna) {\n\t r = newLink.source.rna;\n\n\t r.pairtable[newLink.source.num] = newLink.target.num;\n\t r.pairtable[newLink.target.num] = newLink.source.num;\n\n\t updateRnaGraph(r);\n\t } else {\n\t //Add an extra link\n\t newLink.linkType = 'intermolecule';\n\t self.extraLinks.push(newLink);\n\t }\n\t self.recalculateGraph();\n\t self.update();\n\t };\n\n\t var nodeMouseclick = function nodeMouseclick(d) {\n\t if (_d2.default.event.defaultPrevented) return;\n\n\t if (!ctrlKeydown) {\n\t //if the shift key isn't down, unselect everything\n\t var node = visNodes.selectAll('g.gnode').selectAll('.outline_node');\n\t node.classed('selected', function (p) {\n\t return p.selected = self.options.applyForce && (p.previouslySelected = false);\n\t });\n\t }\n\n\t // always select this node\n\t _d2.default.select(this).select('circle').classed('selected', d.selected = self.options.applyForce && !d.previouslySelected);\n\t };\n\n\t var nodeMouseup = function nodeMouseup(d) {\n\t if (mousedownNode) {\n\t mouseupNode = d;\n\n\t if (mouseupNode == mousedownNode) {\n\t resetMouseVars();return;\n\t }\n\t var newLink = { source: mousedownNode, target: mouseupNode, linkType: 'basepair', value: 1, uid: generateUUID() };\n\n\t for (i = 0; i < self.graph.links.length; i++) {\n\t if (self.graph.links[i].source == mousedownNode || self.graph.links[i].target == mousedownNode || self.graph.links[i].source == mouseupNode || self.graph.links[i].target == mouseupNode) {\n\n\t if (self.graph.links[i].linkType == 'basepair' || self.graph.links[i].linkType == 'pseudoknot') {\n\t return;\n\t }\n\t }\n\n\t if (self.graph.links[i].source == mouseupNode && self.graph.links[i].target == mousedownNode || self.graph.links[i].source == mousedownNode && self.graph.links[i].target == mouseupNode) {\n\t if (self.graph.links[i].linkType == 'backbone') {\n\t return;\n\t }\n\t }\n\t }\n\n\t if (mouseupNode.nodeType == 'middle' || mousedownNode.nodeType == 'middle' || mouseupNode.nodeType == 'label' || mousedownNode.nodeType == 'label') return;\n\n\t self.addLink(newLink);\n\t }\n\t };\n\n\t var nodeMousedown = function nodeMousedown(d) {\n\t if (!d.selected && !ctrlKeydown) {\n\t // if this node isn't selected, then we have to unselect every other node\n\t var node = visNodes.selectAll('g.gnode').selectAll('.outline_node');\n\t node.classed('selected', function (p) {\n\t return p.selected = p.previouslySelected = false;\n\t });\n\t }\n\n\t _d2.default.select(this).classed('selected', function (p) {\n\t d.previouslySelected = d.selected;return d.selected = self.options.applyForce && true;\n\t });\n\n\t if (!shiftKeydown) {\n\t return;\n\t }\n\n\t mousedownNode = d;\n\n\t dragLine.attr('class', 'drag_line').attr('x1', mousedownNode.x).attr('y1', mousedownNode.y).attr('x2', mousedownNode.x).attr('y2', mousedownNode.y);\n\n\t //gnodes.attr('pointer-events', 'none');\n\t };\n\n\t self.startAnimation = function () {\n\t self.animation = true;\n\t vis.selectAll('g.gnode').call(drag);\n\t self.force.start();\n\t };\n\n\t self.stopAnimation = function () {\n\t self.animation = false;\n\t vis.selectAll('g.gnode').on('mousedown.drag', null);\n\t self.force.stop();\n\t };\n\n\t self.setFriction = function (value) {\n\t self.force.friction(value);\n\t self.resumeForce();\n\t };\n\n\t self.setCharge = function (value) {\n\t self.force.charge(value);\n\t self.resumeForce();\n\t };\n\n\t self.setGravity = function (value) {\n\t self.force.gravity(value);\n\t self.resumeForce();\n\t };\n\n\t self.setPseudoknotStrength = function (value) {\n\t self.linkStrengths.pseudoknot = value;\n\t self.update();\n\t };\n\n\t self.displayBackground = function (value) {\n\t self.displayParameters.displayBackground = value;\n\t self.updateStyle();\n\t };\n\n\t self.displayNumbering = function (value) {\n\t self.displayParameters.displayNumbering = value;\n\t self.updateStyle();\n\t };\n\n\t self.displayNodeOutline = function (value) {\n\t self.displayParameters.displayNodeOutline = value;\n\t self.updateStyle();\n\t };\n\n\t self.displayNodeLabel = function (value) {\n\t self.displayParameters.displayNodeLabel = value;\n\t self.updateStyle();\n\t };\n\n\t self.displayLinks = function (value) {\n\t self.displayParameters.displayLinks = value;\n\t self.updateStyle();\n\t };\n\n\t self.displayPseudoknotLinks = function (value) {\n\t self.displayParameters.displayPseudoknotLinks = value;\n\t self.updateStyle();\n\t };\n\n\t self.displayProteinLinks = function (value) {\n\t self.displayParameters.displayProteinLinks = value;\n\t self.updateStyle();\n\t };\n\n\t self.updateStyle = function () {\n\t // Background\n\t //rect.classed('transparent', !self.displayParameters.displayBackground);\n\t // Numbering\n\t visNodes.selectAll('[node_type=label]').classed('transparent', !self.displayParameters.displayNumbering);\n\t visNodes.selectAll('[label_type=label]').classed('transparent', !self.displayParameters.displayNumbering);\n\t visLinks.selectAll('[linkType=label_link]').classed('transparent', !self.displayParameters.displayNumbering);\n\t // Node Outline\n\t svg.selectAll('circle').classed('hidden_outline', !self.displayParameters.displayNodeOutline);\n\t // Node Labels\n\t visNodes.selectAll('[label_type=nucleotide]').classed('transparent', !self.displayParameters.displayNodeLabel);\n\t // Links\n\t svg.selectAll('[link_type=real],[link_type=basepair],[link_type=backbone],[link_type=pseudoknot],[link_type=protein_chain],[link_type=chain_chain],[link_type=external]').classed('transparent', !self.displayParameters.displayLinks);\n\t // Pseudoknot Links\n\t svg.selectAll('[link_type=pseudoknot]').classed('transparent', !self.displayParameters.displayPseudoknotLinks);\n\t // Protein Links\n\t svg.selectAll('[link_type=protein_chain]').classed('transparent', !self.displayParameters.displayProteinLinks);\n\t // Fake Links\n\t visLinks.selectAll('[link_type=fake]').classed('transparent', !self.options.displayAllLinks);\n\t visLinks.selectAll('[link_type=fake_fake]').classed('transparent', !self.options.displayAllLinks);\n\t };\n\n\t function nudge(dx, dy) {\n\t node.filter(function (d) {\n\t return d.selected;\n\t }).attr('cx', function (d) {\n\t return d.x += dx;\n\t }).attr('cy', function (d) {\n\t return d.y += dy;\n\t });\n\n\t link.filter(function (d) {\n\t return d.source.selected;\n\t }).attr('x1', function (d) {\n\t return d.source.x;\n\t }).attr('y1', function (d) {\n\t return d.source.y;\n\t });\n\n\t link.filter(function (d) {\n\t return d.target.selected;\n\t }).attr('x2', function (d) {\n\t return d.target.x;\n\t }).attr('y2', function (d) {\n\t return d.target.y;\n\t });\n\n\t _d2.default.event.preventDefault();\n\t }\n\n\t self.createNewLinks = function (linksEnter) {\n\t var linkLines = linksEnter.append('svg:line');\n\n\t linkLines.append('svg:title').text(linkKey);\n\n\t linkLines.classed('link', true).attr('x1', function (d) {\n\t return d.source.x;\n\t }).attr('y1', function (d) {\n\t return d.source.y;\n\t }).attr('x2', function (d) {\n\t return d.target.x;\n\t }).attr('y2', function (d) {\n\t return d.target.y;\n\t }).attr('link_type', function (d) {\n\t return d.linkType;\n\t }).attr('class', function (d) {\n\t return _d2.default.select(this).attr('class') + ' ' + d.linkType;\n\t }).attr('pointer-events', function (d) {\n\t if (d.linkType == 'fake') return 'none';else return 'all';\n\t });\n\n\t /* We don't need to update the positions of the stabilizing links */\n\t /*\n\t basepairLinks = visLinks.selectAll('[link_type=basepair]');\n\t basepairLinks.classed('basepair', true);\n\t fakeLinks = visLinks.selectAll('[link_type=fake]')\n\t fakeLinks.classed('fake', true);\n\t intermolecule_links = vis_links.selectAll('[link_type=intermolecule]');\n\t intermolecule_links.classed('intermolecule', true);\n\t plink = vis_links.selectAll('[link_type=protein_chain],[link_type=chain_chain]');\n\t plink.classed('chain_chain', true);\n\t */\n\n\t return linkLines;\n\t };\n\n\t self.createNewNodes = function (gnodesEnter) {\n\t gnodesEnter = gnodesEnter.append('g').classed('noselect', true).classed('gnode', true).attr('struct_name', function (d) {\n\t return d.structName;\n\t }).attr('transform', function (d) {\n\t if (typeof d.x != 'undefined' && typeof d.y != 'undefined') return 'translate(' + [d.x, d.y] + ')';else return '';\n\t }).each(function (d) {\n\t d.selected = d.previouslySelected = false;\n\t });\n\n\t gnodesEnter.call(drag).on('mousedown', nodeMousedown).on('mousedrag', function (d) {}).on('mouseup', nodeMouseup).attr('num', function (d) {\n\t return 'n' + d.num;\n\t }).attr('rnum', function (d) {\n\t return 'n' + (d.rna.rnaLength - d.num + 1);\n\t }).on('click', nodeMouseclick).transition().duration(750).ease('elastic');\n\n\t // create nodes behind the circles which will serve to highlight them\n\t var labelAndProteinNodes = gnodesEnter.filter(function (d) {\n\t return d.nodeType == 'label' || d.nodeType == 'protein';\n\t });\n\n\t var nucleotideNodes = gnodesEnter.filter(function (d) {\n\t return d.nodeType == 'nucleotide';\n\t });\n\n\t labelAndProteinNodes.append('svg:circle').attr('class', 'outline_node').attr('r', function (d) {\n\t return d.radius + 1;\n\t });\n\n\t nucleotideNodes.append('svg:circle').attr('class', 'outline_node').attr('r', function (d) {\n\t return d.radius + 1;\n\t });\n\n\t labelAndProteinNodes.append('svg:circle').attr('class', 'node').classed('label', function (d) {\n\t return d.nodeType == 'label';\n\t }).attr('r', function (d) {\n\t if (d.nodeType == 'middle') return 0;else {\n\t return d.radius;\n\t }\n\t }).attr('node_type', function (d) {\n\t return d.nodeType;\n\t }).attr('node_num', function (d) {\n\t return d.num;\n\t });\n\n\t nucleotideNodes.append('svg:circle').attr('class', 'node').attr('node_type', function (d) {\n\t return d.nodeType;\n\t }).attr('node_num', function (d) {\n\t return d.num;\n\t }).attr('r', function (d) {\n\t return d.radius;\n\t }).append('svg:title').text(function (d) {\n\t if (d.nodeType == 'nucleotide') {\n\t return d.structName + ':' + d.num;\n\t } else {\n\t return '';\n\t }\n\t });\n\n\t nucleotideNodes.append('svg:path').attr('class', 'node').attr('node_type', function (d) {\n\t return d.nodeType;\n\t }).attr('node_num', function (d) {\n\t return d.num;\n\t }).append('svg:title').text(function (d) {\n\t if (d.nodeType == 'nucleotide') {\n\t return d.structName + ':' + d.num;\n\t } else {\n\t return '';\n\t }\n\t });\n\n\t var labelsEnter = gnodesEnter.append('text').text(function (d) {\n\t return d.name;\n\t }).attr('text-anchor', 'middle').attr('font-size', 8.0).attr('font-weight', 'bold').attr('y', 2.5).attr('class', 'node-label').attr('label_type', function (d) {\n\t return d.nodeType;\n\t });\n\n\t /*\n\t labelsEnter.text(function(d) {\n\t return d.num;\n\t });\n\t */\n\n\t labelsEnter.append('svg:title').text(function (d) {\n\t if (d.nodeType == 'nucleotide') {\n\t return d.structName + ':' + d.num;\n\t } else {\n\t return '';\n\t }\n\t });\n\n\t return gnodesEnter;\n\t };\n\n\t var nodeTooltip = function nodeTooltip(d) {\n\t nodeTooltips = {};\n\n\t nodeTooltips.nucleotide = d.num;\n\t nodeTooltips.label = '';\n\t nodeTooltips.pseudo = '';\n\t nodeTooltips.middle = '';\n\t nodeTooltips.protein = d.structName;\n\n\t return nodeTooltips[d.nodeType];\n\t };\n\n\t self.update = function () {\n\t self.force.nodes(self.graph.nodes).links(self.graph.links);\n\n\t if (self.animation) {\n\t self.force.start();\n\t }\n\n\t var allLinks = visLinks.selectAll('line.link').data(self.graph.links.filter(realLinkFilter), linkKey);\n\n\t allLinks.attr('class', '').classed('link', true).attr('link_type', function (d) {\n\t return d.linkType;\n\t }).attr('class', function (d) {\n\t return _d2.default.select(this).attr('class') + ' ' + d.linkType;\n\t });\n\n\t var linksEnter = allLinks.enter();\n\t self.createNewLinks(linksEnter);\n\n\t allLinks.exit().remove();\n\n\t var domain = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];\n\t var colors = _d2.default.scale.category10().domain(domain);\n\n\t var gnodes = visNodes.selectAll('g.gnode').data(self.graph.nodes, nodeKey);\n\t //.attr('pointer-events', 'all');\n\n\t var gnodesEnter = gnodes.enter();\n\n\t self.createNewNodes(gnodesEnter);\n\t gnodes.exit().remove();\n\n\t //fake_nodes = self.graph.nodes.filter(function(d) { return d.nodeType == 'middle'; });\n\t //fakeNodes = self.graph.nodes.filter(function(d) { return true; });\n\t var realNodes = self.graph.nodes.filter(function (d) {\n\t return d.nodeType == 'nucleotide' || d.nodeType == 'label';\n\t });\n\n\t var xlink;\n\t if (self.displayFakeLinks) xlink = allLinks;else xlink = visLinks.selectAll('[link_type=real],[link_type=pseudoknot],[link_type=protein_chain],[link_type=chain_chain],[link_type=label_link],[link_type=backbone],[link_type=basepair],[link_type=intermolecule],[link_type=external]');\n\n\t var position;\n\n\t gnodes.selectAll('path').each(positionAnyNode);\n\n\t xlink.on('click', linkClick);\n\n\t self.force.on('tick', function () {\n\t var q = _d2.default.geom.quadtree(realNodes);\n\t var i = 0;\n\t var n = realNodes.length;\n\n\t while (++i < n) {\n\t q.visit(collide(realNodes[i]));\n\t }xlink.attr('x1', function (d) {\n\t return d.source.x;\n\t }).attr('y1', function (d) {\n\t return d.source.y;\n\t }).attr('x2', function (d) {\n\t return d.target.x;\n\t }).attr('y2', function (d) {\n\t return d.target.y;\n\t });\n\n\t // Translate the groups\n\t gnodes.attr('transform', function (d) {\n\t return 'translate(' + [d.x, d.y] + ')';\n\t });\n\n\t gnodes.select('path').each(positionAnyNode);\n\t });\n\n\t self.changeColorScheme(self.colorScheme);\n\n\t if (self.animation) {\n\t self.force.start();\n\t }\n\n\t self.updateStyle();\n\t };\n\n\t self.setSize();\n\t}\n\n\t/************************* END FORNAF **********************************/\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\texports.ProteinGraph = ProteinGraph;\n\texports.RNAGraph = RNAGraph;\n\texports.moleculesToJson = moleculesToJson;\n\n\tvar _rnautils = __webpack_require__(2);\n\n\tvar numberSort = function numberSort(a, b) {\n\t return a - b;\n\t};\n\n\tfunction generateUUID() {\n\t /* Stack Overflow: \n\t * http://stackoverflow.com/a/8809472/899470 \n\t */\n\t var d = new Date().getTime();\n\t var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n\t var r = (d + Math.random() * 16) % 16 | 0;\n\t d = Math.floor(d / 16);\n\t return (c == 'x' ? r : r & 0x3 | 0x8).toString(16);\n\t });\n\n\t return uuid;\n\t}\n\n\tfunction isNormalInteger(str) {\n\t //http://stackoverflow.com/a/10834843/899470\n\t return (/^\\+?(0|[1-9]\\d*)$/.test(str)\n\t );\n\t}\n\n\tif (typeof String.prototype.trim === 'undefined') {\n\t String.prototype.trim = function () {\n\t return String(this).replace(/^\\s+|\\s+$/g, '');\n\t };\n\t}\n\n\tfunction ProteinGraph(structName, size, uid) {\n\t var self = this;\n\n\t self.type = 'protein';\n\t self.size = size;\n\t self.nodes = [{ 'name': 'P',\n\t 'num': 1,\n\t 'radius': 3 * Math.sqrt(size),\n\t 'rna': self,\n\t 'nodeType': 'protein',\n\t 'structName': structName,\n\t 'elemType': 'p',\n\t 'size': size,\n\t 'uid': generateUUID() }];\n\n\t self.links = [];\n\t self.uid = generateUUID();\n\n\t self.addUids = function (uids) {\n\t for (var i = 0; i < uids.length; i++) {\n\t self.nodes[i].uid = uids[i];\n\t }return self;\n\t };\n\n\t self.getUids = function () {\n\t /* Get the positions of each node so that they\n\t * can be passed to elementsToJson later\n\t */\n\t uids = [];\n\t for (var i = 0; i < self.dotbracket.length; i++) {\n\t uids.push(self.nodes[i].uid);\n\t }return uids;\n\t };\n\t}\n\n\tfunction RNAGraph(seq, dotbracket, structName, startNumber) {\n\t var self = this;\n\n\t self.type = 'rna';\n\t self.circularizeExternal = false;\n\n\t if (arguments.length === 0) {\n\t self.seq = '';\n\t self.dotbracket = '';\n\t self.structName = '';\n\t } else {\n\t self.seq = seq;\n\t self.dotbracket = dotbracket; //i.e. ..((..))..\n\t self.structName = structName;\n\t }\n\n\t if (arguments.length < 4) {\n\t startNumber = 1;\n\t }\n\n\t self.circular = false;\n\n\t if (self.dotbracket.length > 0 && self.dotbracket[self.dotbracket.length - 1] == '*') {\n\t //circular RNA\n\t self.dotbracket = self.dotbracket.slice(0, self.dotbracket.length - 1);\n\t self.circular = true;\n\t }\n\n\t self.uid = generateUUID();\n\n\t self.elements = []; //store the elements and the \n\t //nucleotides they contain\n\t self.pseudoknotPairs = [];\n\t self.nucsToNodes = {};\n\n\t self.addUids = function (uids) {\n\t var nucleotideNodes = self.nodes.filter(function (d) {\n\t return d.nodeType == 'nucleotide';\n\t });\n\n\t for (var i = 0; i < uids.length && i < nucleotideNodes.length; i++) {\n\t nucleotideNodes[i].uid = uids[i];\n\t }return self;\n\t };\n\n\t self.computePairtable = function () {\n\t self.pairtable = _rnautils.rnaUtilities.dotbracketToPairtable(self.dotbracket);\n\t };\n\n\t self.removeBreaks = function (targetString) {\n\t // Remove all chain breaks (denoted with a '&', which indicate\n\t // that the input represents more than one strand)\n\t var breaks = [];\n\t var breakIndex = -1;\n\n\t while ((breakIndex = targetString.indexOf('&')) >= 0) {\n\t breaks.push(breakIndex);\n\t targetString = targetString.substring(0, breakIndex) + 'oo' + targetString.substring(breakIndex + 1, targetString.length);\n\t }\n\n\t return { targetString: targetString, breaks: breaks };\n\t };\n\n\t var ret = self.removeBreaks(self.dotbracket);\n\t self.dotbracket = ret.targetString;\n\t self.dotBracketBreaks = ret.breaks;\n\n\t ret = self.removeBreaks(self.seq);\n\t self.seq = ret.targetString;\n\t self.seqBreaks = ret.breaks;\n\n\t self.calculateStartNumberArray = function () {\n\t self.startNumberArray = [];\n\t var breaks = 0;\n\n\t for (var i = 0; i < self.dotbracket.length; i++) {\n\t self.startNumberArray.push(startNumber);\n\n\t if (self.dotbracket[i] == 'o') {\n\t startNumber = -i;\n\t }\n\t }\n\t };\n\n\t self.calculateStartNumberArray();\n\n\t self.rnaLength = self.dotbracket.length;\n\n\t if (!(0, _rnautils.arraysEqual)(self.dotBracketBreaks, self.seqBreaks)) {\n\t console.log('WARNING: Sequence and structure breaks not equal');\n\t console.log('WARNING: Using the breaks in the structure');\n\t }\n\n\t self.computePairtable();\n\n\t self.addPositions = function (nodeType, positions) {\n\t var labelNodes = self.nodes.filter(function (d) {\n\t return d.nodeType == nodeType;\n\t });\n\n\t for (var i = 0; i < labelNodes.length; i++) {\n\t labelNodes[i].x = positions[i][0];\n\t labelNodes[i].px = positions[i][0];\n\t labelNodes[i].y = positions[i][1];\n\t labelNodes[i].py = positions[i][1];\n\t }\n\n\t return self;\n\t };\n\n\t self.breakNodesToFakeNodes = function () {\n\t // convert all the nodes following breaks to fake nodes\n\t var labelNodes = self.nodes.filter(function (d) {\n\t return d.nodeType == 'nucleotide';\n\t });\n\n\t // if a node was an artifical break node, convert it to a middle\n\t for (var i = 0; i < labelNodes.length; i++) {\n\t if (self.dotbracket[i] == 'o') labelNodes[i].nodeType = 'middle';\n\t }\n\n\t for (var i = 0; i < self.elements.length; i++) {\n\t var broken = false;\n\n\t // change the elemType of the other nodes in the element containing\n\t // the break\n\t for (var j = 0; j < self.elements[i][2].length; j++) {\n\t if (self.dotBracketBreaks.indexOf(self.elements[i][2][j]) >= 0) broken = true;\n\t }\n\n\t if (broken) {\n\t self.elements[i][2].map(function (x) {\n\t if (x == 0) return;\n\t self.nodes[x - 1].elemType = 'e';\n\t });\n\t } else {\n\t self.elements[i][2].map(function (x) {\n\t if (x == 0) return;\n\t self.nodes[x - 1].elemType = self.elements[i][0];\n\t });\n\t }\n\t }\n\t return self;\n\t };\n\n\t self.getPositions = function (nodeType) {\n\t var positions = [];\n\t var nucleotideNodes = self.nodes.filter(function (d) {\n\t return d.nodeType == nodeType;\n\t });\n\n\t for (var i = 0; i < nucleotideNodes.length; i++) {\n\t positions.push([nucleotideNodes[i].x, nucleotideNodes[i].y]);\n\t }return positions;\n\t };\n\n\t self.getUids = function () {\n\t /* Get the positions of each node so that they\n\t * can be passed to elementsToJson later\n\t */\n\t var uids = [];\n\t for (var i = 0; i < self.dotbracket.length; i++) {\n\t uids.push(self.nodes[i].uid);\n\t }return uids;\n\t };\n\n\t self.reinforceStems = function () {\n\t var pt = self.pairtable;\n\t var relevantElements = self.elements.filter(function (d) {\n\t return d[0] == 's' && d[2].length >= 4;\n\t });\n\n\t for (var i = 0; i < relevantElements.length; i++) {\n\t var allNucs = relevantElements[i][2];\n\t var nucs = allNucs.slice(0, allNucs.length / 2);\n\n\t for (var j = 0; j < nucs.length - 1; j++) {\n\t self.addFakeNode([nucs[j], nucs[j + 1], pt[nucs[j + 1]], pt[nucs[j]]]);\n\t }\n\t }\n\n\t return self;\n\t };\n\n\t self.reinforceLoops = function () {\n\t /* \n\t * Add a set of fake nodes to enforce the structure\n\t */\n\t var filterNucs = function filterNucs(d) {\n\t return d !== 0 && d <= self.dotbracket.length;\n\t };\n\n\t for (var i = 0; i < self.elements.length; i++) {\n\t if (self.elements[i][0] == 's' || !self.circularizeExternal && self.elements[i][0] == 'e') continue;\n\n\t var nucs = self.elements[i][2].filter(filterNucs);\n\n\t if (self.elements[i][0] == 'e') {\n\t var newNode1 = { 'name': '',\n\t 'num': -3,\n\t //'radius': 18 * radius -6,\n\t 'radius': 0,\n\t 'rna': self,\n\t 'nodeType': 'middle',\n\t 'elemType': 'f',\n\t 'nucs': [],\n\t 'x': self.nodes[self.rnaLength - 1].x,\n\t 'y': self.nodes[self.rnaLength - 1].y,\n\t 'px': self.nodes[self.rnaLength - 1].px,\n\t 'py': self.nodes[self.rnaLength - 1].py,\n\t 'uid': generateUUID() };\n\t var newNode2 = { 'name': '',\n\t 'num': -2,\n\t //'radius': 18 * radius -6,\n\t 'radius': 0,\n\t 'rna': self,\n\t 'nodeType': 'middle',\n\t 'elemType': 'f',\n\t 'nucs': [],\n\t 'x': self.nodes[0].x,\n\t 'y': self.nodes[0].y,\n\t 'px': self.nodes[0].px,\n\t 'py': self.nodes[0].py,\n\t 'uid': generateUUID() };\n\n\t nucs.push(self.nodes.length + 1);\n\t nucs.push(self.nodes.length + 2);\n\t self.nodes.push(newNode1);\n\t self.nodes.push(newNode2);\n\t }\n\n\t self.addFakeNode(nucs);\n\t }\n\n\t return self;\n\t };\n\n\t self.updateLinkUids = function () {\n\t for (var i = 0; i < self.links.length; i++) {\n\t self.links[i].uid = self.links[i].source.uid + self.links[i].target.uid;\n\t }\n\n\t return self;\n\t };\n\n\t self.addFakeNode = function (nucs) {\n\t var linkLength = 18; //make sure this is consistent with the value in force.js\n\t var nodeWidth = 6;\n\t var angle = 3.1415 * 2 / (2 * nucs.length);\n\t var radius = linkLength / (2 * Math.tan(angle));\n\n\t var fakeNodeUid = '';\n\n\t for (var i = 0; i < nucs.length; i++) {\n\t fakeNodeUid += self.nodes[nucs[i] - 1].uid;\n\t }var newNode = { 'name': '',\n\t 'num': -1,\n\t //'radius': 18 * radius -6,\n\t 'radius': radius,\n\t 'rna': self,\n\t 'nodeType': 'middle',\n\t 'elemType': 'f',\n\t 'nucs': nucs,\n\t 'uid': fakeNodeUid };\n\t self.nodes.push(newNode);\n\n\t var newX = 0;\n\t var newY = 0;\n\t var coordsCounted = 0;\n\n\t angle = (nucs.length - 2) * 3.14159 / (2 * nucs.length);\n\t radius = 0.5 / Math.cos(angle);\n\n\t for (var j = 0; j < nucs.length; j++) {\n\t if (nucs[j] === 0 || nucs[j] > self.dotbracket.length) continue;\n\n\t //link to the center node\n\t self.links.push({ 'source': self.nodes[nucs[j] - 1],\n\t 'target': self.nodes[self.nodes.length - 1],\n\t 'linkType': 'fake',\n\t 'value': radius,\n\t 'uid': generateUUID() });\n\n\t if (nucs.length > 4) {\n\t //link across the loop\n\t self.links.push({ 'source': self.nodes[nucs[j] - 1],\n\t 'target': self.nodes[nucs[(j + Math.floor(nucs.length / 2)) % nucs.length] - 1],\n\t 'linkType': 'fake',\n\t 'value': radius * 2,\n\t 'uid': generateUUID() });\n\t }\n\n\t var ia = (nucs.length - 2) * 3.14159 / nucs.length;\n\t var c = 2 * Math.cos(3.14159 / 2 - ia / 2);\n\t //link to over-neighbor\n\t self.links.push({ 'source': self.nodes[nucs[j] - 1],\n\t 'target': self.nodes[nucs[(j + 2) % nucs.length] - 1],\n\t 'linkType': 'fake',\n\t 'value': c });\n\n\t // calculate the mean of the coordinats in this loop\n\t // and place the fake node there\n\t var fromNode = self.nodes[nucs[j] - 1];\n\t if ('x' in fromNode) {\n\t newX += fromNode.x;\n\t newY += fromNode.y;\n\n\t coordsCounted += 1;\n\t }\n\t }\n\n\t if (coordsCounted > 0) {\n\t // the nucleotides had set positions so we can calculate the position\n\t // of the fake node\n\t newNode.x = newX / coordsCounted;\n\t newNode.y = newY / coordsCounted;\n\t newNode.px = newNode.x;\n\t newNode.py = newNode.y;\n\t }\n\n\t return self;\n\t };\n\n\t self.connectFakeNodes = function () {\n\t var linkLength = 18;\n\n\t // We want to be able to connect all of the fake nodes\n\t // and create a structure consisting of just them\n\t var filterOutNonFakeNodes = function filterOutNonFakeNodes(d) {\n\t return d.nodeType == 'middle';\n\t };\n\n\t var nucsToNodes = {};\n\t var fakeNodes = self.nodes.filter(filterOutNonFakeNodes);\n\t var linked = new Set();\n\n\t // initialize the nucleotides to nodes\n\t for (var i = 1; i <= self.nodes.length; i++) {\n\t nucsToNodes[i] = [];\n\t }for (var i = 0; i < fakeNodes.length; i++) {\n\t var thisNode = fakeNodes[i];\n\n\t // each fake node represents a certain set of nucleotides (thisNode.nucs)\n\t for (var j = 0; j < thisNode.nucs.length; j++) {\n\t var thisNuc = thisNode.nucs[j];\n\n\t // check to see if this nucleotide has been seen in another fake node\n\t // if it has, then we add a link between the two nodes\n\t for (var k = 0; k < nucsToNodes[thisNuc].length; k++) {\n\t if (linked.has(JSON.stringify([nucsToNodes[thisNuc][k].uid, thisNode.uid].sort()))) continue; //already linked\n\n\t var distance = nucsToNodes[thisNuc][k].radius + thisNode.radius;\n\n\t self.links.push({ 'source': nucsToNodes[thisNuc][k],\n\t 'target': thisNode,\n\t 'value': distance / linkLength,\n\t 'linkType': 'fake_fake' });\n\n\t // note that we've already seen this link\n\t linked.add(JSON.stringify([nucsToNodes[thisNuc][k].uid, thisNode.uid].sort()));\n\t }\n\n\t nucsToNodes[thisNuc].push(thisNode);\n\t }\n\t }\n\n\t return self;\n\t };\n\n\t self.addExtraLinks = function (extraLinks) {\n\t if (typeof extraLinks == 'undefined') return self;\n\n\t for (var i = 0; i < extraLinks.length; i++) {\n\t var source = self.getNodeFromNucleotides(extraLinks[i].from);\n\t var target = self.getNodeFromNucleotides(extraLinks[i].to);\n\n\t var newLink = { 'source': source, 'target': target, 'linkType': 'extra',\n\t 'extraLinkType': extraLinks[i].linkType, 'uid': generateUUID() };\n\n\t self.links.push(newLink);\n\t }\n\n\t return self;\n\t };\n\n\t self.elementsToJson = function () {\n\t /* Convert a set of secondary structure elements to a json\n\t * representation of the graph that can be used with d3's\n\t * force-directed layout to generate a visualization of \n\t * the structure.\n\t */\n\t var pt = self.pairtable;\n\t var elements = self.elements;\n\n\t self.nodes = [];\n\t self.links = [];\n\n\t //create a reverse lookup so we can find out the type\n\t //of element that a node is part of\n\t var elemTypes = {};\n\n\t //sort so that we count stems last\n\t self.elements.sort();\n\n\t for (var i = 0; i < self.elements.length; i++) {\n\t var nucs = self.elements[i][2];\n\t for (var j = 0; j < nucs.length; j++) {\n\t elemTypes[nucs[j]] = self.elements[i][0];\n\t }\n\t }\n\n\t for (var i = 1; i <= pt[0]; i++) {\n\t var nodeName = self.seq[i - 1];\n\n\t if (self.dotBracketBreaks.indexOf(i - 1) >= 0 || self.dotBracketBreaks.indexOf(i - 2) >= 0) {\n\t nodeName = '';\n\t }\n\n\t //create a node for each nucleotide\n\t self.nodes.push({ 'name': nodeName,\n\t 'num': i + self.startNumberArray[i - 1] - 1,\n\t 'radius': 5,\n\t 'rna': self,\n\t 'nodeType': 'nucleotide',\n\t 'structName': self.structName,\n\t 'elemType': elemTypes[i],\n\t 'uid': generateUUID(),\n\t 'linked': false });\n\t }\n\n\t for (var i = 0; i < self.nodes.length; i++) {\n\t if (i === 0) self.nodes[i].prevNode = null;else {\n\t self.nodes[i].prevNode = self.nodes[i - 1];\n\t }\n\n\t if (i == self.nodes.length - 1) self.nodes[i].nextNode = null;else {\n\t self.nodes[i].nextNode = self.nodes[i + 1];\n\t }\n\t }\n\n\t for (var i = 1; i <= pt[0]; i++) {\n\n\t if (pt[i] !== 0) {\n\t // base-pair links\n\t self.links.push({ 'source': self.nodes[i - 1],\n\t 'target': self.nodes[pt[i] - 1],\n\t 'linkType': 'basepair',\n\t 'value': 1,\n\t 'uid': generateUUID() });\n\t }\n\n\t if (i > 1) {\n\t // backbone links\n\t if (self.dotBracketBreaks.indexOf(i - 1) === -1 && self.dotBracketBreaks.indexOf(i - 2) == -1 && self.dotBracketBreaks.indexOf(i - 3) == -1) {\n\t // there is no break in the strands here\n\t // we can add a backbone link\n\t self.links.push({ 'source': self.nodes[i - 2],\n\t 'target': self.nodes[i - 1],\n\t 'linkType': 'backbone',\n\t 'value': 1,\n\t 'uid': generateUUID() });\n\t self.nodes[i - 1].linked = true;\n\t }\n\t }\n\t }\n\n\t //add the pseudoknot links\n\t for (var i = 0; i < self.pseudoknotPairs.length; i++) {\n\t self.links.push({ 'source': self.nodes[self.pseudoknotPairs[i][0] - 1],\n\t 'target': self.nodes[self.pseudoknotPairs[i][1] - 1],\n\t 'linkType': 'pseudoknot',\n\t 'value': 1,\n\t 'uid': generateUUID() });\n\t }\n\n\t if (self.circular) {\n\t self.links.push({ 'source': self.nodes[0],\n\t 'target': self.nodes[self.rnaLength - 1],\n\t 'linkType': 'backbone',\n\t 'value': 1,\n\t 'uid': generateUUID() });\n\t }\n\n\t return self;\n\t };\n\n\t self.ptToElements = function (pt, level, i, j) {\n\t /* Convert a pair table to a list of secondary structure \n\t * elements:\n\t *\n\t * [['s',1,[2,3]]\n\t *\n\t * The 's' indicates that an element can be a stem. It can also be\n\t * an interior loop ('i'), a hairpin loop ('h') or a multiloop ('m')\n\t *\n\t * The second number (1 in this case) indicates the depth or\n\t * how many base pairs have to be broken to get to this element.\n\t *\n\t * Finally, there is the list of nucleotides which are part of\n\t * of this element.\n\t */\n\t var elements = [];\n\t var u5 = [i - 1];\n\t var u3 = [j + 1];\n\n\t if (i > j) return [];\n\n\t //iterate over the unpaired regions on either side\n\t //this is either 5' and 3' unpaired if level == 0\n\t //or an interior loop or a multiloop\n\t for (; pt[i] === 0; i++) {\n\t u5.push(i);\n\t }\n\t for (; pt[j] === 0; j--) {\n\t u3.push(j);\n\t }\n\n\t if (i > j) {\n\t //hairpin loop or one large unpaired molecule\n\t u5.push(i);\n\t if (level === 0) return [['e', level, u5.sort(numberSort)]];else {\n\t // check to see if we have chain breaks due\n\t // to multiple strands in the input\n\t var external = false;\n\t var left = [];\n\t var right = [];\n\t for (var k = 0; k < u5.length; k++) {\n\t if (external) right.push(u5[k]);else left.push(u5[k]);\n\n\t if (self.dotBracketBreaks.indexOf(u5[k]) >= 0) external = true;\n\t }\n\n\t if (external) {\n\t return [['h', level, u5.sort(numberSort)]];\n\t } else\n\t // if not, this is a simple hairpin loop\n\t return [['h', level, u5.sort(numberSort)]];\n\t }\n\t }\n\n\t if (pt[i] != j) {\n\t //multiloop\n\t var m = u5;\n\t var k = i;\n\n\t // the nucleotide before and the starting nucleotide\n\t m.push(k);\n\t while (k <= j) {\n\t // recurse into a stem\n\t elements = elements.concat(self.ptToElements(pt, level, k, pt[k]));\n\n\t // add the nucleotides between stems\n\t m.push(pt[k]);\n\t k = pt[k] + 1;\n\t for (; pt[k] === 0 && k <= j; k++) {\n\t m.push(k);\n\t }\n\t m.push(k);\n\t }\n\t m.pop();\n\t m = m.concat(u3);\n\n\t if (m.length > 0) {\n\t if (level === 0) elements.push(['e', level, m.sort(numberSort)]);else elements.push(['m', level, m.sort(numberSort)]);\n\t }\n\n\t return elements;\n\t }\n\n\t if (pt[i] === j) {\n\t //interior loop\n\t u5.push(i);\n\t u3.push(j);\n\n\t var combined = u5.concat(u3);\n\t if (combined.length > 4) {\n\t if (level === 0) elements.push(['e', level, u5.concat(u3).sort(numberSort)]);else elements.push(['i', level, u5.concat(u3).sort(numberSort)]);\n\t }\n\t }\n\n\t var s = [];\n\t //go through the stem\n\t while (pt[i] === j && i < j) {\n\t //one stem\n\t s.push(i);\n\t s.push(j);\n\n\t i += 1;\n\t j -= 1;\n\n\t level += 1;\n\t }\n\n\t u5 = [i - 1];\n\t u3 = [j + 1];\n\t elements.push(['s', level, s.sort(numberSort)]);\n\n\t return elements.concat(self.ptToElements(pt, level, i, j));\n\t };\n\n\t self.addLabels = function (startNumber, labelInterval) {\n\t if (arguments.length === 0) {\n\t startNumber = 1;\n\t labelInterval = 10;\n\t }\n\n\t if (arguments.length === 1) labelInterval = 10;\n\n\t if (labelInterval === 0) return self;\n\n\t if (labelInterval <= 0) console.log('The label interval entered in invalid:', labelInterval);\n\n\t for (var i = 1; i <= self.pairtable[0]; i++) {\n\t // add labels\n\t if (i % labelInterval === 0) {\n\t //create a node for each label\n\t var newX, newY;\n\n\t var thisNode = self.nodes[i - 1];\n\t var prevNode, nextNode;\n\t var prevVec, nextVec;\n\n\t if (self.rnaLength == 1) {\n\t nextVec = [thisNode.x - 15, thisNode.y];\n\t prevVec = [thisNode.x - 15, thisNode.y];\n\t } else {\n\t // if we're labelling the first node, then label it in relation to the last\n\t if (i == 1) prevNode = self.nodes[self.rnaLength - 1];else prevNode = self.nodes[i - 2];\n\n\t // if we're labelling the last node, then label it in relation to the first\n\t if (i == self.rnaLength) nextNode = self.nodes[0];else nextNode = self.nodes[i];\n\n\t // this nucleotide and its neighbors are paired\n\t if (self.pairtable[nextNode.num] !== 0 && self.pairtable[prevNode.num] !== 0 && self.pairtable[thisNode.num] !== 0) {\n\t prevNode = nextNode = self.nodes[self.pairtable[thisNode.num] - 1];\n\t }\n\n\t // this node is paired but at least one of its neighbors is unpaired\n\t // place the label in the direction of the two neighbors\n\t if (self.pairtable[thisNode.num] !== 0 && (self.pairtable[nextNode.num] === 0 || self.pairtable[prevNode.num] === 0)) {\n\t nextVec = [thisNode.x - nextNode.x, thisNode.y - nextNode.y];\n\t prevVec = [thisNode.x - prevNode.x, thisNode.y - prevNode.y];\n\t } else {\n\t nextVec = [nextNode.x - thisNode.x, nextNode.y - thisNode.y];\n\t prevVec = [prevNode.x - thisNode.x, prevNode.y - thisNode.y];\n\t }\n\t }\n\n\t var combinedVec = [nextVec[0] + prevVec[0], nextVec[1] + prevVec[1]];\n\t var vecLength = Math.sqrt(combinedVec[0] * combinedVec[0] + combinedVec[1] * combinedVec[1]);\n\t var normedVec = [combinedVec[0] / vecLength, combinedVec[1] / vecLength];\n\t var offsetVec = [-15 * normedVec[0], -15 * normedVec[1]];\n\n\t var newX = self.nodes[i - 1].x + offsetVec[0];\n\t var newY = self.nodes[i - 1].y + offsetVec[1];\n\n\t var newNode = { 'name': i + self.startNumberArray[i - 1] - 1,\n\t 'num': -1,\n\t 'radius': 6,\n\t 'rna': self,\n\t 'nodeType': 'label',\n\t 'structName': self.structName,\n\t 'elemType': 'l',\n\t 'x': newX,\n\t 'y': newY,\n\t 'px': newX,\n\t 'py': newY,\n\t 'uid': generateUUID() };\n\t var newLink = { 'source': self.nodes[i - 1],\n\t 'target': newNode,\n\t 'value': 1,\n\t 'linkType': 'label_link',\n\t 'uid': generateUUID() };\n\n\t self.nodes.push(newNode);\n\t self.links.push(newLink);\n\t }\n\t }\n\n\t return self;\n\t };\n\n\t self.recalculateElements = function () {\n\t self.removePseudoknots();\n\t self.elements = self.ptToElements(self.pairtable, 0, 1, self.dotbracket.length);\n\n\t if (self.circular) {\n\t //check to see if the external loop is a hairpin or a multiloop\n\t externalLoop = self.elements.filter(function (d) {\n\t if (d[0] == 'e') return true;\n\t });\n\n\t if (externalLoop.length > 0) {\n\t eloop = externalLoop[0];\n\t nucs = eloop[2].sort(numberSort);\n\n\t prev = nucs[0];\n\t hloop = true;\n\t numGreater = 0;\n\t for (var i = 1; i < nucs.length; i++) {\n\t if (nucs[i] - prev > 1) {\n\t numGreater += 1;\n\t }\n\t prev = nucs[i];\n\t }\n\n\t if (numGreater == 1) {\n\t eloop[0] = 'h';\n\t } else if (numGreater == 2) {\n\t eloop[0] = 'i';\n\t } else {\n\t eloop[0] = 'm';\n\t }\n\t }\n\t }\n\n\t return self;\n\t };\n\n\t self.reassignLinkUids = function () {\n\t // reassign uids to the links, corresponding to the uids of the two nodes\n\t // they connect\n\t var i;\n\n\t for (var i = 0; i < self.links.length; i++) {\n\t self.links[i].uid = self.links[i].source.uid + self.links[i].target.uid;\n\t }\n\n\t return self;\n\t };\n\n\t self.removePseudoknots = function () {\n\t if (self.pairtable.length > 1) self.pseudoknotPairs = self.pseudoknotPairs.concat(_rnautils.rnaUtilities.removePseudoknotsFromPairtable(self.pairtable));\n\n\t return self;\n\t };\n\n\t self.addPseudoknots = function () {\n\t /* Add all of the pseudoknot pairs which are stored outside\n\t * of the pairtable back to the pairtable\n\t */\n\t var pt = self.pairtable;\n\t var pseudoknotPairs = self.pseudoknotPairs;\n\n\t for (var i = 0; i < pseudoknotPairs.length; i++) {\n\t pt[pseudoknotPairs[i][0]] = pseudoknotPairs[i][1];\n\t pt[pseudoknotPairs[i][1]] = pseudoknotPairs[i][0];\n\t }\n\n\t self.pseudoknotPairs = [];\n\t return self;\n\t };\n\n\t self.addName = function (name) {\n\t if (typeof name == 'undefined') {\n\t self.name = '';\n\t return self;\n\t } else {\n\t self.name = name;\n\t return self;\n\t }\n\t };\n\n\t if (self.rnaLength > 0) self.recalculateElements();\n\t}\n\n\tfunction moleculesToJson(moleculesJson) {\n\t /* Convert a list of RNA and protein molecules to a list of RNAGraph\n\t * ProteinGraph and extraLinks structure */\n\n\t var nodes = {}; //index the nodes by uid\n\t var graphs = [];\n\t var extraLinks = [];\n\n\t // Create the graphs for each molecule\n\t for (var i = 0; i < moleculesJson.molecules.length; i++) {\n\t var molecule = moleculesJson.molecules[i];\n\t var rg;\n\n\t if (molecule.type == 'rna') {\n\t rg = new RNAGraph(molecule.seq, molecule.ss, molecule.header);\n\t rg.circularizeExternal = true;\n\t rg.elementsToJson().addPositions('nucleotide', molecule.positions).addLabels().reinforceStems().reinforceLoops();\n\t } else if (molecule.type == 'protein') {\n\t rg = new ProteinGraph(molecule.header, molecule.size);\n\t }\n\n\t rg.addUids(molecule.uids);\n\n\t for (var j = 0; j < rg.nodes.length; j++) {\n\t nodes[rg.nodes[j].uid] = rg.nodes[j];\n\t }\n\n\t graphs.push(rg);\n\t }\n\n\t //Add the extra links\n\t for (var i = 0; i < moleculesJson.extraLinks.length; i++) {\n\t link = moleculesJson.extraLinks[i];\n\n\t link.source = nodes[link.source];\n\t link.target = nodes[link.target];\n\t link.uid = generateUUID();\n\n\t extraLinks.push(link);\n\t }\n\n\t return { 'graphs': graphs, 'extraLinks': extraLinks };\n\t};\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t!function(r,t){ true?module.exports=t():\"function\"==typeof define&&define.amd?define([],t):\"object\"==typeof exports?exports.rnautils=t():r.rnautils=t()}(this,function(){return function(r){function t(n){if(e[n])return e[n].exports;var o=e[n]={exports:{},id:n,loaded:!1};return r[n].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var e={};return t.m=r,t.c=e,t.p=\"\",t(0)}([function(r,t,e){r.exports=e(1)},function(r,t){\"use strict\";function e(r,t){if(r===t)return!0;if(null===r||null===t)return!1;if(r.length!=t.length)return!1;for(var e=0;eabcdefghijklmnopqrstuvwxyz\".split(\"\"),r.inverseBrackets=function(r){for(var t={},e=0;e=o;o++){n[o]=new Array(t+1);for(var a=o;t>=a;a++)n[o][a]=0}for(var s=0,o=t-e-1;o>0;o--)for(var a=o+e+1;t>=a;a++){s=n[o][a-1];for(var i=a-e-1;i>=o;i--)r[i]===a&&(s=Math.max(s,(i>o?n[o][i-1]:0)+1+(a-i-1>0?n[i+1][a-1]:0)));n[o][a]=s}return s=n[1][t],n},r.backtrackMaximumMatching=function(t,e){var n=Array.apply(null,Array(t.length)).map(function(){return 0});return r.mmBt(t,n,e,1,t.length-1),n},r.mmBt=function(t,e,n,o,a){var s=t[o][a],i=0;if(!(i>a-o-1)){if(t[o][a-1]==s)return void r.mmBt(t,e,n,o,a-1);for(var l=a-i-1;l>=o;l--)if(n[a]===l){var u=l>o?t[o][l-1]:0,c=a-l-1>0?t[l+1][a-1]:0;if(u+c+1==s)return e[l]=a,e[a]=l,l>o&&r.mmBt(t,e,n,o,l-1),void r.mmBt(t,e,n,l+1,a-1)}console.log(\"FAILED!!!\"+o+\",\"+a+\": backtracking failed!\")}},r.dotbracketToPairtable=function(t){var e=Array.apply(null,new Array(t.length+1)).map(Number.prototype.valueOf,0);e[0]=t.length;for(var n={},o=0;o0)throw\"Unmatched base at position \"+n[c][0];return e},r.insertIntoStack=function(r,t,e){for(var n=0;r[n].length>0&&r[n][r[n].length-1]n?r.bracketLeft[r.insertIntoStack(e,n,t[n])]:r.bracketRight[r.deleteFromStack(e,n)]}return a},r.findUnmatched=function(t,e,n){for(var o,a=[],s=[],i=e,l=n,o=e;n>=o;o++)0!==t[o]&&(t[o]n)&&s.push([o,t[o]]);for(var o=i;l>=o;o++){for(;0===t[o]&&l>=o;)o++;for(n=t[o];t[o]===n;)o++,n--;a=a.concat(r.findUnmatched(t,o,n))}return s.length>0&&a.push(s),a},r.removePseudoknotsFromPairtable=function(t){for(var e=r.maximumMatching(t),n=r.backtrackMaximumMatching(e,t),o=[],a=1;ao)return[];for(;0===t[n];n++)l.push(n);for(;0===t[o];o--)u.push(o);if(n>o){if(l.push(n),0===e)return[[\"e\",e,l.sort(a)]];for(var c=!1,f=[],p=[],h=0;h=0&&(c=!0);return c?[[\"h\",e,l.sort(a)]]:[[\"h\",e,l.sort(a)]]}if(t[n]!=o){var m=l,h=n;for(m.push(h);o>=h;){for(i=i.concat(r.ptToElements(t,e,h,t[h],s)),m.push(t[h]),h=t[h]+1;0===t[h]&&o>=h;h++)m.push(h);m.push(h)}return m.pop(),m=m.concat(u),m.length>0&&(0===e?i.push([\"e\",e,m.sort(a)]):i.push([\"m\",e,m.sort(a)])),i}if(t[n]===o){l.push(n),u.push(o);var v=l.concat(u);v.length>4&&(0===e?i.push([\"e\",e,l.concat(u).sort(a)]):i.push([\"i\",e,l.concat(u).sort(a)]))}for(var g=[];t[n]===o&&o>n;)g.push(n),g.push(o),n+=1,o-=1,e+=1;return l=[n-1],u=[o+1],i.push([\"s\",e,g.sort(a)]),i.concat(r.ptToElements(t,e,n,o,s))}}function o(r){var t=this;return t.colorsText=r,t.parseRange=function(r){for(var t=r.split(\",\"),e=[],n=0;n=i;i++)e.push(i);else console.log(\"Malformed range (too many dashes):\",r)}return e},t.parseColorText=function(r){for(var e=r.split(\"\\n\"),n=\"\",o=1,a={colorValues:{\"\":{}},range:[\"white\",\"steelblue\"]},s=[],i=0;i\"!=e[i][0])for(var l=e[i].trim().split(/[\\s]+/),u=0;ur&&(n=r),r>o&&(o=r));for(a in t.colorsJson.colorValues[e])r=t.colorsJson.colorValues[e][a],\"number\"==typeof r&&(t.colorsJson.colorValues[e][a]=(r-n)/(o-n))}return t},t.parseColorText(t.colorsText),t}Object.defineProperty(t,\"__esModule\",{value:!0}),t.arraysEqual=e,t.RNAUtilities=n,t.ColorScheme=o;var a=function(r,t){return r-t};t.rnaUtilities=new n}])});\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\texports.rnaPlot = rnaPlot;\n\n\tvar _simplernaplot = __webpack_require__(4);\n\n\tvar _rnagraph = __webpack_require__(1);\n\n\tvar _naview = __webpack_require__(5);\n\n\tvar _rnautils = __webpack_require__(2);\n\n\t__webpack_require__(11);\n\n\tfunction isNormalInteger(str) {\n\t //http://stackoverflow.com/a/10834843/899470\n\t return (/^\\+?(0|[1-9]\\d*)$/.test(str)\n\t );\n\t}\n\n\tif (typeof String.prototype.trim === 'undefined') {\n\t String.prototype.trim = function () {\n\t return String(this).replace(/^\\s+|\\s+$/g, '');\n\t };\n\t}\n\n\tfunction rnaPlot() {\n\t var options = {\n\t 'width': 400,\n\t 'height': 400,\n\t 'nucleotideRadius': 5,\n\t 'rnaEdgePadding': 0, // how far the leftmost, rightmost, topmost and bottomost\n\t // nucleotides are from the edge of the plot\n\t 'labelInterval': 0,\n\t 'showNucleotideLabels': true,\n\t 'startNucleotideNumber': 1,\n\t 'bundleExternalLinks': false\n\t };\n\n\t var xScale, yScale;\n\n\t function createTransformToFillViewport(xValues, yValues) {\n\t var molName = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n\n\t // create transform that will scale the x and y values so that\n\t // they fill the available viewport\n\n\t // find out leftmost, rightmost, topmost, bottommost positions of each\n\t // nucleotide so that we can create a scale\n\t var xExtent = d3.extent(xValues);\n\t var yExtent = d3.extent(yValues);\n\n\t var NAME_OFFSET = 30;\n\t if (molName != '') yExtent[1] += NAME_OFFSET;\n\n\t // add the radius of the nucleotides\n\t xExtent[0] -= options.nucleotideRadius + options.rnaEdgePadding;\n\t yExtent[0] -= options.nucleotideRadius + options.rnaEdgePadding;\n\n\t xExtent[1] += options.nucleotideRadius + options.rnaEdgePadding;\n\t yExtent[1] += options.nucleotideRadius + options.rnaEdgePadding;\n\n\t // find out how wide and height the molecule\n\t var xRange = xExtent[1] - xExtent[0];\n\t var yRange = yExtent[1] - yExtent[0];\n\n\t // how much wider / taller is it than the available viewport\n\t var xExtra = xRange - options.width;\n\t var yExtra = yRange - options.height;\n\n\t // once we have a scale for one dimension, we can create the scale for the other\n\t // keeping the same expansion / shrinking ratio\n\t function createOtherScale(firstScale, newDomain, newRange) {\n\t var scaleFactor = (firstScale.range()[1] - firstScale.range()[0]) / (firstScale.domain()[1] - firstScale.domain()[0]);\n\t var newWidth = (newDomain[1] - newDomain[0]) * scaleFactor;\n\t var newMargin = (newRange[1] - newRange[0] - newWidth) / 2;\n\n\t return { 'scaleFactor': scaleFactor,\n\t 'scale': d3.scale.linear().domain(newDomain).range([newRange[0] + newMargin, newRange[1] - newMargin]) };\n\t }\n\n\t var ret;\n\n\t if (xExtra > yExtra) {\n\t // we have to shrink more in the x-dimension than the y\n\t xScale = d3.scale.linear().domain(xExtent).range([0, options.width]);\n\n\t ret = createOtherScale(xScale, yExtent, [0, options.height]);\n\t yScale = ret.scale;\n\t } else {\n\t // we have to shrink more in the x-dimension than the y\n\t yScale = d3.scale.linear().domain(yExtent).range([0, options.height]);\n\n\t ret = createOtherScale(yScale, xExtent, [0, options.width]);\n\t xScale = ret.scale;\n\t }\n\n\t var xOffset = xScale.range()[0] - xScale.domain()[0];\n\t var yOffset = yScale.range()[0] - yScale.domain()[0];\n\n\t return 'translate(' + -(xScale.domain()[0] * ret.scaleFactor - xScale.range()[0]) + ',' + -(yScale.domain()[0] * ret.scaleFactor - yScale.range()[0]) + ')' + 'scale(' + ret.scaleFactor + ')';\n\t }\n\n\t function createNucleotides(selection, nucleotideNodes) {\n\t // create groupings for each nucleotide and label\n\t var gs = selection.selectAll('.rna-base').data(nucleotideNodes).enter().append('svg:g').attr('transform', function (d) {\n\t return 'translate(' + d.x + ',' + d.y + ')';\n\t });\n\n\t var circles = gs.append('svg:circle').attr('r', options.nucleotideRadius).classed('rna-base', true);\n\n\t if (options.showNucleotideLabels) {\n\t var nucleotideLabels = gs.append('svg:text').text(function (d) {\n\t return d.name;\n\t }).attr('text-anchor', 'middle').attr('dominant-baseline', 'central').classed('nucleotide-label', true).append('svg:title').text(function (d) {\n\t return d.struct_name + ':' + d.num;\n\t });\n\t }\n\t }\n\n\t function createLabels(selection, labelNodes) {\n\t // create groupings for each nucleotide and label\n\n\t var gs = selection.selectAll('.rnaLabel').data(labelNodes).enter().append('svg:g').attr('transform', function (d) {\n\t return 'translate(' + d.x + ',' + d.y + ')';\n\t });\n\n\t var numberLabels = gs.append('svg:text').text(function (d) {\n\t return d.name;\n\t }).attr('text-anchor', 'middle').attr('font-weight', 'bold').attr('dominant-baseline', 'central').classed('number-label', true);\n\t }\n\n\t function createName(selection, name) {\n\t selection.append('svg:text').attr('transform', 'translate(' + xScale.invert(options.width / 2) + ',' + yScale.invert(options.height) + ')').attr('dy', -10).classed('rna-name', true).text(name);\n\t }\n\n\t function makeExternalLinksBundle(selection, links) {\n\t var nodesDict = {};\n\t var linksList = [];\n\t links = links.filter(function (d) {\n\t return d.linkType == 'correct' || d.linkType == 'incorrect' || d.linkType == 'extra';\n\t });\n\n\t selection.selectAll('[link-type=extra]').remove();\n\n\t for (var i = 0; i < links.length; i++) {\n\t if (links[i].source === null || links[i].target === null) continue;\n\n\t nodesDict[links[i].source.uid] = links[i].source;\n\t nodesDict[links[i].target.uid] = links[i].target;\n\n\t linksList.push({ 'source': links[i].source.uid, 'target': links[i].target.uid, 'linkType': links[i].linkType, 'extraLinkType': links[i].extraLinkType });\n\t }\n\n\t var fbundling = d3.ForceEdgeBundling().nodes(nodesDict).edges(linksList).compatibility_threshold(0.8).step_size(0.2);\n\t var results = fbundling();\n\n\t var d3line = d3.svg.line().x(function (d) {\n\t return d.x;\n\t }).y(function (d) {\n\t return d.y;\n\t }).interpolate('linear');\n\n\t for (var i = 0; i < results.length; i++) {\n\t var edge_subpoint_data = results[i];\n\t // for each of the arrays in the results\n\t // draw a line between the subdivions points for that edge\n\n\t selection.append('path').attr('d', d3line(edge_subpoint_data)).style('fill', 'none').attr('link-type', function (d) {\n\t return linksList[i].linkType;\n\t }).attr('extra-link-type', function (d) {\n\t return linksList[i].extraLinkType;\n\t }).style('stroke-opacity', 0.4); //use opacity as blending\n\t }\n\t }\n\n\t function createLinks(selection, links) {\n\t links = links.filter(function (d) {\n\t return d.source !== null && d.target !== null;\n\t });\n\t var gs = selection.selectAll('.rna-link').data(links).enter().append('svg:line').attr('x1', function (d) {\n\t return d.source.x;\n\t }).attr('x2', function (d) {\n\t return d.target.x;\n\t }).attr('y1', function (d) {\n\t return d.source.y;\n\t }).attr('y2', function (d) {\n\t return d.target.y;\n\t }).attr('link-type', function (d) {\n\t return d.linkType;\n\t }).attr('extra-link-type', function (d) {\n\t return d.extraLinkType;\n\t }).classed('rna-link', true);\n\t }\n\n\t function chart(selection) {\n\t selection.each(function (data) {\n\t // data should be a dictionary containing at least a structure\n\t // and possibly a sequence\n\t var rg = new _rnagraph.RNAGraph(data.sequence, data.structure, data.name).recalculateElements().elementsToJson().addName(data.name);\n\n\t data.rnaGraph = rg;\n\t // calculate the position of each nucleotide\n\t // the positions of the labels will be calculated in\n\t // the addLabels function\n\t //var positions = simpleXyCoordinates(rg.pairtable);\n\t var naview = new _naview.NAView();\n\n\t var naViewPositions = naview.naview_xy_coordinates(rg.pairtable);\n\t var positions = [];\n\t for (var i = 0; i < naViewPositions.nbase; i++) {\n\t positions.push([naViewPositions.x[i], naViewPositions.y[i]]);\n\t }\n\t rg.addPositions('nucleotide', positions).reinforceStems().reinforceLoops().addExtraLinks(data.extraLinks).addLabels(options.startNucleotideNumber, options.labelInterval);\n\n\t // create a transform that will fit the molecule to the\n\t // size of the viewport (canvas, svg, whatever)\n\t var fillViewportTransform = createTransformToFillViewport(rg.nodes.map(function (d) {\n\t return d.x;\n\t }), rg.nodes.map(function (d) {\n\t return d.y;\n\t }));\n\n\t var gTransform = d3.select(this).append('g').attr('transform', fillViewportTransform);\n\n\t var nucleotideNodes = rg.nodes.filter(function (d) {\n\t return d.nodeType == 'nucleotide';\n\t });\n\n\t var labelNodes = rg.nodes.filter(function (d) {\n\t return d.nodeType == 'label';\n\t });\n\n\t var links = rg.links;\n\n\t createLinks(gTransform, links);\n\t createNucleotides(gTransform, nucleotideNodes);\n\t createLabels(gTransform, labelNodes);\n\t createName(gTransform, data.name);\n\n\t if (options.bundleExternalLinks) {\n\t makeExternalLinksBundle(gTransform, links);\n\t }\n\t });\n\t }\n\n\t chart.width = function (_) {\n\t if (!arguments.length) return options.width;\n\t options.width = _;\n\t return chart;\n\t };\n\n\t chart.height = function (_) {\n\t if (!arguments.length) return options.height;\n\t options.height = _;\n\t return chart;\n\t };\n\n\t chart.showNucleotideLabels = function (_) {\n\t if (!arguments.length) return options.showNucleotideLabels;\n\t options.showNucleotideLabels = _;\n\t return chart;\n\t };\n\n\t chart.rnaEdgePadding = function (_) {\n\t if (!arguments.length) return options.rnaEdgePadding;\n\t options.rnaEdgePadding = _;\n\t return chart;\n\t };\n\n\t chart.nucleotideRadius = function (_) {\n\t if (!arguments.length) return options.nucleotideRadius;\n\t options.nucleotideRadius = _;\n\t return chart;\n\t };\n\n\t chart.labelInterval = function (_) {\n\t if (!arguments.length) return options.labelInterval;\n\t options.labelInterval = _;\n\t return chart;\n\t };\n\n\t chart.showNucleotideLabels = function (_) {\n\t if (!arguments.length) return options.showNucleotideLabels;\n\t options.showNucleotideLabels = _;\n\t return chart;\n\t };\n\n\t chart.startNucleotideNumber = function (_) {\n\t if (!arguments.length) return options.startNucleotideNumber;\n\t options.startNucleotideNumber = _;\n\t return chart;\n\t };\n\n\t chart.bundleExternalLinks = function (_) {\n\t if (!arguments.length) return options.bundleExternalLinks;\n\t options.bundleExternalLinks = _;\n\t return chart;\n\t };\n\n\t return chart;\n\t}\n\tvar number_sort = function number_sort(a, b) {\n\t return a - b;\n\t};\n\n\tfunction RNAUtilities() {\n\t var self = this;\n\n\t // the brackets to use when constructing dotbracket strings\n\t // with pseudoknots\n\t self.bracket_left = '([{ 0; i--) {\n\n\t for (var j = i + TURN + 1; j <= n; j++) {\n\t maximum = mm[i][j - 1];\n\n\t for (var l = j - TURN - 1; l >= i; l--) {\n\t if (pt[l] === j) {\n\n\t // we have a base pair here\n\t maximum = Math.max(maximum, (l > i ? mm[i][l - 1] : 0) + 1 + (j - l - 1 > 0 ? mm[l + 1][j - 1] : 0));\n\t }\n\t }\n\n\t mm[i][j] = maximum;\n\t }\n\t }maximum = mm[1][n];\n\n\t return mm;\n\t };\n\n\t self.backtrackMaximumMatching = function (mm, old_pt) {\n\t var pt = Array.apply(null, Array(mm.length)).map(function () {\n\t return 0;\n\t });\n\t //create an array containing zeros\n\n\t self.mm_bt(mm, pt, old_pt, 1, mm.length - 1);\n\t return pt;\n\t };\n\n\t self.mm_bt = function (mm, pt, old_pt, i, j) {\n\t // Create a pairtable from the backtracking\n\t var maximum = mm[i][j];\n\t var TURN = 0;\n\n\t if (j - i - 1 < TURN) return; /* no more pairs */\n\n\t if (mm[i][j - 1] == maximum) {\n\t /* j is unpaired */\n\t self.mm_bt(mm, pt, old_pt, i, j - 1);\n\t return;\n\t }\n\n\t for (var q = j - TURN - 1; q >= i; q--) {\n\t /* j is paired with some q */\n\t if (old_pt[j] !== q) continue;\n\n\t var left_part = q > i ? mm[i][q - 1] : 0;\n\t var enclosed_part = j - q - 1 > 0 ? mm[q + 1][j - 1] : 0;\n\n\t if (left_part + enclosed_part + 1 == maximum) {\n\t // there's a base pair between j and q\n\t pt[q] = j;\n\t pt[j] = q;\n\n\t if (i < q) self.mm_bt(mm, pt, old_pt, i, q - 1);\n\n\t self.mm_bt(mm, pt, old_pt, q + 1, j - 1);\n\t return;\n\t }\n\t }\n\n\t //alert(i + ',' + j + ': backtracking failed!');\n\t console.log('FAILED!!!' + i + ',' + j + ': backtracking failed!');\n\t };\n\n\t self.dotbracketToPairtable = function (dotbracket) {\n\t // create an array and initialize it to 0\n\t pt = Array.apply(null, new Array(dotbracket.length + 1)).map(Number.prototype.valueOf, 0);\n\n\t // the first element is always the length of the RNA molecule\n\t pt[0] = dotbracket.length;\n\n\t // store the pairing partners for each symbol\n\t stack = {};\n\t for (i = 0; i < self.bracket_left.length; i++) {\n\t stack[i] = [];\n\t }\n\n\t // lookup the index of each symbol in the bracket array\n\t inverse_bracket_left = self.inverse_brackets(self.bracket_left);\n\t inverse_bracket_right = self.inverse_brackets(self.bracket_right);\n\n\t for (i = 0; i < dotbracket.length; i++) {\n\t a = dotbracket[i];\n\t ni = i + 1;\n\n\t if (a == '.') {\n\t // unpaired\n\t pt[ni] = 0;\n\t } else {\n\t if (a in inverse_bracket_left) {\n\t // open pair?\n\t stack[inverse_bracket_left[a]].push(ni);\n\t } else if (a in inverse_bracket_right) {\n\t // close pair?\n\t j = stack[inverse_bracket_right[a]].pop();\n\n\t pt[ni] = j;\n\t pt[j] = ni;\n\t } else {\n\t throw 'Unknown symbol in dotbracket string';\n\t }\n\t }\n\t }\n\n\t for (key in stack) {\n\t if (stack[key].length > 0) {\n\t throw 'Unmatched base at position ' + stack[key][0];\n\t }\n\t }\n\n\t return pt;\n\t };\n\n\t self.insert_into_stack = function (stack, i, j) {\n\t var k = 0;\n\t while (stack[k].length > 0 && stack[k][stack[k].length - 1] < j) {\n\t k += 1;\n\t }\n\n\t stack[k].push(j);\n\t return k;\n\t };\n\n\t self.delete_from_stack = function (stack, j) {\n\t var k = 0;\n\t while (stack[k].length === 0 || stack[k][stack[k].length - 1] != j) {\n\t k += 1;\n\t }\n\t stack[k].pop();\n\t return k;\n\t };\n\n\t self.pairtableToDotbracket = function (pt) {\n\t // store the pairing partners for each symbol\n\t stack = {};\n\t for (i = 0; i < pt[0]; i++) {\n\t stack[i] = [];\n\t }\n\n\t seen = {};\n\t res = '';\n\t for (i = 1; i < pt[0] + 1; i++) {\n\t if (pt[i] !== 0 && pt[i] in seen) {\n\t throw 'Invalid pairtable contains duplicate entries';\n\t }\n\t seen[pt[i]] = true;\n\n\t if (pt[i] === 0) {\n\t res += '.';\n\t } else {\n\t if (pt[i] > i) {\n\t res += self.bracket_left[self.insert_into_stack(stack, i, pt[i])];\n\t } else {\n\t res += self.bracket_right[self.delete_from_stack(stack, i)];\n\t }\n\t }\n\t }\n\n\t return res;\n\t };\n\n\t self.find_unmatched = function (pt, from, to) {\n\t /*\n\t * Find unmatched nucleotides in this molecule.\n\t */\n\t var to_remove = [];\n\t var unmatched = [];\n\n\t var orig_from = from;\n\t var orig_to = to;\n\n\t for (var i = from; i <= to; i++) {\n\t if (pt[i] !== 0 && (pt[i] < from || pt[i] > to)) unmatched.push([i, pt[i]]);\n\t }for (i = orig_from; i <= orig_to; i++) {\n\t while (pt[i] === 0 && i <= orig_to) {\n\t i++;\n\t }to = pt[i];\n\n\t while (pt[i] === to) {\n\t i++;\n\t to--;\n\t }\n\n\t to_remove = to_remove.concat(self.find_unmatched(pt, i, to));\n\t }\n\n\t if (unmatched.length > 0) to_remove.push(unmatched);\n\n\t return to_remove;\n\t };\n\n\t self.removePseudoknotsFromPairtable = function (pt) {\n\t /* Remove the pseudoknots from this structure in such a fashion\n\t * that the least amount of base-pairs need to be broken\n\t *\n\t * The pairtable is manipulated in place and a list of tuples\n\t * indicating the broken base pairs is returned.\n\t */\n\n\t var mm = self.maximumMatching(pt);\n\t var new_pt = self.backtrackMaximumMatching(mm, pt);\n\t var removed = [];\n\n\t for (var i = 1; i < pt.length; i++) {\n\t if (pt[i] < i) continue;\n\n\t if (new_pt[i] != pt[i]) {\n\t removed.push([i, pt[i]]);\n\t pt[pt[i]] = 0;\n\t pt[i] = 0;\n\t }\n\t }\n\n\t return removed;\n\t };\n\t}\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports) {\n\n\t\"use strict\";\n\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\texports.simpleXyCoordinates = simpleXyCoordinates;\n\tfunction simpleXyCoordinates(pair_table) {\n\t var INIT_ANGLE = 0.; /* initial bending angle */\n\t var INIT_X = 100.; /* coordinate of first digit */\n\t var INIT_Y = 100.; /* see above */\n\t var RADIUS = 15.;\n\n\t var x = [],\n\t y = [];\n\n\t var i, len;\n\t var alpha;\n\n\t len = pair_table[0];\n\t var angle = Array.apply(null, new Array(len + 5)).map(Number.prototype.valueOf, 0);\n\t var loop_size = Array.apply(null, new Array(16 + Math.floor(len / 5))).map(Number.prototype.valueOf, 0);\n\t var stack_size = Array.apply(null, new Array(16 + Math.floor(len / 5))).map(Number.prototype.valueOf, 0);\n\n\t var lp = 0;\n\t var stk = 0;\n\t var PIHALF = Math.PI / 2;\n\n\t var loop = function loop(i, j, pair_table)\n\t /* i, j are the positions AFTER the last pair of a stack; i.e\n\t i-1 and j+1 are paired. */\n\t {\n\t var count = 2; /* counts the VERTICES of a loop polygon; that's\n\t NOT necessarily the number of unpaired bases!\n\t Upon entry the loop has already 2 vertices, namely\n\t the pair i-1/j+1. */\n\n\t var r = 0,\n\t bubble = 0; /* bubble counts the unpaired digits in loops */\n\n\t var i_old, partner, k, l, start_k, start_l, fill, ladder;\n\t var begin, v, diff;\n\t var polygon;\n\n\t var remember = Array.apply(null, new Array(3 + Math.floor((j - i) / 5) * 2)).map(Number.prototype.valueOf, 0);\n\n\t i_old = i - 1, j++; /* j has now been set to the partner of the\n\t previous pair for correct while-loop\n\t termination. */\n\t while (i != j) {\n\t partner = pair_table[i];\n\t if (!partner || i == 0) i++, count++, bubble++;else {\n\t count += 2;\n\t k = i, l = partner; /* beginning of stack */\n\t remember[++r] = k;\n\t remember[++r] = l;\n\t i = partner + 1; /* next i for the current loop */\n\n\t start_k = k, start_l = l;\n\t ladder = 0;\n\t do {\n\t k++, l--, ladder++; /* go along the stack region */\n\t } while (pair_table[k] == l && pair_table[k] > k);\n\n\t fill = ladder - 2;\n\t if (ladder >= 2) {\n\t angle[start_k + 1 + fill] += PIHALF; /* Loop entries and */\n\t angle[start_l - 1 - fill] += PIHALF; /* exits get an */\n\t angle[start_k] += PIHALF; /* additional PI/2. */\n\t angle[start_l] += PIHALF; /* Why ? (exercise) */\n\t if (ladder > 2) {\n\t for (; fill >= 1; fill--) {\n\t angle[start_k + fill] = Math.PI; /* fill in the angles */\n\t angle[start_l - fill] = Math.PI; /* for the backbone */\n\t }\n\t }\n\t }\n\t stack_size[++stk] = ladder;\n\t if (k <= l) loop(k, l, pair_table);\n\t }\n\t }\n\n\t polygon = Math.PI * (count - 2) / count; /* bending angle in loop polygon */\n\t remember[++r] = j;\n\t begin = i_old < 0 ? 0 : i_old;\n\t for (v = 1; v <= r; v++) {\n\t diff = remember[v] - begin;\n\t for (fill = 0; fill <= diff; fill++) {\n\t angle[begin + fill] += polygon;\n\t }if (v > r) break;\n\t begin = remember[++v];\n\t }\n\t loop_size[++lp] = bubble;\n\t };\n\n\t loop(0, len + 1, pair_table);\n\t loop_size[lp] -= 2; /* correct for cheating with function loop */\n\n\t alpha = INIT_ANGLE;\n\t x[0] = INIT_X;\n\t y[0] = INIT_Y;\n\n\t var poss = [];\n\n\t poss.push([x[0], y[0]]);\n\t for (i = 1; i < len; i++) {\n\t x[i] = x[i - 1] + RADIUS * Math.cos(alpha);\n\t y[i] = y[i - 1] + RADIUS * Math.sin(alpha);\n\n\t poss.push([x[i], y[i]]);\n\t alpha += Math.PI - angle[i + 1];\n\t }\n\n\t return poss;\n\t}\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\texports.NAView = NAView;\n\n\tvar _radloop = __webpack_require__(6);\n\n\tvar _connection = __webpack_require__(7);\n\n\tvar _region = __webpack_require__(9);\n\n\tvar _base = __webpack_require__(10);\n\n\tvar _loop = __webpack_require__(8);\n\n\tfunction NAView() {\n\t this.ANUM = 9999.0;\n\t this.MAXITER = 500;\n\n\t this.bases = [];\n\t this.nbase = null;\n\t this.nregion = null;\n\t this.loop_count = null;\n\n\t this.root = new _loop.Loop();\n\t this.loops = [];\n\n\t this.regions = [];\n\n\t this.rlphead = new _radloop.Radloop();\n\n\t this.lencut = 0.8;\n\t this.RADIUS_REDUCTION_FACTOR = 1.4;\n\n\t // show algorithm step by step\n\t this.angleinc = null;\n\n\t this._h = null;\n\n\t // private boolean noIterationFailureYet = true;\n\n\t this.HELIX_FACTOR = 0.6;\n\t this.BACKBONE_DISTANCE = 27;\n\t}\n\n\tNAView.prototype.naview_xy_coordinates = function (pair_table) {\n\t var x = [];\n\t var y = [];\n\t if (pair_table.length === 0 || pair_table[0] === 0) {\n\t return 0;\n\t }\n\t var i;\n\t this.nbase = pair_table[0];\n\t this.bases = [];\n\t for (var index = 0; index < this.nbase + 1; index++) {\n\t this.bases.push(new _base.Base());\n\t }\n\t this.regions = [];\n\t for (var index = 0; index < this.nbase + 1; index++) {\n\t this.regions.push(new _region.Region());\n\t }\n\t this.read_in_bases(pair_table);\n\t this.rlphead = null;\n\t this.find_regions();\n\t this.loop_count = 0;\n\t this.loops = [];\n\t for (var index = 0; index < this.nbase + 1; index++) {\n\t this.loops.push(new _loop.Loop());\n\t }\n\t this.construct_loop(0);\n\t this.find_central_loop();\n\t this.traverse_loop(this.root, null);\n\n\t for (i = 0; i < this.nbase; i++) {\n\t x.push(100 + this.BACKBONE_DISTANCE * this.bases[i + 1].getX());\n\t y.push(100 + this.BACKBONE_DISTANCE * this.bases[i + 1].getY());\n\t }\n\n\t return {\n\t nbase: this.nbase,\n\t x: x,\n\t y: y\n\t };\n\t};\n\n\tNAView.prototype.read_in_bases = function read_in_bases(pair_table) {\n\t var i = null;\n\t var npairs = null;\n\n\t // Set up an origin.\n\t this.bases.push(new _base.Base());\n\t this.bases[0].setMate(0);\n\t this.bases[0].setExtracted(false);\n\t this.bases[0].setX(this.ANUM);\n\t this.bases[0].setY(this.ANUM);\n\n\t for (npairs = 0, i = 1; i <= this.nbase; i++) {\n\t this.bases.push(new _base.Base());\n\t this.bases[i].setExtracted(false);\n\t this.bases[i].setX(this.ANUM);\n\t this.bases[i].setY(this.ANUM);\n\t this.bases[i].setMate(pair_table[i]);\n\t if (pair_table[i] > i) npairs++;\n\t }\n\t // must have at least 1 pair to avoid segfault\n\t if (npairs == 0) {\n\t this.bases[1].setMate(this.nbase);\n\t this.bases[this.nbase].setMate(1);\n\t }\n\t};\n\n\tNAView.prototype.find_regions = function find_regions() {\n\t var i = null;\n\t var mate = null;\n\t var nb1 = null;\n\n\t nb1 = this.nbase + 1;\n\t var mark = [];\n\t for (i = 0; i < nb1; i++) {\n\t mark.push(false);\n\t }\n\t this.nregion = 0;\n\t for (i = 0; i <= this.nbase; i++) {\n\t if ((mate = this.bases[i].getMate()) != 0 && !mark[i]) {\n\t this.regions[this.nregion].setStart1(i);\n\t this.regions[this.nregion].setEnd2(mate);\n\t mark[i] = true;\n\t mark[mate] = true;\n\t this.bases[i].setRegion(this.regions[this.nregion]);\n\t this.bases[mate].setRegion(this.regions[this.nregion]);\n\t for (i++, mate--; i < mate && this.bases[i].getMate() == mate; i++, mate--) {\n\t mark[mate] = true;\n\t mark[i] = true;\n\t this.bases[i].setRegion(this.regions[this.nregion]);\n\t this.bases[mate].setRegion(this.regions[this.nregion]);\n\t }\n\t this.regions[this.nregion].setEnd1(--i);\n\t this.regions[this.nregion].setStart2(mate + 1);\n\n\t this.nregion++;\n\t }\n\t }\n\t};\n\n\tNAView.prototype.construct_loop = function construct_loop(ibase) {\n\t var i = null;\n\t var mate = null;\n\t var retloop = new _loop.Loop();\n\t var lp = new _loop.Loop();\n\t var cp = new _connection.Connection();\n\t var rp = new _region.Region();\n\t var rlp = new _radloop.Radloop();\n\t retloop = this.loops[this.loop_count++];\n\t retloop.setNconnection(0);\n\t retloop.setDepth(0);\n\t retloop.setNumber(this.loop_count);\n\t retloop.setRadius(0.0);\n\n\t for (rlp = this.rlphead; rlp != null; rlp = rlp.getNext()) {\n\t if (rlp.getLoopnumber() == this.loop_count) retloop.setRadius(rlp.getRadius());\n\t }i = ibase;\n\t do {\n\t if ((mate = this.bases[i].getMate()) != 0) {\n\t rp = this.bases[i].getRegion();\n\t if (!this.bases[rp.getStart1()].isExtracted()) {\n\t if (i == rp.getStart1()) {\n\t this.bases[rp.getStart1()].setExtracted(true);\n\t this.bases[rp.getEnd1()].setExtracted(true);\n\t this.bases[rp.getStart2()].setExtracted(true);\n\t this.bases[rp.getEnd2()].setExtracted(true);\n\t lp = this.construct_loop(rp.getEnd1() < this.nbase ? rp.getEnd1() + 1 : 0);\n\t } else if (i == rp.getStart2()) {\n\t this.bases[rp.getStart2()].setExtracted(true);\n\t this.bases[rp.getEnd2()].setExtracted(true);\n\t this.bases[rp.getStart1()].setExtracted(true);\n\t this.bases[rp.getEnd1()].setExtracted(true);\n\t lp = this.construct_loop(rp.getEnd2() < this.nbase ? rp.getEnd2() + 1 : 0);\n\t } else {\n\t console.log(\"Something went terribly wrong ....\");\n\t }\n\t retloop.setNconnection(retloop.getNconnection() + 1);\n\t cp = new _connection.Connection();\n\t retloop.setConnection(retloop.getNconnection() - 1, cp);\n\t retloop.setConnection(retloop.getNconnection(), null);\n\t cp.setLoop(lp);\n\t cp.setRegion(rp);\n\t if (i == rp.getStart1()) {\n\t cp.setStart(rp.getStart1());\n\t cp.setEnd(rp.getEnd2());\n\t } else {\n\t cp.setStart(rp.getStart2());\n\t cp.setEnd(rp.getEnd1());\n\t }\n\t cp.setExtruded(false);\n\t cp.setBroken(false);\n\t lp.setNconnection(lp.getNconnection() + 1);\n\t cp = new _connection.Connection();\n\t lp.setConnection(lp.getNconnection() - 1, cp);\n\t lp.setConnection(lp.getNconnection(), null);\n\t cp.setLoop(retloop);\n\t cp.setRegion(rp);\n\t if (i == rp.getStart1()) {\n\t cp.setStart(rp.getStart2());\n\t cp.setEnd(rp.getEnd1());\n\t } else {\n\t cp.setStart(rp.getStart1());\n\t cp.setEnd(rp.getEnd2());\n\t }\n\t cp.setExtruded(false);\n\t cp.setBroken(false);\n\t }\n\t i = mate;\n\t }\n\t if (++i > this.nbase) i = 0;\n\t } while (i != ibase);\n\t return retloop;\n\t};\n\n\tNAView.prototype.find_central_loop = function find_central_loop() {\n\t var lp = new _loop.Loop();\n\t var maxconn = null;\n\t var maxdepth = null;\n\t var i = null;\n\n\t determine_depths.bind(this)();\n\t maxconn = 0;\n\t maxdepth = -1;\n\t for (i = 0; i < this.loop_count; i++) {\n\t lp = this.loops[i];\n\t if (lp.getNconnection() > maxconn) {\n\t maxdepth = lp.getDepth();\n\t maxconn = lp.getNconnection();\n\t this.root = lp;\n\t } else if (lp.getDepth() > maxdepth && lp.getNconnection() == maxconn) {\n\t maxdepth = lp.getDepth();\n\t this.root = lp;\n\t }\n\t }\n\t};\n\n\tfunction determine_depths() {\n\t var lp = new _loop.Loop();\n\t var i = null;\n\t var j = null;\n\n\t for (i = 0; i < this.loop_count; i++) {\n\t lp = this.loops[i];\n\t for (j = 0; j < this.loop_count; j++) {\n\t this.loops[j].setMark(false);\n\t }\n\t lp.setDepth(depth(lp));\n\t }\n\t}\n\n\tfunction depth(lp) {\n\t var count = null;\n\t var ret = null;\n\t var d = null;\n\n\t if (lp.getNconnection() <= 1) {\n\t return 0;\n\t }\n\t if (lp.isMark()) {\n\t return -1;\n\t }\n\t lp.setMark(true);\n\t count = 0;\n\t ret = 0;\n\t for (var i = 0; lp.getConnection(i) != null; i++) {\n\t d = depth(lp.getConnection(i).getLoop());\n\t if (d >= 0) {\n\t if (++count == 1) {\n\t ret = d;\n\t } else if (ret > d) {\n\t ret = d;\n\t }\n\t }\n\t }\n\t lp.setMark(false);\n\t return ret + 1;\n\t}\n\n\tNAView.prototype.traverse_loop = function traverse_loop(lp, anchor_connection) {\n\t var xs, ys, xe, ye, xn, yn, angleinc, r;\n\t var radius, xc, yc, xo, yo, astart, aend, a;\n\t var cp, cpnext, acp, cpprev;\n\t var i, j, n, ic;\n\t var da, maxang;\n\t var count, icstart, icend, icmiddle, icroot;\n\t var done, done_all_connections, rooted;\n\t var sign;\n\t var midx, midy, nrx, nry, mx, my, vx, vy, dotmv, nmidx, nmidy;\n\t var icstart1, icup, icdown, icnext, direction;\n\t var dan, dx, dy, rr;\n\t var cpx, cpy, cpnextx, cpnexty, cnx, cny, rcn, rc, lnx, lny, rl, ac, acn, sx, sy, dcp;\n\t var imaxloop = 0;\n\n\t angleinc = 2 * Math.PI / (this.nbase + 1);\n\t acp = null;\n\t icroot = -1;\n\t var indice = 0;\n\n\t for (ic = 0; (cp = lp.getConnection(indice)) != null; indice++, ic++) {\n\t xs = -Math.sin(angleinc * cp.getStart());\n\t ys = Math.cos(angleinc * cp.getStart());\n\t xe = -Math.sin(angleinc * cp.getEnd());\n\t ye = Math.cos(angleinc * cp.getEnd());\n\t xn = ye - ys;\n\t yn = xs - xe;\n\t r = Math.sqrt(xn * xn + yn * yn);\n\t cp.setXrad(xn / r);\n\t cp.setYrad(yn / r);\n\t cp.setAngle(Math.atan2(yn, xn));\n\t if (cp.getAngle() < 0.0) {\n\t cp.setAngle(cp.getAngle() + 2 * Math.PI);\n\t }\n\t if (anchor_connection != null && anchor_connection.getRegion() == cp.getRegion()) {\n\t acp = cp;\n\t icroot = ic;\n\t }\n\t }\n\t set_radius: while (true) {\n\t this.determine_radius(lp, this.lencut);\n\t radius = lp.getRadius() / this.RADIUS_REDUCTION_FACTOR;\n\t if (anchor_connection == null) {\n\t xc = yc = 0.0;\n\t } else {\n\t xo = (this.bases[acp.getStart()].getX() + this.bases[acp.getEnd()].getX()) / 2.0;\n\t yo = (this.bases[acp.getStart()].getY() + this.bases[acp.getEnd()].getY()) / 2.0;\n\t xc = xo - radius * acp.getXrad();\n\t yc = yo - radius * acp.getYrad();\n\t }\n\n\t // The construction of the connectors will proceed in blocks of\n\t // connected connectors, where a connected connector pairs means two\n\t // connectors that are forced out of the drawn circle because they\n\t // are too close together in angle.\n\n\t // First, find the start of a block of connected connectors\n\n\t if (icroot == -1) {\n\t icstart = 0;\n\t } else {\n\t icstart = icroot;\n\t }\n\t cp = lp.getConnection(icstart);\n\t count = 0;\n\t done = false;\n\t do {\n\t j = icstart - 1;\n\t if (j < 0) {\n\t j = lp.getNconnection() - 1;\n\t }\n\t cpprev = lp.getConnection(j);\n\t if (!this.connected_connection(cpprev, cp)) {\n\t done = true;\n\t } else {\n\t icstart = j;\n\t cp = cpprev;\n\t }\n\t if (++count > lp.getNconnection()) {\n\t // Here everything is connected. Break on maximum angular\n\t // separation between connections.\n\t maxang = -1.0;\n\t for (ic = 0; ic < lp.getNconnection(); ic++) {\n\t j = ic + 1;\n\t if (j >= lp.getNconnection()) {\n\t j = 0;\n\t }\n\t cp = lp.getConnection(ic);\n\t cpnext = lp.getConnection(j);\n\t ac = cpnext.getAngle() - cp.getAngle();\n\t if (ac < 0.0) {\n\t ac += 2 * Math.PI;\n\t }\n\t if (ac > maxang) {\n\t maxang = ac;\n\t imaxloop = ic;\n\t }\n\t }\n\t icend = imaxloop;\n\t icstart = imaxloop + 1;\n\t if (icstart >= lp.getNconnection()) {\n\t icstart = 0;\n\t }\n\t cp = lp.getConnection(icend);\n\t cp.setBroken(true);\n\t done = true;\n\t }\n\t } while (!done);\n\t done_all_connections = false;\n\t icstart1 = icstart;\n\t while (!done_all_connections) {\n\t count = 0;\n\t done = false;\n\t icend = icstart;\n\t rooted = false;\n\t while (!done) {\n\t cp = lp.getConnection(icend);\n\t if (icend == icroot) {\n\t rooted = true;\n\t }\n\t j = icend + 1;\n\t if (j >= lp.getNconnection()) {\n\t j = 0;\n\t }\n\t cpnext = lp.getConnection(j);\n\t if (this.connected_connection(cp, cpnext)) {\n\t if (++count >= lp.getNconnection()) {\n\t break;\n\t }\n\t icend = j;\n\t } else {\n\t done = true;\n\t }\n\t }\n\t icmiddle = this.find_ic_middle(icstart, icend, anchor_connection, acp, lp);\n\t ic = icup = icdown = icmiddle;\n\t done = false;\n\t direction = 0;\n\t while (!done) {\n\t if (direction < 0) {\n\t ic = icup;\n\t } else if (direction == 0) {\n\t ic = icmiddle;\n\t } else {\n\t ic = icdown;\n\t }\n\t if (ic >= 0) {\n\t cp = lp.getConnection(ic);\n\t if (anchor_connection == null || acp != cp) {\n\t if (direction == 0) {\n\t astart = cp.getAngle() - Math.asin(1.0 / 2.0 / radius);\n\t aend = cp.getAngle() + Math.asin(1.0 / 2.0 / radius);\n\t this.bases[cp.getStart()].setX(xc + radius * Math.cos(astart));\n\t this.bases[cp.getStart()].setY(yc + radius * Math.sin(astart));\n\t this.bases[cp.getEnd()].setX(xc + radius * Math.cos(aend));\n\t this.bases[cp.getEnd()].setY(yc + radius * Math.sin(aend));\n\t } else if (direction < 0) {\n\t j = ic + 1;\n\t if (j >= lp.getNconnection()) {\n\t j = 0;\n\t }\n\t cp = lp.getConnection(ic);\n\t cpnext = lp.getConnection(j);\n\t cpx = cp.getXrad();\n\t cpy = cp.getYrad();\n\t ac = (cp.getAngle() + cpnext.getAngle()) / 2.0;\n\t if (cp.getAngle() > cpnext.getAngle()) {\n\t ac -= Math.PI;\n\t }\n\t cnx = Math.cos(ac);\n\t cny = Math.sin(ac);\n\t lnx = cny;\n\t lny = -cnx;\n\t da = cpnext.getAngle() - cp.getAngle();\n\t if (da < 0.0) {\n\t da += 2 * Math.PI;\n\t }\n\t if (cp.isExtruded()) {\n\t if (da <= Math.PI / 2) {\n\t rl = 2.0;\n\t } else {\n\t rl = 1.5;\n\t }\n\t } else {\n\t rl = 1.0;\n\t }\n\t this.bases[cp.getEnd()].setX(this.bases[cpnext.getStart()].getX() + rl * lnx);\n\t this.bases[cp.getEnd()].setY(this.bases[cpnext.getStart()].getY() + rl * lny);\n\t this.bases[cp.getStart()].setX(this.bases[cp.getEnd()].getX() + cpy);\n\t this.bases[cp.getStart()].setY(this.bases[cp.getEnd()].getY() - cpx);\n\t } else {\n\t j = ic - 1;\n\t if (j < 0) {\n\t j = lp.getNconnection() - 1;\n\t }\n\t cp = lp.getConnection(j);\n\t cpnext = lp.getConnection(ic);\n\t cpnextx = cpnext.getXrad();\n\t cpnexty = cpnext.getYrad();\n\t ac = (cp.getAngle() + cpnext.getAngle()) / 2.0;\n\t if (cp.getAngle() > cpnext.getAngle()) {\n\t ac -= Math.PI;\n\t }\n\t cnx = Math.cos(ac);\n\t cny = Math.sin(ac);\n\t lnx = -cny;\n\t lny = cnx;\n\t da = cpnext.getAngle() - cp.getAngle();\n\t if (da < 0.0) {\n\t da += 2 * Math.PI;\n\t }\n\t if (cp.isExtruded()) {\n\t if (da <= Math.PI / 2) {\n\t rl = 2.0;\n\t } else {\n\t rl = 1.5;\n\t }\n\t } else {\n\t rl = 1.0;\n\t }\n\t this.bases[cpnext.getStart()].setX(this.bases[cp.getEnd()].getX() + rl * lnx);\n\t this.bases[cpnext.getStart()].setY(this.bases[cp.getEnd()].getY() + rl * lny);\n\t this.bases[cpnext.getEnd()].setX(this.bases[cpnext.getStart()].getX() - cpnexty);\n\t this.bases[cpnext.getEnd()].setY(this.bases[cpnext.getStart()].getY() + cpnextx);\n\t }\n\t }\n\t }\n\t if (direction < 0) {\n\t if (icdown == icend) {\n\t icdown = -1;\n\t } else if (icdown >= 0) {\n\t if (++icdown >= lp.getNconnection()) {\n\t icdown = 0;\n\t }\n\t }\n\t direction = 1;\n\t } else {\n\t if (icup == icstart) {\n\t icup = -1;\n\t } else if (icup >= 0) {\n\t if (--icup < 0) {\n\t icup = lp.getNconnection() - 1;\n\t }\n\t }\n\t direction = -1;\n\t }\n\t done = icup == -1 && icdown == -1;\n\t }\n\t icnext = icend + 1;\n\t if (icnext >= lp.getNconnection()) {\n\t icnext = 0;\n\t }\n\t if (icend != icstart && !(icstart == icstart1 && icnext == icstart1)) {\n\n\t // Move the bases just constructed (or the radius) so that\n\t // the bisector of the end points is radius distance away\n\t // from the loop center.\n\n\t cp = lp.getConnection(icstart);\n\t cpnext = lp.getConnection(icend);\n\t dx = this.bases[cpnext.getEnd()].getX() - this.bases[cp.getStart()].getX();\n\t dy = this.bases[cpnext.getEnd()].getY() - this.bases[cp.getStart()].getY();\n\t midx = this.bases[cp.getStart()].getX() + dx / 2.0;\n\t midy = this.bases[cp.getStart()].getY() + dy / 2.0;\n\t rr = Math.sqrt(dx * dx + dy * dy);\n\t mx = dx / rr;\n\t my = dy / rr;\n\t vx = xc - midx;\n\t vy = yc - midy;\n\t rr = Math.sqrt(dx * dx + dy * dy);\n\t vx /= rr;\n\t vy /= rr;\n\t dotmv = vx * mx + vy * my;\n\t nrx = dotmv * mx - vx;\n\t nry = dotmv * my - vy;\n\t rr = Math.sqrt(nrx * nrx + nry * nry);\n\t nrx /= rr;\n\t nry /= rr;\n\n\t // Determine which side of the bisector the center should\n\t // be.\n\n\t dx = this.bases[cp.getStart()].getX() - xc;\n\t dy = this.bases[cp.getStart()].getY() - yc;\n\t ac = Math.atan2(dy, dx);\n\t if (ac < 0.0) {\n\t ac += 2 * Math.PI;\n\t }\n\t dx = this.bases[cpnext.getEnd()].getX() - xc;\n\t dy = this.bases[cpnext.getEnd()].getY() - yc;\n\t acn = Math.atan2(dy, dx);\n\t if (acn < 0.0) {\n\t acn += 2 * Math.PI;\n\t }\n\t if (acn < ac) {\n\t acn += 2 * Math.PI;\n\t }\n\t if (acn - ac > Math.PI) {\n\t sign = -1;\n\t } else {\n\t sign = 1;\n\t }\n\t nmidx = xc + sign * radius * nrx;\n\t nmidy = yc + sign * radius * nry;\n\t if (rooted) {\n\t xc -= nmidx - midx;\n\t yc -= nmidy - midy;\n\t } else {\n\t for (ic = icstart;;) {\n\t cp = lp.getConnection(ic);\n\t i = cp.getStart();\n\t this.bases[i].setX(this.bases[i].getX() + nmidx - midx);\n\t this.bases[i].setY(this.bases[i].getY() + nmidy - midy);\n\t i = cp.getEnd();\n\t this.bases[i].setX(this.bases[i].getX() + nmidx - midx);\n\t this.bases[i].setY(this.bases[i].getY() + nmidy - midy);\n\t if (ic == icend) {\n\t break;\n\t }\n\t if (++ic >= lp.getNconnection()) {\n\t ic = 0;\n\t }\n\t }\n\t }\n\t }\n\t icstart = icnext;\n\t done_all_connections = icstart == icstart1;\n\t }\n\t for (ic = 0; ic < lp.getNconnection(); ic++) {\n\t cp = lp.getConnection(ic);\n\t j = ic + 1;\n\t if (j >= lp.getNconnection()) {\n\t j = 0;\n\t }\n\t cpnext = lp.getConnection(j);\n\t dx = this.bases[cp.getEnd()].getX() - xc;\n\t dy = this.bases[cp.getEnd()].getY() - yc;\n\t rc = Math.sqrt(dx * dx + dy * dy);\n\t ac = Math.atan2(dy, dx);\n\t if (ac < 0.0) {\n\t ac += 2 * Math.PI;\n\t }\n\t dx = this.bases[cpnext.getStart()].getX() - xc;\n\t dy = this.bases[cpnext.getStart()].getY() - yc;\n\t rcn = Math.sqrt(dx * dx + dy * dy);\n\t acn = Math.atan2(dy, dx);\n\t if (acn < 0.0) {\n\t acn += 2 * Math.PI;\n\t }\n\t if (acn < ac) {\n\t acn += 2 * Math.PI;\n\t }\n\t dan = acn - ac;\n\t dcp = cpnext.getAngle() - cp.getAngle();\n\t if (dcp <= 0.0) {\n\t dcp += 2 * Math.PI;\n\t }\n\t if (Math.abs(dan - dcp) > Math.PI) {\n\t if (cp.isExtruded()) {\n\t console.log(\"Warning from traverse_loop. Loop \" + lp.getNumber() + \" has crossed regions\\n\");\n\t } else if (cpnext.getStart() - cp.getEnd() != 1) {\n\t cp.setExtruded(true);\n\t continue set_radius; // remplacement du goto\n\t }\n\t }\n\t if (cp.isExtruded()) {\n\t this.construct_extruded_segment(cp, cpnext);\n\t } else {\n\t n = cpnext.getStart() - cp.getEnd();\n\t if (n < 0) {\n\t n += this.nbase + 1;\n\t }\n\t angleinc = dan / n;\n\t for (j = 1; j < n; j++) {\n\t i = cp.getEnd() + j;\n\t if (i > this.nbase) {\n\t i -= this.nbase + 1;\n\t }\n\t a = ac + j * angleinc;\n\t rr = rc + (rcn - rc) * (a - ac) / dan;\n\t this.bases[i].setX(xc + rr * Math.cos(a));\n\t this.bases[i].setY(yc + rr * Math.sin(a));\n\t }\n\t }\n\t }\n\t break;\n\t }\n\t for (ic = 0; ic < lp.getNconnection(); ic++) {\n\t if (icroot != ic) {\n\t cp = lp.getConnection(ic);\n\t //IM HERE\n\t this.generate_region(cp);\n\t this.traverse_loop(cp.getLoop(), cp);\n\t }\n\t }\n\t n = 0;\n\t sx = 0.0;\n\t sy = 0.0;\n\t for (ic = 0; ic < lp.getNconnection(); ic++) {\n\t j = ic + 1;\n\t if (j >= lp.getNconnection()) {\n\t j = 0;\n\t }\n\t cp = lp.getConnection(ic);\n\t cpnext = lp.getConnection(j);\n\t n += 2;\n\t sx += this.bases[cp.getStart()].getX() + this.bases[cp.getEnd()].getX();\n\t sy += this.bases[cp.getStart()].getY() + this.bases[cp.getEnd()].getY();\n\t if (!cp.isExtruded()) {\n\t for (j = cp.getEnd() + 1; j != cpnext.getStart(); j++) {\n\t if (j > this.nbase) {\n\t j -= this.nbase + 1;\n\t }\n\t n++;\n\t sx += this.bases[j].getX();\n\t sy += this.bases[j].getY();\n\t }\n\t }\n\t }\n\t lp.setX(sx / n);\n\t lp.setY(sy / n);\n\t};\n\n\tNAView.prototype.determine_radius = function determine_radius(lp, lencut) {\n\t var mindit, ci, dt, sumn, sumd, radius, dit;\n\t var i,\n\t j,\n\t end,\n\t start,\n\t imindit = 0;\n\t var cp = new _connection.Connection(),\n\t cpnext = new _connection.Connection();\n\t var rt2_2 = 0.7071068;\n\n\t do {\n\t mindit = 1.0e10;\n\t for (sumd = 0.0, sumn = 0.0, i = 0; i < lp.getNconnection(); i++) {\n\t cp = lp.getConnection(i);\n\t j = i + 1;\n\t if (j >= lp.getNconnection()) {\n\t j = 0;\n\t }\n\t cpnext = lp.getConnection(j);\n\t end = cp.getEnd();\n\t start = cpnext.getStart();\n\t if (start < end) {\n\t start += this.nbase + 1;\n\t }\n\t dt = cpnext.getAngle() - cp.getAngle();\n\t if (dt <= 0.0) {\n\t dt += 2 * Math.PI;\n\t }\n\t if (!cp.isExtruded()) {\n\t ci = start - end;\n\t } else {\n\t if (dt <= Math.PI / 2) {\n\t ci = 2.0;\n\t } else {\n\t ci = 1.5;\n\t }\n\t }\n\t sumn += dt * (1.0 / ci + 1.0);\n\t sumd += dt * dt / ci;\n\t dit = dt / ci;\n\t if (dit < mindit && !cp.isExtruded() && ci > 1.0) {\n\t mindit = dit;\n\t imindit = i;\n\t }\n\t }\n\t radius = sumn / sumd;\n\t if (radius < rt2_2) {\n\t radius = rt2_2;\n\t }\n\t if (mindit * radius < lencut) {\n\t lp.getConnection(imindit).setExtruded(true);\n\t }\n\t } while (mindit * radius < lencut);\n\t if (lp.getRadius() > 0.0) {\n\t radius = lp.getRadius();\n\t } else {\n\t lp.setRadius(radius);\n\t }\n\t};\n\n\tNAView.prototype.find_ic_middle = function find_ic_middle(icstart, icend, anchor_connection, acp, lp) {\n\t var count, ret, ic, i;\n\t var done;\n\n\t count = 0;\n\t ret = -1;\n\t ic = icstart;\n\t done = false;\n\t while (!done) {\n\t if (count++ > lp.getNconnection() * 2) {\n\t console.log(\"Infinite loop in 'find_ic_middle'\");\n\t }\n\t if (anchor_connection != null && lp.getConnection(ic) == acp) {\n\t ret = ic;\n\t }\n\t done = ic == icend;\n\t if (++ic >= lp.getNconnection()) {\n\t ic = 0;\n\t }\n\t }\n\t if (ret == -1) {\n\t for (i = 1, ic = icstart; i < (count + 1) / 2; i++) {\n\t if (++ic >= lp.getNconnection()) ic = 0;\n\t }\n\t ret = ic;\n\t }\n\t return ret;\n\t};\n\n\tNAView.prototype.construct_extruded_segment = function construct_extruded_segment(cp, cpnext) {\n\t var astart, aend1, aend2, aave, dx, dy, a1, a2, ac, rr, da, dac;\n\t var start, end, n, nstart, nend;\n\t var collision;\n\n\t astart = cp.getAngle();\n\t aend2 = aend1 = cpnext.getAngle();\n\t if (aend2 < astart) {\n\t aend2 += 2 * Math.PI;\n\t }\n\t aave = (astart + aend2) / 2.0;\n\t start = cp.getEnd();\n\t end = cpnext.getStart();\n\t n = end - start;\n\t if (n < 0) {\n\t n += this.nbase + 1;\n\t }\n\t da = cpnext.getAngle() - cp.getAngle();\n\t if (da < 0.0) {\n\t da += 2 * Math.PI;\n\t }\n\t if (n == 2) {\n\t this.construct_circle_segment(start, end);\n\t } else {\n\t dx = this.bases[end].getX() - this.bases[start].getX();\n\t dy = this.bases[end].getY() - this.bases[start].getY();\n\t rr = Math.sqrt(dx * dx + dy * dy);\n\t dx /= rr;\n\t dy /= rr;\n\t if (rr >= 1.5 && da <= Math.PI / 2) {\n\t nstart = start + 1;\n\t if (nstart > this.nbase) {\n\t nstart -= this.nbase + 1;\n\t }\n\t nend = end - 1;\n\t if (nend < 0) {\n\t nend += this.nbase + 1;\n\t }\n\t this.bases[nstart].setX(this.bases[start].getX() + 0.5 * dx);\n\t this.bases[nstart].setY(this.bases[start].getY() + 0.5 * dy);\n\t this.bases[nend].setX(this.bases[end].getX() - 0.5 * dx);\n\t this.bases[nend].setY(this.bases[end].getY() - 0.5 * dy);\n\t start = nstart;\n\t end = nend;\n\t }\n\t do {\n\t collision = false;\n\t this.construct_circle_segment(start, end);\n\t nstart = start + 1;\n\t if (nstart > this.nbase) {\n\t nstart -= this.nbase + 1;\n\t }\n\t dx = this.bases[nstart].getX() - this.bases[start].getX();\n\t dy = this.bases[nstart].getY() - this.bases[start].getY();\n\t a1 = Math.atan2(dy, dx);\n\t if (a1 < 0.0) {\n\t a1 += 2 * Math.PI;\n\t }\n\t dac = a1 - astart;\n\t if (dac < 0.0) {\n\t dac += 2 * Math.PI;\n\t }\n\t if (dac > Math.PI) {\n\t collision = true;\n\t }\n\t nend = end - 1;\n\t if (nend < 0) {\n\t nend += this.nbase + 1;\n\t }\n\t dx = this.bases[nend].getX() - this.bases[end].getX();\n\t dy = this.bases[nend].getY() - this.bases[end].getY();\n\t a2 = Math.atan2(dy, dx);\n\t if (a2 < 0.0) {\n\t a2 += 2 * Math.PI;\n\t }\n\t dac = aend1 - a2;\n\t if (dac < 0.0) {\n\t dac += 2 * Math.PI;\n\t }\n\t if (dac > Math.PI) {\n\t collision = true;\n\t }\n\t if (collision) {\n\t ac = this.minf2(aave, astart + 0.5);\n\t this.bases[nstart].setX(this.bases[start].getX() + Math.cos(ac));\n\t this.bases[nstart].setY(this.bases[start].getY() + Math.sin(ac));\n\t start = nstart;\n\t ac = this.maxf2(aave, aend2 - 0.5);\n\t this.bases[nend].setX(this.bases[end].getX() + Math.cos(ac));\n\t this.bases[nend].setY(this.bases[end].getY() + Math.sin(ac));\n\t end = nend;\n\t n -= 2;\n\t }\n\t } while (collision && n > 1);\n\t }\n\t};\n\n\tNAView.prototype.construct_circle_segment = function construct_circle_segment(start, end) {\n\t var dx, dy, rr, midx, midy, xn, yn, nrx, nry, mx, my, a;\n\t var l, j, i;\n\n\t dx = this.bases[end].getX() - this.bases[start].getX();\n\t dy = this.bases[end].getY() - this.bases[start].getY();\n\t rr = Math.sqrt(dx * dx + dy * dy);\n\t l = end - start;\n\t if (l < 0) {\n\t l += this.nbase + 1;\n\t }\n\t if (rr >= l) {\n\t dx /= rr;\n\t dy /= rr;\n\t for (j = 1; j < l; j++) {\n\t i = start + j;\n\t if (i > this.nbase) {\n\t i -= this.nbase + 1;\n\t }\n\t this.bases[i].setX(this.bases[start].getX() + dx * j / l);\n\t this.bases[i].setY(this.bases[start].getY() + dy * j / l);\n\t }\n\t } else {\n\t this.find_center_for_arc(l - 1, rr);\n\t dx /= rr;\n\t dy /= rr;\n\t midx = this.bases[start].getX() + dx * rr / 2.0;\n\t midy = this.bases[start].getY() + dy * rr / 2.0;\n\t xn = dy;\n\t yn = -dx;\n\t nrx = midx + this._h * xn;\n\t nry = midy + this._h * yn;\n\t mx = this.bases[start].getX() - nrx;\n\t my = this.bases[start].getY() - nry;\n\t rr = Math.sqrt(mx * mx + my * my);\n\t a = Math.atan2(my, mx);\n\t for (j = 1; j < l; j++) {\n\t i = start + j;\n\t if (i > this.nbase) {\n\t i -= this.nbase + 1;\n\t }\n\t this.bases[i].setX(nrx + rr * Math.cos(a + j * this.angleinc));\n\t this.bases[i].setY(nry + rr * Math.sin(a + j * this.angleinc));\n\t }\n\t }\n\t};\n\n\tNAView.prototype.find_center_for_arc = function find_center_for_arc(n, b) {\n\t var h, hhi, hlow, r, disc, theta, e, phi;\n\t var iter;\n\n\t hhi = (n + 1.0) / Math.PI;\n\t // changed to prevent div by zero if (ih)\n\t hlow = -hhi - b / (n + 1.000001 - b);\n\t if (b < 1) {\n\t // otherwise we might fail below (ih)\n\t hlow = 0;\n\t }\n\t iter = 0;\n\t do {\n\t h = (hhi + hlow) / 2.0;\n\t r = Math.sqrt(h * h + b * b / 4.0);\n\t disc = 1.0 - 0.5 / (r * r);\n\t if (Math.abs(disc) > 1.0) {\n\t console.log(\"Unexpected large magnitude discriminant = \" + disc + \" \" + r);\n\t }\n\t theta = Math.acos(disc);\n\t phi = Math.acos(h / r);\n\t e = theta * (n + 1) + 2 * phi - 2 * Math.PI;\n\t if (e > 0.0) {\n\t hlow = h;\n\t } else {\n\t hhi = h;\n\t }\n\t } while (Math.abs(e) > 0.0001 && ++iter < this.MAXITER);\n\t if (iter >= this.MAXITER) {\n\t if (noIterationFailureYet) {\n\t console.log(\"Iteration failed in find_center_for_arc\");\n\t noIterationFailureYet = false;\n\t }\n\t h = 0.0;\n\t theta = 0.0;\n\t }\n\t this._h = h;\n\t this.angleinc = theta;\n\t};\n\n\tNAView.prototype.generate_region = function generate_region(cp) {\n\t var l, start, end, i, mate;\n\t var rp;\n\n\t rp = cp.getRegion();\n\t l = 0;\n\t if (cp.getStart() == rp.getStart1()) {\n\t start = rp.getStart1();\n\t end = rp.getEnd1();\n\t } else {\n\t start = rp.getStart2();\n\t end = rp.getEnd2();\n\t }\n\t if (this.bases[cp.getStart()].getX() > this.ANUM - 100.0 || this.bases[cp.getEnd()].getX() > this.ANUM - 100.0) {\n\t console.log(\"Bad region passed to generate_region. Coordinates not defined.\");\n\t }\n\t for (i = start + 1; i <= end; i++) {\n\t l++;\n\t this.bases[i].setX(this.bases[cp.getStart()].getX() + this.HELIX_FACTOR * l * cp.getXrad());\n\t this.bases[i].setY(this.bases[cp.getStart()].getY() + this.HELIX_FACTOR * l * cp.getYrad());\n\t mate = this.bases[i].getMate();\n\t this.bases[mate].setX(this.bases[cp.getEnd()].getX() + this.HELIX_FACTOR * l * cp.getXrad());\n\t this.bases[mate].setY(this.bases[cp.getEnd()].getY() + this.HELIX_FACTOR * l * cp.getYrad());\n\t }\n\t};\n\n\tNAView.prototype.minf2 = function minf2(x1, x2) {\n\t return x1 < x2 ? x1 : x2;\n\t};\n\n\tNAView.prototype.maxf2 = function maxf2(x1, x2) {\n\t return x1 > x2 ? x1 : x2;\n\t};\n\n\tNAView.prototype.connected_connection = function connected_connection(cp, cpnext) {\n\t if (cp.isExtruded()) {\n\t return true;\n\t } else if (cp.getEnd() + 1 == cpnext.getStart()) {\n\t return true;\n\t } else {\n\t return false;\n\t }\n\t};\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports) {\n\n\t\"use strict\";\n\n\tObject.defineProperty(exports, \"__esModule\", {\n\t\tvalue: true\n\t});\n\texports.Radloop = Radloop;\n\tfunction Radloop() {\n\t\tthis.radius = null;\n\t\tthis.loopnumber = null;\n\t\tthis.next = null;\n\t\tthis.prev = null;\n\t}\n\n\tRadloop.prototype.getRadius = function () {\n\t\treturn this.radius;\n\t};\n\n\tRadloop.prototype.setRadius = function (radius) {\n\t\tthis.radius = radius;\n\t};\n\n\tRadloop.prototype.getLoopnumber = function () {\n\t\treturn this.loopnumber;\n\t};\n\n\tRadloop.prototype.setLoopnumber = function (loopnumber) {\n\t\tthis.loopnumber = loopnumber;\n\t};\n\n\tRadloop.prototype.getNext = function () {\n\t\treturn this.next;\n\t};\n\n\tRadloop.prototype.setNext = function (next) {\n\t\tthis.next = next;\n\t};\n\n\tRadloop.prototype.getPrev = function () {\n\t\treturn this.prev;\n\t};\n\n\tRadloop.prototype.setPrev = function (prev) {\n\t\tthis.prev = prev;\n\t};\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tObject.defineProperty(exports, \"__esModule\", {\n\t\tvalue: true\n\t});\n\texports.Connection = Connection;\n\n\tvar _loop = __webpack_require__(8);\n\n\tvar _region = __webpack_require__(9);\n\n\tfunction Connection() {\n\t\tthis.loop = new _loop.Loop();\n\t\tthis.region = new _region.Region();\n\t\t// Start and end form the 1st base pair of the region.\n\t\tthis.start = null;\n\t\tthis.end = null;\n\t\tthis.xrad = null;\n\t\tthis.yrad = null;\n\t\tthis.angle = null;\n\t\t// True if segment between this connection and the\n\t\t// next must be extruded out of the circle\n\t\tthis.extruded = null;\n\t\t// True if the extruded segment must be drawn long.\n\t\tthis.broken = null;\n\n\t\tthis._isNull = false;\n\t}\n\n\tConnection.prototype.isNull = function () {\n\t\treturn this._isNull;\n\t};\n\n\tConnection.prototype.setNull = function (isNull) {\n\t\tthis._isNull = isNull;\n\t};\n\n\tConnection.prototype.getLoop = function () {\n\t\treturn this.loop;\n\t};\n\n\tConnection.prototype.setLoop = function (loop) {\n\t\tthis.loop = loop;\n\t};\n\n\tConnection.prototype.getRegion = function () {\n\t\treturn this.region;\n\t};\n\n\tConnection.prototype.setRegion = function (region) {\n\t\tthis.region = region;\n\t};\n\n\tConnection.prototype.getStart = function () {\n\t\treturn this.start;\n\t};\n\n\tConnection.prototype.setStart = function (start) {\n\t\tthis.start = start;\n\t};\n\n\tConnection.prototype.getEnd = function () {\n\t\treturn this.end;\n\t};\n\n\tConnection.prototype.setEnd = function (end) {\n\t\tthis.end = end;\n\t};\n\n\tConnection.prototype.getXrad = function () {\n\t\treturn this.xrad;\n\t};\n\n\tConnection.prototype.setXrad = function (xrad) {\n\t\tthis.xrad = xrad;\n\t};\n\n\tConnection.prototype.getYrad = function () {\n\t\treturn this.yrad;\n\t};\n\n\tConnection.prototype.setYrad = function (yrad) {\n\t\tthis.yrad = yrad;\n\t};\n\n\tConnection.prototype.getAngle = function () {\n\t\treturn this.angle;\n\t};\n\n\tConnection.prototype.setAngle = function (angle) {\n\t\tthis.angle = angle;\n\t};\n\n\tConnection.prototype.isExtruded = function () {\n\t\treturn this.extruded;\n\t};\n\n\tConnection.prototype.setExtruded = function (extruded) {\n\t\tthis.extruded = extruded;\n\t};\n\n\tConnection.prototype.isBroken = function () {\n\t\treturn this.broken;\n\t};\n\n\tConnection.prototype.setBroken = function (broken) {\n\t\tthis.broken = broken;\n\t};\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\n\tObject.defineProperty(exports, \"__esModule\", {\n\t\tvalue: true\n\t});\n\texports.Loop = Loop;\n\n\tvar _connection = __webpack_require__(7);\n\n\tfunction Loop() {\n\t\tthis.nconnection = null;\n\t\tthis.connections = [];\n\t\tthis._connections = [];\n\t\tthis.number = null;\n\t\tthis.depth = null;\n\t\tthis.mark = null;\n\t\tthis.x = null;\n\t\tthis.y = null;\n\t\tthis.radius = null;\n\t}\n\n\tLoop.prototype.getNconnection = function () {\n\t\treturn this.nconnection;\n\t};\n\n\tLoop.prototype.setNconnection = function (nconnection) {\n\t\tthis.nconnection = nconnection;\n\t};\n\n\tLoop.prototype.setConnection = function (i, c) {\n\t\tif (c != null) {\n\t\t\tthis._connections[i] = c;\n\t\t} else {\n\t\t\tif (!this._connections[i]) {\n\t\t\t\tthis._connections[i] = new _connection.Connection();\n\t\t\t}\n\t\t\tthis._connections[i].setNull(true);\n\t\t}\n\t};\n\n\tLoop.prototype.getConnection = function (i) {\n\t\tvar Connection = __webpack_require__(7);\n\t\tif (!this._connections[i]) {\n\t\t\tthis._connections[i] = new Connection();\n\t\t}\n\t\tvar c = this._connections[i];\n\t\tif (c.isNull()) {\n\t\t\treturn null;\n\t\t} else {\n\t\t\treturn c;\n\t\t}\n\t};\n\n\tLoop.prototype.addConnection = function (i, c) {\n\t\tthis._connections.push(c);\n\t};\n\n\tLoop.prototype.getNumber = function () {\n\t\treturn this.number;\n\t};\n\n\tLoop.prototype.setNumber = function (number) {\n\t\tthis.number = number;\n\t};\n\n\tLoop.prototype.getDepth = function () {\n\t\treturn this.depth;\n\t};\n\n\tLoop.prototype.setDepth = function (depth) {\n\t\tthis.depth = depth;\n\t};\n\n\tLoop.prototype.isMark = function () {\n\t\treturn this.mark;\n\t};\n\n\tLoop.prototype.setMark = function (mark) {\n\t\tthis.mark = mark;\n\t};\n\n\tLoop.prototype.getX = function () {\n\t\treturn this.x;\n\t};\n\n\tLoop.prototype.setX = function (x) {\n\t\tthis.x = x;\n\t};\n\n\tLoop.prototype.getY = function () {\n\t\treturn this.y;\n\t};\n\n\tLoop.prototype.setY = function (y) {\n\t\tthis.y = y;\n\t};\n\n\tLoop.prototype.getRadius = function () {\n\t\treturn this.radius;\n\t};\n\n\tLoop.prototype.setRadius = function (radius) {\n\t\tthis.radius = radius;\n\t};\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports) {\n\n\t\"use strict\";\n\n\tObject.defineProperty(exports, \"__esModule\", {\n\t\tvalue: true\n\t});\n\texports.Region = Region;\n\tfunction Region() {\n\t\tthis._start1 = null;\n\t\tthis._end1 = null;\n\t\tthis._start2 = null;\n\t\tthis._end2 = null;\n\t}\n\n\tRegion.prototype.getStart1 = function () {\n\t\treturn this._start1;\n\t};\n\n\tRegion.prototype.setStart1 = function (start1) {\n\t\tthis._start1 = start1;\n\t};\n\n\tRegion.prototype.getEnd1 = function () {\n\t\treturn this._end1;\n\t};\n\n\tRegion.prototype.setEnd1 = function (end1) {\n\t\tthis._end1 = end1;\n\t};\n\n\tRegion.prototype.getStart2 = function () {\n\t\treturn this._start2;\n\t};\n\n\tRegion.prototype.setStart2 = function (start2) {\n\t\tthis._start2 = start2;\n\t};\n\n\tRegion.prototype.getEnd2 = function () {\n\t\treturn this._end2;\n\t};\n\n\tRegion.prototype.setEnd2 = function (end2) {\n\t\tthis._end2 = end2;\n\t};\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tObject.defineProperty(exports, \"__esModule\", {\n\t\tvalue: true\n\t});\n\texports.Base = Base;\n\n\tvar _region = __webpack_require__(9);\n\n\tfunction Base() {\n\t\tthis.mate = null;\n\t\tthis.x = null;\n\t\tthis.y = null;\n\t\tthis.extracted = null;\n\t\tthis.region = new _region.Region();\n\t}\n\n\tBase.prototype.getMate = function () {\n\t\treturn this.mate;\n\t};\n\n\tBase.prototype.setMate = function (mate) {\n\t\tthis.mate = mate;\n\t};\n\n\tBase.prototype.getX = function () {\n\t\treturn this.x;\n\t};\n\n\tBase.prototype.setX = function (x) {\n\t\tthis.x = x;\n\t};\n\n\tBase.prototype.getY = function () {\n\t\treturn this.y;\n\t};\n\n\tBase.prototype.setY = function (y) {\n\t\tthis.y = y;\n\t};\n\n\tBase.prototype.isExtracted = function () {\n\t\treturn this.extracted;\n\t};\n\n\tBase.prototype.setExtracted = function (extracted) {\n\t\tthis.extracted = extracted;\n\t};\n\n\tBase.prototype.getRegion = function () {\n\t\treturn this.region;\n\t};\n\n\tBase.prototype.setRegion = function (region) {\n\t\tthis.region = region;\n\t};\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t// style-loader: Adds some css to the DOM by adding a