Przeglądaj źródła

Updated builds.

Mr.doob 11 lat temu
rodzic
commit
243d2e5960
2 zmienionych plików z 171 dodań i 182 usunięć
  1. 4 14
      build/three.js
  2. 167 168
      build/three.min.js

+ 4 - 14
build/three.js

@@ -20339,10 +20339,10 @@ THREE.WebGLRenderer = function ( parameters ) {
 	_lights = {
 
 		ambient: [ 0, 0, 0 ],
-		directional: { length: 0, colors: new Array(), positions: new Array() },
-		point: { length: 0, colors: new Array(), positions: new Array(), distances: new Array() },
-		spot: { length: 0, colors: new Array(), positions: new Array(), distances: new Array(), directions: new Array(), anglesCos: new Array(), exponents: new Array() },
-		hemi: { length: 0, skyColors: new Array(), groundColors: new Array(), positions: new Array() }
+		directional: { length: 0, colors:[], positions: [] },
+		point: { length: 0, colors: [], positions: [], distances: [] },
+		spot: { length: 0, colors: [], positions: [], distances: [], directions: [], anglesCos: [], exponents: [] },
+		hemi: { length: 0, skyColors: [], groundColors: [], positions: [] }
 
 	};
 
@@ -25233,11 +25233,6 @@ THREE.WebGLRenderer = function ( parameters ) {
 				_direction.sub( _vector3 );
 				_direction.normalize();
 
-				// skip lights with undefined direction
-				// these create troubles in OpenGL (making pixel black)
-
-				if ( _direction.x === 0 && _direction.y === 0 && _direction.z === 0 ) continue;
-
 				dirOffset = dirLength * 3;
 
 				dirPositions[ dirOffset ]     = _direction.x;
@@ -25333,11 +25328,6 @@ THREE.WebGLRenderer = function ( parameters ) {
 				_direction.setFromMatrixPosition( light.matrixWorld );
 				_direction.normalize();
 
-				// skip lights with undefined direction
-				// these create troubles in OpenGL (making pixel black)
-
-				if ( _direction.x === 0 && _direction.y === 0 && _direction.z === 0 ) continue;
-
 				hemiOffset = hemiLength * 3;
 
 				hemiPositions[ hemiOffset ]     = _direction.x;

+ 167 - 168
build/three.min.js

@@ -92,8 +92,8 @@ console.error("THREE.Matrix: .makeRotationFromEuler() now expects a Euler rotati
 b[10]=f*g):"ZXY"===a.order?(a=g*h,k=g*e,l=d*h,n=d*e,b[0]=a-n*c,b[4]=-f*e,b[8]=l+k*c,b[1]=k+l*c,b[5]=f*h,b[9]=n-a*c,b[2]=-f*d,b[6]=c,b[10]=f*g):"ZYX"===a.order?(a=f*h,k=f*e,l=c*h,n=c*e,b[0]=g*h,b[4]=l*d-k,b[8]=a*d+n,b[1]=g*e,b[5]=n*d+a,b[9]=k*d-l,b[2]=-d,b[6]=c*g,b[10]=f*g):"YZX"===a.order?(a=f*g,k=f*d,l=c*g,n=c*d,b[0]=g*h,b[4]=n-a*e,b[8]=l*e+k,b[1]=e,b[5]=f*h,b[9]=-c*h,b[2]=-d*h,b[6]=k*e+l,b[10]=a-n*e):"XZY"===a.order&&(a=f*g,k=f*d,l=c*g,n=c*d,b[0]=g*h,b[4]=-e,b[8]=d*h,b[1]=a*e+n,b[5]=f*h,b[9]=k*
 e-l,b[2]=l*e-k,b[6]=c*h,b[10]=n*e+a);b[3]=0;b[7]=0;b[11]=0;b[12]=0;b[13]=0;b[14]=0;b[15]=1;return this},setRotationFromQuaternion:function(a){console.warn("THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion().");return this.makeRotationFromQuaternion(a)},makeRotationFromQuaternion:function(a){var b=this.elements,c=a.x,d=a.y,e=a.z,f=a.w,g=c+c,h=d+d,k=e+e;a=c*g;var l=c*h,c=c*k,n=d*h,d=d*k,e=e*k,g=f*g,h=f*h,f=f*k;b[0]=1-(n+e);b[4]=l-f;b[8]=c+h;b[1]=l+f;b[5]=1-
 (a+e);b[9]=d-g;b[2]=c-h;b[6]=d+g;b[10]=1-(a+n);b[3]=0;b[7]=0;b[11]=0;b[12]=0;b[13]=0;b[14]=0;b[15]=1;return this},lookAt:function(){var a=new THREE.Vector3,b=new THREE.Vector3,c=new THREE.Vector3;return function(d,e,f){var g=this.elements;c.subVectors(d,e).normalize();0===c.length()&&(c.z=1);a.crossVectors(f,c).normalize();0===a.length()&&(c.x+=1E-4,a.crossVectors(f,c).normalize());b.crossVectors(c,a);g[0]=a.x;g[4]=b.x;g[8]=c.x;g[1]=a.y;g[5]=b.y;g[9]=c.y;g[2]=a.z;g[6]=b.z;g[10]=c.z;return this}}(),
-multiply:function(a,b){return void 0!==b?(console.warn("THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead."),this.multiplyMatrices(a,b)):this.multiplyMatrices(this,a)},multiplyMatrices:function(a,b){var c=a.elements,d=b.elements,e=this.elements,f=c[0],g=c[4],h=c[8],k=c[12],l=c[1],n=c[5],q=c[9],r=c[13],t=c[2],s=c[6],p=c[10],v=c[14],u=c[3],w=c[7],A=c[11],c=c[15],D=d[0],x=d[4],F=d[8],B=d[12],z=d[1],C=d[5],y=d[9],Q=d[13],E=d[2],M=d[6],W=d[10],H=d[14],G=d[3],
-J=d[7],K=d[11],d=d[15];e[0]=f*D+g*z+h*E+k*G;e[4]=f*x+g*C+h*M+k*J;e[8]=f*F+g*y+h*W+k*K;e[12]=f*B+g*Q+h*H+k*d;e[1]=l*D+n*z+q*E+r*G;e[5]=l*x+n*C+q*M+r*J;e[9]=l*F+n*y+q*W+r*K;e[13]=l*B+n*Q+q*H+r*d;e[2]=t*D+s*z+p*E+v*G;e[6]=t*x+s*C+p*M+v*J;e[10]=t*F+s*y+p*W+v*K;e[14]=t*B+s*Q+p*H+v*d;e[3]=u*D+w*z+A*E+c*G;e[7]=u*x+w*C+A*M+c*J;e[11]=u*F+w*y+A*W+c*K;e[15]=u*B+w*Q+A*H+c*d;return this},multiplyToArray:function(a,b,c){var d=this.elements;this.multiplyMatrices(a,b);c[0]=d[0];c[1]=d[1];c[2]=d[2];c[3]=d[3];c[4]=
+multiply:function(a,b){return void 0!==b?(console.warn("THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead."),this.multiplyMatrices(a,b)):this.multiplyMatrices(this,a)},multiplyMatrices:function(a,b){var c=a.elements,d=b.elements,e=this.elements,f=c[0],g=c[4],h=c[8],k=c[12],l=c[1],n=c[5],q=c[9],r=c[13],t=c[2],s=c[6],p=c[10],v=c[14],u=c[3],w=c[7],A=c[11],c=c[15],D=d[0],x=d[4],F=d[8],B=d[12],z=d[1],C=d[5],y=d[9],Q=d[13],E=d[2],M=d[6],V=d[10],H=d[14],G=d[3],
+J=d[7],K=d[11],d=d[15];e[0]=f*D+g*z+h*E+k*G;e[4]=f*x+g*C+h*M+k*J;e[8]=f*F+g*y+h*V+k*K;e[12]=f*B+g*Q+h*H+k*d;e[1]=l*D+n*z+q*E+r*G;e[5]=l*x+n*C+q*M+r*J;e[9]=l*F+n*y+q*V+r*K;e[13]=l*B+n*Q+q*H+r*d;e[2]=t*D+s*z+p*E+v*G;e[6]=t*x+s*C+p*M+v*J;e[10]=t*F+s*y+p*V+v*K;e[14]=t*B+s*Q+p*H+v*d;e[3]=u*D+w*z+A*E+c*G;e[7]=u*x+w*C+A*M+c*J;e[11]=u*F+w*y+A*V+c*K;e[15]=u*B+w*Q+A*H+c*d;return this},multiplyToArray:function(a,b,c){var d=this.elements;this.multiplyMatrices(a,b);c[0]=d[0];c[1]=d[1];c[2]=d[2];c[3]=d[3];c[4]=
 d[4];c[5]=d[5];c[6]=d[6];c[7]=d[7];c[8]=d[8];c[9]=d[9];c[10]=d[10];c[11]=d[11];c[12]=d[12];c[13]=d[13];c[14]=d[14];c[15]=d[15];return this},multiplyScalar:function(a){var b=this.elements;b[0]*=a;b[4]*=a;b[8]*=a;b[12]*=a;b[1]*=a;b[5]*=a;b[9]*=a;b[13]*=a;b[2]*=a;b[6]*=a;b[10]*=a;b[14]*=a;b[3]*=a;b[7]*=a;b[11]*=a;b[15]*=a;return this},multiplyVector3:function(a){console.warn("THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) or vector.applyProjection( matrix ) instead.");
 return a.applyProjection(this)},multiplyVector4:function(a){console.warn("THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead.");return a.applyMatrix4(this)},multiplyVector3Array:function(a){console.warn("THREE.Matrix4: .multiplyVector3Array() has been renamed. Use matrix.applyToVector3Array( array ) instead.");return this.applyToVector3Array(a)},applyToVector3Array:function(){var a=new THREE.Vector3;return function(b,c,d){void 0===c&&(c=0);void 0===d&&(d=
 b.length);for(var e=0;e<d;e+=3,c+=3)a.x=b[c],a.y=b[c+1],a.z=b[c+2],a.applyMatrix4(this),b[c]=a.x,b[c+1]=a.y,b[c+2]=a.z;return b}}(),rotateAxis:function(a){console.warn("THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead.");a.transformDirection(this)},crossVector:function(a){console.warn("THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead.");return a.applyMatrix4(this)},determinant:function(){var a=this.elements,b=
@@ -155,22 +155,22 @@ b){for(var c=0,d=this.children.length;c<d;c++){var e=this.children[c];if(e.name=
 !0===a)void 0===this.parent?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix),this.matrixWorldNeedsUpdate=!1,a=!0;for(var b=0,c=this.children.length;b<c;b++)this.children[b].updateMatrixWorld(a)},clone:function(a,b){void 0===a&&(a=new THREE.Object3D);void 0===b&&(b=!0);a.name=this.name;a.up.copy(this.up);a.position.copy(this.position);a.quaternion.copy(this.quaternion);a.scale.copy(this.scale);a.renderDepth=this.renderDepth;a.rotationAutoUpdate=
 this.rotationAutoUpdate;a.matrix.copy(this.matrix);a.matrixWorld.copy(this.matrixWorld);a.matrixAutoUpdate=this.matrixAutoUpdate;a.matrixWorldNeedsUpdate=this.matrixWorldNeedsUpdate;a.visible=this.visible;a.castShadow=this.castShadow;a.receiveShadow=this.receiveShadow;a.frustumCulled=this.frustumCulled;a.userData=JSON.parse(JSON.stringify(this.userData));if(!0===b)for(var c=0;c<this.children.length;c++)a.add(this.children[c].clone());return a}};THREE.EventDispatcher.prototype.apply(THREE.Object3D.prototype);
 THREE.Object3DIdCount=0;THREE.Projector=function(){function a(){if(q===t){var a=new THREE.RenderableVertex;r.push(a);t++;q++;return a}return r[q++]}function b(){if(p===u){var a=new THREE.RenderableFace;v.push(a);u++;p++;return a}return v[p++]}function c(){if(A===x){var a=new THREE.RenderableLine;D.push(a);x++;A++;return a}return D[A++]}function d(){if(B===C){var a=new THREE.RenderableSprite;z.push(a);C++;B++;return a}return z[B++]}function e(a,b){return a.z!==b.z?b.z-a.z:a.id!==b.id?a.id-b.id:0}function f(a,b){var c=0,d=
-1,e=a.z+a.w,f=b.z+b.w,g=-a.z+a.w,h=-b.z+b.w;if(0<=e&&0<=f&&0<=g&&0<=h)return!0;if(0>e&&0>f||0>g&&0>h)return!1;0>e?c=Math.max(c,e/(e-f)):0>f&&(d=Math.min(d,e/(e-f)));0>g?c=Math.max(c,g/(g-h)):0>h&&(d=Math.min(d,g/(g-h)));if(d<c)return!1;a.lerp(b,c);b.lerp(a,1-d);return!0}var g,h,k=[],l=0,n,q,r=[],t=0,s,p,v=[],u=0,w,A,D=[],x=0,F,B,z=[],C=0,y={objects:[],lights:[],elements:[]},Q=new THREE.Vector3,E=new THREE.Vector3,M=new THREE.Vector3,W=new THREE.Vector3,H=new THREE.Vector4,G=new THREE.Box3(new THREE.Vector3(-1,
--1,-1),new THREE.Vector3(1,1,1)),J=new THREE.Box3,K=Array(3),X=new THREE.Matrix4,L=new THREE.Matrix4,ha,R=new THREE.Matrix4,Z=new THREE.Matrix3,O=new THREE.Frustum,ia=new THREE.Vector4,fa=new THREE.Vector4;this.projectVector=function(a,b){b.matrixWorldInverse.getInverse(b.matrixWorld);L.multiplyMatrices(b.projectionMatrix,b.matrixWorldInverse);return a.applyProjection(L)};this.unprojectVector=function(){var a=new THREE.Matrix4;return function(b,c){a.getInverse(c.projectionMatrix);L.multiplyMatrices(c.matrixWorld,
-a);return b.applyProjection(L)}}();this.pickingRay=function(a,b){a.z=-1;var c=new THREE.Vector3(a.x,a.y,1);this.unprojectVector(a,b);this.unprojectVector(c,b);c.sub(a).normalize();return new THREE.Raycaster(a,c)};var Y=new function(){var d=[],e=[],f=null,g=null,h=new THREE.Matrix3,k=function(a){var b=a.positionWorld,c=a.positionScreen;b.copy(a.position).applyMatrix4(ha);c.copy(b).applyMatrix4(L);b=1/c.w;c.x*=b;c.y*=b;c.z*=b;a.visible=-1<=c.x&&1>=c.x&&-1<=c.y&&1>=c.y&&-1<=c.z&&1>=c.z},l=function(a,
+1,e=a.z+a.w,f=b.z+b.w,g=-a.z+a.w,h=-b.z+b.w;if(0<=e&&0<=f&&0<=g&&0<=h)return!0;if(0>e&&0>f||0>g&&0>h)return!1;0>e?c=Math.max(c,e/(e-f)):0>f&&(d=Math.min(d,e/(e-f)));0>g?c=Math.max(c,g/(g-h)):0>h&&(d=Math.min(d,g/(g-h)));if(d<c)return!1;a.lerp(b,c);b.lerp(a,1-d);return!0}var g,h,k=[],l=0,n,q,r=[],t=0,s,p,v=[],u=0,w,A,D=[],x=0,F,B,z=[],C=0,y={objects:[],lights:[],elements:[]},Q=new THREE.Vector3,E=new THREE.Vector3,M=new THREE.Vector3,V=new THREE.Vector3,H=new THREE.Vector4,G=new THREE.Box3(new THREE.Vector3(-1,
+-1,-1),new THREE.Vector3(1,1,1)),J=new THREE.Box3,K=Array(3),X=new THREE.Matrix4,L=new THREE.Matrix4,ga,R=new THREE.Matrix4,Z=new THREE.Matrix3,O=new THREE.Frustum,ha=new THREE.Vector4,ea=new THREE.Vector4;this.projectVector=function(a,b){b.matrixWorldInverse.getInverse(b.matrixWorld);L.multiplyMatrices(b.projectionMatrix,b.matrixWorldInverse);return a.applyProjection(L)};this.unprojectVector=function(){var a=new THREE.Matrix4;return function(b,c){a.getInverse(c.projectionMatrix);L.multiplyMatrices(c.matrixWorld,
+a);return b.applyProjection(L)}}();this.pickingRay=function(a,b){a.z=-1;var c=new THREE.Vector3(a.x,a.y,1);this.unprojectVector(a,b);this.unprojectVector(c,b);c.sub(a).normalize();return new THREE.Raycaster(a,c)};var Y=new function(){var d=[],e=[],f=null,g=null,h=new THREE.Matrix3,k=function(a){var b=a.positionWorld,c=a.positionScreen;b.copy(a.position).applyMatrix4(ga);c.copy(b).applyMatrix4(L);b=1/c.w;c.x*=b;c.y*=b;c.z*=b;a.visible=-1<=c.x&&1>=c.x&&-1<=c.y&&1>=c.y&&-1<=c.z&&1>=c.z},l=function(a,
 b,c){if(!0===a.visible||!0===b.visible||!0===c.visible)return!0;K[0]=a.positionScreen;K[1]=b.positionScreen;K[2]=c.positionScreen;return G.isIntersectionBox(J.setFromPoints(K))},q=function(a,b,c){return 0>(c.positionScreen.x-a.positionScreen.x)*(b.positionScreen.y-a.positionScreen.y)-(c.positionScreen.y-a.positionScreen.y)*(b.positionScreen.x-a.positionScreen.x)};return{setObject:function(a){f=a;g=f.material;h.getNormalMatrix(f.matrixWorld);d.length=0;e.length=0},projectVertex:k,checkTriangleVisibility:l,
 checkBackfaceCulling:q,pushVertex:function(b,c,d){n=a();n.position.set(b,c,d);k(n)},pushNormal:function(a,b,c){d.push(a,b,c)},pushUv:function(a,b){e.push(a,b)},pushLine:function(a,b){var d=r[a],e=r[b];w=c();w.id=f.id;w.v1.copy(d);w.v2.copy(e);w.z=(d.positionScreen.z+e.positionScreen.z)/2;w.material=f.material;y.elements.push(w)},pushTriangle:function(a,c,k){var n=r[a],p=r[c],t=r[k];if(!1!==l(n,p,t)&&(g.side===THREE.DoubleSide||!0===q(n,p,t))){s=b();s.id=f.id;s.v1.copy(n);s.v2.copy(p);s.v3.copy(t);
 s.z=(n.positionScreen.z+p.positionScreen.z+t.positionScreen.z)/3;for(n=0;3>n;n++)p=3*arguments[n],t=s.vertexNormalsModel[n],t.set(d[p],d[p+1],d[p+2]),t.applyMatrix3(h).normalize(),p=2*arguments[n],s.uvs[n].set(e[p],e[p+1]);s.vertexNormalsLength=3;s.material=f.material;y.elements.push(s)}}}};this.projectScene=function(n,t,u,v){B=A=p=0;y.elements.length=0;!0===n.autoUpdate&&n.updateMatrixWorld();void 0===t.parent&&t.updateMatrixWorld();X.copy(t.matrixWorldInverse.getInverse(t.matrixWorld));L.multiplyMatrices(t.projectionMatrix,
-X);O.setFromMatrix(L);h=0;y.objects.length=0;y.lights.length=0;n.traverseVisible(function(a){if(a instanceof THREE.Light)y.lights.push(a);else if(a instanceof THREE.Mesh||a instanceof THREE.Line||a instanceof THREE.Sprite)if(!1===a.frustumCulled||!0===O.intersectsObject(a)){if(h===l){var b=new THREE.RenderableObject;k.push(b);l++;h++;g=b}else g=k[h++];g.id=a.id;g.object=a;null!==a.renderDepth?g.z=a.renderDepth:(W.setFromMatrixPosition(a.matrixWorld),W.applyProjection(L),g.z=W.z);y.objects.push(g)}});
-!0===u&&y.objects.sort(e);n=0;for(u=y.objects.length;n<u;n++){var D=y.objects[n].object,x=D.geometry;Y.setObject(D);ha=D.matrixWorld;q=0;if(D instanceof THREE.Mesh)if(x instanceof THREE.BufferGeometry){var z=x.attributes,D=x.offsets;if(void 0!==z.position){for(var C=z.position.array,x=0,K=C.length;x<K;x+=3)Y.pushVertex(C[x],C[x+1],C[x+2]);if(void 0!==z.normal)for(var J=z.normal.array,x=0,K=J.length;x<K;x+=3)Y.pushNormal(J[x],J[x+1],J[x+2]);if(void 0!==z.uv)for(J=z.uv.array,x=0,K=J.length;x<K;x+=2)Y.pushUv(J[x],
-J[x+1]);if(void 0!==z.index)if(z=z.index.array,0<D.length)for(n=0;n<D.length;n++)for(K=D[n],C=K.index,x=K.start,K=K.start+K.count;x<K;x+=3)Y.pushTriangle(z[x]+C,z[x+1]+C,z[x+2]+C);else for(x=0,K=z.length;x<K;x+=3)Y.pushTriangle(z[x],z[x+1],z[x+2]);else for(x=0,K=C.length/3;x<K;x+=3)Y.pushTriangle(x,x+1,x+2)}}else{if(x instanceof THREE.Geometry){var G=x.vertices,K=x.faces,z=x.faceVertexUvs[0];Z.getNormalMatrix(ha);for(var C=D.material instanceof THREE.MeshFaceMaterial,J=!0===C?D.material:null,qa=0,
-da=G.length;qa<da;qa++){var ja=G[qa];Y.pushVertex(ja.x,ja.y,ja.z)}G=0;for(qa=K.length;G<qa;G++){var da=K[G],Ja=!0===C?J.materials[da.materialIndex]:D.material;if(void 0!==Ja){var S=Ja.side,ja=r[da.a],U=r[da.b],ma=r[da.c];if(!0===Ja.morphTargets){var ra=x.morphTargets,Ka=D.morphTargetInfluences,na=ja.position,Ma=U.position,wa=ma.position;Q.set(0,0,0);E.set(0,0,0);M.set(0,0,0);for(var ga=0,Fa=ra.length;ga<Fa;ga++){var Ha=Ka[ga];if(0!==Ha){var Na=ra[ga].vertices;Q.x+=(Na[da.a].x-na.x)*Ha;Q.y+=(Na[da.a].y-
-na.y)*Ha;Q.z+=(Na[da.a].z-na.z)*Ha;E.x+=(Na[da.b].x-Ma.x)*Ha;E.y+=(Na[da.b].y-Ma.y)*Ha;E.z+=(Na[da.b].z-Ma.z)*Ha;M.x+=(Na[da.c].x-wa.x)*Ha;M.y+=(Na[da.c].y-wa.y)*Ha;M.z+=(Na[da.c].z-wa.z)*Ha}}ja.position.add(Q);U.position.add(E);ma.position.add(M);Y.projectVertex(ja);Y.projectVertex(U);Y.projectVertex(ma)}if(!1!==Y.checkTriangleVisibility(ja,U,ma)){ra=Y.checkBackfaceCulling(ja,U,ma);if(S!==THREE.DoubleSide){if(S===THREE.FrontSide&&!1===ra)continue;if(S===THREE.BackSide&&!0===ra)continue}s=b();s.id=
-D.id;s.v1.copy(ja);s.v2.copy(U);s.v3.copy(ma);s.normalModel.copy(da.normal);!1!==ra||S!==THREE.BackSide&&S!==THREE.DoubleSide||s.normalModel.negate();s.normalModel.applyMatrix3(Z).normalize();Ka=da.vertexNormals;na=0;for(Ma=Math.min(Ka.length,3);na<Ma;na++)wa=s.vertexNormalsModel[na],wa.copy(Ka[na]),!1!==ra||S!==THREE.BackSide&&S!==THREE.DoubleSide||wa.negate(),wa.applyMatrix3(Z).normalize();s.vertexNormalsLength=Ka.length;S=z[G];if(void 0!==S)for(ra=0;3>ra;ra++)s.uvs[ra].copy(S[ra]);s.color=da.color;
-s.material=Ja;s.z=(ja.positionScreen.z+U.positionScreen.z+ma.positionScreen.z)/3;y.elements.push(s)}}}}}else if(D instanceof THREE.Line)if(x instanceof THREE.BufferGeometry){if(z=x.attributes,void 0!==z.position){C=z.position.array;x=0;for(K=C.length;x<K;x+=3)Y.pushVertex(C[x],C[x+1],C[x+2]);if(void 0!==z.index)for(z=z.index.array,x=0,K=z.length;x<K;x+=2)Y.pushLine(z[x],z[x+1]);else for(z=D.type===THREE.LinePieces?2:1,x=0,K=C.length/3-1;x<K;x+=z)Y.pushLine(x,x+1)}}else{if(x instanceof THREE.Geometry&&
-(R.multiplyMatrices(L,ha),G=D.geometry.vertices,0!==G.length))for(ja=a(),ja.positionScreen.copy(G[0]).applyMatrix4(R),z=D.type===THREE.LinePieces?2:1,qa=1,da=G.length;qa<da;qa++)ja=a(),ja.positionScreen.copy(G[qa]).applyMatrix4(R),0<(qa+1)%z||(U=r[q-2],ia.copy(ja.positionScreen),fa.copy(U.positionScreen),!0===f(ia,fa)&&(ia.multiplyScalar(1/ia.w),fa.multiplyScalar(1/fa.w),w=c(),w.id=D.id,w.v1.positionScreen.copy(ia),w.v2.positionScreen.copy(fa),w.z=Math.max(ia.z,fa.z),w.material=D.material,D.material.vertexColors===
-THREE.VertexColors&&(w.vertexColors[0].copy(D.geometry.colors[qa]),w.vertexColors[1].copy(D.geometry.colors[qa-1])),y.elements.push(w)))}else D instanceof THREE.Sprite&&(H.set(ha.elements[12],ha.elements[13],ha.elements[14],1),H.applyMatrix4(L),x=1/H.w,H.z*=x,-1<=H.z&&1>=H.z&&(F=d(),F.id=D.id,F.x=H.x*x,F.y=H.y*x,F.z=H.z,F.object=D,F.rotation=D.rotation,F.scale.x=D.scale.x*Math.abs(F.x-(H.x+t.projectionMatrix.elements[0])/(H.w+t.projectionMatrix.elements[12])),F.scale.y=D.scale.y*Math.abs(F.y-(H.y+
-t.projectionMatrix.elements[5])/(H.w+t.projectionMatrix.elements[13])),F.material=D.material,y.elements.push(F)))}!0===v&&y.elements.sort(e);return y}};THREE.Face3=function(a,b,c,d,e,f){this.a=a;this.b=b;this.c=c;this.normal=d instanceof THREE.Vector3?d:new THREE.Vector3;this.vertexNormals=d instanceof Array?d:[];this.color=e instanceof THREE.Color?e:new THREE.Color;this.vertexColors=e instanceof Array?e:[];this.vertexTangents=[];this.materialIndex=void 0!==f?f:0};
+X);O.setFromMatrix(L);h=0;y.objects.length=0;y.lights.length=0;n.traverseVisible(function(a){if(a instanceof THREE.Light)y.lights.push(a);else if(a instanceof THREE.Mesh||a instanceof THREE.Line||a instanceof THREE.Sprite)if(!1===a.frustumCulled||!0===O.intersectsObject(a)){if(h===l){var b=new THREE.RenderableObject;k.push(b);l++;h++;g=b}else g=k[h++];g.id=a.id;g.object=a;null!==a.renderDepth?g.z=a.renderDepth:(V.setFromMatrixPosition(a.matrixWorld),V.applyProjection(L),g.z=V.z);y.objects.push(g)}});
+!0===u&&y.objects.sort(e);n=0;for(u=y.objects.length;n<u;n++){var D=y.objects[n].object,x=D.geometry;Y.setObject(D);ga=D.matrixWorld;q=0;if(D instanceof THREE.Mesh)if(x instanceof THREE.BufferGeometry){var z=x.attributes,D=x.offsets;if(void 0!==z.position){for(var C=z.position.array,x=0,K=C.length;x<K;x+=3)Y.pushVertex(C[x],C[x+1],C[x+2]);if(void 0!==z.normal)for(var J=z.normal.array,x=0,K=J.length;x<K;x+=3)Y.pushNormal(J[x],J[x+1],J[x+2]);if(void 0!==z.uv)for(J=z.uv.array,x=0,K=J.length;x<K;x+=2)Y.pushUv(J[x],
+J[x+1]);if(void 0!==z.index)if(z=z.index.array,0<D.length)for(n=0;n<D.length;n++)for(K=D[n],C=K.index,x=K.start,K=K.start+K.count;x<K;x+=3)Y.pushTriangle(z[x]+C,z[x+1]+C,z[x+2]+C);else for(x=0,K=z.length;x<K;x+=3)Y.pushTriangle(z[x],z[x+1],z[x+2]);else for(x=0,K=C.length/3;x<K;x+=3)Y.pushTriangle(x,x+1,x+2)}}else{if(x instanceof THREE.Geometry){var G=x.vertices,K=x.faces,z=x.faceVertexUvs[0];Z.getNormalMatrix(ga);for(var C=D.material instanceof THREE.MeshFaceMaterial,J=!0===C?D.material:null,oa=0,
+W=G.length;oa<W;oa++){var ia=G[oa];Y.pushVertex(ia.x,ia.y,ia.z)}G=0;for(oa=K.length;G<oa;G++){var W=K[G],Ka=!0===C?J.materials[W.materialIndex]:D.material;if(void 0!==Ka){var ta=Ka.side,ia=r[W.a],T=r[W.b],la=r[W.c];if(!0===Ka.morphTargets){var pa=x.morphTargets,ma=D.morphTargetInfluences,Ma=ia.position,Na=T.position,wa=la.position;Q.set(0,0,0);E.set(0,0,0);M.set(0,0,0);for(var fa=0,Ga=pa.length;fa<Ga;fa++){var Ha=ma[fa];if(0!==Ha){var ua=pa[fa].vertices;Q.x+=(ua[W.a].x-Ma.x)*Ha;Q.y+=(ua[W.a].y-Ma.y)*
+Ha;Q.z+=(ua[W.a].z-Ma.z)*Ha;E.x+=(ua[W.b].x-Na.x)*Ha;E.y+=(ua[W.b].y-Na.y)*Ha;E.z+=(ua[W.b].z-Na.z)*Ha;M.x+=(ua[W.c].x-wa.x)*Ha;M.y+=(ua[W.c].y-wa.y)*Ha;M.z+=(ua[W.c].z-wa.z)*Ha}}ia.position.add(Q);T.position.add(E);la.position.add(M);Y.projectVertex(ia);Y.projectVertex(T);Y.projectVertex(la)}if(!1!==Y.checkTriangleVisibility(ia,T,la)){pa=Y.checkBackfaceCulling(ia,T,la);if(ta!==THREE.DoubleSide){if(ta===THREE.FrontSide&&!1===pa)continue;if(ta===THREE.BackSide&&!0===pa)continue}s=b();s.id=D.id;s.v1.copy(ia);
+s.v2.copy(T);s.v3.copy(la);s.normalModel.copy(W.normal);!1!==pa||ta!==THREE.BackSide&&ta!==THREE.DoubleSide||s.normalModel.negate();s.normalModel.applyMatrix3(Z).normalize();ma=W.vertexNormals;Ma=0;for(Na=Math.min(ma.length,3);Ma<Na;Ma++)wa=s.vertexNormalsModel[Ma],wa.copy(ma[Ma]),!1!==pa||ta!==THREE.BackSide&&ta!==THREE.DoubleSide||wa.negate(),wa.applyMatrix3(Z).normalize();s.vertexNormalsLength=ma.length;ta=z[G];if(void 0!==ta)for(pa=0;3>pa;pa++)s.uvs[pa].copy(ta[pa]);s.color=W.color;s.material=
+Ka;s.z=(ia.positionScreen.z+T.positionScreen.z+la.positionScreen.z)/3;y.elements.push(s)}}}}}else if(D instanceof THREE.Line)if(x instanceof THREE.BufferGeometry){if(z=x.attributes,void 0!==z.position){C=z.position.array;x=0;for(K=C.length;x<K;x+=3)Y.pushVertex(C[x],C[x+1],C[x+2]);if(void 0!==z.index)for(z=z.index.array,x=0,K=z.length;x<K;x+=2)Y.pushLine(z[x],z[x+1]);else for(z=D.type===THREE.LinePieces?2:1,x=0,K=C.length/3-1;x<K;x+=z)Y.pushLine(x,x+1)}}else{if(x instanceof THREE.Geometry&&(R.multiplyMatrices(L,
+ga),G=D.geometry.vertices,0!==G.length))for(ia=a(),ia.positionScreen.copy(G[0]).applyMatrix4(R),z=D.type===THREE.LinePieces?2:1,oa=1,W=G.length;oa<W;oa++)ia=a(),ia.positionScreen.copy(G[oa]).applyMatrix4(R),0<(oa+1)%z||(T=r[q-2],ha.copy(ia.positionScreen),ea.copy(T.positionScreen),!0===f(ha,ea)&&(ha.multiplyScalar(1/ha.w),ea.multiplyScalar(1/ea.w),w=c(),w.id=D.id,w.v1.positionScreen.copy(ha),w.v2.positionScreen.copy(ea),w.z=Math.max(ha.z,ea.z),w.material=D.material,D.material.vertexColors===THREE.VertexColors&&
+(w.vertexColors[0].copy(D.geometry.colors[oa]),w.vertexColors[1].copy(D.geometry.colors[oa-1])),y.elements.push(w)))}else D instanceof THREE.Sprite&&(H.set(ga.elements[12],ga.elements[13],ga.elements[14],1),H.applyMatrix4(L),x=1/H.w,H.z*=x,-1<=H.z&&1>=H.z&&(F=d(),F.id=D.id,F.x=H.x*x,F.y=H.y*x,F.z=H.z,F.object=D,F.rotation=D.rotation,F.scale.x=D.scale.x*Math.abs(F.x-(H.x+t.projectionMatrix.elements[0])/(H.w+t.projectionMatrix.elements[12])),F.scale.y=D.scale.y*Math.abs(F.y-(H.y+t.projectionMatrix.elements[5])/
+(H.w+t.projectionMatrix.elements[13])),F.material=D.material,y.elements.push(F)))}!0===v&&y.elements.sort(e);return y}};THREE.Face3=function(a,b,c,d,e,f){this.a=a;this.b=b;this.c=c;this.normal=d instanceof THREE.Vector3?d:new THREE.Vector3;this.vertexNormals=d instanceof Array?d:[];this.color=e instanceof THREE.Color?e:new THREE.Color;this.vertexColors=e instanceof Array?e:[];this.vertexTangents=[];this.materialIndex=void 0!==f?f:0};
 THREE.Face3.prototype={constructor:THREE.Face3,clone:function(){var a=new THREE.Face3(this.a,this.b,this.c);a.normal.copy(this.normal);a.color.copy(this.color);a.materialIndex=this.materialIndex;for(var b=0,c=this.vertexNormals.length;b<c;b++)a.vertexNormals[b]=this.vertexNormals[b].clone();b=0;for(c=this.vertexColors.length;b<c;b++)a.vertexColors[b]=this.vertexColors[b].clone();b=0;for(c=this.vertexTangents.length;b<c;b++)a.vertexTangents[b]=this.vertexTangents[b].clone();return a}};THREE.Face4=function(a,b,c,d,e,f,g){console.warn("THREE.Face4 has been removed. A THREE.Face3 will be created instead.");return new THREE.Face3(a,b,c,e,f,g)};THREE.BufferAttribute=function(a,b){this.array=a;this.itemSize=b};
 THREE.BufferAttribute.prototype={constructor:THREE.BufferAttribute,get length(){return this.array.length},set:function(a){this.array.set(a);return this},setX:function(a,b){this.array[a*this.itemSize]=b;return this},setY:function(a,b){this.array[a*this.itemSize+1]=b;return this},setZ:function(a,b){this.array[a*this.itemSize+2]=b;return this},setXY:function(a,b,c){a*=this.itemSize;this.array[a]=b;this.array[a+1]=c;return this},setXYZ:function(a,b,c,d){a*=this.itemSize;this.array[a]=b;this.array[a+1]=
 c;this.array[a+2]=d;return this},setXYZW:function(a,b,c,d,e){a*=this.itemSize;this.array[a]=b;this.array[a+1]=c;this.array[a+2]=d;this.array[a+3]=e;return this}};THREE.Int8Attribute=function(a,b){console.warn("THREE.Int8Attribute has been removed. Use THREE.BufferAttribute( array, itemSize ) instead.");return new THREE.BufferAttribute(a,b)};
@@ -188,10 +188,10 @@ v=e[0][r][1],u=e[0][r][2],q[t]=p.x,q[t+1]=p.y,q[t+2]=v.x,q[t+3]=v.y,q[t+4]=u.x,q
 computeFaceNormals:function(){},computeVertexNormals:function(){if(this.attributes.position){var a,b,c,d;a=this.attributes.position.array.length;if(void 0===this.attributes.normal)this.attributes.normal={itemSize:3,array:new Float32Array(a)};else for(a=0,b=this.attributes.normal.array.length;a<b;a++)this.attributes.normal.array[a]=0;var e=this.attributes.position.array,f=this.attributes.normal.array,g,h,k,l,n,q,r=new THREE.Vector3,t=new THREE.Vector3,s=new THREE.Vector3,p=new THREE.Vector3,v=new THREE.Vector3;
 if(this.attributes.index){var u=this.attributes.index.array,w=0<this.offsets.length?this.offsets:[{start:0,count:u.length,index:0}];c=0;for(d=w.length;c<d;++c){b=w[c].start;g=w[c].count;var A=w[c].index;a=b;for(b+=g;a<b;a+=3)g=A+u[a],h=A+u[a+1],k=A+u[a+2],l=e[3*g],n=e[3*g+1],q=e[3*g+2],r.set(l,n,q),l=e[3*h],n=e[3*h+1],q=e[3*h+2],t.set(l,n,q),l=e[3*k],n=e[3*k+1],q=e[3*k+2],s.set(l,n,q),p.subVectors(s,t),v.subVectors(r,t),p.cross(v),f[3*g]+=p.x,f[3*g+1]+=p.y,f[3*g+2]+=p.z,f[3*h]+=p.x,f[3*h+1]+=p.y,
 f[3*h+2]+=p.z,f[3*k]+=p.x,f[3*k+1]+=p.y,f[3*k+2]+=p.z}}else for(a=0,b=e.length;a<b;a+=9)l=e[a],n=e[a+1],q=e[a+2],r.set(l,n,q),l=e[a+3],n=e[a+4],q=e[a+5],t.set(l,n,q),l=e[a+6],n=e[a+7],q=e[a+8],s.set(l,n,q),p.subVectors(s,t),v.subVectors(r,t),p.cross(v),f[a]=p.x,f[a+1]=p.y,f[a+2]=p.z,f[a+3]=p.x,f[a+4]=p.y,f[a+5]=p.z,f[a+6]=p.x,f[a+7]=p.y,f[a+8]=p.z;this.normalizeNormals();this.normalsNeedUpdate=!0}},computeTangents:function(){function a(a,b,c){q=d[3*a];r=d[3*a+1];t=d[3*a+2];s=d[3*b];p=d[3*b+1];v=d[3*
-b+2];u=d[3*c];w=d[3*c+1];A=d[3*c+2];D=f[2*a];x=f[2*a+1];F=f[2*b];B=f[2*b+1];z=f[2*c];C=f[2*c+1];y=s-q;Q=u-q;E=p-r;M=w-r;W=v-t;H=A-t;G=F-D;J=z-D;K=B-x;X=C-x;L=1/(G*X-J*K);ha.set((X*y-K*Q)*L,(X*E-K*M)*L,(X*W-K*H)*L);R.set((G*Q-J*y)*L,(G*M-J*E)*L,(G*H-J*W)*L);k[a].add(ha);k[b].add(ha);k[c].add(ha);l[a].add(R);l[b].add(R);l[c].add(R)}function b(a){P.x=e[3*a];P.y=e[3*a+1];P.z=e[3*a+2];Aa.copy(P);La=k[a];ya.copy(La);ya.sub(P.multiplyScalar(P.dot(La))).normalize();za.crossVectors(Aa,La);Ba=za.dot(l[a]);
-Ia=0>Ba?-1:1;h[4*a]=ya.x;h[4*a+1]=ya.y;h[4*a+2]=ya.z;h[4*a+3]=Ia}if(void 0===this.attributes.index||void 0===this.attributes.position||void 0===this.attributes.normal||void 0===this.attributes.uv)console.warn("Missing required attributes (index, position, normal or uv) in BufferGeometry.computeTangents()");else{var c=this.attributes.index.array,d=this.attributes.position.array,e=this.attributes.normal.array,f=this.attributes.uv.array,g=d.length/3;void 0===this.attributes.tangent&&(this.attributes.tangent=
-{itemSize:4,array:new Float32Array(4*g)});for(var h=this.attributes.tangent.array,k=[],l=[],n=0;n<g;n++)k[n]=new THREE.Vector3,l[n]=new THREE.Vector3;var q,r,t,s,p,v,u,w,A,D,x,F,B,z,C,y,Q,E,M,W,H,G,J,K,X,L,ha=new THREE.Vector3,R=new THREE.Vector3,Z,O,ia,fa,Y,ta=this.offsets,n=0;for(O=ta.length;n<O;++n){Z=ta[n].start;ia=ta[n].count;var va=ta[n].index,g=Z;for(Z+=ia;g<Z;g+=3)ia=va+c[g],fa=va+c[g+1],Y=va+c[g+2],a(ia,fa,Y)}var ya=new THREE.Vector3,za=new THREE.Vector3,P=new THREE.Vector3,Aa=new THREE.Vector3,
-Ia,La,Ba,n=0;for(O=ta.length;n<O;++n)for(Z=ta[n].start,ia=ta[n].count,va=ta[n].index,g=Z,Z+=ia;g<Z;g+=3)ia=va+c[g],fa=va+c[g+1],Y=va+c[g+2],b(ia),b(fa),b(Y)}},computeOffsets:function(a){var b=a;void 0===a&&(b=65535);Date.now();a=this.attributes.index.array;for(var c=this.attributes.position.array,d=a.length/3,e=new Uint16Array(a.length),f=0,g=0,h=[{start:0,count:0,index:0}],k=h[0],l=0,n=0,q=new Int32Array(6),r=new Int32Array(c.length),t=new Int32Array(c.length),s=0;s<c.length;s++)r[s]=-1,t[s]=-1;
+b+2];u=d[3*c];w=d[3*c+1];A=d[3*c+2];D=f[2*a];x=f[2*a+1];F=f[2*b];B=f[2*b+1];z=f[2*c];C=f[2*c+1];y=s-q;Q=u-q;E=p-r;M=w-r;V=v-t;H=A-t;G=F-D;J=z-D;K=B-x;X=C-x;L=1/(G*X-J*K);ga.set((X*y-K*Q)*L,(X*E-K*M)*L,(X*V-K*H)*L);R.set((G*Q-J*y)*L,(G*M-J*E)*L,(G*H-J*V)*L);k[a].add(ga);k[b].add(ga);k[c].add(ga);l[a].add(R);l[b].add(R);l[c].add(R)}function b(a){P.x=e[3*a];P.y=e[3*a+1];P.z=e[3*a+2];Ba.copy(P);La=k[a];ya.copy(La);ya.sub(P.multiplyScalar(P.dot(La))).normalize();za.crossVectors(Ba,La);Ca=za.dot(l[a]);
+Ja=0>Ca?-1:1;h[4*a]=ya.x;h[4*a+1]=ya.y;h[4*a+2]=ya.z;h[4*a+3]=Ja}if(void 0===this.attributes.index||void 0===this.attributes.position||void 0===this.attributes.normal||void 0===this.attributes.uv)console.warn("Missing required attributes (index, position, normal or uv) in BufferGeometry.computeTangents()");else{var c=this.attributes.index.array,d=this.attributes.position.array,e=this.attributes.normal.array,f=this.attributes.uv.array,g=d.length/3;void 0===this.attributes.tangent&&(this.attributes.tangent=
+{itemSize:4,array:new Float32Array(4*g)});for(var h=this.attributes.tangent.array,k=[],l=[],n=0;n<g;n++)k[n]=new THREE.Vector3,l[n]=new THREE.Vector3;var q,r,t,s,p,v,u,w,A,D,x,F,B,z,C,y,Q,E,M,V,H,G,J,K,X,L,ga=new THREE.Vector3,R=new THREE.Vector3,Z,O,ha,ea,Y,ra=this.offsets,n=0;for(O=ra.length;n<O;++n){Z=ra[n].start;ha=ra[n].count;var va=ra[n].index,g=Z;for(Z+=ha;g<Z;g+=3)ha=va+c[g],ea=va+c[g+1],Y=va+c[g+2],a(ha,ea,Y)}var ya=new THREE.Vector3,za=new THREE.Vector3,P=new THREE.Vector3,Ba=new THREE.Vector3,
+Ja,La,Ca,n=0;for(O=ra.length;n<O;++n)for(Z=ra[n].start,ha=ra[n].count,va=ra[n].index,g=Z,Z+=ha;g<Z;g+=3)ha=va+c[g],ea=va+c[g+1],Y=va+c[g+2],b(ha),b(ea),b(Y)}},computeOffsets:function(a){var b=a;void 0===a&&(b=65535);Date.now();a=this.attributes.index.array;for(var c=this.attributes.position.array,d=a.length/3,e=new Uint16Array(a.length),f=0,g=0,h=[{start:0,count:0,index:0}],k=h[0],l=0,n=0,q=new Int32Array(6),r=new Int32Array(c.length),t=new Int32Array(c.length),s=0;s<c.length;s++)r[s]=-1,t[s]=-1;
 for(c=0;c<d;c++){for(var p=n=0;3>p;p++)s=a[3*c+p],-1==r[s]?(q[2*p]=s,q[2*p+1]=-1,n++):r[s]<k.index?(q[2*p]=s,q[2*p+1]=-1,l++):(q[2*p]=s,q[2*p+1]=r[s]);if(g+n>k.index+b)for(k={start:f,count:0,index:g},h.push(k),n=0;6>n;n+=2)p=q[n+1],-1<p&&p<k.index&&(q[n+1]=-1);for(n=0;6>n;n+=2)s=q[n],p=q[n+1],-1===p&&(p=g++),r[s]=p,t[p]=s,e[f++]=p-k.index,k.count++}this.reorderBuffers(e,t,g);return this.offsets=h},merge:function(){console.log("BufferGeometry.merge(): TODO")},normalizeNormals:function(){for(var a=
 this.attributes.normal.array,b,c,d,e=0,f=a.length;e<f;e+=3)b=a[e],c=a[e+1],d=a[e+2],b=1/Math.sqrt(b*b+c*c+d*d),a[e]*=b,a[e+1]*=b,a[e+2]*=b},reorderBuffers:function(a,b,c){var d={},e=[Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array],f;for(f in this.attributes)if("index"!=f)for(var g=this.attributes[f].array,h=0,k=e.length;h<k;h++){var l=e[h];if(g instanceof l){d[f]=new l(this.attributes[f].itemSize*c);break}}for(e=0;e<c;e++)for(f in g=
 b[e],this.attributes)if("index"!=f)for(var h=this.attributes[f].array,k=this.attributes[f].itemSize,l=d[f],n=0;n<k;n++)l[e*k+n]=h[g*k+n];this.attributes.index.array=a;for(f in this.attributes)"index"!=f&&(this.attributes[f].array=d[f],this.attributes[f].numItems=this.attributes[f].itemSize*c)},clone:function(){var a=new THREE.BufferGeometry,b=[Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array],c;for(c in this.attributes){for(var d=this.attributes[c],
@@ -312,27 +312,27 @@ THREE.Sprite.prototype.raycast=function(){var a=new THREE.Vector3;return functio
 THREE.Sprite.prototype.clone=function(a){void 0===a&&(a=new THREE.Sprite(this.material));THREE.Object3D.prototype.clone.call(this,a);return a};THREE.Particle=THREE.Sprite;THREE.Scene=function(){THREE.Object3D.call(this);this.overrideMaterial=this.fog=null;this.autoUpdate=!0;this.matrixAutoUpdate=!1;this.__lights=[];this.__objectsAdded=[];this.__objectsRemoved=[]};THREE.Scene.prototype=Object.create(THREE.Object3D.prototype);
 THREE.Scene.prototype.__addObject=function(a){if(a instanceof THREE.Light)-1===this.__lights.indexOf(a)&&this.__lights.push(a),a.target&&void 0===a.target.parent&&this.add(a.target);else if(!(a instanceof THREE.Camera||a instanceof THREE.Bone)){this.__objectsAdded.push(a);var b=this.__objectsRemoved.indexOf(a);-1!==b&&this.__objectsRemoved.splice(b,1)}this.dispatchEvent({type:"objectAdded",object:a});a.dispatchEvent({type:"addedToScene",scene:this});for(b=0;b<a.children.length;b++)this.__addObject(a.children[b])};
 THREE.Scene.prototype.__removeObject=function(a){if(a instanceof THREE.Light){var b=this.__lights.indexOf(a);-1!==b&&this.__lights.splice(b,1);if(a.shadowCascadeArray)for(b=0;b<a.shadowCascadeArray.length;b++)this.__removeObject(a.shadowCascadeArray[b])}else a instanceof THREE.Camera||(this.__objectsRemoved.push(a),b=this.__objectsAdded.indexOf(a),-1!==b&&this.__objectsAdded.splice(b,1));this.dispatchEvent({type:"objectRemoved",object:a});a.dispatchEvent({type:"removedFromScene",scene:this});for(b=
-0;b<a.children.length;b++)this.__removeObject(a.children[b])};THREE.Scene.prototype.clone=function(a){void 0===a&&(a=new THREE.Scene);THREE.Object3D.prototype.clone.call(this,a);null!==this.fog&&(a.fog=this.fog.clone());null!==this.overrideMaterial&&(a.overrideMaterial=this.overrideMaterial.clone());a.autoUpdate=this.autoUpdate;a.matrixAutoUpdate=this.matrixAutoUpdate;return a};THREE.Fog=function(a,b,c){this.name="";this.color=new THREE.Color(a);this.near=void 0!==b?b:1;this.far=void 0!==c?c:1E3};THREE.Fog.prototype.clone=function(){return new THREE.Fog(this.color.getHex(),this.near,this.far)};THREE.FogExp2=function(a,b){this.name="";this.color=new THREE.Color(a);this.density=void 0!==b?b:2.5E-4};THREE.FogExp2.prototype.clone=function(){return new THREE.FogExp2(this.color.getHex(),this.density)};THREE.CanvasRenderer=function(a){function b(a,b,c,d){l(b);n(c);q(d);r(a.getStyle());y.stroke();ma.expandByScalar(2*b)}function c(a){t(a.getStyle());y.fill()}function d(a){e(a.target)}function e(a){if(!(a instanceof THREE.CompressedTexture)){var b=a.wrapS===THREE.RepeatWrapping,c=a.wrapT===THREE.RepeatWrapping,d=a.image,e=document.createElement("canvas");e.width=d.width;e.height=d.height;var f=e.getContext("2d");f.setTransform(1,0,0,-1,0,d.height);f.drawImage(d,0,0);La[a.id]=y.createPattern(e,!0===
+0;b<a.children.length;b++)this.__removeObject(a.children[b])};THREE.Scene.prototype.clone=function(a){void 0===a&&(a=new THREE.Scene);THREE.Object3D.prototype.clone.call(this,a);null!==this.fog&&(a.fog=this.fog.clone());null!==this.overrideMaterial&&(a.overrideMaterial=this.overrideMaterial.clone());a.autoUpdate=this.autoUpdate;a.matrixAutoUpdate=this.matrixAutoUpdate;return a};THREE.Fog=function(a,b,c){this.name="";this.color=new THREE.Color(a);this.near=void 0!==b?b:1;this.far=void 0!==c?c:1E3};THREE.Fog.prototype.clone=function(){return new THREE.Fog(this.color.getHex(),this.near,this.far)};THREE.FogExp2=function(a,b){this.name="";this.color=new THREE.Color(a);this.density=void 0!==b?b:2.5E-4};THREE.FogExp2.prototype.clone=function(){return new THREE.FogExp2(this.color.getHex(),this.density)};THREE.CanvasRenderer=function(a){function b(a,b,c,d){l(b);n(c);q(d);r(a.getStyle());y.stroke();la.expandByScalar(2*b)}function c(a){t(a.getStyle());y.fill()}function d(a){e(a.target)}function e(a){if(!(a instanceof THREE.CompressedTexture)){var b=a.wrapS===THREE.RepeatWrapping,c=a.wrapT===THREE.RepeatWrapping,d=a.image,e=document.createElement("canvas");e.width=d.width;e.height=d.height;var f=e.getContext("2d");f.setTransform(1,0,0,-1,0,d.height);f.drawImage(d,0,0);La[a.id]=y.createPattern(e,!0===
 b&&!0===c?"repeat":!0===b&&!1===c?"repeat-x":!1===b&&!0===c?"repeat-y":"no-repeat")}}function f(a,b,c,f,g,h,k,l,n,r,q,s,p){if(!(p instanceof THREE.DataTexture)){!1===p.hasEventListener("update",d)&&(void 0!==p.image&&0<p.image.width&&e(p),p.addEventListener("update",d));var u=La[p.id];if(void 0!==u){t(u);var u=p.offset.x/p.repeat.x,m=p.offset.y/p.repeat.y,w=p.image.width*p.repeat.x;p=p.image.height*p.repeat.y;k=(k+u)*w;l=(l+m)*p;c-=a;f-=b;g-=a;h-=b;n=(n+u)*w-k;r=(r+m)*p-l;q=(q+u)*w-k;s=(s+m)*p-l;
-p=n*s-q*r;0!==p&&(u=1/p,p=(s*c-r*g)*u,r=(s*f-r*h)*u,c=(n*g-q*c)*u,f=(n*h-q*f)*u,a=a-p*k-c*l,b=b-r*k-f*l,y.save(),y.transform(p,r,c,f,a,b),y.fill(),y.restore())}else t("rgba(0,0,0,1)"),y.fill()}}function g(a,b,c){var d=b.x-a.x,e=b.y-a.y,f=d*d+e*e;0!==f&&(c/=Math.sqrt(f),d*=c,e*=c,b.x+=d,b.y+=e,a.x-=d,a.y-=e)}function h(a){M!==a&&(M=y.globalAlpha=a)}function k(a){W!==a&&(a===THREE.NormalBlending?y.globalCompositeOperation="source-over":a===THREE.AdditiveBlending?y.globalCompositeOperation="lighter":
-a===THREE.SubtractiveBlending&&(y.globalCompositeOperation="darker"),W=a)}function l(a){J!==a&&(J=y.lineWidth=a)}function n(a){K!==a&&(K=y.lineCap=a)}function q(a){X!==a&&(X=y.lineJoin=a)}function r(a){H!==a&&(H=y.strokeStyle=a)}function t(a){G!==a&&(G=y.fillStyle=a)}function s(a){L.length!==a.length&&(y.setLineDash(a),L=a)}console.log("THREE.CanvasRenderer",THREE.REVISION);var p=THREE.Math.smoothstep;a=a||{};var v=this,u,w,A,D=new THREE.Projector,x=void 0!==a.canvas?a.canvas:document.createElement("canvas"),
-F=x.width,B=x.height,z=Math.floor(F/2),C=Math.floor(B/2),y=x.getContext("2d",{alpha:!0===a.alpha}),Q=new THREE.Color(0),E=0,M=1,W=0,H=null,G=null,J=null,K=null,X=null,L=[],ha,R,Z,O;new THREE.RenderableVertex;new THREE.RenderableVertex;var ia,fa,Y,ta,va,ya,za=new THREE.Color;new THREE.Color;new THREE.Color;new THREE.Color;new THREE.Color;var P=new THREE.Color,Aa=new THREE.Color,Ia=new THREE.Color,La={},Ba,Ga,Ca,qa,da,ja,Ja,S=new THREE.Box2,U=new THREE.Box2,ma=new THREE.Box2,ra=new THREE.Color,Ka=new THREE.Color,
-na=new THREE.Color,Ma=new THREE.Vector3,wa=new THREE.Vector3,ga=new THREE.Vector3,Fa=new THREE.Matrix3;void 0===y.setLineDash&&(y.setLineDash=function(){});this.domElement=x;this.devicePixelRatio=void 0!==a.devicePixelRatio?a.devicePixelRatio:void 0!==self.devicePixelRatio?self.devicePixelRatio:1;this.sortElements=this.sortObjects=this.autoClear=!0;this.info={render:{vertices:0,faces:0}};this.supportsVertexTextures=function(){};this.setFaceCulling=function(){};this.setSize=function(a,b,c){F=a*this.devicePixelRatio;
-B=b*this.devicePixelRatio;x.width=F;x.height=B;z=Math.floor(F/2);C=Math.floor(B/2);!1!==c&&(x.style.width=a+"px",x.style.height=b+"px");S.min.set(-z,-C);S.max.set(z,C);U.min.set(-z,-C);U.max.set(z,C);M=1;W=0;X=K=J=G=H=null;this.setViewport(0,0,a,b)};this.setViewport=function(a,b,c,d){y.setTransform(c*this.devicePixelRatio/F,0,0,-(d*this.devicePixelRatio)/B,a*this.devicePixelRatio,B-b*this.devicePixelRatio);y.translate(z,C)};this.setScissor=function(){};this.enableScissorTest=function(){};this.setClearColor=
-function(a,b){Q.set(a);E=void 0!==b?b:1;U.min.set(-z,-C);U.max.set(z,C)};this.setClearColorHex=function(a,b){console.warn("THREE.CanvasRenderer: .setClearColorHex() is being removed. Use .setClearColor() instead.");this.setClearColor(a,b)};this.getMaxAnisotropy=function(){return 0};this.clear=function(){!1===U.empty()&&(U.intersect(S),U.expandByScalar(2),1>E&&y.clearRect(U.min.x|0,U.min.y|0,U.max.x-U.min.x|0,U.max.y-U.min.y|0),0<E&&(k(THREE.NormalBlending),h(1),t("rgba("+Math.floor(255*Q.r)+","+Math.floor(255*
-Q.g)+","+Math.floor(255*Q.b)+","+E+")"),y.fillRect(U.min.x|0,U.min.y|0,U.max.x-U.min.x|0,U.max.y-U.min.y|0)),U.makeEmpty())};this.clearColor=function(){};this.clearDepth=function(){};this.clearStencil=function(){};this.render=function(a,x){if(!1===x instanceof THREE.Camera)console.error("THREE.CanvasRenderer.render: camera is not an instance of THREE.Camera.");else{!0===this.autoClear&&this.clear();v.info.render.vertices=0;v.info.render.faces=0;u=D.projectScene(a,x,this.sortObjects,this.sortElements);
-w=u.elements;A=u.lights;ha=x;Fa.getNormalMatrix(x.matrixWorldInverse);ra.setRGB(0,0,0);Ka.setRGB(0,0,0);na.setRGB(0,0,0);for(var F=0,K=A.length;F<K;F++){var B=A[F],J=B.color;B instanceof THREE.AmbientLight?ra.add(J):B instanceof THREE.DirectionalLight?Ka.add(J):B instanceof THREE.PointLight&&na.add(J)}F=0;for(K=w.length;F<K;F++){var G=w[F],Q=G.material;if(void 0!==Q&&0!==Q.opacity){ma.makeEmpty();if(G instanceof THREE.RenderableSprite){R=G;R.x*=z;R.y*=C;var B=R,M=G,J=Q;h(J.opacity);k(J.blending);
-var E=M.scale.x*z,M=M.scale.y*C,G=0.5*Math.sqrt(E*E+M*M);ma.min.set(B.x-G,B.y-G);ma.max.set(B.x+G,B.y+G);if(J instanceof THREE.SpriteMaterial){var H=J.map;if(null!==H&&void 0!==H.image){!1===H.hasEventListener("update",d)&&(0<H.image.width&&e(H),H.addEventListener("update",d));G=La[H.id];void 0!==G?t(G):t("rgba( 0, 0, 0, 1 )");var L=H.image,G=L.width*H.offset.x,Q=L.height*H.offset.y,X=L.width*H.repeat.x,H=L.height*H.repeat.y,L=E/X,W=M/H;y.save();y.translate(B.x,B.y);0!==J.rotation&&y.rotate(J.rotation);
-y.translate(-E/2,-M/2);y.scale(L,W);y.translate(-G,-Q);y.fillRect(G,Q,X,H)}else t(J.color.getStyle()),y.save(),y.translate(B.x,B.y),0!==J.rotation&&y.rotate(J.rotation),y.scale(E,-M),y.fillRect(-0.5,-0.5,1,1);y.restore()}else J instanceof THREE.SpriteCanvasMaterial&&(r(J.color.getStyle()),t(J.color.getStyle()),y.save(),y.translate(B.x,B.y),0!==J.rotation&&y.rotate(J.rotation),y.scale(E,M),J.program(y),y.restore())}else if(G instanceof THREE.RenderableLine){if(R=G.v1,Z=G.v2,R.positionScreen.x*=z,R.positionScreen.y*=
-C,Z.positionScreen.x*=z,Z.positionScreen.y*=C,ma.setFromPoints([R.positionScreen,Z.positionScreen]),!0===S.isIntersectionBox(ma))if(B=R,J=Z,E=G,M=Q,h(M.opacity),k(M.blending),y.beginPath(),y.moveTo(B.positionScreen.x,B.positionScreen.y),y.lineTo(J.positionScreen.x,J.positionScreen.y),M instanceof THREE.LineBasicMaterial){l(M.linewidth);n(M.linecap);q(M.linejoin);if(M.vertexColors!==THREE.VertexColors)r(M.color.getStyle());else if(G=E.vertexColors[0].getStyle(),E=E.vertexColors[1].getStyle(),G===E)r(G);
-else{try{var m=y.createLinearGradient(B.positionScreen.x,B.positionScreen.y,J.positionScreen.x,J.positionScreen.y);m.addColorStop(0,G);m.addColorStop(1,E)}catch(nb){m=G}r(m)}y.stroke();ma.expandByScalar(2*M.linewidth)}else M instanceof THREE.LineDashedMaterial&&(l(M.linewidth),n(M.linecap),q(M.linejoin),r(M.color.getStyle()),s([M.dashSize,M.gapSize]),y.stroke(),ma.expandByScalar(2*M.linewidth),s([]))}else if(G instanceof THREE.RenderableFace){R=G.v1;Z=G.v2;O=G.v3;if(-1>R.positionScreen.z||1<R.positionScreen.z)continue;
-if(-1>Z.positionScreen.z||1<Z.positionScreen.z)continue;if(-1>O.positionScreen.z||1<O.positionScreen.z)continue;R.positionScreen.x*=z;R.positionScreen.y*=C;Z.positionScreen.x*=z;Z.positionScreen.y*=C;O.positionScreen.x*=z;O.positionScreen.y*=C;0<Q.overdraw&&(g(R.positionScreen,Z.positionScreen,Q.overdraw),g(Z.positionScreen,O.positionScreen,Q.overdraw),g(O.positionScreen,R.positionScreen,Q.overdraw));ma.setFromPoints([R.positionScreen,Z.positionScreen,O.positionScreen]);if(!0===S.isIntersectionBox(ma)){J=
-R;E=Z;M=O;B=Q;v.info.render.vertices+=3;v.info.render.faces++;h(B.opacity);k(B.blending);ia=J.positionScreen.x;fa=J.positionScreen.y;Y=E.positionScreen.x;ta=E.positionScreen.y;va=M.positionScreen.x;ya=M.positionScreen.y;var Q=ia,X=fa,H=Y,L=ta,W=va,ob=ya;y.beginPath();y.moveTo(Q,X);y.lineTo(H,L);y.lineTo(W,ob);y.closePath();if((B instanceof THREE.MeshLambertMaterial||B instanceof THREE.MeshPhongMaterial)&&null===B.map){P.copy(B.color);Aa.copy(B.emissive);B.vertexColors===THREE.FaceColors&&P.multiply(G.color);
-za.copy(ra);wa.copy(J.positionWorld).add(E.positionWorld).add(M.positionWorld).divideScalar(3);J=wa;E=G.normalModel;M=za;G=0;for(Q=A.length;G<Q;G++)X=A[G],Ia.copy(X.color),X instanceof THREE.DirectionalLight?(H=Ma.setFromMatrixPosition(X.matrixWorld).normalize(),L=E.dot(H),0>=L||(L*=X.intensity,M.add(Ia.multiplyScalar(L)))):X instanceof THREE.PointLight&&(H=Ma.setFromMatrixPosition(X.matrixWorld),L=E.dot(Ma.subVectors(H,J).normalize()),0>=L||(L*=0==X.distance?1:1-Math.min(J.distanceTo(H)/X.distance,
-1),0!=L&&(L*=X.intensity,M.add(Ia.multiplyScalar(L)))));za.multiply(P).add(Aa);!0===B.wireframe?b(za,B.wireframeLinewidth,B.wireframeLinecap,B.wireframeLinejoin):c(za)}else B instanceof THREE.MeshBasicMaterial||B instanceof THREE.MeshLambertMaterial||B instanceof THREE.MeshPhongMaterial?null!==B.map?B.map.mapping instanceof THREE.UVMapping&&(Ba=G.uvs,f(ia,fa,Y,ta,va,ya,Ba[0].x,Ba[0].y,Ba[1].x,Ba[1].y,Ba[2].x,Ba[2].y,B.map)):null!==B.envMap?B.envMap.mapping instanceof THREE.SphericalReflectionMapping?
-(ga.copy(G.vertexNormalsModel[0]).applyMatrix3(Fa),Ga=0.5*ga.x+0.5,Ca=0.5*ga.y+0.5,ga.copy(G.vertexNormalsModel[1]).applyMatrix3(Fa),qa=0.5*ga.x+0.5,da=0.5*ga.y+0.5,ga.copy(G.vertexNormalsModel[2]).applyMatrix3(Fa),ja=0.5*ga.x+0.5,Ja=0.5*ga.y+0.5,f(ia,fa,Y,ta,va,ya,Ga,Ca,qa,da,ja,Ja,B.envMap)):B.envMap.mapping instanceof THREE.SphericalRefractionMapping&&(ga.copy(G.vertexNormalsModel[0]).applyMatrix3(Fa),Ga=-0.5*ga.x+0.5,Ca=-0.5*ga.y+0.5,ga.copy(G.vertexNormalsModel[1]).applyMatrix3(Fa),qa=-0.5*ga.x+
-0.5,da=-0.5*ga.y+0.5,ga.copy(G.vertexNormalsModel[2]).applyMatrix3(Fa),ja=-0.5*ga.x+0.5,Ja=-0.5*ga.y+0.5,f(ia,fa,Y,ta,va,ya,Ga,Ca,qa,da,ja,Ja,B.envMap)):(za.copy(B.color),B.vertexColors===THREE.FaceColors&&za.multiply(G.color),!0===B.wireframe?b(za,B.wireframeLinewidth,B.wireframeLinecap,B.wireframeLinejoin):c(za)):(B instanceof THREE.MeshDepthMaterial?za.r=za.g=za.b=1-p(J.positionScreen.z*J.positionScreen.w,ha.near,ha.far):B instanceof THREE.MeshNormalMaterial?(ga.copy(G.normalModel).applyMatrix3(Fa),
-za.setRGB(ga.x,ga.y,ga.z).multiplyScalar(0.5).addScalar(0.5)):za.setRGB(1,1,1),!0===B.wireframe?b(za,B.wireframeLinewidth,B.wireframeLinecap,B.wireframeLinejoin):c(za))}}U.union(ma)}}}}};THREE.ShaderChunk={fog_pars_fragment:"#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif",fog_fragment:"#ifdef USE_FOG\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tfloat depth = gl_FragDepthEXT / gl_FragCoord.w;\n\t#else\n\t\tfloat depth = gl_FragCoord.z / gl_FragCoord.w;\n\t#endif\n\t#ifdef FOG_EXP2\n\t\tconst float LOG2 = 1.442695;\n\t\tfloat fogFactor = exp2( - fogDensity * fogDensity * depth * depth * LOG2 );\n\t\tfogFactor = 1.0 - clamp( fogFactor, 0.0, 1.0 );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, depth );\n\t#endif\n\tgl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );\n#endif",
+p=n*s-q*r;0!==p&&(u=1/p,p=(s*c-r*g)*u,r=(s*f-r*h)*u,c=(n*g-q*c)*u,f=(n*h-q*f)*u,a=a-p*k-c*l,b=b-r*k-f*l,y.save(),y.transform(p,r,c,f,a,b),y.fill(),y.restore())}else t("rgba(0,0,0,1)"),y.fill()}}function g(a,b,c){var d=b.x-a.x,e=b.y-a.y,f=d*d+e*e;0!==f&&(c/=Math.sqrt(f),d*=c,e*=c,b.x+=d,b.y+=e,a.x-=d,a.y-=e)}function h(a){M!==a&&(M=y.globalAlpha=a)}function k(a){V!==a&&(a===THREE.NormalBlending?y.globalCompositeOperation="source-over":a===THREE.AdditiveBlending?y.globalCompositeOperation="lighter":
+a===THREE.SubtractiveBlending&&(y.globalCompositeOperation="darker"),V=a)}function l(a){J!==a&&(J=y.lineWidth=a)}function n(a){K!==a&&(K=y.lineCap=a)}function q(a){X!==a&&(X=y.lineJoin=a)}function r(a){H!==a&&(H=y.strokeStyle=a)}function t(a){G!==a&&(G=y.fillStyle=a)}function s(a){L.length!==a.length&&(y.setLineDash(a),L=a)}console.log("THREE.CanvasRenderer",THREE.REVISION);var p=THREE.Math.smoothstep;a=a||{};var v=this,u,w,A,D=new THREE.Projector,x=void 0!==a.canvas?a.canvas:document.createElement("canvas"),
+F=x.width,B=x.height,z=Math.floor(F/2),C=Math.floor(B/2),y=x.getContext("2d",{alpha:!0===a.alpha}),Q=new THREE.Color(0),E=0,M=1,V=0,H=null,G=null,J=null,K=null,X=null,L=[],ga,R,Z,O;new THREE.RenderableVertex;new THREE.RenderableVertex;var ha,ea,Y,ra,va,ya,za=new THREE.Color;new THREE.Color;new THREE.Color;new THREE.Color;new THREE.Color;var P=new THREE.Color,Ba=new THREE.Color,Ja=new THREE.Color,La={},Ca,Fa,Ra,oa,W,ia,Ka,ta=new THREE.Box2,T=new THREE.Box2,la=new THREE.Box2,pa=new THREE.Color,ma=new THREE.Color,
+Ma=new THREE.Color,Na=new THREE.Vector3,wa=new THREE.Vector3,fa=new THREE.Vector3,Ga=new THREE.Matrix3;void 0===y.setLineDash&&(y.setLineDash=function(){});this.domElement=x;this.devicePixelRatio=void 0!==a.devicePixelRatio?a.devicePixelRatio:void 0!==self.devicePixelRatio?self.devicePixelRatio:1;this.sortElements=this.sortObjects=this.autoClear=!0;this.info={render:{vertices:0,faces:0}};this.supportsVertexTextures=function(){};this.setFaceCulling=function(){};this.setSize=function(a,b,c){F=a*this.devicePixelRatio;
+B=b*this.devicePixelRatio;x.width=F;x.height=B;z=Math.floor(F/2);C=Math.floor(B/2);!1!==c&&(x.style.width=a+"px",x.style.height=b+"px");ta.min.set(-z,-C);ta.max.set(z,C);T.min.set(-z,-C);T.max.set(z,C);M=1;V=0;X=K=J=G=H=null;this.setViewport(0,0,a,b)};this.setViewport=function(a,b,c,d){y.setTransform(c*this.devicePixelRatio/F,0,0,-(d*this.devicePixelRatio)/B,a*this.devicePixelRatio,B-b*this.devicePixelRatio);y.translate(z,C)};this.setScissor=function(){};this.enableScissorTest=function(){};this.setClearColor=
+function(a,b){Q.set(a);E=void 0!==b?b:1;T.min.set(-z,-C);T.max.set(z,C)};this.setClearColorHex=function(a,b){console.warn("THREE.CanvasRenderer: .setClearColorHex() is being removed. Use .setClearColor() instead.");this.setClearColor(a,b)};this.getMaxAnisotropy=function(){return 0};this.clear=function(){!1===T.empty()&&(T.intersect(ta),T.expandByScalar(2),1>E&&y.clearRect(T.min.x|0,T.min.y|0,T.max.x-T.min.x|0,T.max.y-T.min.y|0),0<E&&(k(THREE.NormalBlending),h(1),t("rgba("+Math.floor(255*Q.r)+","+
+Math.floor(255*Q.g)+","+Math.floor(255*Q.b)+","+E+")"),y.fillRect(T.min.x|0,T.min.y|0,T.max.x-T.min.x|0,T.max.y-T.min.y|0)),T.makeEmpty())};this.clearColor=function(){};this.clearDepth=function(){};this.clearStencil=function(){};this.render=function(a,x){if(!1===x instanceof THREE.Camera)console.error("THREE.CanvasRenderer.render: camera is not an instance of THREE.Camera.");else{!0===this.autoClear&&this.clear();v.info.render.vertices=0;v.info.render.faces=0;u=D.projectScene(a,x,this.sortObjects,
+this.sortElements);w=u.elements;A=u.lights;ga=x;Ga.getNormalMatrix(x.matrixWorldInverse);pa.setRGB(0,0,0);ma.setRGB(0,0,0);Ma.setRGB(0,0,0);for(var F=0,K=A.length;F<K;F++){var B=A[F],J=B.color;B instanceof THREE.AmbientLight?pa.add(J):B instanceof THREE.DirectionalLight?ma.add(J):B instanceof THREE.PointLight&&Ma.add(J)}F=0;for(K=w.length;F<K;F++){var G=w[F],Q=G.material;if(void 0!==Q&&0!==Q.opacity){la.makeEmpty();if(G instanceof THREE.RenderableSprite){R=G;R.x*=z;R.y*=C;var B=R,M=G,J=Q;h(J.opacity);
+k(J.blending);var E=M.scale.x*z,M=M.scale.y*C,G=0.5*Math.sqrt(E*E+M*M);la.min.set(B.x-G,B.y-G);la.max.set(B.x+G,B.y+G);if(J instanceof THREE.SpriteMaterial){var H=J.map;if(null!==H&&void 0!==H.image){!1===H.hasEventListener("update",d)&&(0<H.image.width&&e(H),H.addEventListener("update",d));G=La[H.id];void 0!==G?t(G):t("rgba( 0, 0, 0, 1 )");var L=H.image,G=L.width*H.offset.x,Q=L.height*H.offset.y,X=L.width*H.repeat.x,H=L.height*H.repeat.y,L=E/X,V=M/H;y.save();y.translate(B.x,B.y);0!==J.rotation&&
+y.rotate(J.rotation);y.translate(-E/2,-M/2);y.scale(L,V);y.translate(-G,-Q);y.fillRect(G,Q,X,H)}else t(J.color.getStyle()),y.save(),y.translate(B.x,B.y),0!==J.rotation&&y.rotate(J.rotation),y.scale(E,-M),y.fillRect(-0.5,-0.5,1,1);y.restore()}else J instanceof THREE.SpriteCanvasMaterial&&(r(J.color.getStyle()),t(J.color.getStyle()),y.save(),y.translate(B.x,B.y),0!==J.rotation&&y.rotate(J.rotation),y.scale(E,M),J.program(y),y.restore())}else if(G instanceof THREE.RenderableLine){if(R=G.v1,Z=G.v2,R.positionScreen.x*=
+z,R.positionScreen.y*=C,Z.positionScreen.x*=z,Z.positionScreen.y*=C,la.setFromPoints([R.positionScreen,Z.positionScreen]),!0===ta.isIntersectionBox(la))if(B=R,J=Z,E=G,M=Q,h(M.opacity),k(M.blending),y.beginPath(),y.moveTo(B.positionScreen.x,B.positionScreen.y),y.lineTo(J.positionScreen.x,J.positionScreen.y),M instanceof THREE.LineBasicMaterial){l(M.linewidth);n(M.linecap);q(M.linejoin);if(M.vertexColors!==THREE.VertexColors)r(M.color.getStyle());else if(G=E.vertexColors[0].getStyle(),E=E.vertexColors[1].getStyle(),
+G===E)r(G);else{try{var m=y.createLinearGradient(B.positionScreen.x,B.positionScreen.y,J.positionScreen.x,J.positionScreen.y);m.addColorStop(0,G);m.addColorStop(1,E)}catch(ob){m=G}r(m)}y.stroke();la.expandByScalar(2*M.linewidth)}else M instanceof THREE.LineDashedMaterial&&(l(M.linewidth),n(M.linecap),q(M.linejoin),r(M.color.getStyle()),s([M.dashSize,M.gapSize]),y.stroke(),la.expandByScalar(2*M.linewidth),s([]))}else if(G instanceof THREE.RenderableFace){R=G.v1;Z=G.v2;O=G.v3;if(-1>R.positionScreen.z||
+1<R.positionScreen.z)continue;if(-1>Z.positionScreen.z||1<Z.positionScreen.z)continue;if(-1>O.positionScreen.z||1<O.positionScreen.z)continue;R.positionScreen.x*=z;R.positionScreen.y*=C;Z.positionScreen.x*=z;Z.positionScreen.y*=C;O.positionScreen.x*=z;O.positionScreen.y*=C;0<Q.overdraw&&(g(R.positionScreen,Z.positionScreen,Q.overdraw),g(Z.positionScreen,O.positionScreen,Q.overdraw),g(O.positionScreen,R.positionScreen,Q.overdraw));la.setFromPoints([R.positionScreen,Z.positionScreen,O.positionScreen]);
+if(!0===ta.isIntersectionBox(la)){J=R;E=Z;M=O;B=Q;v.info.render.vertices+=3;v.info.render.faces++;h(B.opacity);k(B.blending);ha=J.positionScreen.x;ea=J.positionScreen.y;Y=E.positionScreen.x;ra=E.positionScreen.y;va=M.positionScreen.x;ya=M.positionScreen.y;var Q=ha,X=ea,H=Y,L=ra,V=va,tb=ya;y.beginPath();y.moveTo(Q,X);y.lineTo(H,L);y.lineTo(V,tb);y.closePath();if((B instanceof THREE.MeshLambertMaterial||B instanceof THREE.MeshPhongMaterial)&&null===B.map){P.copy(B.color);Ba.copy(B.emissive);B.vertexColors===
+THREE.FaceColors&&P.multiply(G.color);za.copy(pa);wa.copy(J.positionWorld).add(E.positionWorld).add(M.positionWorld).divideScalar(3);J=wa;E=G.normalModel;M=za;G=0;for(Q=A.length;G<Q;G++)X=A[G],Ja.copy(X.color),X instanceof THREE.DirectionalLight?(H=Na.setFromMatrixPosition(X.matrixWorld).normalize(),L=E.dot(H),0>=L||(L*=X.intensity,M.add(Ja.multiplyScalar(L)))):X instanceof THREE.PointLight&&(H=Na.setFromMatrixPosition(X.matrixWorld),L=E.dot(Na.subVectors(H,J).normalize()),0>=L||(L*=0==X.distance?
+1:1-Math.min(J.distanceTo(H)/X.distance,1),0!=L&&(L*=X.intensity,M.add(Ja.multiplyScalar(L)))));za.multiply(P).add(Ba);!0===B.wireframe?b(za,B.wireframeLinewidth,B.wireframeLinecap,B.wireframeLinejoin):c(za)}else B instanceof THREE.MeshBasicMaterial||B instanceof THREE.MeshLambertMaterial||B instanceof THREE.MeshPhongMaterial?null!==B.map?B.map.mapping instanceof THREE.UVMapping&&(Ca=G.uvs,f(ha,ea,Y,ra,va,ya,Ca[0].x,Ca[0].y,Ca[1].x,Ca[1].y,Ca[2].x,Ca[2].y,B.map)):null!==B.envMap?B.envMap.mapping instanceof
+THREE.SphericalReflectionMapping?(fa.copy(G.vertexNormalsModel[0]).applyMatrix3(Ga),Fa=0.5*fa.x+0.5,Ra=0.5*fa.y+0.5,fa.copy(G.vertexNormalsModel[1]).applyMatrix3(Ga),oa=0.5*fa.x+0.5,W=0.5*fa.y+0.5,fa.copy(G.vertexNormalsModel[2]).applyMatrix3(Ga),ia=0.5*fa.x+0.5,Ka=0.5*fa.y+0.5,f(ha,ea,Y,ra,va,ya,Fa,Ra,oa,W,ia,Ka,B.envMap)):B.envMap.mapping instanceof THREE.SphericalRefractionMapping&&(fa.copy(G.vertexNormalsModel[0]).applyMatrix3(Ga),Fa=-0.5*fa.x+0.5,Ra=-0.5*fa.y+0.5,fa.copy(G.vertexNormalsModel[1]).applyMatrix3(Ga),
+oa=-0.5*fa.x+0.5,W=-0.5*fa.y+0.5,fa.copy(G.vertexNormalsModel[2]).applyMatrix3(Ga),ia=-0.5*fa.x+0.5,Ka=-0.5*fa.y+0.5,f(ha,ea,Y,ra,va,ya,Fa,Ra,oa,W,ia,Ka,B.envMap)):(za.copy(B.color),B.vertexColors===THREE.FaceColors&&za.multiply(G.color),!0===B.wireframe?b(za,B.wireframeLinewidth,B.wireframeLinecap,B.wireframeLinejoin):c(za)):(B instanceof THREE.MeshDepthMaterial?za.r=za.g=za.b=1-p(J.positionScreen.z*J.positionScreen.w,ga.near,ga.far):B instanceof THREE.MeshNormalMaterial?(fa.copy(G.normalModel).applyMatrix3(Ga),
+za.setRGB(fa.x,fa.y,fa.z).multiplyScalar(0.5).addScalar(0.5)):za.setRGB(1,1,1),!0===B.wireframe?b(za,B.wireframeLinewidth,B.wireframeLinecap,B.wireframeLinejoin):c(za))}}T.union(la)}}}}};THREE.ShaderChunk={fog_pars_fragment:"#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif",fog_fragment:"#ifdef USE_FOG\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tfloat depth = gl_FragDepthEXT / gl_FragCoord.w;\n\t#else\n\t\tfloat depth = gl_FragCoord.z / gl_FragCoord.w;\n\t#endif\n\t#ifdef FOG_EXP2\n\t\tconst float LOG2 = 1.442695;\n\t\tfloat fogFactor = exp2( - fogDensity * fogDensity * depth * depth * LOG2 );\n\t\tfogFactor = 1.0 - clamp( fogFactor, 0.0, 1.0 );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, depth );\n\t#endif\n\tgl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );\n#endif",
 envmap_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float reflectivity;\n\tuniform samplerCube envMap;\n\tuniform float flipEnvMap;\n\tuniform int combine;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )\n\t\tuniform bool useRefract;\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif",envmap_fragment:"#ifdef USE_ENVMAP\n\tvec3 reflectVec;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )\n\t\tvec3 cameraToVertex = normalize( vWorldPosition - cameraPosition );\n\t\tvec3 worldNormal = normalize( vec3( vec4( normal, 0.0 ) * viewMatrix ) );\n\t\tif ( useRefract ) {\n\t\t\treflectVec = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t} else { \n\t\t\treflectVec = reflect( cameraToVertex, worldNormal );\n\t\t}\n\t#else\n\t\treflectVec = vReflect;\n\t#endif\n\t#ifdef DOUBLE_SIDED\n\t\tfloat flipNormal = ( -1.0 + 2.0 * float( gl_FrontFacing ) );\n\t\tvec4 cubeColor = textureCube( envMap, flipNormal * vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#else\n\t\tvec4 cubeColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#endif\n\t#ifdef GAMMA_INPUT\n\t\tcubeColor.xyz *= cubeColor.xyz;\n\t#endif\n\tif ( combine == 1 ) {\n\t\tgl_FragColor.xyz = mix( gl_FragColor.xyz, cubeColor.xyz, specularStrength * reflectivity );\n\t} else if ( combine == 2 ) {\n\t\tgl_FragColor.xyz += cubeColor.xyz * specularStrength * reflectivity;\n\t} else {\n\t\tgl_FragColor.xyz = mix( gl_FragColor.xyz, gl_FragColor.xyz * cubeColor.xyz, specularStrength * reflectivity );\n\t}\n#endif",
 envmap_pars_vertex:"#if defined( USE_ENVMAP ) && ! defined( USE_BUMPMAP ) && ! defined( USE_NORMALMAP )\n\tvarying vec3 vReflect;\n\tuniform float refractionRatio;\n\tuniform bool useRefract;\n#endif",worldpos_vertex:"#if defined( USE_ENVMAP ) || defined( PHONG ) || defined( LAMBERT ) || defined ( USE_SHADOWMAP )\n\t#ifdef USE_SKINNING\n\t\tvec4 worldPosition = modelMatrix * skinned;\n\t#endif\n\t#if defined( USE_MORPHTARGETS ) && ! defined( USE_SKINNING )\n\t\tvec4 worldPosition = modelMatrix * vec4( morphed, 1.0 );\n\t#endif\n\t#if ! defined( USE_MORPHTARGETS ) && ! defined( USE_SKINNING )\n\t\tvec4 worldPosition = modelMatrix * vec4( position, 1.0 );\n\t#endif\n#endif",
 envmap_vertex:"#if defined( USE_ENVMAP ) && ! defined( USE_BUMPMAP ) && ! defined( USE_NORMALMAP )\n\tvec3 worldNormal = mat3( modelMatrix[ 0 ].xyz, modelMatrix[ 1 ].xyz, modelMatrix[ 2 ].xyz ) * objectNormal;\n\tworldNormal = normalize( worldNormal );\n\tvec3 cameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\tif ( useRefract ) {\n\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t} else {\n\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t}\n#endif",
@@ -386,131 +386,130 @@ THREE.ShaderChunk.logdepthbuf_vertex,"}"].join("\n"),fragmentShader:["uniform sa
 "void main() {",THREE.ShaderChunk.skinbase_vertex,THREE.ShaderChunk.morphtarget_vertex,THREE.ShaderChunk.skinning_vertex,THREE.ShaderChunk.default_vertex,THREE.ShaderChunk.logdepthbuf_vertex,"}"].join("\n"),fragmentShader:[THREE.ShaderChunk.logdepthbuf_pars_fragment,"vec4 pack_depth( const in float depth ) {\n\tconst vec4 bit_shift = vec4( 256.0 * 256.0 * 256.0, 256.0 * 256.0, 256.0, 1.0 );\n\tconst vec4 bit_mask = vec4( 0.0, 1.0 / 256.0, 1.0 / 256.0, 1.0 / 256.0 );\n\tvec4 res = mod( depth * bit_shift * vec4( 255 ), vec4( 256 ) ) / vec4( 255 );\n\tres -= res.xxyz * bit_mask;\n\treturn res;\n}\nvoid main() {",
 THREE.ShaderChunk.logdepthbuf_fragment,"\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tgl_FragData[ 0 ] = pack_depth( gl_FragDepthEXT );\n\t#else\n\t\tgl_FragData[ 0 ] = pack_depth( gl_FragCoord.z );\n\t#endif\n}"].join("\n")}};THREE.WebGLRenderer=function(a){function b(a,b){var c=a.vertices.length,d=b.material;if(d.attributes){void 0===a.__webglCustomAttributesList&&(a.__webglCustomAttributesList=[]);for(var e in d.attributes){var f=d.attributes[e];if(!f.__webglInitialized||f.createUniqueBuffers){f.__webglInitialized=!0;var g=1;"v2"===f.type?g=2:"v3"===f.type?g=3:"v4"===f.type?g=4:"c"===f.type&&(g=3);f.size=g;f.array=new Float32Array(c*g);f.buffer=m.createBuffer();f.buffer.belongsToAttribute=e;f.needsUpdate=!0}a.__webglCustomAttributesList.push(f)}}}
 function c(a,b){var c=b.geometry,g=a.faces3,h=3*g.length,k=1*g.length,l=3*g.length,g=d(b,a),n=f(g),r=e(g),p=g.vertexColors?g.vertexColors:!1;a.__vertexArray=new Float32Array(3*h);r&&(a.__normalArray=new Float32Array(3*h));c.hasTangents&&(a.__tangentArray=new Float32Array(4*h));p&&(a.__colorArray=new Float32Array(3*h));n&&(0<c.faceVertexUvs.length&&(a.__uvArray=new Float32Array(2*h)),1<c.faceVertexUvs.length&&(a.__uv2Array=new Float32Array(2*h)));b.geometry.skinWeights.length&&b.geometry.skinIndices.length&&
-(a.__skinIndexArray=new Float32Array(4*h),a.__skinWeightArray=new Float32Array(4*h));c=null!==rb&&21845<k?Uint32Array:Uint16Array;a.__typeArray=c;a.__faceArray=new c(3*k);a.__lineArray=new c(2*l);if(a.numMorphTargets)for(a.__morphTargetsArrays=[],c=0,n=a.numMorphTargets;c<n;c++)a.__morphTargetsArrays.push(new Float32Array(3*h));if(a.numMorphNormals)for(a.__morphNormalsArrays=[],c=0,n=a.numMorphNormals;c<n;c++)a.__morphNormalsArrays.push(new Float32Array(3*h));a.__webglFaceCount=3*k;a.__webglLineCount=
+(a.__skinIndexArray=new Float32Array(4*h),a.__skinWeightArray=new Float32Array(4*h));c=null!==pb&&21845<k?Uint32Array:Uint16Array;a.__typeArray=c;a.__faceArray=new c(3*k);a.__lineArray=new c(2*l);if(a.numMorphTargets)for(a.__morphTargetsArrays=[],c=0,n=a.numMorphTargets;c<n;c++)a.__morphTargetsArrays.push(new Float32Array(3*h));if(a.numMorphNormals)for(a.__morphNormalsArrays=[],c=0,n=a.numMorphNormals;c<n;c++)a.__morphNormalsArrays.push(new Float32Array(3*h));a.__webglFaceCount=3*k;a.__webglLineCount=
 2*l;if(g.attributes){void 0===a.__webglCustomAttributesList&&(a.__webglCustomAttributesList=[]);for(var q in g.attributes){var k=g.attributes[q],l={},s;for(s in k)l[s]=k[s];if(!l.__webglInitialized||l.createUniqueBuffers)l.__webglInitialized=!0,c=1,"v2"===l.type?c=2:"v3"===l.type?c=3:"v4"===l.type?c=4:"c"===l.type&&(c=3),l.size=c,l.array=new Float32Array(h*c),l.buffer=m.createBuffer(),l.buffer.belongsToAttribute=q,k.needsUpdate=!0,l.__original=k;a.__webglCustomAttributesList.push(l)}}a.__inittedArrays=
 !0}function d(a,b){return a.material instanceof THREE.MeshFaceMaterial?a.material.materials[b.materialIndex]:a.material}function e(a){return a instanceof THREE.MeshBasicMaterial&&!a.envMap||a instanceof THREE.MeshDepthMaterial?!1:a&&void 0!==a.shading&&a.shading===THREE.SmoothShading?THREE.SmoothShading:THREE.FlatShading}function f(a){return a.map||a.lightMap||a.bumpMap||a.normalMap||a.specularMap||a instanceof THREE.ShaderMaterial?!0:!1}function g(a){for(var b in a.attributes){var c="index"===b?
 m.ELEMENT_ARRAY_BUFFER:m.ARRAY_BUFFER,d=a.attributes[b];d.buffer=m.createBuffer();m.bindBuffer(c,d.buffer);m.bufferData(c,d.array,m.STATIC_DRAW)}}function h(a,b,c,d){for(var e in b){var f=b[e],g=c[e];if(0<=f)if(g){var h=g.itemSize;m.bindBuffer(m.ARRAY_BUFFER,g.buffer);l(f);m.vertexAttribPointer(f,h,m.FLOAT,!1,0,d*h*4)}else a.defaultAttributeValues&&(2===a.defaultAttributeValues[e].length?m.vertexAttrib2fv(f,a.defaultAttributeValues[e]):3===a.defaultAttributeValues[e].length&&m.vertexAttrib3fv(f,a.defaultAttributeValues[e]))}n()}
-function k(){for(var a=0,b=vb.length;a<b;a++)vb[a]=0}function l(a){vb[a]=1;0===bb[a]&&(m.enableVertexAttribArray(a),bb[a]=1)}function n(){for(var a=0,b=bb.length;a<b;a++)bb[a]!==vb[a]&&(m.disableVertexAttribArray(a),bb[a]=0)}function q(a,b){return a.z!==b.z?b.z-a.z:a.id-b.id}function r(a,b){return a.z!==b.z?a.z-b.z:a.id-b.id}function t(a,b){return b[0]-a[0]}function s(a,b,h){if(!1!==b.visible){var k=a.__webglObjects[b.id];if(k&&(!1===b.frustumCulled||!0===gc.intersectsObject(b))){var l=b.geometry,
+function k(){for(var a=0,b=sb.length;a<b;a++)sb[a]=0}function l(a){sb[a]=1;0===nb[a]&&(m.enableVertexAttribArray(a),nb[a]=1)}function n(){for(var a=0,b=nb.length;a<b;a++)nb[a]!==sb[a]&&(m.disableVertexAttribArray(a),nb[a]=0)}function q(a,b){return a.z!==b.z?b.z-a.z:a.id-b.id}function r(a,b){return a.z!==b.z?a.z-b.z:a.id-b.id}function t(a,b){return b[0]-a[0]}function s(a,b,h){if(!1!==b.visible){var k=a.__webglObjects[b.id];if(k&&(!1===b.frustumCulled||!0===gc.intersectsObject(b))){var l=b.geometry,
 n,r,p;if(l instanceof THREE.BufferGeometry){var q=m.DYNAMIC_DRAW,u=l.attributes,v,A;for(v in u)A=u[v],A.needsUpdate&&("index"===v?(m.bindBuffer(m.ELEMENT_ARRAY_BUFFER,A.buffer),m.bufferData(m.ELEMENT_ARRAY_BUFFER,A.array,q)):(m.bindBuffer(m.ARRAY_BUFFER,A.buffer),m.bufferData(m.ARRAY_BUFFER,A.array,q)),A.needsUpdate=!1)}else if(b instanceof THREE.Mesh){if(l.buffersNeedUpdate||l.groupsNeedUpdate)l instanceof THREE.BufferGeometry?g(l):b instanceof THREE.Mesh&&w(a,b,l);for(var z=0,B=l.geometryGroupsList.length;z<
-B;z++)if(n=l.geometryGroupsList[z],p=d(b,n),(l.buffersNeedUpdate||l.groupsNeedUpdate)&&c(n,b),r=p.attributes&&D(p),l.verticesNeedUpdate||l.morphTargetsNeedUpdate||l.elementsNeedUpdate||l.uvsNeedUpdate||l.normalsNeedUpdate||l.colorsNeedUpdate||l.tangentsNeedUpdate||r){var y=n,F=b,C=m.DYNAMIC_DRAW,G=!l.dynamic,J=p;if(y.__inittedArrays){var K=e(J),P=J.vertexColors?J.vertexColors:!1,M=f(J),Q=K===THREE.SmoothShading,E=void 0,H=void 0,O=void 0,L=void 0,ta=void 0,X=void 0,R=void 0,W=void 0,Y=void 0,Z=void 0,
-Ba=void 0,$=void 0,ba=void 0,ca=void 0,U=void 0,Ia=void 0,da=void 0,fa=void 0,ga=void 0,ja=void 0,Aa=void 0,La=void 0,ha=void 0,ia=void 0,qa=void 0,ma=void 0,oa=void 0,ra=void 0,Ga=void 0,S=void 0,Ja=void 0,Fa=void 0,Ha=void 0,Ka=void 0,na=void 0,Na=void 0,wa=void 0,Ca=void 0,Ma=void 0,Ta=void 0,cb=0,db=0,Xa=0,ab=0,bb=0,eb=0,Sa=0,sb=0,Ya=0,ua=0,Da=0,N=0,Ra=void 0,fb=y.__vertexArray,nb=y.__uvArray,ob=y.__uv2Array,wb=y.__normalArray,Ua=y.__tangentArray,gb=y.__colorArray,Va=y.__skinIndexArray,Wa=y.__skinWeightArray,
-ub=y.__morphTargetsArrays,vb=y.__morphNormalsArrays,rb=y.__webglCustomAttributesList,I=void 0,Tb=y.__faceArray,xb=y.__lineArray,Oa=F.geometry,Ib=Oa.elementsNeedUpdate,Db=Oa.uvsNeedUpdate,Lb=Oa.normalsNeedUpdate,Pb=Oa.tangentsNeedUpdate,Qb=Oa.colorsNeedUpdate,Sb=Oa.morphTargetsNeedUpdate,ic=Oa.vertices,ea=y.faces3,hb=Oa.faces,Hb=Oa.faceVertexUvs[0],Jb=Oa.faceVertexUvs[1],jc=Oa.skinIndices,Ub=Oa.skinWeights,Vb=Oa.morphTargets,Kb=Oa.morphNormals;if(Oa.verticesNeedUpdate){E=0;for(H=ea.length;E<H;E++)L=
-hb[ea[E]],$=ic[L.a],ba=ic[L.b],ca=ic[L.c],fb[db]=$.x,fb[db+1]=$.y,fb[db+2]=$.z,fb[db+3]=ba.x,fb[db+4]=ba.y,fb[db+5]=ba.z,fb[db+6]=ca.x,fb[db+7]=ca.y,fb[db+8]=ca.z,db+=9;m.bindBuffer(m.ARRAY_BUFFER,y.__webglVertexBuffer);m.bufferData(m.ARRAY_BUFFER,fb,C)}if(Sb)for(na=0,Na=Vb.length;na<Na;na++){E=Da=0;for(H=ea.length;E<H;E++)Ma=ea[E],L=hb[Ma],$=Vb[na].vertices[L.a],ba=Vb[na].vertices[L.b],ca=Vb[na].vertices[L.c],wa=ub[na],wa[Da]=$.x,wa[Da+1]=$.y,wa[Da+2]=$.z,wa[Da+3]=ba.x,wa[Da+4]=ba.y,wa[Da+5]=ba.z,
-wa[Da+6]=ca.x,wa[Da+7]=ca.y,wa[Da+8]=ca.z,J.morphNormals&&(Q?(Ta=Kb[na].vertexNormals[Ma],fa=Ta.a,ga=Ta.b,ja=Ta.c):ja=ga=fa=Kb[na].faceNormals[Ma],Ca=vb[na],Ca[Da]=fa.x,Ca[Da+1]=fa.y,Ca[Da+2]=fa.z,Ca[Da+3]=ga.x,Ca[Da+4]=ga.y,Ca[Da+5]=ga.z,Ca[Da+6]=ja.x,Ca[Da+7]=ja.y,Ca[Da+8]=ja.z),Da+=9;m.bindBuffer(m.ARRAY_BUFFER,y.__webglMorphTargetsBuffers[na]);m.bufferData(m.ARRAY_BUFFER,ub[na],C);J.morphNormals&&(m.bindBuffer(m.ARRAY_BUFFER,y.__webglMorphNormalsBuffers[na]),m.bufferData(m.ARRAY_BUFFER,vb[na],
-C))}if(Ub.length){E=0;for(H=ea.length;E<H;E++)L=hb[ea[E]],ia=Ub[L.a],qa=Ub[L.b],ma=Ub[L.c],Wa[ua]=ia.x,Wa[ua+1]=ia.y,Wa[ua+2]=ia.z,Wa[ua+3]=ia.w,Wa[ua+4]=qa.x,Wa[ua+5]=qa.y,Wa[ua+6]=qa.z,Wa[ua+7]=qa.w,Wa[ua+8]=ma.x,Wa[ua+9]=ma.y,Wa[ua+10]=ma.z,Wa[ua+11]=ma.w,oa=jc[L.a],ra=jc[L.b],Ga=jc[L.c],Va[ua]=oa.x,Va[ua+1]=oa.y,Va[ua+2]=oa.z,Va[ua+3]=oa.w,Va[ua+4]=ra.x,Va[ua+5]=ra.y,Va[ua+6]=ra.z,Va[ua+7]=ra.w,Va[ua+8]=Ga.x,Va[ua+9]=Ga.y,Va[ua+10]=Ga.z,Va[ua+11]=Ga.w,ua+=12;0<ua&&(m.bindBuffer(m.ARRAY_BUFFER,
-y.__webglSkinIndicesBuffer),m.bufferData(m.ARRAY_BUFFER,Va,C),m.bindBuffer(m.ARRAY_BUFFER,y.__webglSkinWeightsBuffer),m.bufferData(m.ARRAY_BUFFER,Wa,C))}if(Qb&&P){E=0;for(H=ea.length;E<H;E++)L=hb[ea[E]],R=L.vertexColors,W=L.color,3===R.length&&P===THREE.VertexColors?(Aa=R[0],La=R[1],ha=R[2]):ha=La=Aa=W,gb[Ya]=Aa.r,gb[Ya+1]=Aa.g,gb[Ya+2]=Aa.b,gb[Ya+3]=La.r,gb[Ya+4]=La.g,gb[Ya+5]=La.b,gb[Ya+6]=ha.r,gb[Ya+7]=ha.g,gb[Ya+8]=ha.b,Ya+=9;0<Ya&&(m.bindBuffer(m.ARRAY_BUFFER,y.__webglColorBuffer),m.bufferData(m.ARRAY_BUFFER,
-gb,C))}if(Pb&&Oa.hasTangents){E=0;for(H=ea.length;E<H;E++)L=hb[ea[E]],Y=L.vertexTangents,U=Y[0],Ia=Y[1],da=Y[2],Ua[Sa]=U.x,Ua[Sa+1]=U.y,Ua[Sa+2]=U.z,Ua[Sa+3]=U.w,Ua[Sa+4]=Ia.x,Ua[Sa+5]=Ia.y,Ua[Sa+6]=Ia.z,Ua[Sa+7]=Ia.w,Ua[Sa+8]=da.x,Ua[Sa+9]=da.y,Ua[Sa+10]=da.z,Ua[Sa+11]=da.w,Sa+=12;m.bindBuffer(m.ARRAY_BUFFER,y.__webglTangentBuffer);m.bufferData(m.ARRAY_BUFFER,Ua,C)}if(Lb&&K){E=0;for(H=ea.length;E<H;E++)if(L=hb[ea[E]],ta=L.vertexNormals,X=L.normal,3===ta.length&&Q)for(S=0;3>S;S++)Fa=ta[S],wb[eb]=
-Fa.x,wb[eb+1]=Fa.y,wb[eb+2]=Fa.z,eb+=3;else for(S=0;3>S;S++)wb[eb]=X.x,wb[eb+1]=X.y,wb[eb+2]=X.z,eb+=3;m.bindBuffer(m.ARRAY_BUFFER,y.__webglNormalBuffer);m.bufferData(m.ARRAY_BUFFER,wb,C)}if(Db&&Hb&&M){E=0;for(H=ea.length;E<H;E++)if(O=ea[E],Z=Hb[O],void 0!==Z)for(S=0;3>S;S++)Ha=Z[S],nb[Xa]=Ha.x,nb[Xa+1]=Ha.y,Xa+=2;0<Xa&&(m.bindBuffer(m.ARRAY_BUFFER,y.__webglUVBuffer),m.bufferData(m.ARRAY_BUFFER,nb,C))}if(Db&&Jb&&M){E=0;for(H=ea.length;E<H;E++)if(O=ea[E],Ba=Jb[O],void 0!==Ba)for(S=0;3>S;S++)Ka=Ba[S],
-ob[ab]=Ka.x,ob[ab+1]=Ka.y,ab+=2;0<ab&&(m.bindBuffer(m.ARRAY_BUFFER,y.__webglUV2Buffer),m.bufferData(m.ARRAY_BUFFER,ob,C))}if(Ib){E=0;for(H=ea.length;E<H;E++)Tb[bb]=cb,Tb[bb+1]=cb+1,Tb[bb+2]=cb+2,bb+=3,xb[sb]=cb,xb[sb+1]=cb+1,xb[sb+2]=cb,xb[sb+3]=cb+2,xb[sb+4]=cb+1,xb[sb+5]=cb+2,sb+=6,cb+=3;m.bindBuffer(m.ELEMENT_ARRAY_BUFFER,y.__webglFaceBuffer);m.bufferData(m.ELEMENT_ARRAY_BUFFER,Tb,C);m.bindBuffer(m.ELEMENT_ARRAY_BUFFER,y.__webglLineBuffer);m.bufferData(m.ELEMENT_ARRAY_BUFFER,xb,C)}if(rb)for(S=
-0,Ja=rb.length;S<Ja;S++)if(I=rb[S],I.__original.needsUpdate){N=0;if(1===I.size)if(void 0===I.boundTo||"vertices"===I.boundTo)for(E=0,H=ea.length;E<H;E++)L=hb[ea[E]],I.array[N]=I.value[L.a],I.array[N+1]=I.value[L.b],I.array[N+2]=I.value[L.c],N+=3;else{if("faces"===I.boundTo)for(E=0,H=ea.length;E<H;E++)Ra=I.value[ea[E]],I.array[N]=Ra,I.array[N+1]=Ra,I.array[N+2]=Ra,N+=3}else if(2===I.size)if(void 0===I.boundTo||"vertices"===I.boundTo)for(E=0,H=ea.length;E<H;E++)L=hb[ea[E]],$=I.value[L.a],ba=I.value[L.b],
-ca=I.value[L.c],I.array[N]=$.x,I.array[N+1]=$.y,I.array[N+2]=ba.x,I.array[N+3]=ba.y,I.array[N+4]=ca.x,I.array[N+5]=ca.y,N+=6;else{if("faces"===I.boundTo)for(E=0,H=ea.length;E<H;E++)ca=ba=$=Ra=I.value[ea[E]],I.array[N]=$.x,I.array[N+1]=$.y,I.array[N+2]=ba.x,I.array[N+3]=ba.y,I.array[N+4]=ca.x,I.array[N+5]=ca.y,N+=6}else if(3===I.size){var sa;sa="c"===I.type?["r","g","b"]:["x","y","z"];if(void 0===I.boundTo||"vertices"===I.boundTo)for(E=0,H=ea.length;E<H;E++)L=hb[ea[E]],$=I.value[L.a],ba=I.value[L.b],
-ca=I.value[L.c],I.array[N]=$[sa[0]],I.array[N+1]=$[sa[1]],I.array[N+2]=$[sa[2]],I.array[N+3]=ba[sa[0]],I.array[N+4]=ba[sa[1]],I.array[N+5]=ba[sa[2]],I.array[N+6]=ca[sa[0]],I.array[N+7]=ca[sa[1]],I.array[N+8]=ca[sa[2]],N+=9;else if("faces"===I.boundTo)for(E=0,H=ea.length;E<H;E++)ca=ba=$=Ra=I.value[ea[E]],I.array[N]=$[sa[0]],I.array[N+1]=$[sa[1]],I.array[N+2]=$[sa[2]],I.array[N+3]=ba[sa[0]],I.array[N+4]=ba[sa[1]],I.array[N+5]=ba[sa[2]],I.array[N+6]=ca[sa[0]],I.array[N+7]=ca[sa[1]],I.array[N+8]=ca[sa[2]],
-N+=9;else if("faceVertices"===I.boundTo)for(E=0,H=ea.length;E<H;E++)Ra=I.value[ea[E]],$=Ra[0],ba=Ra[1],ca=Ra[2],I.array[N]=$[sa[0]],I.array[N+1]=$[sa[1]],I.array[N+2]=$[sa[2]],I.array[N+3]=ba[sa[0]],I.array[N+4]=ba[sa[1]],I.array[N+5]=ba[sa[2]],I.array[N+6]=ca[sa[0]],I.array[N+7]=ca[sa[1]],I.array[N+8]=ca[sa[2]],N+=9}else if(4===I.size)if(void 0===I.boundTo||"vertices"===I.boundTo)for(E=0,H=ea.length;E<H;E++)L=hb[ea[E]],$=I.value[L.a],ba=I.value[L.b],ca=I.value[L.c],I.array[N]=$.x,I.array[N+1]=$.y,
-I.array[N+2]=$.z,I.array[N+3]=$.w,I.array[N+4]=ba.x,I.array[N+5]=ba.y,I.array[N+6]=ba.z,I.array[N+7]=ba.w,I.array[N+8]=ca.x,I.array[N+9]=ca.y,I.array[N+10]=ca.z,I.array[N+11]=ca.w,N+=12;else if("faces"===I.boundTo)for(E=0,H=ea.length;E<H;E++)ca=ba=$=Ra=I.value[ea[E]],I.array[N]=$.x,I.array[N+1]=$.y,I.array[N+2]=$.z,I.array[N+3]=$.w,I.array[N+4]=ba.x,I.array[N+5]=ba.y,I.array[N+6]=ba.z,I.array[N+7]=ba.w,I.array[N+8]=ca.x,I.array[N+9]=ca.y,I.array[N+10]=ca.z,I.array[N+11]=ca.w,N+=12;else if("faceVertices"===
-I.boundTo)for(E=0,H=ea.length;E<H;E++)Ra=I.value[ea[E]],$=Ra[0],ba=Ra[1],ca=Ra[2],I.array[N]=$.x,I.array[N+1]=$.y,I.array[N+2]=$.z,I.array[N+3]=$.w,I.array[N+4]=ba.x,I.array[N+5]=ba.y,I.array[N+6]=ba.z,I.array[N+7]=ba.w,I.array[N+8]=ca.x,I.array[N+9]=ca.y,I.array[N+10]=ca.z,I.array[N+11]=ca.w,N+=12;m.bindBuffer(m.ARRAY_BUFFER,I.buffer);m.bufferData(m.ARRAY_BUFFER,I.array,C)}G&&(delete y.__inittedArrays,delete y.__colorArray,delete y.__normalArray,delete y.__tangentArray,delete y.__uvArray,delete y.__uv2Array,
-delete y.__faceArray,delete y.__vertexArray,delete y.__lineArray,delete y.__skinIndexArray,delete y.__skinWeightArray)}}l.verticesNeedUpdate=!1;l.morphTargetsNeedUpdate=!1;l.elementsNeedUpdate=!1;l.uvsNeedUpdate=!1;l.normalsNeedUpdate=!1;l.colorsNeedUpdate=!1;l.tangentsNeedUpdate=!1;l.buffersNeedUpdate=!1;p.attributes&&x(p)}else if(b instanceof THREE.Line){p=d(b,l);r=p.attributes&&D(p);if(l.verticesNeedUpdate||l.colorsNeedUpdate||l.lineDistancesNeedUpdate||r){var Wb=m.DYNAMIC_DRAW,Eb,Fb,Gb,Xb,pa,
-Yb,Mb=l.vertices,Nb=l.colors,Ob=l.lineDistances,dc=Mb.length,ec=Nb.length,fc=Ob.length,Zb=l.__vertexArray,$b=l.__colorArray,tc=l.__lineDistanceArray,pc=l.colorsNeedUpdate,qc=l.lineDistancesNeedUpdate,kc=l.__webglCustomAttributesList,ac,uc,Ea,Bb,Pa,la;if(l.verticesNeedUpdate){for(Eb=0;Eb<dc;Eb++)Xb=Mb[Eb],pa=3*Eb,Zb[pa]=Xb.x,Zb[pa+1]=Xb.y,Zb[pa+2]=Xb.z;m.bindBuffer(m.ARRAY_BUFFER,l.__webglVertexBuffer);m.bufferData(m.ARRAY_BUFFER,Zb,Wb)}if(pc){for(Fb=0;Fb<ec;Fb++)Yb=Nb[Fb],pa=3*Fb,$b[pa]=Yb.r,$b[pa+
-1]=Yb.g,$b[pa+2]=Yb.b;m.bindBuffer(m.ARRAY_BUFFER,l.__webglColorBuffer);m.bufferData(m.ARRAY_BUFFER,$b,Wb)}if(qc){for(Gb=0;Gb<fc;Gb++)tc[Gb]=Ob[Gb];m.bindBuffer(m.ARRAY_BUFFER,l.__webglLineDistanceBuffer);m.bufferData(m.ARRAY_BUFFER,tc,Wb)}if(kc)for(ac=0,uc=kc.length;ac<uc;ac++)if(la=kc[ac],la.needsUpdate&&(void 0===la.boundTo||"vertices"===la.boundTo)){pa=0;Bb=la.value.length;if(1===la.size)for(Ea=0;Ea<Bb;Ea++)la.array[Ea]=la.value[Ea];else if(2===la.size)for(Ea=0;Ea<Bb;Ea++)Pa=la.value[Ea],la.array[pa]=
-Pa.x,la.array[pa+1]=Pa.y,pa+=2;else if(3===la.size)if("c"===la.type)for(Ea=0;Ea<Bb;Ea++)Pa=la.value[Ea],la.array[pa]=Pa.r,la.array[pa+1]=Pa.g,la.array[pa+2]=Pa.b,pa+=3;else for(Ea=0;Ea<Bb;Ea++)Pa=la.value[Ea],la.array[pa]=Pa.x,la.array[pa+1]=Pa.y,la.array[pa+2]=Pa.z,pa+=3;else if(4===la.size)for(Ea=0;Ea<Bb;Ea++)Pa=la.value[Ea],la.array[pa]=Pa.x,la.array[pa+1]=Pa.y,la.array[pa+2]=Pa.z,la.array[pa+3]=Pa.w,pa+=4;m.bindBuffer(m.ARRAY_BUFFER,la.buffer);m.bufferData(m.ARRAY_BUFFER,la.array,Wb)}}l.verticesNeedUpdate=
-!1;l.colorsNeedUpdate=!1;l.lineDistancesNeedUpdate=!1;p.attributes&&x(p)}else if(b instanceof THREE.PointCloud){p=d(b,l);r=p.attributes&&D(p);if(l.verticesNeedUpdate||l.colorsNeedUpdate||b.sortParticles||r){var lc=m.DYNAMIC_DRAW,Qa,ib,jb,V,kb,tb,bc=l.vertices,mc=bc.length,nc=l.colors,vc=nc.length,yb=l.__vertexArray,zb=l.__colorArray,pb=l.__sortArray,wc=l.verticesNeedUpdate,xc=l.colorsNeedUpdate,qb=l.__webglCustomAttributesList,Za,Cb,aa,$a,ka,T;if(b.sortParticles){hc.copy(Rb);hc.multiply(b.matrixWorld);
-for(Qa=0;Qa<mc;Qa++)jb=bc[Qa],xa.copy(jb),xa.applyProjection(hc),pb[Qa]=[xa.z,Qa];pb.sort(t);for(Qa=0;Qa<mc;Qa++)jb=bc[pb[Qa][1]],V=3*Qa,yb[V]=jb.x,yb[V+1]=jb.y,yb[V+2]=jb.z;for(ib=0;ib<vc;ib++)V=3*ib,tb=nc[pb[ib][1]],zb[V]=tb.r,zb[V+1]=tb.g,zb[V+2]=tb.b;if(qb)for(Za=0,Cb=qb.length;Za<Cb;Za++)if(T=qb[Za],void 0===T.boundTo||"vertices"===T.boundTo)if(V=0,$a=T.value.length,1===T.size)for(aa=0;aa<$a;aa++)kb=pb[aa][1],T.array[aa]=T.value[kb];else if(2===T.size)for(aa=0;aa<$a;aa++)kb=pb[aa][1],ka=T.value[kb],
-T.array[V]=ka.x,T.array[V+1]=ka.y,V+=2;else if(3===T.size)if("c"===T.type)for(aa=0;aa<$a;aa++)kb=pb[aa][1],ka=T.value[kb],T.array[V]=ka.r,T.array[V+1]=ka.g,T.array[V+2]=ka.b,V+=3;else for(aa=0;aa<$a;aa++)kb=pb[aa][1],ka=T.value[kb],T.array[V]=ka.x,T.array[V+1]=ka.y,T.array[V+2]=ka.z,V+=3;else if(4===T.size)for(aa=0;aa<$a;aa++)kb=pb[aa][1],ka=T.value[kb],T.array[V]=ka.x,T.array[V+1]=ka.y,T.array[V+2]=ka.z,T.array[V+3]=ka.w,V+=4}else{if(wc)for(Qa=0;Qa<mc;Qa++)jb=bc[Qa],V=3*Qa,yb[V]=jb.x,yb[V+1]=jb.y,
-yb[V+2]=jb.z;if(xc)for(ib=0;ib<vc;ib++)tb=nc[ib],V=3*ib,zb[V]=tb.r,zb[V+1]=tb.g,zb[V+2]=tb.b;if(qb)for(Za=0,Cb=qb.length;Za<Cb;Za++)if(T=qb[Za],T.needsUpdate&&(void 0===T.boundTo||"vertices"===T.boundTo))if($a=T.value.length,V=0,1===T.size)for(aa=0;aa<$a;aa++)T.array[aa]=T.value[aa];else if(2===T.size)for(aa=0;aa<$a;aa++)ka=T.value[aa],T.array[V]=ka.x,T.array[V+1]=ka.y,V+=2;else if(3===T.size)if("c"===T.type)for(aa=0;aa<$a;aa++)ka=T.value[aa],T.array[V]=ka.r,T.array[V+1]=ka.g,T.array[V+2]=ka.b,V+=
-3;else for(aa=0;aa<$a;aa++)ka=T.value[aa],T.array[V]=ka.x,T.array[V+1]=ka.y,T.array[V+2]=ka.z,V+=3;else if(4===T.size)for(aa=0;aa<$a;aa++)ka=T.value[aa],T.array[V]=ka.x,T.array[V+1]=ka.y,T.array[V+2]=ka.z,T.array[V+3]=ka.w,V+=4}if(wc||b.sortParticles)m.bindBuffer(m.ARRAY_BUFFER,l.__webglVertexBuffer),m.bufferData(m.ARRAY_BUFFER,yb,lc);if(xc||b.sortParticles)m.bindBuffer(m.ARRAY_BUFFER,l.__webglColorBuffer),m.bufferData(m.ARRAY_BUFFER,zb,lc);if(qb)for(Za=0,Cb=qb.length;Za<Cb;Za++)if(T=qb[Za],T.needsUpdate||
-b.sortParticles)m.bindBuffer(m.ARRAY_BUFFER,T.buffer),m.bufferData(m.ARRAY_BUFFER,T.array,lc)}l.verticesNeedUpdate=!1;l.colorsNeedUpdate=!1;p.attributes&&x(p)}for(var Ab=0,oc=k.length;Ab<oc;Ab++){var cc=k[Ab],lb=cc,yc=lb.object,rc=lb.buffer,sc=yc.geometry,mb=yc.material;mb instanceof THREE.MeshFaceMaterial?(mb=mb.materials[sc instanceof THREE.BufferGeometry?0:rc.materialIndex],mb.transparent?(lb.material=mb,ya.push(lb)):(lb.material=mb,va.push(lb))):mb&&(mb.transparent?(lb.material=mb,ya.push(lb)):
-(lb.material=mb,va.push(lb)));cc.render=!0;!0===za&&(null!==b.renderDepth?cc.z=b.renderDepth:(xa.setFromMatrixPosition(b.matrixWorld),xa.applyProjection(Rb),cc.z=xa.z))}}Ab=0;for(oc=b.children.length;Ab<oc;Ab++)s(a,b.children[Ab],h)}}function p(a,b,c){if(0!==a.length)for(var d=0,e=a.length;d<e;d++)Ca=Ia=null,Ba=Ga=ja=da=Ka=ra=Ja=-1,Xa=!0,a[d].render(b,c,Pb,Qb),Ca=Ia=null,Ba=Ga=ja=da=Ka=ra=Ja=-1,Xa=!0}function v(a,b,c,d,e,f){for(var g,h,k,m=a.length-1;-1!==m;m--){g=a[m];h=g.object;k=g.buffer;var l=
-h;l._modelViewMatrix.multiplyMatrices(b.matrixWorldInverse,l.matrixWorld);l._normalMatrix.getNormalMatrix(l._modelViewMatrix);if(f)g=f;else{g=g.material;if(!g)continue;e&&P.setBlending(g.blending,g.blendEquation,g.blendSrc,g.blendDst);P.setDepthTest(g.depthTest);P.setDepthWrite(g.depthWrite);E(g.polygonOffset,g.polygonOffsetFactor,g.polygonOffsetUnits)}P.setMaterialFaces(g);k instanceof THREE.BufferGeometry?P.renderBufferDirect(b,c,d,g,k,h):P.renderBuffer(b,c,d,g,k,h)}}function u(a,b,c,d,e,f,g){for(var h,
-k,m=0,l=a.length;m<l;m++)if(h=a[m],k=h.object,k.visible){if(g)h=g;else{h=h[b];if(!h)continue;f&&P.setBlending(h.blending,h.blendEquation,h.blendSrc,h.blendDst);P.setDepthTest(h.depthTest);P.setDepthWrite(h.depthWrite);E(h.polygonOffset,h.polygonOffsetFactor,h.polygonOffsetUnits)}P.renderImmediateObject(c,d,e,h,k)}}function w(a,b,d){var e,f=!1;e=b.material;if(void 0===d.geometryGroups||d.groupsNeedUpdate)delete a.__webglObjects[b.id],d.makeGroups(e instanceof THREE.MeshFaceMaterial,rb?4294967296:65535),
+B;z++)if(n=l.geometryGroupsList[z],p=d(b,n),(l.buffersNeedUpdate||l.groupsNeedUpdate)&&c(n,b),r=p.attributes&&D(p),l.verticesNeedUpdate||l.morphTargetsNeedUpdate||l.elementsNeedUpdate||l.uvsNeedUpdate||l.normalsNeedUpdate||l.colorsNeedUpdate||l.tangentsNeedUpdate||r){var y=n,F=b,C=m.DYNAMIC_DRAW,G=!l.dynamic,J=p;if(y.__inittedArrays){var K=e(J),P=J.vertexColors?J.vertexColors:!1,M=f(J),Q=K===THREE.SmoothShading,E=void 0,H=void 0,O=void 0,L=void 0,ra=void 0,X=void 0,R=void 0,V=void 0,Y=void 0,Z=void 0,
+Ca=void 0,$=void 0,ba=void 0,ca=void 0,T=void 0,Ja=void 0,W=void 0,ea=void 0,fa=void 0,ia=void 0,Ba=void 0,La=void 0,ga=void 0,ha=void 0,oa=void 0,la=void 0,pa=void 0,Fa=void 0,ta=void 0,Ia=void 0,Ka=void 0,Aa=void 0,Ga=void 0,Ha=void 0,ma=void 0,Ma=void 0,ua=void 0,wa=void 0,Ra=void 0,Na=void 0,cb=0,db=0,Ta=0,Ya=0,bb=0,eb=0,Ua=0,ub=0,Za=0,sa=0,Da=0,N=0,Sa=void 0,fb=y.__vertexArray,nb=y.__uvArray,ob=y.__uv2Array,xb=y.__normalArray,Va=y.__tangentArray,gb=y.__colorArray,Wa=y.__skinIndexArray,Xa=y.__skinWeightArray,
+tb=y.__morphTargetsArrays,wb=y.__morphNormalsArrays,sb=y.__webglCustomAttributesList,I=void 0,pb=y.__faceArray,yb=y.__lineArray,Oa=F.geometry,Jb=Oa.elementsNeedUpdate,Eb=Oa.uvsNeedUpdate,Mb=Oa.normalsNeedUpdate,Qb=Oa.tangentsNeedUpdate,Rb=Oa.colorsNeedUpdate,Tb=Oa.morphTargetsNeedUpdate,ic=Oa.vertices,da=y.faces3,hb=Oa.faces,Ib=Oa.faceVertexUvs[0],Kb=Oa.faceVertexUvs[1],jc=Oa.skinIndices,Ub=Oa.skinWeights,Vb=Oa.morphTargets,Lb=Oa.morphNormals;if(Oa.verticesNeedUpdate){E=0;for(H=da.length;E<H;E++)L=
+hb[da[E]],$=ic[L.a],ba=ic[L.b],ca=ic[L.c],fb[db]=$.x,fb[db+1]=$.y,fb[db+2]=$.z,fb[db+3]=ba.x,fb[db+4]=ba.y,fb[db+5]=ba.z,fb[db+6]=ca.x,fb[db+7]=ca.y,fb[db+8]=ca.z,db+=9;m.bindBuffer(m.ARRAY_BUFFER,y.__webglVertexBuffer);m.bufferData(m.ARRAY_BUFFER,fb,C)}if(Tb)for(ma=0,Ma=Vb.length;ma<Ma;ma++){E=Da=0;for(H=da.length;E<H;E++)Ra=da[E],L=hb[Ra],$=Vb[ma].vertices[L.a],ba=Vb[ma].vertices[L.b],ca=Vb[ma].vertices[L.c],ua=tb[ma],ua[Da]=$.x,ua[Da+1]=$.y,ua[Da+2]=$.z,ua[Da+3]=ba.x,ua[Da+4]=ba.y,ua[Da+5]=ba.z,
+ua[Da+6]=ca.x,ua[Da+7]=ca.y,ua[Da+8]=ca.z,J.morphNormals&&(Q?(Na=Lb[ma].vertexNormals[Ra],ea=Na.a,fa=Na.b,ia=Na.c):ia=fa=ea=Lb[ma].faceNormals[Ra],wa=wb[ma],wa[Da]=ea.x,wa[Da+1]=ea.y,wa[Da+2]=ea.z,wa[Da+3]=fa.x,wa[Da+4]=fa.y,wa[Da+5]=fa.z,wa[Da+6]=ia.x,wa[Da+7]=ia.y,wa[Da+8]=ia.z),Da+=9;m.bindBuffer(m.ARRAY_BUFFER,y.__webglMorphTargetsBuffers[ma]);m.bufferData(m.ARRAY_BUFFER,tb[ma],C);J.morphNormals&&(m.bindBuffer(m.ARRAY_BUFFER,y.__webglMorphNormalsBuffers[ma]),m.bufferData(m.ARRAY_BUFFER,wb[ma],
+C))}if(Ub.length){E=0;for(H=da.length;E<H;E++)L=hb[da[E]],ha=Ub[L.a],oa=Ub[L.b],la=Ub[L.c],Xa[sa]=ha.x,Xa[sa+1]=ha.y,Xa[sa+2]=ha.z,Xa[sa+3]=ha.w,Xa[sa+4]=oa.x,Xa[sa+5]=oa.y,Xa[sa+6]=oa.z,Xa[sa+7]=oa.w,Xa[sa+8]=la.x,Xa[sa+9]=la.y,Xa[sa+10]=la.z,Xa[sa+11]=la.w,pa=jc[L.a],Fa=jc[L.b],ta=jc[L.c],Wa[sa]=pa.x,Wa[sa+1]=pa.y,Wa[sa+2]=pa.z,Wa[sa+3]=pa.w,Wa[sa+4]=Fa.x,Wa[sa+5]=Fa.y,Wa[sa+6]=Fa.z,Wa[sa+7]=Fa.w,Wa[sa+8]=ta.x,Wa[sa+9]=ta.y,Wa[sa+10]=ta.z,Wa[sa+11]=ta.w,sa+=12;0<sa&&(m.bindBuffer(m.ARRAY_BUFFER,
+y.__webglSkinIndicesBuffer),m.bufferData(m.ARRAY_BUFFER,Wa,C),m.bindBuffer(m.ARRAY_BUFFER,y.__webglSkinWeightsBuffer),m.bufferData(m.ARRAY_BUFFER,Xa,C))}if(Rb&&P){E=0;for(H=da.length;E<H;E++)L=hb[da[E]],R=L.vertexColors,V=L.color,3===R.length&&P===THREE.VertexColors?(Ba=R[0],La=R[1],ga=R[2]):ga=La=Ba=V,gb[Za]=Ba.r,gb[Za+1]=Ba.g,gb[Za+2]=Ba.b,gb[Za+3]=La.r,gb[Za+4]=La.g,gb[Za+5]=La.b,gb[Za+6]=ga.r,gb[Za+7]=ga.g,gb[Za+8]=ga.b,Za+=9;0<Za&&(m.bindBuffer(m.ARRAY_BUFFER,y.__webglColorBuffer),m.bufferData(m.ARRAY_BUFFER,
+gb,C))}if(Qb&&Oa.hasTangents){E=0;for(H=da.length;E<H;E++)L=hb[da[E]],Y=L.vertexTangents,T=Y[0],Ja=Y[1],W=Y[2],Va[Ua]=T.x,Va[Ua+1]=T.y,Va[Ua+2]=T.z,Va[Ua+3]=T.w,Va[Ua+4]=Ja.x,Va[Ua+5]=Ja.y,Va[Ua+6]=Ja.z,Va[Ua+7]=Ja.w,Va[Ua+8]=W.x,Va[Ua+9]=W.y,Va[Ua+10]=W.z,Va[Ua+11]=W.w,Ua+=12;m.bindBuffer(m.ARRAY_BUFFER,y.__webglTangentBuffer);m.bufferData(m.ARRAY_BUFFER,Va,C)}if(Mb&&K){E=0;for(H=da.length;E<H;E++)if(L=hb[da[E]],ra=L.vertexNormals,X=L.normal,3===ra.length&&Q)for(Ia=0;3>Ia;Ia++)Aa=ra[Ia],xb[eb]=Aa.x,
+xb[eb+1]=Aa.y,xb[eb+2]=Aa.z,eb+=3;else for(Ia=0;3>Ia;Ia++)xb[eb]=X.x,xb[eb+1]=X.y,xb[eb+2]=X.z,eb+=3;m.bindBuffer(m.ARRAY_BUFFER,y.__webglNormalBuffer);m.bufferData(m.ARRAY_BUFFER,xb,C)}if(Eb&&Ib&&M){E=0;for(H=da.length;E<H;E++)if(O=da[E],Z=Ib[O],void 0!==Z)for(Ia=0;3>Ia;Ia++)Ga=Z[Ia],nb[Ta]=Ga.x,nb[Ta+1]=Ga.y,Ta+=2;0<Ta&&(m.bindBuffer(m.ARRAY_BUFFER,y.__webglUVBuffer),m.bufferData(m.ARRAY_BUFFER,nb,C))}if(Eb&&Kb&&M){E=0;for(H=da.length;E<H;E++)if(O=da[E],Ca=Kb[O],void 0!==Ca)for(Ia=0;3>Ia;Ia++)Ha=
+Ca[Ia],ob[Ya]=Ha.x,ob[Ya+1]=Ha.y,Ya+=2;0<Ya&&(m.bindBuffer(m.ARRAY_BUFFER,y.__webglUV2Buffer),m.bufferData(m.ARRAY_BUFFER,ob,C))}if(Jb){E=0;for(H=da.length;E<H;E++)pb[bb]=cb,pb[bb+1]=cb+1,pb[bb+2]=cb+2,bb+=3,yb[ub]=cb,yb[ub+1]=cb+1,yb[ub+2]=cb,yb[ub+3]=cb+2,yb[ub+4]=cb+1,yb[ub+5]=cb+2,ub+=6,cb+=3;m.bindBuffer(m.ELEMENT_ARRAY_BUFFER,y.__webglFaceBuffer);m.bufferData(m.ELEMENT_ARRAY_BUFFER,pb,C);m.bindBuffer(m.ELEMENT_ARRAY_BUFFER,y.__webglLineBuffer);m.bufferData(m.ELEMENT_ARRAY_BUFFER,yb,C)}if(sb)for(Ia=
+0,Ka=sb.length;Ia<Ka;Ia++)if(I=sb[Ia],I.__original.needsUpdate){N=0;if(1===I.size)if(void 0===I.boundTo||"vertices"===I.boundTo)for(E=0,H=da.length;E<H;E++)L=hb[da[E]],I.array[N]=I.value[L.a],I.array[N+1]=I.value[L.b],I.array[N+2]=I.value[L.c],N+=3;else{if("faces"===I.boundTo)for(E=0,H=da.length;E<H;E++)Sa=I.value[da[E]],I.array[N]=Sa,I.array[N+1]=Sa,I.array[N+2]=Sa,N+=3}else if(2===I.size)if(void 0===I.boundTo||"vertices"===I.boundTo)for(E=0,H=da.length;E<H;E++)L=hb[da[E]],$=I.value[L.a],ba=I.value[L.b],
+ca=I.value[L.c],I.array[N]=$.x,I.array[N+1]=$.y,I.array[N+2]=ba.x,I.array[N+3]=ba.y,I.array[N+4]=ca.x,I.array[N+5]=ca.y,N+=6;else{if("faces"===I.boundTo)for(E=0,H=da.length;E<H;E++)ca=ba=$=Sa=I.value[da[E]],I.array[N]=$.x,I.array[N+1]=$.y,I.array[N+2]=ba.x,I.array[N+3]=ba.y,I.array[N+4]=ca.x,I.array[N+5]=ca.y,N+=6}else if(3===I.size){var qa;qa="c"===I.type?["r","g","b"]:["x","y","z"];if(void 0===I.boundTo||"vertices"===I.boundTo)for(E=0,H=da.length;E<H;E++)L=hb[da[E]],$=I.value[L.a],ba=I.value[L.b],
+ca=I.value[L.c],I.array[N]=$[qa[0]],I.array[N+1]=$[qa[1]],I.array[N+2]=$[qa[2]],I.array[N+3]=ba[qa[0]],I.array[N+4]=ba[qa[1]],I.array[N+5]=ba[qa[2]],I.array[N+6]=ca[qa[0]],I.array[N+7]=ca[qa[1]],I.array[N+8]=ca[qa[2]],N+=9;else if("faces"===I.boundTo)for(E=0,H=da.length;E<H;E++)ca=ba=$=Sa=I.value[da[E]],I.array[N]=$[qa[0]],I.array[N+1]=$[qa[1]],I.array[N+2]=$[qa[2]],I.array[N+3]=ba[qa[0]],I.array[N+4]=ba[qa[1]],I.array[N+5]=ba[qa[2]],I.array[N+6]=ca[qa[0]],I.array[N+7]=ca[qa[1]],I.array[N+8]=ca[qa[2]],
+N+=9;else if("faceVertices"===I.boundTo)for(E=0,H=da.length;E<H;E++)Sa=I.value[da[E]],$=Sa[0],ba=Sa[1],ca=Sa[2],I.array[N]=$[qa[0]],I.array[N+1]=$[qa[1]],I.array[N+2]=$[qa[2]],I.array[N+3]=ba[qa[0]],I.array[N+4]=ba[qa[1]],I.array[N+5]=ba[qa[2]],I.array[N+6]=ca[qa[0]],I.array[N+7]=ca[qa[1]],I.array[N+8]=ca[qa[2]],N+=9}else if(4===I.size)if(void 0===I.boundTo||"vertices"===I.boundTo)for(E=0,H=da.length;E<H;E++)L=hb[da[E]],$=I.value[L.a],ba=I.value[L.b],ca=I.value[L.c],I.array[N]=$.x,I.array[N+1]=$.y,
+I.array[N+2]=$.z,I.array[N+3]=$.w,I.array[N+4]=ba.x,I.array[N+5]=ba.y,I.array[N+6]=ba.z,I.array[N+7]=ba.w,I.array[N+8]=ca.x,I.array[N+9]=ca.y,I.array[N+10]=ca.z,I.array[N+11]=ca.w,N+=12;else if("faces"===I.boundTo)for(E=0,H=da.length;E<H;E++)ca=ba=$=Sa=I.value[da[E]],I.array[N]=$.x,I.array[N+1]=$.y,I.array[N+2]=$.z,I.array[N+3]=$.w,I.array[N+4]=ba.x,I.array[N+5]=ba.y,I.array[N+6]=ba.z,I.array[N+7]=ba.w,I.array[N+8]=ca.x,I.array[N+9]=ca.y,I.array[N+10]=ca.z,I.array[N+11]=ca.w,N+=12;else if("faceVertices"===
+I.boundTo)for(E=0,H=da.length;E<H;E++)Sa=I.value[da[E]],$=Sa[0],ba=Sa[1],ca=Sa[2],I.array[N]=$.x,I.array[N+1]=$.y,I.array[N+2]=$.z,I.array[N+3]=$.w,I.array[N+4]=ba.x,I.array[N+5]=ba.y,I.array[N+6]=ba.z,I.array[N+7]=ba.w,I.array[N+8]=ca.x,I.array[N+9]=ca.y,I.array[N+10]=ca.z,I.array[N+11]=ca.w,N+=12;m.bindBuffer(m.ARRAY_BUFFER,I.buffer);m.bufferData(m.ARRAY_BUFFER,I.array,C)}G&&(delete y.__inittedArrays,delete y.__colorArray,delete y.__normalArray,delete y.__tangentArray,delete y.__uvArray,delete y.__uv2Array,
+delete y.__faceArray,delete y.__vertexArray,delete y.__lineArray,delete y.__skinIndexArray,delete y.__skinWeightArray)}}l.verticesNeedUpdate=!1;l.morphTargetsNeedUpdate=!1;l.elementsNeedUpdate=!1;l.uvsNeedUpdate=!1;l.normalsNeedUpdate=!1;l.colorsNeedUpdate=!1;l.tangentsNeedUpdate=!1;l.buffersNeedUpdate=!1;p.attributes&&x(p)}else if(b instanceof THREE.Line){p=d(b,l);r=p.attributes&&D(p);if(l.verticesNeedUpdate||l.colorsNeedUpdate||l.lineDistancesNeedUpdate||r){var Wb=m.DYNAMIC_DRAW,Fb,Gb,Hb,Xb,na,
+Yb,Nb=l.vertices,Ob=l.colors,Pb=l.lineDistances,dc=Nb.length,ec=Ob.length,fc=Pb.length,Zb=l.__vertexArray,$b=l.__colorArray,tc=l.__lineDistanceArray,pc=l.colorsNeedUpdate,qc=l.lineDistancesNeedUpdate,kc=l.__webglCustomAttributesList,ac,uc,Ea,Cb,Pa,ka;if(l.verticesNeedUpdate){for(Fb=0;Fb<dc;Fb++)Xb=Nb[Fb],na=3*Fb,Zb[na]=Xb.x,Zb[na+1]=Xb.y,Zb[na+2]=Xb.z;m.bindBuffer(m.ARRAY_BUFFER,l.__webglVertexBuffer);m.bufferData(m.ARRAY_BUFFER,Zb,Wb)}if(pc){for(Gb=0;Gb<ec;Gb++)Yb=Ob[Gb],na=3*Gb,$b[na]=Yb.r,$b[na+
+1]=Yb.g,$b[na+2]=Yb.b;m.bindBuffer(m.ARRAY_BUFFER,l.__webglColorBuffer);m.bufferData(m.ARRAY_BUFFER,$b,Wb)}if(qc){for(Hb=0;Hb<fc;Hb++)tc[Hb]=Pb[Hb];m.bindBuffer(m.ARRAY_BUFFER,l.__webglLineDistanceBuffer);m.bufferData(m.ARRAY_BUFFER,tc,Wb)}if(kc)for(ac=0,uc=kc.length;ac<uc;ac++)if(ka=kc[ac],ka.needsUpdate&&(void 0===ka.boundTo||"vertices"===ka.boundTo)){na=0;Cb=ka.value.length;if(1===ka.size)for(Ea=0;Ea<Cb;Ea++)ka.array[Ea]=ka.value[Ea];else if(2===ka.size)for(Ea=0;Ea<Cb;Ea++)Pa=ka.value[Ea],ka.array[na]=
+Pa.x,ka.array[na+1]=Pa.y,na+=2;else if(3===ka.size)if("c"===ka.type)for(Ea=0;Ea<Cb;Ea++)Pa=ka.value[Ea],ka.array[na]=Pa.r,ka.array[na+1]=Pa.g,ka.array[na+2]=Pa.b,na+=3;else for(Ea=0;Ea<Cb;Ea++)Pa=ka.value[Ea],ka.array[na]=Pa.x,ka.array[na+1]=Pa.y,ka.array[na+2]=Pa.z,na+=3;else if(4===ka.size)for(Ea=0;Ea<Cb;Ea++)Pa=ka.value[Ea],ka.array[na]=Pa.x,ka.array[na+1]=Pa.y,ka.array[na+2]=Pa.z,ka.array[na+3]=Pa.w,na+=4;m.bindBuffer(m.ARRAY_BUFFER,ka.buffer);m.bufferData(m.ARRAY_BUFFER,ka.array,Wb)}}l.verticesNeedUpdate=
+!1;l.colorsNeedUpdate=!1;l.lineDistancesNeedUpdate=!1;p.attributes&&x(p)}else if(b instanceof THREE.PointCloud){p=d(b,l);r=p.attributes&&D(p);if(l.verticesNeedUpdate||l.colorsNeedUpdate||b.sortParticles||r){var lc=m.DYNAMIC_DRAW,Qa,ib,jb,U,kb,vb,bc=l.vertices,mc=bc.length,nc=l.colors,vc=nc.length,zb=l.__vertexArray,Ab=l.__colorArray,qb=l.__sortArray,wc=l.verticesNeedUpdate,xc=l.colorsNeedUpdate,rb=l.__webglCustomAttributesList,$a,Db,aa,ab,ja,S;if(b.sortParticles){hc.copy(Sb);hc.multiply(b.matrixWorld);
+for(Qa=0;Qa<mc;Qa++)jb=bc[Qa],xa.copy(jb),xa.applyProjection(hc),qb[Qa]=[xa.z,Qa];qb.sort(t);for(Qa=0;Qa<mc;Qa++)jb=bc[qb[Qa][1]],U=3*Qa,zb[U]=jb.x,zb[U+1]=jb.y,zb[U+2]=jb.z;for(ib=0;ib<vc;ib++)U=3*ib,vb=nc[qb[ib][1]],Ab[U]=vb.r,Ab[U+1]=vb.g,Ab[U+2]=vb.b;if(rb)for($a=0,Db=rb.length;$a<Db;$a++)if(S=rb[$a],void 0===S.boundTo||"vertices"===S.boundTo)if(U=0,ab=S.value.length,1===S.size)for(aa=0;aa<ab;aa++)kb=qb[aa][1],S.array[aa]=S.value[kb];else if(2===S.size)for(aa=0;aa<ab;aa++)kb=qb[aa][1],ja=S.value[kb],
+S.array[U]=ja.x,S.array[U+1]=ja.y,U+=2;else if(3===S.size)if("c"===S.type)for(aa=0;aa<ab;aa++)kb=qb[aa][1],ja=S.value[kb],S.array[U]=ja.r,S.array[U+1]=ja.g,S.array[U+2]=ja.b,U+=3;else for(aa=0;aa<ab;aa++)kb=qb[aa][1],ja=S.value[kb],S.array[U]=ja.x,S.array[U+1]=ja.y,S.array[U+2]=ja.z,U+=3;else if(4===S.size)for(aa=0;aa<ab;aa++)kb=qb[aa][1],ja=S.value[kb],S.array[U]=ja.x,S.array[U+1]=ja.y,S.array[U+2]=ja.z,S.array[U+3]=ja.w,U+=4}else{if(wc)for(Qa=0;Qa<mc;Qa++)jb=bc[Qa],U=3*Qa,zb[U]=jb.x,zb[U+1]=jb.y,
+zb[U+2]=jb.z;if(xc)for(ib=0;ib<vc;ib++)vb=nc[ib],U=3*ib,Ab[U]=vb.r,Ab[U+1]=vb.g,Ab[U+2]=vb.b;if(rb)for($a=0,Db=rb.length;$a<Db;$a++)if(S=rb[$a],S.needsUpdate&&(void 0===S.boundTo||"vertices"===S.boundTo))if(ab=S.value.length,U=0,1===S.size)for(aa=0;aa<ab;aa++)S.array[aa]=S.value[aa];else if(2===S.size)for(aa=0;aa<ab;aa++)ja=S.value[aa],S.array[U]=ja.x,S.array[U+1]=ja.y,U+=2;else if(3===S.size)if("c"===S.type)for(aa=0;aa<ab;aa++)ja=S.value[aa],S.array[U]=ja.r,S.array[U+1]=ja.g,S.array[U+2]=ja.b,U+=
+3;else for(aa=0;aa<ab;aa++)ja=S.value[aa],S.array[U]=ja.x,S.array[U+1]=ja.y,S.array[U+2]=ja.z,U+=3;else if(4===S.size)for(aa=0;aa<ab;aa++)ja=S.value[aa],S.array[U]=ja.x,S.array[U+1]=ja.y,S.array[U+2]=ja.z,S.array[U+3]=ja.w,U+=4}if(wc||b.sortParticles)m.bindBuffer(m.ARRAY_BUFFER,l.__webglVertexBuffer),m.bufferData(m.ARRAY_BUFFER,zb,lc);if(xc||b.sortParticles)m.bindBuffer(m.ARRAY_BUFFER,l.__webglColorBuffer),m.bufferData(m.ARRAY_BUFFER,Ab,lc);if(rb)for($a=0,Db=rb.length;$a<Db;$a++)if(S=rb[$a],S.needsUpdate||
+b.sortParticles)m.bindBuffer(m.ARRAY_BUFFER,S.buffer),m.bufferData(m.ARRAY_BUFFER,S.array,lc)}l.verticesNeedUpdate=!1;l.colorsNeedUpdate=!1;p.attributes&&x(p)}for(var Bb=0,oc=k.length;Bb<oc;Bb++){var cc=k[Bb],lb=cc,yc=lb.object,rc=lb.buffer,sc=yc.geometry,mb=yc.material;mb instanceof THREE.MeshFaceMaterial?(mb=mb.materials[sc instanceof THREE.BufferGeometry?0:rc.materialIndex],mb.transparent?(lb.material=mb,ya.push(lb)):(lb.material=mb,va.push(lb))):mb&&(mb.transparent?(lb.material=mb,ya.push(lb)):
+(lb.material=mb,va.push(lb)));cc.render=!0;!0===za&&(null!==b.renderDepth?cc.z=b.renderDepth:(xa.setFromMatrixPosition(b.matrixWorld),xa.applyProjection(Sb),cc.z=xa.z))}}Bb=0;for(oc=b.children.length;Bb<oc;Bb++)s(a,b.children[Bb],h)}}function p(a,b,c){if(0!==a.length)for(var d=0,e=a.length;d<e;d++)Ra=Ja=null,Ca=Fa=ia=W=ma=pa=Ka=-1,Ya=!0,a[d].render(b,c,Qb,Rb),Ra=Ja=null,Ca=Fa=ia=W=ma=pa=Ka=-1,Ya=!0}function v(a,b,c,d,e,f){for(var g,h,k,m=a.length-1;-1!==m;m--){g=a[m];h=g.object;k=g.buffer;var l=h;
+l._modelViewMatrix.multiplyMatrices(b.matrixWorldInverse,l.matrixWorld);l._normalMatrix.getNormalMatrix(l._modelViewMatrix);if(f)g=f;else{g=g.material;if(!g)continue;e&&P.setBlending(g.blending,g.blendEquation,g.blendSrc,g.blendDst);P.setDepthTest(g.depthTest);P.setDepthWrite(g.depthWrite);E(g.polygonOffset,g.polygonOffsetFactor,g.polygonOffsetUnits)}P.setMaterialFaces(g);k instanceof THREE.BufferGeometry?P.renderBufferDirect(b,c,d,g,k,h):P.renderBuffer(b,c,d,g,k,h)}}function u(a,b,c,d,e,f,g){for(var h,
+k,m=0,l=a.length;m<l;m++)if(h=a[m],k=h.object,k.visible){if(g)h=g;else{h=h[b];if(!h)continue;f&&P.setBlending(h.blending,h.blendEquation,h.blendSrc,h.blendDst);P.setDepthTest(h.depthTest);P.setDepthWrite(h.depthWrite);E(h.polygonOffset,h.polygonOffsetFactor,h.polygonOffsetUnits)}P.renderImmediateObject(c,d,e,h,k)}}function w(a,b,d){var e,f=!1;e=b.material;if(void 0===d.geometryGroups||d.groupsNeedUpdate)delete a.__webglObjects[b.id],d.makeGroups(e instanceof THREE.MeshFaceMaterial,pb?4294967296:65535),
 d.groupsNeedUpdate=!1;for(var g=0,h=d.geometryGroupsList.length;g<h;g++){e=d.geometryGroupsList[g];if(e.__webglVertexBuffer)f=!1;else{f=e;f.__webglVertexBuffer=m.createBuffer();f.__webglNormalBuffer=m.createBuffer();f.__webglTangentBuffer=m.createBuffer();f.__webglColorBuffer=m.createBuffer();f.__webglUVBuffer=m.createBuffer();f.__webglUV2Buffer=m.createBuffer();f.__webglSkinIndicesBuffer=m.createBuffer();f.__webglSkinWeightsBuffer=m.createBuffer();f.__webglFaceBuffer=m.createBuffer();f.__webglLineBuffer=
 m.createBuffer();var k=void 0,l=void 0;if(f.numMorphTargets)for(f.__webglMorphTargetsBuffers=[],k=0,l=f.numMorphTargets;k<l;k++)f.__webglMorphTargetsBuffers.push(m.createBuffer());if(f.numMorphNormals)for(f.__webglMorphNormalsBuffers=[],k=0,l=f.numMorphNormals;k<l;k++)f.__webglMorphNormalsBuffers.push(m.createBuffer());P.info.memory.geometries++;c(e,b);d.verticesNeedUpdate=!0;d.morphTargetsNeedUpdate=!0;d.elementsNeedUpdate=!0;d.uvsNeedUpdate=!0;d.normalsNeedUpdate=!0;d.tangentsNeedUpdate=!0;f=d.colorsNeedUpdate=
 !0}(f||void 0===b.__webglActive)&&A(a.__webglObjects,e,b)}b.__webglActive=!0}function A(a,b,c){var d=c.id;a[d]=a[d]||[];a[d].push({id:d,buffer:b,object:c,material:null,z:0})}function D(a){for(var b in a.attributes)if(a.attributes[b].needsUpdate)return!0;return!1}function x(a){for(var b in a.attributes)a.attributes[b].needsUpdate=!1}function F(a,b){if(a instanceof THREE.Mesh||a instanceof THREE.PointCloud||a instanceof THREE.Line)delete b.__webglObjects[a.id];else if(a instanceof THREE.ImmediateRenderObject||
-a.immediateRenderCallback)for(var c=b.__webglObjectsImmediate,d=c.length-1;0<=d;d--)c[d].object===a&&c.splice(d,1);delete a.__webglActive}function B(a,b,c,d,e){qa=0;d.needsUpdate&&(d.program&&Hb(d),P.initMaterial(d,b,c,e),d.needsUpdate=!1);d.morphTargets&&!e.__webglMorphTargetInfluences&&(e.__webglMorphTargetInfluences=new Float32Array(P.maxMorphTargets));var f=!1,g=d.program,h=g.uniforms,k=d.uniforms;g.id!==Ia&&(m.useProgram(g.program),Ia=g.id,f=!0);d.id!==Ba&&(Ba=d.id,f=!0);if(f||a!==Ca)m.uniformMatrix4fv(h.projectionMatrix,
-!1,a.projectionMatrix.elements),fa&&m.uniform1f(h.logDepthBufFC,2/(Math.log(a.far+1)/Math.LN2)),a!==Ca&&(Ca=a);if(d.skinning)if(Ib&&e.skeleton.useVertexTexture){if(null!==h.boneTexture){var l=z();m.uniform1i(h.boneTexture,l);P.setTexture(e.skeleton.boneTexture,l)}null!==h.boneTextureWidth&&m.uniform1i(h.boneTextureWidth,e.skeleton.boneTextureWidth);null!==h.boneTextureHeight&&m.uniform1i(h.boneTextureHeight,e.skeleton.boneTextureHeight)}else null!==h.boneGlobalMatrices&&m.uniformMatrix4fv(h.boneGlobalMatrices,
-!1,e.skeleton.boneMatrices);if(f){c&&d.fog&&(k.fogColor.value=c.color,c instanceof THREE.Fog?(k.fogNear.value=c.near,k.fogFar.value=c.far):c instanceof THREE.FogExp2&&(k.fogDensity.value=c.density));if(d instanceof THREE.MeshPhongMaterial||d instanceof THREE.MeshLambertMaterial||d.lights){if(Xa){var n,p=l=0,r=0,q,s,t,u=Sb,w=u.directional.colors,v=u.directional.positions,x=u.point.colors,A=u.point.positions,D=u.point.distances,B=u.spot.colors,E=u.spot.positions,F=u.spot.distances,H=u.spot.directions,
-K=u.spot.anglesCos,L=u.spot.exponents,Q=u.hemi.skyColors,O=u.hemi.groundColors,ta=u.hemi.positions,X=0,R=0,W=0,$=0,Y=0,ya=0,va=0,Z=0,U=n=0;c=t=U=0;for(f=b.length;c<f;c++)if(n=b[c],!n.onlyShadow)if(q=n.color,s=n.intensity,t=n.distance,n instanceof THREE.AmbientLight)n.visible&&(P.gammaInput?(l+=q.r*q.r,p+=q.g*q.g,r+=q.b*q.b):(l+=q.r,p+=q.g,r+=q.b));else if(n instanceof THREE.DirectionalLight){if(Y+=1,n.visible&&(oa.setFromMatrixPosition(n.matrixWorld),xa.setFromMatrixPosition(n.target.matrixWorld),
-oa.sub(xa),oa.normalize(),0!==oa.x||0!==oa.y||0!==oa.z))n=3*X,v[n]=oa.x,v[n+1]=oa.y,v[n+2]=oa.z,P.gammaInput?C(w,n,q,s*s):y(w,n,q,s),X+=1}else n instanceof THREE.PointLight?(ya+=1,n.visible&&(U=3*R,P.gammaInput?C(x,U,q,s*s):y(x,U,q,s),xa.setFromMatrixPosition(n.matrixWorld),A[U]=xa.x,A[U+1]=xa.y,A[U+2]=xa.z,D[R]=t,R+=1)):n instanceof THREE.SpotLight?(va+=1,n.visible&&(U=3*W,P.gammaInput?C(B,U,q,s*s):y(B,U,q,s),xa.setFromMatrixPosition(n.matrixWorld),E[U]=xa.x,E[U+1]=xa.y,E[U+2]=xa.z,F[W]=t,oa.copy(xa),
-xa.setFromMatrixPosition(n.target.matrixWorld),oa.sub(xa),oa.normalize(),H[U]=oa.x,H[U+1]=oa.y,H[U+2]=oa.z,K[W]=Math.cos(n.angle),L[W]=n.exponent,W+=1)):n instanceof THREE.HemisphereLight&&(Z+=1,n.visible&&(oa.setFromMatrixPosition(n.matrixWorld),oa.normalize(),0!==oa.x||0!==oa.y||0!==oa.z))&&(t=3*$,ta[t]=oa.x,ta[t+1]=oa.y,ta[t+2]=oa.z,q=n.color,n=n.groundColor,P.gammaInput?(s*=s,C(Q,t,q,s),C(O,t,n,s)):(y(Q,t,q,s),y(O,t,n,s)),$+=1);c=3*X;for(f=Math.max(w.length,3*Y);c<f;c++)w[c]=0;c=3*R;for(f=Math.max(x.length,
-3*ya);c<f;c++)x[c]=0;c=3*W;for(f=Math.max(B.length,3*va);c<f;c++)B[c]=0;c=3*$;for(f=Math.max(Q.length,3*Z);c<f;c++)Q[c]=0;c=3*$;for(f=Math.max(O.length,3*Z);c<f;c++)O[c]=0;u.directional.length=X;u.point.length=R;u.spot.length=W;u.hemi.length=$;u.ambient[0]=l;u.ambient[1]=p;u.ambient[2]=r;Xa=!1}c=Sb;k.ambientLightColor.value=c.ambient;k.directionalLightColor.value=c.directional.colors;k.directionalLightDirection.value=c.directional.positions;k.pointLightColor.value=c.point.colors;k.pointLightPosition.value=
-c.point.positions;k.pointLightDistance.value=c.point.distances;k.spotLightColor.value=c.spot.colors;k.spotLightPosition.value=c.spot.positions;k.spotLightDistance.value=c.spot.distances;k.spotLightDirection.value=c.spot.directions;k.spotLightAngleCos.value=c.spot.anglesCos;k.spotLightExponent.value=c.spot.exponents;k.hemisphereLightSkyColor.value=c.hemi.skyColors;k.hemisphereLightGroundColor.value=c.hemi.groundColors;k.hemisphereLightDirection.value=c.hemi.positions}if(d instanceof THREE.MeshBasicMaterial||
-d instanceof THREE.MeshLambertMaterial||d instanceof THREE.MeshPhongMaterial){k.opacity.value=d.opacity;P.gammaInput?k.diffuse.value.copyGammaToLinear(d.color):k.diffuse.value=d.color;k.map.value=d.map;k.lightMap.value=d.lightMap;k.specularMap.value=d.specularMap;d.bumpMap&&(k.bumpMap.value=d.bumpMap,k.bumpScale.value=d.bumpScale);d.normalMap&&(k.normalMap.value=d.normalMap,k.normalScale.value.copy(d.normalScale));var S;d.map?S=d.map:d.specularMap?S=d.specularMap:d.normalMap?S=d.normalMap:d.bumpMap&&
-(S=d.bumpMap);void 0!==S&&(c=S.offset,S=S.repeat,k.offsetRepeat.value.set(c.x,c.y,S.x,S.y));k.envMap.value=d.envMap;k.flipEnvMap.value=d.envMap instanceof THREE.WebGLRenderTargetCube?1:-1;k.reflectivity.value=d.reflectivity;k.refractionRatio.value=d.refractionRatio;k.combine.value=d.combine;k.useRefract.value=d.envMap&&d.envMap.mapping instanceof THREE.CubeRefractionMapping}d instanceof THREE.LineBasicMaterial?(k.diffuse.value=d.color,k.opacity.value=d.opacity):d instanceof THREE.LineDashedMaterial?
-(k.diffuse.value=d.color,k.opacity.value=d.opacity,k.dashSize.value=d.dashSize,k.totalSize.value=d.dashSize+d.gapSize,k.scale.value=d.scale):d instanceof THREE.PointCloudMaterial?(k.psColor.value=d.color,k.opacity.value=d.opacity,k.size.value=d.size,k.scale.value=J.height/2,k.map.value=d.map):d instanceof THREE.MeshPhongMaterial?(k.shininess.value=d.shininess,P.gammaInput?(k.ambient.value.copyGammaToLinear(d.ambient),k.emissive.value.copyGammaToLinear(d.emissive),k.specular.value.copyGammaToLinear(d.specular)):
-(k.ambient.value=d.ambient,k.emissive.value=d.emissive,k.specular.value=d.specular),d.wrapAround&&k.wrapRGB.value.copy(d.wrapRGB)):d instanceof THREE.MeshLambertMaterial?(P.gammaInput?(k.ambient.value.copyGammaToLinear(d.ambient),k.emissive.value.copyGammaToLinear(d.emissive)):(k.ambient.value=d.ambient,k.emissive.value=d.emissive),d.wrapAround&&k.wrapRGB.value.copy(d.wrapRGB)):d instanceof THREE.MeshDepthMaterial?(k.mNear.value=a.near,k.mFar.value=a.far,k.opacity.value=d.opacity):d instanceof THREE.MeshNormalMaterial&&
-(k.opacity.value=d.opacity);if(e.receiveShadow&&!d._shadowPass&&k.shadowMatrix)for(c=S=0,f=b.length;c<f;c++)l=b[c],l.castShadow&&(l instanceof THREE.SpotLight||l instanceof THREE.DirectionalLight&&!l.shadowCascade)&&(k.shadowMap.value[S]=l.shadowMap,k.shadowMapSize.value[S]=l.shadowMapSize,k.shadowMatrix.value[S]=l.shadowMatrix,k.shadowDarkness.value[S]=l.shadowDarkness,k.shadowBias.value[S]=l.shadowBias,S++);b=d.uniformsList;k=0;for(S=b.length;k<S;k++)if(c=g.uniforms[b[k][1]])if(f=b[k][0],p=f.type,
-l=f.value,"i"===p)m.uniform1i(c,l);else if("f"===p)m.uniform1f(c,l);else if("v2"===p)m.uniform2f(c,l.x,l.y);else if("v3"===p)m.uniform3f(c,l.x,l.y,l.z);else if("v4"===p)m.uniform4f(c,l.x,l.y,l.z,l.w);else if("c"===p)m.uniform3f(c,l.r,l.g,l.b);else if("iv1"===p)m.uniform1iv(c,l);else if("iv"===p)m.uniform3iv(c,l);else if("fv1"===p)m.uniform1fv(c,l);else if("fv"===p)m.uniform3fv(c,l);else if("v2v"===p){void 0===f._array&&(f._array=new Float32Array(2*l.length));p=0;for(r=l.length;p<r;p++)u=2*p,f._array[u]=
-l[p].x,f._array[u+1]=l[p].y;m.uniform2fv(c,f._array)}else if("v3v"===p){void 0===f._array&&(f._array=new Float32Array(3*l.length));p=0;for(r=l.length;p<r;p++)u=3*p,f._array[u]=l[p].x,f._array[u+1]=l[p].y,f._array[u+2]=l[p].z;m.uniform3fv(c,f._array)}else if("v4v"===p){void 0===f._array&&(f._array=new Float32Array(4*l.length));p=0;for(r=l.length;p<r;p++)u=4*p,f._array[u]=l[p].x,f._array[u+1]=l[p].y,f._array[u+2]=l[p].z,f._array[u+3]=l[p].w;m.uniform4fv(c,f._array)}else if("m3"===p)m.uniformMatrix3fv(c,
-!1,l.elements);else if("m3v"===p){void 0===f._array&&(f._array=new Float32Array(9*l.length));p=0;for(r=l.length;p<r;p++)l[p].flattenToArrayOffset(f._array,9*p);m.uniformMatrix3fv(c,!1,f._array)}else if("m4"===p)m.uniformMatrix4fv(c,!1,l.elements);else if("m4v"===p){void 0===f._array&&(f._array=new Float32Array(16*l.length));p=0;for(r=l.length;p<r;p++)l[p].flattenToArrayOffset(f._array,16*p);m.uniformMatrix4fv(c,!1,f._array)}else if("t"===p){if(u=l,l=z(),m.uniform1i(c,l),u)if(u instanceof THREE.CubeTexture||
-u.image instanceof Array&&6===u.image.length){if(c=u,f=l,6===c.image.length)if(c.needsUpdate){c.image.__webglTextureCube||(c.addEventListener("dispose",Db),c.image.__webglTextureCube=m.createTexture(),P.info.memory.textures++);m.activeTexture(m.TEXTURE0+f);m.bindTexture(m.TEXTURE_CUBE_MAP,c.image.__webglTextureCube);m.pixelStorei(m.UNPACK_FLIP_Y_WEBGL,c.flipY);f=c instanceof THREE.CompressedTexture;l=[];for(p=0;6>p;p++)P.autoScaleCubemaps&&!f?(r=l,u=p,w=c.image[p],x=pc,w.width<=x&&w.height<=x||(A=
-Math.max(w.width,w.height),v=Math.floor(w.width*x/A),x=Math.floor(w.height*x/A),A=document.createElement("canvas"),A.width=v,A.height=x,A.getContext("2d").drawImage(w,0,0,w.width,w.height,0,0,v,x),w=A),r[u]=w):l[p]=c.image[p];p=l[0];r=THREE.Math.isPowerOfTwo(p.width)&&THREE.Math.isPowerOfTwo(p.height);u=G(c.format);w=G(c.type);M(m.TEXTURE_CUBE_MAP,c,r);for(p=0;6>p;p++)if(f)for(x=l[p].mipmaps,A=0,D=x.length;A<D;A++)v=x[A],c.format!==THREE.RGBAFormat?m.compressedTexImage2D(m.TEXTURE_CUBE_MAP_POSITIVE_X+
-p,A,u,v.width,v.height,0,v.data):m.texImage2D(m.TEXTURE_CUBE_MAP_POSITIVE_X+p,A,u,v.width,v.height,0,u,w,v.data);else m.texImage2D(m.TEXTURE_CUBE_MAP_POSITIVE_X+p,0,u,u,w,l[p]);c.generateMipmaps&&r&&m.generateMipmap(m.TEXTURE_CUBE_MAP);c.needsUpdate=!1;if(c.onUpdate)c.onUpdate()}else m.activeTexture(m.TEXTURE0+f),m.bindTexture(m.TEXTURE_CUBE_MAP,c.image.__webglTextureCube)}else u instanceof THREE.WebGLRenderTargetCube?(c=u,m.activeTexture(m.TEXTURE0+l),m.bindTexture(m.TEXTURE_CUBE_MAP,c.__webglTexture)):
-P.setTexture(u,l)}else if("tv"===p){void 0===f._array&&(f._array=[]);p=0;for(r=f.value.length;p<r;p++)f._array[p]=z();m.uniform1iv(c,f._array);p=0;for(r=f.value.length;p<r;p++)u=f.value[p],l=f._array[p],u&&P.setTexture(u,l)}else console.warn("THREE.WebGLRenderer: Unknown uniform type: "+p);(d instanceof THREE.ShaderMaterial||d instanceof THREE.MeshPhongMaterial||d.envMap)&&null!==h.cameraPosition&&(xa.setFromMatrixPosition(a.matrixWorld),m.uniform3f(h.cameraPosition,xa.x,xa.y,xa.z));(d instanceof
-THREE.MeshPhongMaterial||d instanceof THREE.MeshLambertMaterial||d instanceof THREE.ShaderMaterial||d.skinning)&&null!==h.viewMatrix&&m.uniformMatrix4fv(h.viewMatrix,!1,a.matrixWorldInverse.elements)}m.uniformMatrix4fv(h.modelViewMatrix,!1,e._modelViewMatrix.elements);h.normalMatrix&&m.uniformMatrix3fv(h.normalMatrix,!1,e._normalMatrix.elements);null!==h.modelMatrix&&m.uniformMatrix4fv(h.modelMatrix,!1,e.matrixWorld.elements);return g}function z(){var a=qa;a>=Jb&&console.warn("WebGLRenderer: trying to use "+
-a+" texture units while this GPU supports only "+Jb);qa+=1;return a}function C(a,b,c,d){a[b]=c.r*c.r*d;a[b+1]=c.g*c.g*d;a[b+2]=c.b*c.b*d}function y(a,b,c,d){a[b]=c.r*d;a[b+1]=c.g*d;a[b+2]=c.b*d}function Q(a){a!==ga&&(m.lineWidth(a),ga=a)}function E(a,b,c){na!==a&&(a?m.enable(m.POLYGON_OFFSET_FILL):m.disable(m.POLYGON_OFFSET_FILL),na=a);!a||Ma===b&&wa===c||(m.polygonOffset(b,c),Ma=b,wa=c)}function M(a,b,c){c?(m.texParameteri(a,m.TEXTURE_WRAP_S,G(b.wrapS)),m.texParameteri(a,m.TEXTURE_WRAP_T,G(b.wrapT)),
-m.texParameteri(a,m.TEXTURE_MAG_FILTER,G(b.magFilter)),m.texParameteri(a,m.TEXTURE_MIN_FILTER,G(b.minFilter))):(m.texParameteri(a,m.TEXTURE_WRAP_S,m.CLAMP_TO_EDGE),m.texParameteri(a,m.TEXTURE_WRAP_T,m.CLAMP_TO_EDGE),m.texParameteri(a,m.TEXTURE_MAG_FILTER,H(b.magFilter)),m.texParameteri(a,m.TEXTURE_MIN_FILTER,H(b.minFilter)));ab&&b.type!==THREE.FloatType&&(1<b.anisotropy||b.__oldAnisotropy)&&(m.texParameterf(a,ab.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(b.anisotropy,Kb)),b.__oldAnisotropy=b.anisotropy)}
-function W(a,b){m.bindRenderbuffer(m.RENDERBUFFER,a);b.depthBuffer&&!b.stencilBuffer?(m.renderbufferStorage(m.RENDERBUFFER,m.DEPTH_COMPONENT16,b.width,b.height),m.framebufferRenderbuffer(m.FRAMEBUFFER,m.DEPTH_ATTACHMENT,m.RENDERBUFFER,a)):b.depthBuffer&&b.stencilBuffer?(m.renderbufferStorage(m.RENDERBUFFER,m.DEPTH_STENCIL,b.width,b.height),m.framebufferRenderbuffer(m.FRAMEBUFFER,m.DEPTH_STENCIL_ATTACHMENT,m.RENDERBUFFER,a)):m.renderbufferStorage(m.RENDERBUFFER,m.RGBA4,b.width,b.height)}function H(a){return a===
-THREE.NearestFilter||a===THREE.NearestMipMapNearestFilter||a===THREE.NearestMipMapLinearFilter?m.NEAREST:m.LINEAR}function G(a){if(a===THREE.RepeatWrapping)return m.REPEAT;if(a===THREE.ClampToEdgeWrapping)return m.CLAMP_TO_EDGE;if(a===THREE.MirroredRepeatWrapping)return m.MIRRORED_REPEAT;if(a===THREE.NearestFilter)return m.NEAREST;if(a===THREE.NearestMipMapNearestFilter)return m.NEAREST_MIPMAP_NEAREST;if(a===THREE.NearestMipMapLinearFilter)return m.NEAREST_MIPMAP_LINEAR;if(a===THREE.LinearFilter)return m.LINEAR;
-if(a===THREE.LinearMipMapNearestFilter)return m.LINEAR_MIPMAP_NEAREST;if(a===THREE.LinearMipMapLinearFilter)return m.LINEAR_MIPMAP_LINEAR;if(a===THREE.UnsignedByteType)return m.UNSIGNED_BYTE;if(a===THREE.UnsignedShort4444Type)return m.UNSIGNED_SHORT_4_4_4_4;if(a===THREE.UnsignedShort5551Type)return m.UNSIGNED_SHORT_5_5_5_1;if(a===THREE.UnsignedShort565Type)return m.UNSIGNED_SHORT_5_6_5;if(a===THREE.ByteType)return m.BYTE;if(a===THREE.ShortType)return m.SHORT;if(a===THREE.UnsignedShortType)return m.UNSIGNED_SHORT;
-if(a===THREE.IntType)return m.INT;if(a===THREE.UnsignedIntType)return m.UNSIGNED_INT;if(a===THREE.FloatType)return m.FLOAT;if(a===THREE.AlphaFormat)return m.ALPHA;if(a===THREE.RGBFormat)return m.RGB;if(a===THREE.RGBAFormat)return m.RGBA;if(a===THREE.LuminanceFormat)return m.LUMINANCE;if(a===THREE.LuminanceAlphaFormat)return m.LUMINANCE_ALPHA;if(a===THREE.AddEquation)return m.FUNC_ADD;if(a===THREE.SubtractEquation)return m.FUNC_SUBTRACT;if(a===THREE.ReverseSubtractEquation)return m.FUNC_REVERSE_SUBTRACT;
-if(a===THREE.ZeroFactor)return m.ZERO;if(a===THREE.OneFactor)return m.ONE;if(a===THREE.SrcColorFactor)return m.SRC_COLOR;if(a===THREE.OneMinusSrcColorFactor)return m.ONE_MINUS_SRC_COLOR;if(a===THREE.SrcAlphaFactor)return m.SRC_ALPHA;if(a===THREE.OneMinusSrcAlphaFactor)return m.ONE_MINUS_SRC_ALPHA;if(a===THREE.DstAlphaFactor)return m.DST_ALPHA;if(a===THREE.OneMinusDstAlphaFactor)return m.ONE_MINUS_DST_ALPHA;if(a===THREE.DstColorFactor)return m.DST_COLOR;if(a===THREE.OneMinusDstColorFactor)return m.ONE_MINUS_DST_COLOR;
-if(a===THREE.SrcAlphaSaturateFactor)return m.SRC_ALPHA_SATURATE;if(void 0!==Ta){if(a===THREE.RGB_S3TC_DXT1_Format)return Ta.COMPRESSED_RGB_S3TC_DXT1_EXT;if(a===THREE.RGBA_S3TC_DXT1_Format)return Ta.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(a===THREE.RGBA_S3TC_DXT3_Format)return Ta.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(a===THREE.RGBA_S3TC_DXT5_Format)return Ta.COMPRESSED_RGBA_S3TC_DXT5_EXT}return 0}console.log("THREE.WebGLRenderer",THREE.REVISION);a=a||{};var J=void 0!==a.canvas?a.canvas:document.createElement("canvas"),
-K=void 0!==a.context?a.context:null,X=void 0!==a.precision?a.precision:"highp",L=void 0!==a.alpha?a.alpha:!1,ha=void 0!==a.depth?a.depth:!0,R=void 0!==a.stencil?a.stencil:!0,Z=void 0!==a.antialias?a.antialias:!1,O=void 0!==a.premultipliedAlpha?a.premultipliedAlpha:!0,ia=void 0!==a.preserveDrawingBuffer?a.preserveDrawingBuffer:!1,fa=void 0!==a.logarithmicDepthBuffer?a.logarithmicDepthBuffer:!1,Y=new THREE.Color(0),ta=0,va=[],ya=[],za=!0;this.domElement=J;this.context=null;this.devicePixelRatio=void 0!==
-a.devicePixelRatio?a.devicePixelRatio:void 0!==self.devicePixelRatio?self.devicePixelRatio:1;this.sortObjects=this.autoClearStencil=this.autoClearDepth=this.autoClearColor=this.autoClear=!0;this.shadowMapEnabled=this.gammaOutput=this.gammaInput=!1;this.shadowMapAutoUpdate=!0;this.shadowMapType=THREE.PCFShadowMap;this.shadowMapCullFace=THREE.CullFaceFront;this.shadowMapCascade=this.shadowMapDebug=!1;this.maxMorphTargets=8;this.maxMorphNormals=4;this.autoScaleCubemaps=!0;this.renderPluginsPre=[];this.renderPluginsPost=
-[];this.info={memory:{programs:0,geometries:0,textures:0},render:{calls:0,vertices:0,faces:0,points:0}};var P=this,Aa=[],Ia=null,La=null,Ba=-1,Ga=null,Ca=null,qa=0,da=-1,ja=-1,Ja=-1,S=-1,U=-1,ma=-1,ra=-1,Ka=-1,na=null,Ma=null,wa=null,ga=null,Fa=0,Ha=0,Na=J.width,ub=J.height,Pb=0,Qb=0,vb=new Uint8Array(16),bb=new Uint8Array(16),gc=new THREE.Frustum,Rb=new THREE.Matrix4,hc=new THREE.Matrix4,xa=new THREE.Vector3,oa=new THREE.Vector3,Xa=!0,Sb={ambient:[0,0,0],directional:{length:0,colors:[],positions:[]},
-point:{length:0,colors:[],positions:[],distances:[]},spot:{length:0,colors:[],positions:[],distances:[],directions:[],anglesCos:[],exponents:[]},hemi:{length:0,skyColors:[],groundColors:[],positions:[]}},m,nb,ob,ab,Ta,rb;(function(){try{var a={alpha:L,depth:ha,stencil:R,antialias:Z,premultipliedAlpha:O,preserveDrawingBuffer:ia};m=K||J.getContext("webgl",a)||J.getContext("experimental-webgl",a);if(null===m)throw"Error creating WebGL context.";}catch(b){console.error(b)}nb=m.getExtension("OES_texture_float");
-m.getExtension("OES_texture_float_linear");ob=m.getExtension("OES_standard_derivatives");ab=m.getExtension("EXT_texture_filter_anisotropic")||m.getExtension("MOZ_EXT_texture_filter_anisotropic")||m.getExtension("WEBKIT_EXT_texture_filter_anisotropic");Ta=m.getExtension("WEBGL_compressed_texture_s3tc")||m.getExtension("MOZ_WEBGL_compressed_texture_s3tc")||m.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc");rb=m.getExtension("OES_element_index_uint");null===nb&&console.log("THREE.WebGLRenderer: Float textures not supported.");
-null===ob&&console.log("THREE.WebGLRenderer: Standard derivatives not supported.");null===ab&&console.log("THREE.WebGLRenderer: Anisotropic texture filtering not supported.");null===Ta&&console.log("THREE.WebGLRenderer: S3TC compressed textures not supported.");null===rb&&console.log("THREE.WebGLRenderer: elementindex as unsigned integer not supported.");void 0===m.getShaderPrecisionFormat&&(m.getShaderPrecisionFormat=function(){return{rangeMin:1,rangeMax:1,precision:1}});fa&&m.getExtension("EXT_frag_depth")})();
-m.clearColor(0,0,0,1);m.clearDepth(1);m.clearStencil(0);m.enable(m.DEPTH_TEST);m.depthFunc(m.LEQUAL);m.frontFace(m.CCW);m.cullFace(m.BACK);m.enable(m.CULL_FACE);m.enable(m.BLEND);m.blendEquation(m.FUNC_ADD);m.blendFunc(m.SRC_ALPHA,m.ONE_MINUS_SRC_ALPHA);m.viewport(Fa,Ha,Na,ub);m.clearColor(Y.r,Y.g,Y.b,ta);this.context=m;var Jb=m.getParameter(m.MAX_TEXTURE_IMAGE_UNITS),qc=m.getParameter(m.MAX_VERTEX_TEXTURE_IMAGE_UNITS);m.getParameter(m.MAX_TEXTURE_SIZE);var pc=m.getParameter(m.MAX_CUBE_MAP_TEXTURE_SIZE),
-Kb=ab?m.getParameter(ab.MAX_TEXTURE_MAX_ANISOTROPY_EXT):0,Lb=0<qc,Ib=Lb&&nb;Ta&&m.getParameter(m.COMPRESSED_TEXTURE_FORMATS);var rc=m.getShaderPrecisionFormat(m.VERTEX_SHADER,m.HIGH_FLOAT),sc=m.getShaderPrecisionFormat(m.VERTEX_SHADER,m.MEDIUM_FLOAT);m.getShaderPrecisionFormat(m.VERTEX_SHADER,m.LOW_FLOAT);var zc=m.getShaderPrecisionFormat(m.FRAGMENT_SHADER,m.HIGH_FLOAT),Ac=m.getShaderPrecisionFormat(m.FRAGMENT_SHADER,m.MEDIUM_FLOAT);m.getShaderPrecisionFormat(m.FRAGMENT_SHADER,m.LOW_FLOAT);var Bc=
-0<rc.precision&&0<zc.precision,Mb=0<sc.precision&&0<Ac.precision;"highp"!==X||Bc||(Mb?(X="mediump",console.warn("THREE.WebGLRenderer: highp not supported, using mediump.")):(X="lowp",console.warn("THREE.WebGLRenderer: highp and mediump not supported, using lowp.")));"mediump"!==X||Mb||(X="lowp",console.warn("THREE.WebGLRenderer: mediump not supported, using lowp."));this.getContext=function(){return m};this.supportsVertexTextures=function(){return Lb};this.supportsFloatTextures=function(){return nb};
-this.supportsStandardDerivatives=function(){return ob};this.supportsCompressedTextureS3TC=function(){return Ta};this.getMaxAnisotropy=function(){return Kb};this.getPrecision=function(){return X};this.setSize=function(a,b,c){J.width=a*this.devicePixelRatio;J.height=b*this.devicePixelRatio;!1!==c&&(J.style.width=a+"px",J.style.height=b+"px");this.setViewport(0,0,a,b)};this.setViewport=function(a,b,c,d){Fa=a*this.devicePixelRatio;Ha=b*this.devicePixelRatio;Na=c*this.devicePixelRatio;ub=d*this.devicePixelRatio;
-m.viewport(Fa,Ha,Na,ub)};this.setScissor=function(a,b,c,d){m.scissor(a*this.devicePixelRatio,b*this.devicePixelRatio,c*this.devicePixelRatio,d*this.devicePixelRatio)};this.enableScissorTest=function(a){a?m.enable(m.SCISSOR_TEST):m.disable(m.SCISSOR_TEST)};this.setClearColor=function(a,b){Y.set(a);ta=void 0!==b?b:1;m.clearColor(Y.r,Y.g,Y.b,ta)};this.setClearColorHex=function(a,b){console.warn("THREE.WebGLRenderer: .setClearColorHex() is being removed. Use .setClearColor() instead.");this.setClearColor(a,
-b)};this.getClearColor=function(){return Y};this.getClearAlpha=function(){return ta};this.clear=function(a,b,c){var d=0;if(void 0===a||a)d|=m.COLOR_BUFFER_BIT;if(void 0===b||b)d|=m.DEPTH_BUFFER_BIT;if(void 0===c||c)d|=m.STENCIL_BUFFER_BIT;m.clear(d)};this.clearColor=function(){m.clear(m.COLOR_BUFFER_BIT)};this.clearDepth=function(){m.clear(m.DEPTH_BUFFER_BIT)};this.clearStencil=function(){m.clear(m.STENCIL_BUFFER_BIT)};this.clearTarget=function(a,b,c,d){this.setRenderTarget(a);this.clear(b,c,d)};
-this.addPostPlugin=function(a){a.init(this);this.renderPluginsPost.push(a)};this.addPrePlugin=function(a){a.init(this);this.renderPluginsPre.push(a)};this.updateShadowMap=function(a,b){Ia=null;Ba=Ga=Ka=ra=Ja=-1;Xa=!0;ja=da=-1;Nb(a);this.shadowMapPlugin.update(a,b)};var Ob=function(a){a=a.target;a.removeEventListener("dispose",Ob);a.__webglInit=void 0;if(a instanceof THREE.BufferGeometry){a=a.attributes;for(var b in a)void 0!==a[b].buffer&&m.deleteBuffer(a[b].buffer);P.info.memory.geometries--}else if(void 0!==
-a.geometryGroups){b=0;for(var c=a.geometryGroupsList.length;b<c;b++){var d=a.geometryGroupsList[b];if(void 0!==d.numMorphTargets)for(var e=0,f=d.numMorphTargets;e<f;e++)m.deleteBuffer(d.__webglMorphTargetsBuffers[e]);if(void 0!==d.numMorphNormals)for(e=0,f=d.numMorphNormals;e<f;e++)m.deleteBuffer(d.__webglMorphNormalsBuffers[e]);dc(d)}}else dc(a)},Db=function(a){a=a.target;a.removeEventListener("dispose",Db);a.image&&a.image.__webglTextureCube?m.deleteTexture(a.image.__webglTextureCube):a.__webglInit&&
-(a.__webglInit=!1,m.deleteTexture(a.__webglTexture));P.info.memory.textures--},ec=function(a){a=a.target;a.removeEventListener("dispose",ec);if(a&&a.__webglTexture)if(m.deleteTexture(a.__webglTexture),a instanceof THREE.WebGLRenderTargetCube)for(var b=0;6>b;b++)m.deleteFramebuffer(a.__webglFramebuffer[b]),m.deleteRenderbuffer(a.__webglRenderbuffer[b]);else m.deleteFramebuffer(a.__webglFramebuffer),m.deleteRenderbuffer(a.__webglRenderbuffer);P.info.memory.textures--},fc=function(a){a=a.target;a.removeEventListener("dispose",
-fc);Hb(a)},dc=function(a){void 0!==a.__webglVertexBuffer&&m.deleteBuffer(a.__webglVertexBuffer);void 0!==a.__webglNormalBuffer&&m.deleteBuffer(a.__webglNormalBuffer);void 0!==a.__webglTangentBuffer&&m.deleteBuffer(a.__webglTangentBuffer);void 0!==a.__webglColorBuffer&&m.deleteBuffer(a.__webglColorBuffer);void 0!==a.__webglUVBuffer&&m.deleteBuffer(a.__webglUVBuffer);void 0!==a.__webglUV2Buffer&&m.deleteBuffer(a.__webglUV2Buffer);void 0!==a.__webglSkinIndicesBuffer&&m.deleteBuffer(a.__webglSkinIndicesBuffer);
-void 0!==a.__webglSkinWeightsBuffer&&m.deleteBuffer(a.__webglSkinWeightsBuffer);void 0!==a.__webglFaceBuffer&&m.deleteBuffer(a.__webglFaceBuffer);void 0!==a.__webglLineBuffer&&m.deleteBuffer(a.__webglLineBuffer);void 0!==a.__webglLineDistanceBuffer&&m.deleteBuffer(a.__webglLineDistanceBuffer);if(void 0!==a.__webglCustomAttributesList)for(var b in a.__webglCustomAttributesList)m.deleteBuffer(a.__webglCustomAttributesList[b].buffer);P.info.memory.geometries--},Hb=function(a){var b=a.program.program;
-if(void 0!==b){a.program=void 0;var c,d,e=!1;a=0;for(c=Aa.length;a<c;a++)if(d=Aa[a],d.program===b){d.usedTimes--;0===d.usedTimes&&(e=!0);break}if(!0===e){e=[];a=0;for(c=Aa.length;a<c;a++)d=Aa[a],d.program!==b&&e.push(d);Aa=e;m.deleteProgram(b);P.info.memory.programs--}}};this.renderBufferImmediate=function(a,b,c){k();a.hasPositions&&!a.__webglVertexBuffer&&(a.__webglVertexBuffer=m.createBuffer());a.hasNormals&&!a.__webglNormalBuffer&&(a.__webglNormalBuffer=m.createBuffer());a.hasUvs&&!a.__webglUvBuffer&&
-(a.__webglUvBuffer=m.createBuffer());a.hasColors&&!a.__webglColorBuffer&&(a.__webglColorBuffer=m.createBuffer());a.hasPositions&&(m.bindBuffer(m.ARRAY_BUFFER,a.__webglVertexBuffer),m.bufferData(m.ARRAY_BUFFER,a.positionArray,m.DYNAMIC_DRAW),l(b.attributes.position),m.vertexAttribPointer(b.attributes.position,3,m.FLOAT,!1,0,0));if(a.hasNormals){m.bindBuffer(m.ARRAY_BUFFER,a.__webglNormalBuffer);if(c.shading===THREE.FlatShading){var d,e,f,g,h,p,r,q,s,t,u,w=3*a.count;for(u=0;u<w;u+=9)t=a.normalArray,
-d=t[u],e=t[u+1],f=t[u+2],g=t[u+3],p=t[u+4],q=t[u+5],h=t[u+6],r=t[u+7],s=t[u+8],d=(d+g+h)/3,e=(e+p+r)/3,f=(f+q+s)/3,t[u]=d,t[u+1]=e,t[u+2]=f,t[u+3]=d,t[u+4]=e,t[u+5]=f,t[u+6]=d,t[u+7]=e,t[u+8]=f}m.bufferData(m.ARRAY_BUFFER,a.normalArray,m.DYNAMIC_DRAW);l(b.attributes.normal);m.vertexAttribPointer(b.attributes.normal,3,m.FLOAT,!1,0,0)}a.hasUvs&&c.map&&(m.bindBuffer(m.ARRAY_BUFFER,a.__webglUvBuffer),m.bufferData(m.ARRAY_BUFFER,a.uvArray,m.DYNAMIC_DRAW),l(b.attributes.uv),m.vertexAttribPointer(b.attributes.uv,
-2,m.FLOAT,!1,0,0));a.hasColors&&c.vertexColors!==THREE.NoColors&&(m.bindBuffer(m.ARRAY_BUFFER,a.__webglColorBuffer),m.bufferData(m.ARRAY_BUFFER,a.colorArray,m.DYNAMIC_DRAW),l(b.attributes.color),m.vertexAttribPointer(b.attributes.color,3,m.FLOAT,!1,0,0));n();m.drawArrays(m.TRIANGLES,0,a.count);a.count=0};this.renderBufferDirect=function(a,b,c,d,e,f){if(!1!==d.visible){var g=B(a,b,c,d,f);a=g.attributes;b=e.attributes;c=!1;g=16777215*e.id+2*g.id+(d.wireframe?1:0);g!==Ga&&(Ga=g,c=!0);c&&k();if(f instanceof
-THREE.Mesh)if(g=b.index){var l,n;g.array instanceof Uint32Array?(l=m.UNSIGNED_INT,n=4):(l=m.UNSIGNED_SHORT,n=2);e=e.offsets;if(0===e.length)c&&(h(d,a,b,0),m.bindBuffer(m.ELEMENT_ARRAY_BUFFER,g.buffer)),m.drawElements(m.TRIANGLES,g.array.length,l,0),P.info.render.calls++,P.info.render.vertices+=g.array.length,P.info.render.faces+=g.array.length/3;else{c=!0;for(var p=0,r=e.length;p<r;p++){var q=e[p].index;c&&(h(d,a,b,q),m.bindBuffer(m.ELEMENT_ARRAY_BUFFER,g.buffer));m.drawElements(m.TRIANGLES,e[p].count,
-l,e[p].start*n);P.info.render.calls++;P.info.render.vertices+=e[p].count;P.info.render.faces+=e[p].count/3}}}else c&&h(d,a,b,0),d=e.attributes.position,m.drawArrays(m.TRIANGLES,0,d.array.length/3),P.info.render.calls++,P.info.render.vertices+=d.array.length/3,P.info.render.faces+=d.array.length/9;else if(f instanceof THREE.PointCloud)c&&h(d,a,b,0),d=b.position,m.drawArrays(m.POINTS,0,d.array.length/3),P.info.render.calls++,P.info.render.points+=d.array.length/3;else if(f instanceof THREE.Line)if(f=
-f.type===THREE.LineStrip?m.LINE_STRIP:m.LINES,Q(d.linewidth),g=b.index)if(g.array instanceof Uint32Array?(l=m.UNSIGNED_INT,n=4):(l=m.UNSIGNED_SHORT,n=2),e=e.offsets,0===e.length)c&&(h(d,a,b,0),m.bindBuffer(m.ELEMENT_ARRAY_BUFFER,g.buffer)),m.drawElements(f,g.array.length,l,0),P.info.render.calls++,P.info.render.vertices+=g.array.length;else for(1<e.length&&(c=!0),p=0,r=e.length;p<r;p++)q=e[p].index,c&&(h(d,a,b,q),m.bindBuffer(m.ELEMENT_ARRAY_BUFFER,g.buffer)),m.drawElements(f,e[p].count,l,e[p].start*
-n),P.info.render.calls++,P.info.render.vertices+=e[p].count;else c&&h(d,a,b,0),d=b.position,m.drawArrays(f,0,d.array.length/3),P.info.render.calls++,P.info.render.points+=d.array.length/3}};this.renderBuffer=function(a,b,c,d,e,f){if(!1!==d.visible){var g,h;c=B(a,b,c,d,f);b=c.attributes;a=!1;c=16777215*e.id+2*c.id+(d.wireframe?1:0);c!==Ga&&(Ga=c,a=!0);a&&k();if(!d.morphTargets&&0<=b.position)a&&(m.bindBuffer(m.ARRAY_BUFFER,e.__webglVertexBuffer),l(b.position),m.vertexAttribPointer(b.position,3,m.FLOAT,
-!1,0,0));else if(f.morphTargetBase){c=d.program.attributes;-1!==f.morphTargetBase&&0<=c.position?(m.bindBuffer(m.ARRAY_BUFFER,e.__webglMorphTargetsBuffers[f.morphTargetBase]),l(c.position),m.vertexAttribPointer(c.position,3,m.FLOAT,!1,0,0)):0<=c.position&&(m.bindBuffer(m.ARRAY_BUFFER,e.__webglVertexBuffer),l(c.position),m.vertexAttribPointer(c.position,3,m.FLOAT,!1,0,0));if(f.morphTargetForcedOrder.length){var p=0;h=f.morphTargetForcedOrder;for(g=f.morphTargetInfluences;p<d.numSupportedMorphTargets&&
-p<h.length;)0<=c["morphTarget"+p]&&(m.bindBuffer(m.ARRAY_BUFFER,e.__webglMorphTargetsBuffers[h[p]]),l(c["morphTarget"+p]),m.vertexAttribPointer(c["morphTarget"+p],3,m.FLOAT,!1,0,0)),0<=c["morphNormal"+p]&&d.morphNormals&&(m.bindBuffer(m.ARRAY_BUFFER,e.__webglMorphNormalsBuffers[h[p]]),l(c["morphNormal"+p]),m.vertexAttribPointer(c["morphNormal"+p],3,m.FLOAT,!1,0,0)),f.__webglMorphTargetInfluences[p]=g[h[p]],p++}else{h=[];g=f.morphTargetInfluences;var r,q=g.length;for(r=0;r<q;r++)p=g[r],0<p&&h.push([p,
-r]);h.length>d.numSupportedMorphTargets?(h.sort(t),h.length=d.numSupportedMorphTargets):h.length>d.numSupportedMorphNormals?h.sort(t):0===h.length&&h.push([0,0]);for(p=0;p<d.numSupportedMorphTargets;)h[p]?(r=h[p][1],0<=c["morphTarget"+p]&&(m.bindBuffer(m.ARRAY_BUFFER,e.__webglMorphTargetsBuffers[r]),l(c["morphTarget"+p]),m.vertexAttribPointer(c["morphTarget"+p],3,m.FLOAT,!1,0,0)),0<=c["morphNormal"+p]&&d.morphNormals&&(m.bindBuffer(m.ARRAY_BUFFER,e.__webglMorphNormalsBuffers[r]),l(c["morphNormal"+
-p]),m.vertexAttribPointer(c["morphNormal"+p],3,m.FLOAT,!1,0,0)),f.__webglMorphTargetInfluences[p]=g[r]):f.__webglMorphTargetInfluences[p]=0,p++}null!==d.program.uniforms.morphTargetInfluences&&m.uniform1fv(d.program.uniforms.morphTargetInfluences,f.__webglMorphTargetInfluences)}if(a){if(e.__webglCustomAttributesList)for(g=0,h=e.__webglCustomAttributesList.length;g<h;g++)c=e.__webglCustomAttributesList[g],0<=b[c.buffer.belongsToAttribute]&&(m.bindBuffer(m.ARRAY_BUFFER,c.buffer),l(b[c.buffer.belongsToAttribute]),
-m.vertexAttribPointer(b[c.buffer.belongsToAttribute],c.size,m.FLOAT,!1,0,0));0<=b.color&&(0<f.geometry.colors.length||0<f.geometry.faces.length?(m.bindBuffer(m.ARRAY_BUFFER,e.__webglColorBuffer),l(b.color),m.vertexAttribPointer(b.color,3,m.FLOAT,!1,0,0)):d.defaultAttributeValues&&m.vertexAttrib3fv(b.color,d.defaultAttributeValues.color));0<=b.normal&&(m.bindBuffer(m.ARRAY_BUFFER,e.__webglNormalBuffer),l(b.normal),m.vertexAttribPointer(b.normal,3,m.FLOAT,!1,0,0));0<=b.tangent&&(m.bindBuffer(m.ARRAY_BUFFER,
-e.__webglTangentBuffer),l(b.tangent),m.vertexAttribPointer(b.tangent,4,m.FLOAT,!1,0,0));0<=b.uv&&(f.geometry.faceVertexUvs[0]?(m.bindBuffer(m.ARRAY_BUFFER,e.__webglUVBuffer),l(b.uv),m.vertexAttribPointer(b.uv,2,m.FLOAT,!1,0,0)):d.defaultAttributeValues&&m.vertexAttrib2fv(b.uv,d.defaultAttributeValues.uv));0<=b.uv2&&(f.geometry.faceVertexUvs[1]?(m.bindBuffer(m.ARRAY_BUFFER,e.__webglUV2Buffer),l(b.uv2),m.vertexAttribPointer(b.uv2,2,m.FLOAT,!1,0,0)):d.defaultAttributeValues&&m.vertexAttrib2fv(b.uv2,
-d.defaultAttributeValues.uv2));d.skinning&&0<=b.skinIndex&&0<=b.skinWeight&&(m.bindBuffer(m.ARRAY_BUFFER,e.__webglSkinIndicesBuffer),l(b.skinIndex),m.vertexAttribPointer(b.skinIndex,4,m.FLOAT,!1,0,0),m.bindBuffer(m.ARRAY_BUFFER,e.__webglSkinWeightsBuffer),l(b.skinWeight),m.vertexAttribPointer(b.skinWeight,4,m.FLOAT,!1,0,0));0<=b.lineDistance&&(m.bindBuffer(m.ARRAY_BUFFER,e.__webglLineDistanceBuffer),l(b.lineDistance),m.vertexAttribPointer(b.lineDistance,1,m.FLOAT,!1,0,0))}n();f instanceof THREE.Mesh?
-(f=e.__typeArray===Uint32Array?m.UNSIGNED_INT:m.UNSIGNED_SHORT,d.wireframe?(Q(d.wireframeLinewidth),a&&m.bindBuffer(m.ELEMENT_ARRAY_BUFFER,e.__webglLineBuffer),m.drawElements(m.LINES,e.__webglLineCount,f,0)):(a&&m.bindBuffer(m.ELEMENT_ARRAY_BUFFER,e.__webglFaceBuffer),m.drawElements(m.TRIANGLES,e.__webglFaceCount,f,0)),P.info.render.calls++,P.info.render.vertices+=e.__webglFaceCount,P.info.render.faces+=e.__webglFaceCount/3):f instanceof THREE.Line?(f=f.type===THREE.LineStrip?m.LINE_STRIP:m.LINES,
-Q(d.linewidth),m.drawArrays(f,0,e.__webglLineCount),P.info.render.calls++):f instanceof THREE.PointCloud&&(m.drawArrays(m.POINTS,0,e.__webglParticleCount),P.info.render.calls++,P.info.render.points+=e.__webglParticleCount)}};this.render=function(a,b,c,d){if(!1===b instanceof THREE.Camera)console.error("THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.");else{var e,f,g,h,k=a.__lights,l=a.fog;Ba=-1;Xa=!0;!0===a.autoUpdate&&a.updateMatrixWorld();void 0===b.parent&&b.updateMatrixWorld();
-b.matrixWorldInverse.getInverse(b.matrixWorld);Rb.multiplyMatrices(b.projectionMatrix,b.matrixWorldInverse);gc.setFromMatrix(Rb);Nb(a);va.length=0;ya.length=0;za=this.sortObjects;s(a,a,b);this.sortObjects&&(va.sort(q),ya.sort(r));p(this.renderPluginsPre,a,b);P.info.render.calls=0;P.info.render.vertices=0;P.info.render.faces=0;P.info.render.points=0;this.setRenderTarget(c);(this.autoClear||d)&&this.clear(this.autoClearColor,this.autoClearDepth,this.autoClearStencil);h=a.__webglObjectsImmediate;d=0;
-for(e=h.length;d<e;d++)f=h[d],g=f.object,g.visible&&(g._modelViewMatrix.multiplyMatrices(b.matrixWorldInverse,g.matrixWorld),g._normalMatrix.getNormalMatrix(g._modelViewMatrix),g=f.object.material,g.transparent?(f.transparent=g,f.opaque=null):(f.opaque=g,f.transparent=null));a.overrideMaterial?(d=a.overrideMaterial,this.setBlending(d.blending,d.blendEquation,d.blendSrc,d.blendDst),this.setDepthTest(d.depthTest),this.setDepthWrite(d.depthWrite),E(d.polygonOffset,d.polygonOffsetFactor,d.polygonOffsetUnits),
-v(va,b,k,l,!0,d),v(ya,b,k,l,!0,d),u(a.__webglObjectsImmediate,"",b,k,l,!1,d)):(d=null,this.setBlending(THREE.NoBlending),v(va,b,k,l,!1,d),u(a.__webglObjectsImmediate,"opaque",b,k,l,!1,d),v(ya,b,k,l,!0,d),u(a.__webglObjectsImmediate,"transparent",b,k,l,!0,d));p(this.renderPluginsPost,a,b);c&&c.generateMipmaps&&c.minFilter!==THREE.NearestFilter&&c.minFilter!==THREE.LinearFilter&&(c instanceof THREE.WebGLRenderTargetCube?(m.bindTexture(m.TEXTURE_CUBE_MAP,c.__webglTexture),m.generateMipmap(m.TEXTURE_CUBE_MAP),
-m.bindTexture(m.TEXTURE_CUBE_MAP,null)):(m.bindTexture(m.TEXTURE_2D,c.__webglTexture),m.generateMipmap(m.TEXTURE_2D),m.bindTexture(m.TEXTURE_2D,null)));this.setDepthTest(!0);this.setDepthWrite(!0)}};this.renderImmediateObject=function(a,b,c,d,e){var f=B(a,b,c,d,e);Ga=-1;P.setMaterialFaces(d);e.immediateRenderCallback?e.immediateRenderCallback(f,m,gc):e.render(function(a){P.renderBufferImmediate(a,f,d)})};var Nb=function(a){a.__webglObjects||(a.__webglObjects={},a.__webglObjectsImmediate=[]);for(;a.__objectsAdded.length;){var c=
-a.__objectsAdded[0],d=a,e=void 0,f=void 0;void 0===c.__webglInit&&(c.__webglInit=!0,c._modelViewMatrix=new THREE.Matrix4,c._normalMatrix=new THREE.Matrix3);e=c.geometry;if(void 0!==e&&void 0===e.__webglInit)if(e.__webglInit=!0,e.addEventListener("dispose",Ob),e instanceof THREE.BufferGeometry)g(e);else if(c instanceof THREE.Mesh)void 0!==c.__webglActive&&F(c,d),w(d,c,e);else if(c instanceof THREE.Line){if(!e.__webglVertexBuffer){f=e;f.__webglVertexBuffer=m.createBuffer();f.__webglColorBuffer=m.createBuffer();
-f.__webglLineDistanceBuffer=m.createBuffer();P.info.memory.geometries++;var f=e,h=c,k=f.vertices.length;f.__vertexArray=new Float32Array(3*k);f.__colorArray=new Float32Array(3*k);f.__lineDistanceArray=new Float32Array(1*k);f.__webglLineCount=k;b(f,h);e.verticesNeedUpdate=!0;e.colorsNeedUpdate=!0;e.lineDistancesNeedUpdate=!0}}else c instanceof THREE.PointCloud&&!e.__webglVertexBuffer&&(f=e,f.__webglVertexBuffer=m.createBuffer(),f.__webglColorBuffer=m.createBuffer(),P.info.memory.geometries++,f=e,h=
-c,k=f.vertices.length,f.__vertexArray=new Float32Array(3*k),f.__colorArray=new Float32Array(3*k),f.__sortArray=[],f.__webglParticleCount=k,b(f,h),e.verticesNeedUpdate=!0,e.colorsNeedUpdate=!0);if(void 0===c.__webglActive){if(c instanceof THREE.Mesh)if(e=c.geometry,e instanceof THREE.BufferGeometry)A(d.__webglObjects,e,c);else{if(e instanceof THREE.Geometry)for(h=0,k=e.geometryGroupsList.length;h<k;h++)f=e.geometryGroupsList[h],A(d.__webglObjects,f,c)}else c instanceof THREE.Line||c instanceof THREE.PointCloud?
-(e=c.geometry,A(d.__webglObjects,e,c)):(c instanceof THREE.ImmediateRenderObject||c.immediateRenderCallback)&&d.__webglObjectsImmediate.push({id:null,object:c,opaque:null,transparent:null,z:0});c.__webglActive=!0}a.__objectsAdded.splice(0,1)}for(;a.__objectsRemoved.length;)F(a.__objectsRemoved[0],a),a.__objectsRemoved.splice(0,1)};this.initMaterial=function(a,b,c,d){var e,f,g,h;a.addEventListener("dispose",fc);var k,l,n,p;a instanceof THREE.MeshDepthMaterial?p="depth":a instanceof THREE.MeshNormalMaterial?
-p="normal":a instanceof THREE.MeshBasicMaterial?p="basic":a instanceof THREE.MeshLambertMaterial?p="lambert":a instanceof THREE.MeshPhongMaterial?p="phong":a instanceof THREE.LineBasicMaterial?p="basic":a instanceof THREE.LineDashedMaterial?p="dashed":a instanceof THREE.PointCloudMaterial&&(p="particle_basic");p&&(e=THREE.ShaderLib[p],a.uniforms=THREE.UniformsUtils.clone(e.uniforms),a.vertexShader=e.vertexShader,a.fragmentShader=e.fragmentShader);n=h=g=f=e=0;for(var r=b.length;n<r;n++){var q=b[n];
-q.onlyShadow||!1===q.visible||(q instanceof THREE.DirectionalLight&&e++,q instanceof THREE.PointLight&&f++,q instanceof THREE.SpotLight&&g++,q instanceof THREE.HemisphereLight&&h++)}r=n=0;for(q=b.length;r<q;r++){var s=b[r];s.castShadow&&(s instanceof THREE.SpotLight&&n++,s instanceof THREE.DirectionalLight&&!s.shadowCascade&&n++)}b=n;Ib&&d&&d.skeleton&&d.skeleton.useVertexTexture?n=1024:(n=m.getParameter(m.MAX_VERTEX_UNIFORM_VECTORS),n=Math.floor((n-20)/4),void 0!==d&&d instanceof THREE.SkinnedMesh&&
-(n=Math.min(d.skeleton.bones.length,n),n<d.skeleton.bones.length&&console.warn("WebGLRenderer: too many bones - "+d.skeleton.bones.length+", this GPU supports just "+n+" (try OpenGL instead of ANGLE)")));c={precision:X,supportsVertexTextures:Lb,map:!!a.map,envMap:!!a.envMap,lightMap:!!a.lightMap,bumpMap:!!a.bumpMap,normalMap:!!a.normalMap,specularMap:!!a.specularMap,vertexColors:a.vertexColors,fog:c,useFog:a.fog,fogExp:c instanceof THREE.FogExp2,sizeAttenuation:a.sizeAttenuation,logarithmicDepthBuffer:fa,
-skinning:a.skinning,maxBones:n,useVertexTexture:Ib&&d&&d.skeleton&&d.skeleton.useVertexTexture,morphTargets:a.morphTargets,morphNormals:a.morphNormals,maxMorphTargets:this.maxMorphTargets,maxMorphNormals:this.maxMorphNormals,maxDirLights:e,maxPointLights:f,maxSpotLights:g,maxHemiLights:h,maxShadows:b,shadowMapEnabled:this.shadowMapEnabled&&d.receiveShadow&&0<b,shadowMapType:this.shadowMapType,shadowMapDebug:this.shadowMapDebug,shadowMapCascade:this.shadowMapCascade,alphaTest:a.alphaTest,metal:a.metal,
-wrapAround:a.wrapAround,doubleSided:a.side===THREE.DoubleSide,flipSided:a.side===THREE.BackSide};d=[];p?d.push(p):(d.push(a.fragmentShader),d.push(a.vertexShader));for(var t in a.defines)d.push(t),d.push(a.defines[t]);for(l in c)d.push(l),d.push(c[l]);p=d.join();var u;l=0;for(t=Aa.length;l<t;l++)if(d=Aa[l],d.code===p){u=d;u.usedTimes++;break}void 0===u&&(u=new THREE.WebGLProgram(this,p,a,c),Aa.push(u),P.info.memory.programs=Aa.length);a.program=u;u=a.program.attributes;if(a.morphTargets)for(a.numSupportedMorphTargets=
-0,t="morphTarget",l=0;l<this.maxMorphTargets;l++)p=t+l,0<=u[p]&&a.numSupportedMorphTargets++;if(a.morphNormals)for(a.numSupportedMorphNormals=0,t="morphNormal",l=0;l<this.maxMorphNormals;l++)p=t+l,0<=u[p]&&a.numSupportedMorphNormals++;a.uniformsList=[];for(k in a.uniforms)a.uniformsList.push([a.uniforms[k],k])};this.setFaceCulling=function(a,b){a===THREE.CullFaceNone?m.disable(m.CULL_FACE):(b===THREE.FrontFaceDirectionCW?m.frontFace(m.CW):m.frontFace(m.CCW),a===THREE.CullFaceBack?m.cullFace(m.BACK):
-a===THREE.CullFaceFront?m.cullFace(m.FRONT):m.cullFace(m.FRONT_AND_BACK),m.enable(m.CULL_FACE))};this.setMaterialFaces=function(a){var b=a.side===THREE.DoubleSide;a=a.side===THREE.BackSide;da!==b&&(b?m.disable(m.CULL_FACE):m.enable(m.CULL_FACE),da=b);ja!==a&&(a?m.frontFace(m.CW):m.frontFace(m.CCW),ja=a)};this.setDepthTest=function(a){ra!==a&&(a?m.enable(m.DEPTH_TEST):m.disable(m.DEPTH_TEST),ra=a)};this.setDepthWrite=function(a){Ka!==a&&(m.depthMask(a),Ka=a)};this.setBlending=function(a,b,c,d){a!==
-Ja&&(a===THREE.NoBlending?m.disable(m.BLEND):a===THREE.AdditiveBlending?(m.enable(m.BLEND),m.blendEquation(m.FUNC_ADD),m.blendFunc(m.SRC_ALPHA,m.ONE)):a===THREE.SubtractiveBlending?(m.enable(m.BLEND),m.blendEquation(m.FUNC_ADD),m.blendFunc(m.ZERO,m.ONE_MINUS_SRC_COLOR)):a===THREE.MultiplyBlending?(m.enable(m.BLEND),m.blendEquation(m.FUNC_ADD),m.blendFunc(m.ZERO,m.SRC_COLOR)):a===THREE.CustomBlending?m.enable(m.BLEND):(m.enable(m.BLEND),m.blendEquationSeparate(m.FUNC_ADD,m.FUNC_ADD),m.blendFuncSeparate(m.SRC_ALPHA,
-m.ONE_MINUS_SRC_ALPHA,m.ONE,m.ONE_MINUS_SRC_ALPHA)),Ja=a);if(a===THREE.CustomBlending){if(b!==S&&(m.blendEquation(G(b)),S=b),c!==U||d!==ma)m.blendFunc(G(c),G(d)),U=c,ma=d}else ma=U=S=null};this.setTexture=function(a,b){if(a.needsUpdate){a.__webglInit||(a.__webglInit=!0,a.addEventListener("dispose",Db),a.__webglTexture=m.createTexture(),P.info.memory.textures++);m.activeTexture(m.TEXTURE0+b);m.bindTexture(m.TEXTURE_2D,a.__webglTexture);m.pixelStorei(m.UNPACK_FLIP_Y_WEBGL,a.flipY);m.pixelStorei(m.UNPACK_PREMULTIPLY_ALPHA_WEBGL,
-a.premultiplyAlpha);m.pixelStorei(m.UNPACK_ALIGNMENT,a.unpackAlignment);var c=a.image,d=THREE.Math.isPowerOfTwo(c.width)&&THREE.Math.isPowerOfTwo(c.height),e=G(a.format),f=G(a.type);M(m.TEXTURE_2D,a,d);var g=a.mipmaps;if(a instanceof THREE.DataTexture)if(0<g.length&&d){for(var h=0,k=g.length;h<k;h++)c=g[h],m.texImage2D(m.TEXTURE_2D,h,e,c.width,c.height,0,e,f,c.data);a.generateMipmaps=!1}else m.texImage2D(m.TEXTURE_2D,0,e,c.width,c.height,0,e,f,c.data);else if(a instanceof THREE.CompressedTexture)for(h=
-0,k=g.length;h<k;h++)c=g[h],a.format!==THREE.RGBAFormat?m.compressedTexImage2D(m.TEXTURE_2D,h,e,c.width,c.height,0,c.data):m.texImage2D(m.TEXTURE_2D,h,e,c.width,c.height,0,e,f,c.data);else if(0<g.length&&d){h=0;for(k=g.length;h<k;h++)c=g[h],m.texImage2D(m.TEXTURE_2D,h,e,e,f,c);a.generateMipmaps=!1}else m.texImage2D(m.TEXTURE_2D,0,e,e,f,a.image);a.generateMipmaps&&d&&m.generateMipmap(m.TEXTURE_2D);a.needsUpdate=!1;if(a.onUpdate)a.onUpdate()}else m.activeTexture(m.TEXTURE0+b),m.bindTexture(m.TEXTURE_2D,
-a.__webglTexture)};this.setRenderTarget=function(a){var b=a instanceof THREE.WebGLRenderTargetCube;if(a&&!a.__webglFramebuffer){void 0===a.depthBuffer&&(a.depthBuffer=!0);void 0===a.stencilBuffer&&(a.stencilBuffer=!0);a.addEventListener("dispose",ec);a.__webglTexture=m.createTexture();P.info.memory.textures++;var c=THREE.Math.isPowerOfTwo(a.width)&&THREE.Math.isPowerOfTwo(a.height),d=G(a.format),e=G(a.type);if(b){a.__webglFramebuffer=[];a.__webglRenderbuffer=[];m.bindTexture(m.TEXTURE_CUBE_MAP,a.__webglTexture);
-M(m.TEXTURE_CUBE_MAP,a,c);for(var f=0;6>f;f++){a.__webglFramebuffer[f]=m.createFramebuffer();a.__webglRenderbuffer[f]=m.createRenderbuffer();m.texImage2D(m.TEXTURE_CUBE_MAP_POSITIVE_X+f,0,d,a.width,a.height,0,d,e,null);var g=a,h=m.TEXTURE_CUBE_MAP_POSITIVE_X+f;m.bindFramebuffer(m.FRAMEBUFFER,a.__webglFramebuffer[f]);m.framebufferTexture2D(m.FRAMEBUFFER,m.COLOR_ATTACHMENT0,h,g.__webglTexture,0);W(a.__webglRenderbuffer[f],a)}c&&m.generateMipmap(m.TEXTURE_CUBE_MAP)}else a.__webglFramebuffer=m.createFramebuffer(),
-a.__webglRenderbuffer=a.shareDepthFrom?a.shareDepthFrom.__webglRenderbuffer:m.createRenderbuffer(),m.bindTexture(m.TEXTURE_2D,a.__webglTexture),M(m.TEXTURE_2D,a,c),m.texImage2D(m.TEXTURE_2D,0,d,a.width,a.height,0,d,e,null),d=m.TEXTURE_2D,m.bindFramebuffer(m.FRAMEBUFFER,a.__webglFramebuffer),m.framebufferTexture2D(m.FRAMEBUFFER,m.COLOR_ATTACHMENT0,d,a.__webglTexture,0),a.shareDepthFrom?a.depthBuffer&&!a.stencilBuffer?m.framebufferRenderbuffer(m.FRAMEBUFFER,m.DEPTH_ATTACHMENT,m.RENDERBUFFER,a.__webglRenderbuffer):
-a.depthBuffer&&a.stencilBuffer&&m.framebufferRenderbuffer(m.FRAMEBUFFER,m.DEPTH_STENCIL_ATTACHMENT,m.RENDERBUFFER,a.__webglRenderbuffer):W(a.__webglRenderbuffer,a),c&&m.generateMipmap(m.TEXTURE_2D);b?m.bindTexture(m.TEXTURE_CUBE_MAP,null):m.bindTexture(m.TEXTURE_2D,null);m.bindRenderbuffer(m.RENDERBUFFER,null);m.bindFramebuffer(m.FRAMEBUFFER,null)}a?(b=b?a.__webglFramebuffer[a.activeCubeFace]:a.__webglFramebuffer,c=a.width,a=a.height,e=d=0):(b=null,c=Na,a=ub,d=Fa,e=Ha);b!==La&&(m.bindFramebuffer(m.FRAMEBUFFER,
-b),m.viewport(d,e,c,a),La=b);Pb=c;Qb=a};this.shadowMapPlugin=new THREE.ShadowMapPlugin;this.addPrePlugin(this.shadowMapPlugin);this.addPostPlugin(new THREE.SpritePlugin);this.addPostPlugin(new THREE.LensFlarePlugin)};THREE.WebGLRenderTarget=function(a,b,c){this.width=a;this.height=b;c=c||{};this.wrapS=void 0!==c.wrapS?c.wrapS:THREE.ClampToEdgeWrapping;this.wrapT=void 0!==c.wrapT?c.wrapT:THREE.ClampToEdgeWrapping;this.magFilter=void 0!==c.magFilter?c.magFilter:THREE.LinearFilter;this.minFilter=void 0!==c.minFilter?c.minFilter:THREE.LinearMipMapLinearFilter;this.anisotropy=void 0!==c.anisotropy?c.anisotropy:1;this.offset=new THREE.Vector2(0,0);this.repeat=new THREE.Vector2(1,1);this.format=void 0!==c.format?c.format:
+a.immediateRenderCallback)for(var c=b.__webglObjectsImmediate,d=c.length-1;0<=d;d--)c[d].object===a&&c.splice(d,1);delete a.__webglActive}function B(a,b,c,d,e){oa=0;d.needsUpdate&&(d.program&&Ib(d),P.initMaterial(d,b,c,e),d.needsUpdate=!1);d.morphTargets&&!e.__webglMorphTargetInfluences&&(e.__webglMorphTargetInfluences=new Float32Array(P.maxMorphTargets));var f=!1,g=d.program,h=g.uniforms,k=d.uniforms;g.id!==Ja&&(m.useProgram(g.program),Ja=g.id,f=!0);d.id!==Ca&&(Ca=d.id,f=!0);if(f||a!==Ra)m.uniformMatrix4fv(h.projectionMatrix,
+!1,a.projectionMatrix.elements),ea&&m.uniform1f(h.logDepthBufFC,2/(Math.log(a.far+1)/Math.LN2)),a!==Ra&&(Ra=a);if(d.skinning)if(Jb&&e.skeleton.useVertexTexture){if(null!==h.boneTexture){var l=z();m.uniform1i(h.boneTexture,l);P.setTexture(e.skeleton.boneTexture,l)}null!==h.boneTextureWidth&&m.uniform1i(h.boneTextureWidth,e.skeleton.boneTextureWidth);null!==h.boneTextureHeight&&m.uniform1i(h.boneTextureHeight,e.skeleton.boneTextureHeight)}else null!==h.boneGlobalMatrices&&m.uniformMatrix4fv(h.boneGlobalMatrices,
+!1,e.skeleton.boneMatrices);if(f){c&&d.fog&&(k.fogColor.value=c.color,c instanceof THREE.Fog?(k.fogNear.value=c.near,k.fogFar.value=c.far):c instanceof THREE.FogExp2&&(k.fogDensity.value=c.density));if(d instanceof THREE.MeshPhongMaterial||d instanceof THREE.MeshLambertMaterial||d.lights){if(Ya){var n,p=l=0,r=0,q,s,t,u=Tb,w=u.directional.colors,v=u.directional.positions,x=u.point.colors,A=u.point.positions,D=u.point.distances,B=u.spot.colors,E=u.spot.positions,F=u.spot.distances,H=u.spot.directions,
+K=u.spot.anglesCos,L=u.spot.exponents,Q=u.hemi.skyColors,O=u.hemi.groundColors,ra=u.hemi.positions,X=0,R=0,V=0,$=0,Y=0,ya=0,va=0,Z=0,T=n=0;c=t=T=0;for(f=b.length;c<f;c++)n=b[c],n.onlyShadow||(q=n.color,s=n.intensity,t=n.distance,n instanceof THREE.AmbientLight?n.visible&&(P.gammaInput?(l+=q.r*q.r,p+=q.g*q.g,r+=q.b*q.b):(l+=q.r,p+=q.g,r+=q.b)):n instanceof THREE.DirectionalLight?(Y+=1,n.visible&&(Aa.setFromMatrixPosition(n.matrixWorld),xa.setFromMatrixPosition(n.target.matrixWorld),Aa.sub(xa),Aa.normalize(),
+n=3*X,v[n]=Aa.x,v[n+1]=Aa.y,v[n+2]=Aa.z,P.gammaInput?C(w,n,q,s*s):y(w,n,q,s),X+=1)):n instanceof THREE.PointLight?(ya+=1,n.visible&&(T=3*R,P.gammaInput?C(x,T,q,s*s):y(x,T,q,s),xa.setFromMatrixPosition(n.matrixWorld),A[T]=xa.x,A[T+1]=xa.y,A[T+2]=xa.z,D[R]=t,R+=1)):n instanceof THREE.SpotLight?(va+=1,n.visible&&(T=3*V,P.gammaInput?C(B,T,q,s*s):y(B,T,q,s),xa.setFromMatrixPosition(n.matrixWorld),E[T]=xa.x,E[T+1]=xa.y,E[T+2]=xa.z,F[V]=t,Aa.copy(xa),xa.setFromMatrixPosition(n.target.matrixWorld),Aa.sub(xa),
+Aa.normalize(),H[T]=Aa.x,H[T+1]=Aa.y,H[T+2]=Aa.z,K[V]=Math.cos(n.angle),L[V]=n.exponent,V+=1)):n instanceof THREE.HemisphereLight&&(Z+=1,n.visible&&(Aa.setFromMatrixPosition(n.matrixWorld),Aa.normalize(),t=3*$,ra[t]=Aa.x,ra[t+1]=Aa.y,ra[t+2]=Aa.z,q=n.color,n=n.groundColor,P.gammaInput?(s*=s,C(Q,t,q,s),C(O,t,n,s)):(y(Q,t,q,s),y(O,t,n,s)),$+=1)));c=3*X;for(f=Math.max(w.length,3*Y);c<f;c++)w[c]=0;c=3*R;for(f=Math.max(x.length,3*ya);c<f;c++)x[c]=0;c=3*V;for(f=Math.max(B.length,3*va);c<f;c++)B[c]=0;c=
+3*$;for(f=Math.max(Q.length,3*Z);c<f;c++)Q[c]=0;c=3*$;for(f=Math.max(O.length,3*Z);c<f;c++)O[c]=0;u.directional.length=X;u.point.length=R;u.spot.length=V;u.hemi.length=$;u.ambient[0]=l;u.ambient[1]=p;u.ambient[2]=r;Ya=!1}c=Tb;k.ambientLightColor.value=c.ambient;k.directionalLightColor.value=c.directional.colors;k.directionalLightDirection.value=c.directional.positions;k.pointLightColor.value=c.point.colors;k.pointLightPosition.value=c.point.positions;k.pointLightDistance.value=c.point.distances;k.spotLightColor.value=
+c.spot.colors;k.spotLightPosition.value=c.spot.positions;k.spotLightDistance.value=c.spot.distances;k.spotLightDirection.value=c.spot.directions;k.spotLightAngleCos.value=c.spot.anglesCos;k.spotLightExponent.value=c.spot.exponents;k.hemisphereLightSkyColor.value=c.hemi.skyColors;k.hemisphereLightGroundColor.value=c.hemi.groundColors;k.hemisphereLightDirection.value=c.hemi.positions}if(d instanceof THREE.MeshBasicMaterial||d instanceof THREE.MeshLambertMaterial||d instanceof THREE.MeshPhongMaterial){k.opacity.value=
+d.opacity;P.gammaInput?k.diffuse.value.copyGammaToLinear(d.color):k.diffuse.value=d.color;k.map.value=d.map;k.lightMap.value=d.lightMap;k.specularMap.value=d.specularMap;d.bumpMap&&(k.bumpMap.value=d.bumpMap,k.bumpScale.value=d.bumpScale);d.normalMap&&(k.normalMap.value=d.normalMap,k.normalScale.value.copy(d.normalScale));var W;d.map?W=d.map:d.specularMap?W=d.specularMap:d.normalMap?W=d.normalMap:d.bumpMap&&(W=d.bumpMap);void 0!==W&&(c=W.offset,W=W.repeat,k.offsetRepeat.value.set(c.x,c.y,W.x,W.y));
+k.envMap.value=d.envMap;k.flipEnvMap.value=d.envMap instanceof THREE.WebGLRenderTargetCube?1:-1;k.reflectivity.value=d.reflectivity;k.refractionRatio.value=d.refractionRatio;k.combine.value=d.combine;k.useRefract.value=d.envMap&&d.envMap.mapping instanceof THREE.CubeRefractionMapping}d instanceof THREE.LineBasicMaterial?(k.diffuse.value=d.color,k.opacity.value=d.opacity):d instanceof THREE.LineDashedMaterial?(k.diffuse.value=d.color,k.opacity.value=d.opacity,k.dashSize.value=d.dashSize,k.totalSize.value=
+d.dashSize+d.gapSize,k.scale.value=d.scale):d instanceof THREE.PointCloudMaterial?(k.psColor.value=d.color,k.opacity.value=d.opacity,k.size.value=d.size,k.scale.value=J.height/2,k.map.value=d.map):d instanceof THREE.MeshPhongMaterial?(k.shininess.value=d.shininess,P.gammaInput?(k.ambient.value.copyGammaToLinear(d.ambient),k.emissive.value.copyGammaToLinear(d.emissive),k.specular.value.copyGammaToLinear(d.specular)):(k.ambient.value=d.ambient,k.emissive.value=d.emissive,k.specular.value=d.specular),
+d.wrapAround&&k.wrapRGB.value.copy(d.wrapRGB)):d instanceof THREE.MeshLambertMaterial?(P.gammaInput?(k.ambient.value.copyGammaToLinear(d.ambient),k.emissive.value.copyGammaToLinear(d.emissive)):(k.ambient.value=d.ambient,k.emissive.value=d.emissive),d.wrapAround&&k.wrapRGB.value.copy(d.wrapRGB)):d instanceof THREE.MeshDepthMaterial?(k.mNear.value=a.near,k.mFar.value=a.far,k.opacity.value=d.opacity):d instanceof THREE.MeshNormalMaterial&&(k.opacity.value=d.opacity);if(e.receiveShadow&&!d._shadowPass&&
+k.shadowMatrix)for(c=W=0,f=b.length;c<f;c++)l=b[c],l.castShadow&&(l instanceof THREE.SpotLight||l instanceof THREE.DirectionalLight&&!l.shadowCascade)&&(k.shadowMap.value[W]=l.shadowMap,k.shadowMapSize.value[W]=l.shadowMapSize,k.shadowMatrix.value[W]=l.shadowMatrix,k.shadowDarkness.value[W]=l.shadowDarkness,k.shadowBias.value[W]=l.shadowBias,W++);b=d.uniformsList;k=0;for(W=b.length;k<W;k++)if(c=g.uniforms[b[k][1]])if(f=b[k][0],p=f.type,l=f.value,"i"===p)m.uniform1i(c,l);else if("f"===p)m.uniform1f(c,
+l);else if("v2"===p)m.uniform2f(c,l.x,l.y);else if("v3"===p)m.uniform3f(c,l.x,l.y,l.z);else if("v4"===p)m.uniform4f(c,l.x,l.y,l.z,l.w);else if("c"===p)m.uniform3f(c,l.r,l.g,l.b);else if("iv1"===p)m.uniform1iv(c,l);else if("iv"===p)m.uniform3iv(c,l);else if("fv1"===p)m.uniform1fv(c,l);else if("fv"===p)m.uniform3fv(c,l);else if("v2v"===p){void 0===f._array&&(f._array=new Float32Array(2*l.length));p=0;for(r=l.length;p<r;p++)u=2*p,f._array[u]=l[p].x,f._array[u+1]=l[p].y;m.uniform2fv(c,f._array)}else if("v3v"===
+p){void 0===f._array&&(f._array=new Float32Array(3*l.length));p=0;for(r=l.length;p<r;p++)u=3*p,f._array[u]=l[p].x,f._array[u+1]=l[p].y,f._array[u+2]=l[p].z;m.uniform3fv(c,f._array)}else if("v4v"===p){void 0===f._array&&(f._array=new Float32Array(4*l.length));p=0;for(r=l.length;p<r;p++)u=4*p,f._array[u]=l[p].x,f._array[u+1]=l[p].y,f._array[u+2]=l[p].z,f._array[u+3]=l[p].w;m.uniform4fv(c,f._array)}else if("m3"===p)m.uniformMatrix3fv(c,!1,l.elements);else if("m3v"===p){void 0===f._array&&(f._array=new Float32Array(9*
+l.length));p=0;for(r=l.length;p<r;p++)l[p].flattenToArrayOffset(f._array,9*p);m.uniformMatrix3fv(c,!1,f._array)}else if("m4"===p)m.uniformMatrix4fv(c,!1,l.elements);else if("m4v"===p){void 0===f._array&&(f._array=new Float32Array(16*l.length));p=0;for(r=l.length;p<r;p++)l[p].flattenToArrayOffset(f._array,16*p);m.uniformMatrix4fv(c,!1,f._array)}else if("t"===p){if(u=l,l=z(),m.uniform1i(c,l),u)if(u instanceof THREE.CubeTexture||u.image instanceof Array&&6===u.image.length){if(c=u,f=l,6===c.image.length)if(c.needsUpdate){c.image.__webglTextureCube||
+(c.addEventListener("dispose",Eb),c.image.__webglTextureCube=m.createTexture(),P.info.memory.textures++);m.activeTexture(m.TEXTURE0+f);m.bindTexture(m.TEXTURE_CUBE_MAP,c.image.__webglTextureCube);m.pixelStorei(m.UNPACK_FLIP_Y_WEBGL,c.flipY);f=c instanceof THREE.CompressedTexture;l=[];for(p=0;6>p;p++)P.autoScaleCubemaps&&!f?(r=l,u=p,w=c.image[p],x=pc,w.width<=x&&w.height<=x||(A=Math.max(w.width,w.height),v=Math.floor(w.width*x/A),x=Math.floor(w.height*x/A),A=document.createElement("canvas"),A.width=
+v,A.height=x,A.getContext("2d").drawImage(w,0,0,w.width,w.height,0,0,v,x),w=A),r[u]=w):l[p]=c.image[p];p=l[0];r=THREE.Math.isPowerOfTwo(p.width)&&THREE.Math.isPowerOfTwo(p.height);u=G(c.format);w=G(c.type);M(m.TEXTURE_CUBE_MAP,c,r);for(p=0;6>p;p++)if(f)for(x=l[p].mipmaps,A=0,D=x.length;A<D;A++)v=x[A],c.format!==THREE.RGBAFormat?m.compressedTexImage2D(m.TEXTURE_CUBE_MAP_POSITIVE_X+p,A,u,v.width,v.height,0,v.data):m.texImage2D(m.TEXTURE_CUBE_MAP_POSITIVE_X+p,A,u,v.width,v.height,0,u,w,v.data);else m.texImage2D(m.TEXTURE_CUBE_MAP_POSITIVE_X+
+p,0,u,u,w,l[p]);c.generateMipmaps&&r&&m.generateMipmap(m.TEXTURE_CUBE_MAP);c.needsUpdate=!1;if(c.onUpdate)c.onUpdate()}else m.activeTexture(m.TEXTURE0+f),m.bindTexture(m.TEXTURE_CUBE_MAP,c.image.__webglTextureCube)}else u instanceof THREE.WebGLRenderTargetCube?(c=u,m.activeTexture(m.TEXTURE0+l),m.bindTexture(m.TEXTURE_CUBE_MAP,c.__webglTexture)):P.setTexture(u,l)}else if("tv"===p){void 0===f._array&&(f._array=[]);p=0;for(r=f.value.length;p<r;p++)f._array[p]=z();m.uniform1iv(c,f._array);p=0;for(r=
+f.value.length;p<r;p++)u=f.value[p],l=f._array[p],u&&P.setTexture(u,l)}else console.warn("THREE.WebGLRenderer: Unknown uniform type: "+p);(d instanceof THREE.ShaderMaterial||d instanceof THREE.MeshPhongMaterial||d.envMap)&&null!==h.cameraPosition&&(xa.setFromMatrixPosition(a.matrixWorld),m.uniform3f(h.cameraPosition,xa.x,xa.y,xa.z));(d instanceof THREE.MeshPhongMaterial||d instanceof THREE.MeshLambertMaterial||d instanceof THREE.ShaderMaterial||d.skinning)&&null!==h.viewMatrix&&m.uniformMatrix4fv(h.viewMatrix,
+!1,a.matrixWorldInverse.elements)}m.uniformMatrix4fv(h.modelViewMatrix,!1,e._modelViewMatrix.elements);h.normalMatrix&&m.uniformMatrix3fv(h.normalMatrix,!1,e._normalMatrix.elements);null!==h.modelMatrix&&m.uniformMatrix4fv(h.modelMatrix,!1,e.matrixWorld.elements);return g}function z(){var a=oa;a>=Kb&&console.warn("WebGLRenderer: trying to use "+a+" texture units while this GPU supports only "+Kb);oa+=1;return a}function C(a,b,c,d){a[b]=c.r*c.r*d;a[b+1]=c.g*c.g*d;a[b+2]=c.b*c.b*d}function y(a,b,c,
+d){a[b]=c.r*d;a[b+1]=c.g*d;a[b+2]=c.b*d}function Q(a){a!==fa&&(m.lineWidth(a),fa=a)}function E(a,b,c){Ma!==a&&(a?m.enable(m.POLYGON_OFFSET_FILL):m.disable(m.POLYGON_OFFSET_FILL),Ma=a);!a||Na===b&&wa===c||(m.polygonOffset(b,c),Na=b,wa=c)}function M(a,b,c){c?(m.texParameteri(a,m.TEXTURE_WRAP_S,G(b.wrapS)),m.texParameteri(a,m.TEXTURE_WRAP_T,G(b.wrapT)),m.texParameteri(a,m.TEXTURE_MAG_FILTER,G(b.magFilter)),m.texParameteri(a,m.TEXTURE_MIN_FILTER,G(b.minFilter))):(m.texParameteri(a,m.TEXTURE_WRAP_S,m.CLAMP_TO_EDGE),
+m.texParameteri(a,m.TEXTURE_WRAP_T,m.CLAMP_TO_EDGE),m.texParameteri(a,m.TEXTURE_MAG_FILTER,H(b.magFilter)),m.texParameteri(a,m.TEXTURE_MIN_FILTER,H(b.minFilter)));bb&&b.type!==THREE.FloatType&&(1<b.anisotropy||b.__oldAnisotropy)&&(m.texParameterf(a,bb.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(b.anisotropy,Lb)),b.__oldAnisotropy=b.anisotropy)}function V(a,b){m.bindRenderbuffer(m.RENDERBUFFER,a);b.depthBuffer&&!b.stencilBuffer?(m.renderbufferStorage(m.RENDERBUFFER,m.DEPTH_COMPONENT16,b.width,b.height),m.framebufferRenderbuffer(m.FRAMEBUFFER,
+m.DEPTH_ATTACHMENT,m.RENDERBUFFER,a)):b.depthBuffer&&b.stencilBuffer?(m.renderbufferStorage(m.RENDERBUFFER,m.DEPTH_STENCIL,b.width,b.height),m.framebufferRenderbuffer(m.FRAMEBUFFER,m.DEPTH_STENCIL_ATTACHMENT,m.RENDERBUFFER,a)):m.renderbufferStorage(m.RENDERBUFFER,m.RGBA4,b.width,b.height)}function H(a){return a===THREE.NearestFilter||a===THREE.NearestMipMapNearestFilter||a===THREE.NearestMipMapLinearFilter?m.NEAREST:m.LINEAR}function G(a){if(a===THREE.RepeatWrapping)return m.REPEAT;if(a===THREE.ClampToEdgeWrapping)return m.CLAMP_TO_EDGE;
+if(a===THREE.MirroredRepeatWrapping)return m.MIRRORED_REPEAT;if(a===THREE.NearestFilter)return m.NEAREST;if(a===THREE.NearestMipMapNearestFilter)return m.NEAREST_MIPMAP_NEAREST;if(a===THREE.NearestMipMapLinearFilter)return m.NEAREST_MIPMAP_LINEAR;if(a===THREE.LinearFilter)return m.LINEAR;if(a===THREE.LinearMipMapNearestFilter)return m.LINEAR_MIPMAP_NEAREST;if(a===THREE.LinearMipMapLinearFilter)return m.LINEAR_MIPMAP_LINEAR;if(a===THREE.UnsignedByteType)return m.UNSIGNED_BYTE;if(a===THREE.UnsignedShort4444Type)return m.UNSIGNED_SHORT_4_4_4_4;
+if(a===THREE.UnsignedShort5551Type)return m.UNSIGNED_SHORT_5_5_5_1;if(a===THREE.UnsignedShort565Type)return m.UNSIGNED_SHORT_5_6_5;if(a===THREE.ByteType)return m.BYTE;if(a===THREE.ShortType)return m.SHORT;if(a===THREE.UnsignedShortType)return m.UNSIGNED_SHORT;if(a===THREE.IntType)return m.INT;if(a===THREE.UnsignedIntType)return m.UNSIGNED_INT;if(a===THREE.FloatType)return m.FLOAT;if(a===THREE.AlphaFormat)return m.ALPHA;if(a===THREE.RGBFormat)return m.RGB;if(a===THREE.RGBAFormat)return m.RGBA;if(a===
+THREE.LuminanceFormat)return m.LUMINANCE;if(a===THREE.LuminanceAlphaFormat)return m.LUMINANCE_ALPHA;if(a===THREE.AddEquation)return m.FUNC_ADD;if(a===THREE.SubtractEquation)return m.FUNC_SUBTRACT;if(a===THREE.ReverseSubtractEquation)return m.FUNC_REVERSE_SUBTRACT;if(a===THREE.ZeroFactor)return m.ZERO;if(a===THREE.OneFactor)return m.ONE;if(a===THREE.SrcColorFactor)return m.SRC_COLOR;if(a===THREE.OneMinusSrcColorFactor)return m.ONE_MINUS_SRC_COLOR;if(a===THREE.SrcAlphaFactor)return m.SRC_ALPHA;if(a===
+THREE.OneMinusSrcAlphaFactor)return m.ONE_MINUS_SRC_ALPHA;if(a===THREE.DstAlphaFactor)return m.DST_ALPHA;if(a===THREE.OneMinusDstAlphaFactor)return m.ONE_MINUS_DST_ALPHA;if(a===THREE.DstColorFactor)return m.DST_COLOR;if(a===THREE.OneMinusDstColorFactor)return m.ONE_MINUS_DST_COLOR;if(a===THREE.SrcAlphaSaturateFactor)return m.SRC_ALPHA_SATURATE;if(void 0!==Ta){if(a===THREE.RGB_S3TC_DXT1_Format)return Ta.COMPRESSED_RGB_S3TC_DXT1_EXT;if(a===THREE.RGBA_S3TC_DXT1_Format)return Ta.COMPRESSED_RGBA_S3TC_DXT1_EXT;
+if(a===THREE.RGBA_S3TC_DXT3_Format)return Ta.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(a===THREE.RGBA_S3TC_DXT5_Format)return Ta.COMPRESSED_RGBA_S3TC_DXT5_EXT}return 0}console.log("THREE.WebGLRenderer",THREE.REVISION);a=a||{};var J=void 0!==a.canvas?a.canvas:document.createElement("canvas"),K=void 0!==a.context?a.context:null,X=void 0!==a.precision?a.precision:"highp",L=void 0!==a.alpha?a.alpha:!1,ga=void 0!==a.depth?a.depth:!0,R=void 0!==a.stencil?a.stencil:!0,Z=void 0!==a.antialias?a.antialias:!1,O=void 0!==
+a.premultipliedAlpha?a.premultipliedAlpha:!0,ha=void 0!==a.preserveDrawingBuffer?a.preserveDrawingBuffer:!1,ea=void 0!==a.logarithmicDepthBuffer?a.logarithmicDepthBuffer:!1,Y=new THREE.Color(0),ra=0,va=[],ya=[],za=!0;this.domElement=J;this.context=null;this.devicePixelRatio=void 0!==a.devicePixelRatio?a.devicePixelRatio:void 0!==self.devicePixelRatio?self.devicePixelRatio:1;this.sortObjects=this.autoClearStencil=this.autoClearDepth=this.autoClearColor=this.autoClear=!0;this.shadowMapEnabled=this.gammaOutput=
+this.gammaInput=!1;this.shadowMapAutoUpdate=!0;this.shadowMapType=THREE.PCFShadowMap;this.shadowMapCullFace=THREE.CullFaceFront;this.shadowMapCascade=this.shadowMapDebug=!1;this.maxMorphTargets=8;this.maxMorphNormals=4;this.autoScaleCubemaps=!0;this.renderPluginsPre=[];this.renderPluginsPost=[];this.info={memory:{programs:0,geometries:0,textures:0},render:{calls:0,vertices:0,faces:0,points:0}};var P=this,Ba=[],Ja=null,La=null,Ca=-1,Fa=null,Ra=null,oa=0,W=-1,ia=-1,Ka=-1,ta=-1,T=-1,la=-1,pa=-1,ma=-1,
+Ma=null,Na=null,wa=null,fa=null,Ga=0,Ha=0,ua=J.width,wb=J.height,Qb=0,Rb=0,sb=new Uint8Array(16),nb=new Uint8Array(16),gc=new THREE.Frustum,Sb=new THREE.Matrix4,hc=new THREE.Matrix4,xa=new THREE.Vector3,Aa=new THREE.Vector3,Ya=!0,Tb={ambient:[0,0,0],directional:{length:0,colors:[],positions:[]},point:{length:0,colors:[],positions:[],distances:[]},spot:{length:0,colors:[],positions:[],distances:[],directions:[],anglesCos:[],exponents:[]},hemi:{length:0,skyColors:[],groundColors:[],positions:[]}},m,
+ob,tb,bb,Ta,pb;(function(){try{var a={alpha:L,depth:ga,stencil:R,antialias:Z,premultipliedAlpha:O,preserveDrawingBuffer:ha};m=K||J.getContext("webgl",a)||J.getContext("experimental-webgl",a);if(null===m)throw"Error creating WebGL context.";}catch(b){console.error(b)}ob=m.getExtension("OES_texture_float");m.getExtension("OES_texture_float_linear");tb=m.getExtension("OES_standard_derivatives");bb=m.getExtension("EXT_texture_filter_anisotropic")||m.getExtension("MOZ_EXT_texture_filter_anisotropic")||
+m.getExtension("WEBKIT_EXT_texture_filter_anisotropic");Ta=m.getExtension("WEBGL_compressed_texture_s3tc")||m.getExtension("MOZ_WEBGL_compressed_texture_s3tc")||m.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc");pb=m.getExtension("OES_element_index_uint");null===ob&&console.log("THREE.WebGLRenderer: Float textures not supported.");null===tb&&console.log("THREE.WebGLRenderer: Standard derivatives not supported.");null===bb&&console.log("THREE.WebGLRenderer: Anisotropic texture filtering not supported.");
+null===Ta&&console.log("THREE.WebGLRenderer: S3TC compressed textures not supported.");null===pb&&console.log("THREE.WebGLRenderer: elementindex as unsigned integer not supported.");void 0===m.getShaderPrecisionFormat&&(m.getShaderPrecisionFormat=function(){return{rangeMin:1,rangeMax:1,precision:1}});ea&&m.getExtension("EXT_frag_depth")})();m.clearColor(0,0,0,1);m.clearDepth(1);m.clearStencil(0);m.enable(m.DEPTH_TEST);m.depthFunc(m.LEQUAL);m.frontFace(m.CCW);m.cullFace(m.BACK);m.enable(m.CULL_FACE);
+m.enable(m.BLEND);m.blendEquation(m.FUNC_ADD);m.blendFunc(m.SRC_ALPHA,m.ONE_MINUS_SRC_ALPHA);m.viewport(Ga,Ha,ua,wb);m.clearColor(Y.r,Y.g,Y.b,ra);this.context=m;var Kb=m.getParameter(m.MAX_TEXTURE_IMAGE_UNITS),qc=m.getParameter(m.MAX_VERTEX_TEXTURE_IMAGE_UNITS);m.getParameter(m.MAX_TEXTURE_SIZE);var pc=m.getParameter(m.MAX_CUBE_MAP_TEXTURE_SIZE),Lb=bb?m.getParameter(bb.MAX_TEXTURE_MAX_ANISOTROPY_EXT):0,Mb=0<qc,Jb=Mb&&ob;Ta&&m.getParameter(m.COMPRESSED_TEXTURE_FORMATS);var rc=m.getShaderPrecisionFormat(m.VERTEX_SHADER,
+m.HIGH_FLOAT),sc=m.getShaderPrecisionFormat(m.VERTEX_SHADER,m.MEDIUM_FLOAT);m.getShaderPrecisionFormat(m.VERTEX_SHADER,m.LOW_FLOAT);var zc=m.getShaderPrecisionFormat(m.FRAGMENT_SHADER,m.HIGH_FLOAT),Ac=m.getShaderPrecisionFormat(m.FRAGMENT_SHADER,m.MEDIUM_FLOAT);m.getShaderPrecisionFormat(m.FRAGMENT_SHADER,m.LOW_FLOAT);var Bc=0<rc.precision&&0<zc.precision,Nb=0<sc.precision&&0<Ac.precision;"highp"!==X||Bc||(Nb?(X="mediump",console.warn("THREE.WebGLRenderer: highp not supported, using mediump.")):(X=
+"lowp",console.warn("THREE.WebGLRenderer: highp and mediump not supported, using lowp.")));"mediump"!==X||Nb||(X="lowp",console.warn("THREE.WebGLRenderer: mediump not supported, using lowp."));this.getContext=function(){return m};this.supportsVertexTextures=function(){return Mb};this.supportsFloatTextures=function(){return ob};this.supportsStandardDerivatives=function(){return tb};this.supportsCompressedTextureS3TC=function(){return Ta};this.getMaxAnisotropy=function(){return Lb};this.getPrecision=
+function(){return X};this.setSize=function(a,b,c){J.width=a*this.devicePixelRatio;J.height=b*this.devicePixelRatio;!1!==c&&(J.style.width=a+"px",J.style.height=b+"px");this.setViewport(0,0,a,b)};this.setViewport=function(a,b,c,d){Ga=a*this.devicePixelRatio;Ha=b*this.devicePixelRatio;ua=c*this.devicePixelRatio;wb=d*this.devicePixelRatio;m.viewport(Ga,Ha,ua,wb)};this.setScissor=function(a,b,c,d){m.scissor(a*this.devicePixelRatio,b*this.devicePixelRatio,c*this.devicePixelRatio,d*this.devicePixelRatio)};
+this.enableScissorTest=function(a){a?m.enable(m.SCISSOR_TEST):m.disable(m.SCISSOR_TEST)};this.setClearColor=function(a,b){Y.set(a);ra=void 0!==b?b:1;m.clearColor(Y.r,Y.g,Y.b,ra)};this.setClearColorHex=function(a,b){console.warn("THREE.WebGLRenderer: .setClearColorHex() is being removed. Use .setClearColor() instead.");this.setClearColor(a,b)};this.getClearColor=function(){return Y};this.getClearAlpha=function(){return ra};this.clear=function(a,b,c){var d=0;if(void 0===a||a)d|=m.COLOR_BUFFER_BIT;if(void 0===
+b||b)d|=m.DEPTH_BUFFER_BIT;if(void 0===c||c)d|=m.STENCIL_BUFFER_BIT;m.clear(d)};this.clearColor=function(){m.clear(m.COLOR_BUFFER_BIT)};this.clearDepth=function(){m.clear(m.DEPTH_BUFFER_BIT)};this.clearStencil=function(){m.clear(m.STENCIL_BUFFER_BIT)};this.clearTarget=function(a,b,c,d){this.setRenderTarget(a);this.clear(b,c,d)};this.addPostPlugin=function(a){a.init(this);this.renderPluginsPost.push(a)};this.addPrePlugin=function(a){a.init(this);this.renderPluginsPre.push(a)};this.updateShadowMap=
+function(a,b){Ja=null;Ca=Fa=ma=pa=Ka=-1;Ya=!0;ia=W=-1;Ob(a);this.shadowMapPlugin.update(a,b)};var Pb=function(a){a=a.target;a.removeEventListener("dispose",Pb);a.__webglInit=void 0;if(a instanceof THREE.BufferGeometry){a=a.attributes;for(var b in a)void 0!==a[b].buffer&&m.deleteBuffer(a[b].buffer);P.info.memory.geometries--}else if(void 0!==a.geometryGroups){b=0;for(var c=a.geometryGroupsList.length;b<c;b++){var d=a.geometryGroupsList[b];if(void 0!==d.numMorphTargets)for(var e=0,f=d.numMorphTargets;e<
+f;e++)m.deleteBuffer(d.__webglMorphTargetsBuffers[e]);if(void 0!==d.numMorphNormals)for(e=0,f=d.numMorphNormals;e<f;e++)m.deleteBuffer(d.__webglMorphNormalsBuffers[e]);dc(d)}}else dc(a)},Eb=function(a){a=a.target;a.removeEventListener("dispose",Eb);a.image&&a.image.__webglTextureCube?m.deleteTexture(a.image.__webglTextureCube):a.__webglInit&&(a.__webglInit=!1,m.deleteTexture(a.__webglTexture));P.info.memory.textures--},ec=function(a){a=a.target;a.removeEventListener("dispose",ec);if(a&&a.__webglTexture)if(m.deleteTexture(a.__webglTexture),
+a instanceof THREE.WebGLRenderTargetCube)for(var b=0;6>b;b++)m.deleteFramebuffer(a.__webglFramebuffer[b]),m.deleteRenderbuffer(a.__webglRenderbuffer[b]);else m.deleteFramebuffer(a.__webglFramebuffer),m.deleteRenderbuffer(a.__webglRenderbuffer);P.info.memory.textures--},fc=function(a){a=a.target;a.removeEventListener("dispose",fc);Ib(a)},dc=function(a){void 0!==a.__webglVertexBuffer&&m.deleteBuffer(a.__webglVertexBuffer);void 0!==a.__webglNormalBuffer&&m.deleteBuffer(a.__webglNormalBuffer);void 0!==
+a.__webglTangentBuffer&&m.deleteBuffer(a.__webglTangentBuffer);void 0!==a.__webglColorBuffer&&m.deleteBuffer(a.__webglColorBuffer);void 0!==a.__webglUVBuffer&&m.deleteBuffer(a.__webglUVBuffer);void 0!==a.__webglUV2Buffer&&m.deleteBuffer(a.__webglUV2Buffer);void 0!==a.__webglSkinIndicesBuffer&&m.deleteBuffer(a.__webglSkinIndicesBuffer);void 0!==a.__webglSkinWeightsBuffer&&m.deleteBuffer(a.__webglSkinWeightsBuffer);void 0!==a.__webglFaceBuffer&&m.deleteBuffer(a.__webglFaceBuffer);void 0!==a.__webglLineBuffer&&
+m.deleteBuffer(a.__webglLineBuffer);void 0!==a.__webglLineDistanceBuffer&&m.deleteBuffer(a.__webglLineDistanceBuffer);if(void 0!==a.__webglCustomAttributesList)for(var b in a.__webglCustomAttributesList)m.deleteBuffer(a.__webglCustomAttributesList[b].buffer);P.info.memory.geometries--},Ib=function(a){var b=a.program.program;if(void 0!==b){a.program=void 0;var c,d,e=!1;a=0;for(c=Ba.length;a<c;a++)if(d=Ba[a],d.program===b){d.usedTimes--;0===d.usedTimes&&(e=!0);break}if(!0===e){e=[];a=0;for(c=Ba.length;a<
+c;a++)d=Ba[a],d.program!==b&&e.push(d);Ba=e;m.deleteProgram(b);P.info.memory.programs--}}};this.renderBufferImmediate=function(a,b,c){k();a.hasPositions&&!a.__webglVertexBuffer&&(a.__webglVertexBuffer=m.createBuffer());a.hasNormals&&!a.__webglNormalBuffer&&(a.__webglNormalBuffer=m.createBuffer());a.hasUvs&&!a.__webglUvBuffer&&(a.__webglUvBuffer=m.createBuffer());a.hasColors&&!a.__webglColorBuffer&&(a.__webglColorBuffer=m.createBuffer());a.hasPositions&&(m.bindBuffer(m.ARRAY_BUFFER,a.__webglVertexBuffer),
+m.bufferData(m.ARRAY_BUFFER,a.positionArray,m.DYNAMIC_DRAW),l(b.attributes.position),m.vertexAttribPointer(b.attributes.position,3,m.FLOAT,!1,0,0));if(a.hasNormals){m.bindBuffer(m.ARRAY_BUFFER,a.__webglNormalBuffer);if(c.shading===THREE.FlatShading){var d,e,f,g,h,p,r,q,s,t,u,w=3*a.count;for(u=0;u<w;u+=9)t=a.normalArray,d=t[u],e=t[u+1],f=t[u+2],g=t[u+3],p=t[u+4],q=t[u+5],h=t[u+6],r=t[u+7],s=t[u+8],d=(d+g+h)/3,e=(e+p+r)/3,f=(f+q+s)/3,t[u]=d,t[u+1]=e,t[u+2]=f,t[u+3]=d,t[u+4]=e,t[u+5]=f,t[u+6]=d,t[u+
+7]=e,t[u+8]=f}m.bufferData(m.ARRAY_BUFFER,a.normalArray,m.DYNAMIC_DRAW);l(b.attributes.normal);m.vertexAttribPointer(b.attributes.normal,3,m.FLOAT,!1,0,0)}a.hasUvs&&c.map&&(m.bindBuffer(m.ARRAY_BUFFER,a.__webglUvBuffer),m.bufferData(m.ARRAY_BUFFER,a.uvArray,m.DYNAMIC_DRAW),l(b.attributes.uv),m.vertexAttribPointer(b.attributes.uv,2,m.FLOAT,!1,0,0));a.hasColors&&c.vertexColors!==THREE.NoColors&&(m.bindBuffer(m.ARRAY_BUFFER,a.__webglColorBuffer),m.bufferData(m.ARRAY_BUFFER,a.colorArray,m.DYNAMIC_DRAW),
+l(b.attributes.color),m.vertexAttribPointer(b.attributes.color,3,m.FLOAT,!1,0,0));n();m.drawArrays(m.TRIANGLES,0,a.count);a.count=0};this.renderBufferDirect=function(a,b,c,d,e,f){if(!1!==d.visible){var g=B(a,b,c,d,f);a=g.attributes;b=e.attributes;c=!1;g=16777215*e.id+2*g.id+(d.wireframe?1:0);g!==Fa&&(Fa=g,c=!0);c&&k();if(f instanceof THREE.Mesh)if(g=b.index){var l,n;g.array instanceof Uint32Array?(l=m.UNSIGNED_INT,n=4):(l=m.UNSIGNED_SHORT,n=2);e=e.offsets;if(0===e.length)c&&(h(d,a,b,0),m.bindBuffer(m.ELEMENT_ARRAY_BUFFER,
+g.buffer)),m.drawElements(m.TRIANGLES,g.array.length,l,0),P.info.render.calls++,P.info.render.vertices+=g.array.length,P.info.render.faces+=g.array.length/3;else{c=!0;for(var p=0,r=e.length;p<r;p++){var q=e[p].index;c&&(h(d,a,b,q),m.bindBuffer(m.ELEMENT_ARRAY_BUFFER,g.buffer));m.drawElements(m.TRIANGLES,e[p].count,l,e[p].start*n);P.info.render.calls++;P.info.render.vertices+=e[p].count;P.info.render.faces+=e[p].count/3}}}else c&&h(d,a,b,0),d=e.attributes.position,m.drawArrays(m.TRIANGLES,0,d.array.length/
+3),P.info.render.calls++,P.info.render.vertices+=d.array.length/3,P.info.render.faces+=d.array.length/9;else if(f instanceof THREE.PointCloud)c&&h(d,a,b,0),d=b.position,m.drawArrays(m.POINTS,0,d.array.length/3),P.info.render.calls++,P.info.render.points+=d.array.length/3;else if(f instanceof THREE.Line)if(f=f.type===THREE.LineStrip?m.LINE_STRIP:m.LINES,Q(d.linewidth),g=b.index)if(g.array instanceof Uint32Array?(l=m.UNSIGNED_INT,n=4):(l=m.UNSIGNED_SHORT,n=2),e=e.offsets,0===e.length)c&&(h(d,a,b,0),
+m.bindBuffer(m.ELEMENT_ARRAY_BUFFER,g.buffer)),m.drawElements(f,g.array.length,l,0),P.info.render.calls++,P.info.render.vertices+=g.array.length;else for(1<e.length&&(c=!0),p=0,r=e.length;p<r;p++)q=e[p].index,c&&(h(d,a,b,q),m.bindBuffer(m.ELEMENT_ARRAY_BUFFER,g.buffer)),m.drawElements(f,e[p].count,l,e[p].start*n),P.info.render.calls++,P.info.render.vertices+=e[p].count;else c&&h(d,a,b,0),d=b.position,m.drawArrays(f,0,d.array.length/3),P.info.render.calls++,P.info.render.points+=d.array.length/3}};
+this.renderBuffer=function(a,b,c,d,e,f){if(!1!==d.visible){var g,h;c=B(a,b,c,d,f);b=c.attributes;a=!1;c=16777215*e.id+2*c.id+(d.wireframe?1:0);c!==Fa&&(Fa=c,a=!0);a&&k();if(!d.morphTargets&&0<=b.position)a&&(m.bindBuffer(m.ARRAY_BUFFER,e.__webglVertexBuffer),l(b.position),m.vertexAttribPointer(b.position,3,m.FLOAT,!1,0,0));else if(f.morphTargetBase){c=d.program.attributes;-1!==f.morphTargetBase&&0<=c.position?(m.bindBuffer(m.ARRAY_BUFFER,e.__webglMorphTargetsBuffers[f.morphTargetBase]),l(c.position),
+m.vertexAttribPointer(c.position,3,m.FLOAT,!1,0,0)):0<=c.position&&(m.bindBuffer(m.ARRAY_BUFFER,e.__webglVertexBuffer),l(c.position),m.vertexAttribPointer(c.position,3,m.FLOAT,!1,0,0));if(f.morphTargetForcedOrder.length){var p=0;h=f.morphTargetForcedOrder;for(g=f.morphTargetInfluences;p<d.numSupportedMorphTargets&&p<h.length;)0<=c["morphTarget"+p]&&(m.bindBuffer(m.ARRAY_BUFFER,e.__webglMorphTargetsBuffers[h[p]]),l(c["morphTarget"+p]),m.vertexAttribPointer(c["morphTarget"+p],3,m.FLOAT,!1,0,0)),0<=
+c["morphNormal"+p]&&d.morphNormals&&(m.bindBuffer(m.ARRAY_BUFFER,e.__webglMorphNormalsBuffers[h[p]]),l(c["morphNormal"+p]),m.vertexAttribPointer(c["morphNormal"+p],3,m.FLOAT,!1,0,0)),f.__webglMorphTargetInfluences[p]=g[h[p]],p++}else{h=[];g=f.morphTargetInfluences;var r,q=g.length;for(r=0;r<q;r++)p=g[r],0<p&&h.push([p,r]);h.length>d.numSupportedMorphTargets?(h.sort(t),h.length=d.numSupportedMorphTargets):h.length>d.numSupportedMorphNormals?h.sort(t):0===h.length&&h.push([0,0]);for(p=0;p<d.numSupportedMorphTargets;)h[p]?
+(r=h[p][1],0<=c["morphTarget"+p]&&(m.bindBuffer(m.ARRAY_BUFFER,e.__webglMorphTargetsBuffers[r]),l(c["morphTarget"+p]),m.vertexAttribPointer(c["morphTarget"+p],3,m.FLOAT,!1,0,0)),0<=c["morphNormal"+p]&&d.morphNormals&&(m.bindBuffer(m.ARRAY_BUFFER,e.__webglMorphNormalsBuffers[r]),l(c["morphNormal"+p]),m.vertexAttribPointer(c["morphNormal"+p],3,m.FLOAT,!1,0,0)),f.__webglMorphTargetInfluences[p]=g[r]):f.__webglMorphTargetInfluences[p]=0,p++}null!==d.program.uniforms.morphTargetInfluences&&m.uniform1fv(d.program.uniforms.morphTargetInfluences,
+f.__webglMorphTargetInfluences)}if(a){if(e.__webglCustomAttributesList)for(g=0,h=e.__webglCustomAttributesList.length;g<h;g++)c=e.__webglCustomAttributesList[g],0<=b[c.buffer.belongsToAttribute]&&(m.bindBuffer(m.ARRAY_BUFFER,c.buffer),l(b[c.buffer.belongsToAttribute]),m.vertexAttribPointer(b[c.buffer.belongsToAttribute],c.size,m.FLOAT,!1,0,0));0<=b.color&&(0<f.geometry.colors.length||0<f.geometry.faces.length?(m.bindBuffer(m.ARRAY_BUFFER,e.__webglColorBuffer),l(b.color),m.vertexAttribPointer(b.color,
+3,m.FLOAT,!1,0,0)):d.defaultAttributeValues&&m.vertexAttrib3fv(b.color,d.defaultAttributeValues.color));0<=b.normal&&(m.bindBuffer(m.ARRAY_BUFFER,e.__webglNormalBuffer),l(b.normal),m.vertexAttribPointer(b.normal,3,m.FLOAT,!1,0,0));0<=b.tangent&&(m.bindBuffer(m.ARRAY_BUFFER,e.__webglTangentBuffer),l(b.tangent),m.vertexAttribPointer(b.tangent,4,m.FLOAT,!1,0,0));0<=b.uv&&(f.geometry.faceVertexUvs[0]?(m.bindBuffer(m.ARRAY_BUFFER,e.__webglUVBuffer),l(b.uv),m.vertexAttribPointer(b.uv,2,m.FLOAT,!1,0,0)):
+d.defaultAttributeValues&&m.vertexAttrib2fv(b.uv,d.defaultAttributeValues.uv));0<=b.uv2&&(f.geometry.faceVertexUvs[1]?(m.bindBuffer(m.ARRAY_BUFFER,e.__webglUV2Buffer),l(b.uv2),m.vertexAttribPointer(b.uv2,2,m.FLOAT,!1,0,0)):d.defaultAttributeValues&&m.vertexAttrib2fv(b.uv2,d.defaultAttributeValues.uv2));d.skinning&&0<=b.skinIndex&&0<=b.skinWeight&&(m.bindBuffer(m.ARRAY_BUFFER,e.__webglSkinIndicesBuffer),l(b.skinIndex),m.vertexAttribPointer(b.skinIndex,4,m.FLOAT,!1,0,0),m.bindBuffer(m.ARRAY_BUFFER,
+e.__webglSkinWeightsBuffer),l(b.skinWeight),m.vertexAttribPointer(b.skinWeight,4,m.FLOAT,!1,0,0));0<=b.lineDistance&&(m.bindBuffer(m.ARRAY_BUFFER,e.__webglLineDistanceBuffer),l(b.lineDistance),m.vertexAttribPointer(b.lineDistance,1,m.FLOAT,!1,0,0))}n();f instanceof THREE.Mesh?(f=e.__typeArray===Uint32Array?m.UNSIGNED_INT:m.UNSIGNED_SHORT,d.wireframe?(Q(d.wireframeLinewidth),a&&m.bindBuffer(m.ELEMENT_ARRAY_BUFFER,e.__webglLineBuffer),m.drawElements(m.LINES,e.__webglLineCount,f,0)):(a&&m.bindBuffer(m.ELEMENT_ARRAY_BUFFER,
+e.__webglFaceBuffer),m.drawElements(m.TRIANGLES,e.__webglFaceCount,f,0)),P.info.render.calls++,P.info.render.vertices+=e.__webglFaceCount,P.info.render.faces+=e.__webglFaceCount/3):f instanceof THREE.Line?(f=f.type===THREE.LineStrip?m.LINE_STRIP:m.LINES,Q(d.linewidth),m.drawArrays(f,0,e.__webglLineCount),P.info.render.calls++):f instanceof THREE.PointCloud&&(m.drawArrays(m.POINTS,0,e.__webglParticleCount),P.info.render.calls++,P.info.render.points+=e.__webglParticleCount)}};this.render=function(a,
+b,c,d){if(!1===b instanceof THREE.Camera)console.error("THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.");else{var e,f,g,h,k=a.__lights,l=a.fog;Ca=-1;Ya=!0;!0===a.autoUpdate&&a.updateMatrixWorld();void 0===b.parent&&b.updateMatrixWorld();b.matrixWorldInverse.getInverse(b.matrixWorld);Sb.multiplyMatrices(b.projectionMatrix,b.matrixWorldInverse);gc.setFromMatrix(Sb);Ob(a);va.length=0;ya.length=0;za=this.sortObjects;s(a,a,b);this.sortObjects&&(va.sort(q),ya.sort(r));p(this.renderPluginsPre,
+a,b);P.info.render.calls=0;P.info.render.vertices=0;P.info.render.faces=0;P.info.render.points=0;this.setRenderTarget(c);(this.autoClear||d)&&this.clear(this.autoClearColor,this.autoClearDepth,this.autoClearStencil);h=a.__webglObjectsImmediate;d=0;for(e=h.length;d<e;d++)f=h[d],g=f.object,g.visible&&(g._modelViewMatrix.multiplyMatrices(b.matrixWorldInverse,g.matrixWorld),g._normalMatrix.getNormalMatrix(g._modelViewMatrix),g=f.object.material,g.transparent?(f.transparent=g,f.opaque=null):(f.opaque=
+g,f.transparent=null));a.overrideMaterial?(d=a.overrideMaterial,this.setBlending(d.blending,d.blendEquation,d.blendSrc,d.blendDst),this.setDepthTest(d.depthTest),this.setDepthWrite(d.depthWrite),E(d.polygonOffset,d.polygonOffsetFactor,d.polygonOffsetUnits),v(va,b,k,l,!0,d),v(ya,b,k,l,!0,d),u(a.__webglObjectsImmediate,"",b,k,l,!1,d)):(d=null,this.setBlending(THREE.NoBlending),v(va,b,k,l,!1,d),u(a.__webglObjectsImmediate,"opaque",b,k,l,!1,d),v(ya,b,k,l,!0,d),u(a.__webglObjectsImmediate,"transparent",
+b,k,l,!0,d));p(this.renderPluginsPost,a,b);c&&c.generateMipmaps&&c.minFilter!==THREE.NearestFilter&&c.minFilter!==THREE.LinearFilter&&(c instanceof THREE.WebGLRenderTargetCube?(m.bindTexture(m.TEXTURE_CUBE_MAP,c.__webglTexture),m.generateMipmap(m.TEXTURE_CUBE_MAP),m.bindTexture(m.TEXTURE_CUBE_MAP,null)):(m.bindTexture(m.TEXTURE_2D,c.__webglTexture),m.generateMipmap(m.TEXTURE_2D),m.bindTexture(m.TEXTURE_2D,null)));this.setDepthTest(!0);this.setDepthWrite(!0)}};this.renderImmediateObject=function(a,
+b,c,d,e){var f=B(a,b,c,d,e);Fa=-1;P.setMaterialFaces(d);e.immediateRenderCallback?e.immediateRenderCallback(f,m,gc):e.render(function(a){P.renderBufferImmediate(a,f,d)})};var Ob=function(a){a.__webglObjects||(a.__webglObjects={},a.__webglObjectsImmediate=[]);for(;a.__objectsAdded.length;){var c=a.__objectsAdded[0],d=a,e=void 0,f=void 0;void 0===c.__webglInit&&(c.__webglInit=!0,c._modelViewMatrix=new THREE.Matrix4,c._normalMatrix=new THREE.Matrix3);e=c.geometry;if(void 0!==e&&void 0===e.__webglInit)if(e.__webglInit=
+!0,e.addEventListener("dispose",Pb),e instanceof THREE.BufferGeometry)g(e);else if(c instanceof THREE.Mesh)void 0!==c.__webglActive&&F(c,d),w(d,c,e);else if(c instanceof THREE.Line){if(!e.__webglVertexBuffer){f=e;f.__webglVertexBuffer=m.createBuffer();f.__webglColorBuffer=m.createBuffer();f.__webglLineDistanceBuffer=m.createBuffer();P.info.memory.geometries++;var f=e,h=c,k=f.vertices.length;f.__vertexArray=new Float32Array(3*k);f.__colorArray=new Float32Array(3*k);f.__lineDistanceArray=new Float32Array(1*
+k);f.__webglLineCount=k;b(f,h);e.verticesNeedUpdate=!0;e.colorsNeedUpdate=!0;e.lineDistancesNeedUpdate=!0}}else c instanceof THREE.PointCloud&&!e.__webglVertexBuffer&&(f=e,f.__webglVertexBuffer=m.createBuffer(),f.__webglColorBuffer=m.createBuffer(),P.info.memory.geometries++,f=e,h=c,k=f.vertices.length,f.__vertexArray=new Float32Array(3*k),f.__colorArray=new Float32Array(3*k),f.__sortArray=[],f.__webglParticleCount=k,b(f,h),e.verticesNeedUpdate=!0,e.colorsNeedUpdate=!0);if(void 0===c.__webglActive){if(c instanceof
+THREE.Mesh)if(e=c.geometry,e instanceof THREE.BufferGeometry)A(d.__webglObjects,e,c);else{if(e instanceof THREE.Geometry)for(h=0,k=e.geometryGroupsList.length;h<k;h++)f=e.geometryGroupsList[h],A(d.__webglObjects,f,c)}else c instanceof THREE.Line||c instanceof THREE.PointCloud?(e=c.geometry,A(d.__webglObjects,e,c)):(c instanceof THREE.ImmediateRenderObject||c.immediateRenderCallback)&&d.__webglObjectsImmediate.push({id:null,object:c,opaque:null,transparent:null,z:0});c.__webglActive=!0}a.__objectsAdded.splice(0,
+1)}for(;a.__objectsRemoved.length;)F(a.__objectsRemoved[0],a),a.__objectsRemoved.splice(0,1)};this.initMaterial=function(a,b,c,d){var e,f,g,h;a.addEventListener("dispose",fc);var k,l,n,p;a instanceof THREE.MeshDepthMaterial?p="depth":a instanceof THREE.MeshNormalMaterial?p="normal":a instanceof THREE.MeshBasicMaterial?p="basic":a instanceof THREE.MeshLambertMaterial?p="lambert":a instanceof THREE.MeshPhongMaterial?p="phong":a instanceof THREE.LineBasicMaterial?p="basic":a instanceof THREE.LineDashedMaterial?
+p="dashed":a instanceof THREE.PointCloudMaterial&&(p="particle_basic");p&&(e=THREE.ShaderLib[p],a.uniforms=THREE.UniformsUtils.clone(e.uniforms),a.vertexShader=e.vertexShader,a.fragmentShader=e.fragmentShader);n=h=g=f=e=0;for(var r=b.length;n<r;n++){var q=b[n];q.onlyShadow||!1===q.visible||(q instanceof THREE.DirectionalLight&&e++,q instanceof THREE.PointLight&&f++,q instanceof THREE.SpotLight&&g++,q instanceof THREE.HemisphereLight&&h++)}r=n=0;for(q=b.length;r<q;r++){var s=b[r];s.castShadow&&(s instanceof
+THREE.SpotLight&&n++,s instanceof THREE.DirectionalLight&&!s.shadowCascade&&n++)}b=n;Jb&&d&&d.skeleton&&d.skeleton.useVertexTexture?n=1024:(n=m.getParameter(m.MAX_VERTEX_UNIFORM_VECTORS),n=Math.floor((n-20)/4),void 0!==d&&d instanceof THREE.SkinnedMesh&&(n=Math.min(d.skeleton.bones.length,n),n<d.skeleton.bones.length&&console.warn("WebGLRenderer: too many bones - "+d.skeleton.bones.length+", this GPU supports just "+n+" (try OpenGL instead of ANGLE)")));c={precision:X,supportsVertexTextures:Mb,map:!!a.map,
+envMap:!!a.envMap,lightMap:!!a.lightMap,bumpMap:!!a.bumpMap,normalMap:!!a.normalMap,specularMap:!!a.specularMap,vertexColors:a.vertexColors,fog:c,useFog:a.fog,fogExp:c instanceof THREE.FogExp2,sizeAttenuation:a.sizeAttenuation,logarithmicDepthBuffer:ea,skinning:a.skinning,maxBones:n,useVertexTexture:Jb&&d&&d.skeleton&&d.skeleton.useVertexTexture,morphTargets:a.morphTargets,morphNormals:a.morphNormals,maxMorphTargets:this.maxMorphTargets,maxMorphNormals:this.maxMorphNormals,maxDirLights:e,maxPointLights:f,
+maxSpotLights:g,maxHemiLights:h,maxShadows:b,shadowMapEnabled:this.shadowMapEnabled&&d.receiveShadow&&0<b,shadowMapType:this.shadowMapType,shadowMapDebug:this.shadowMapDebug,shadowMapCascade:this.shadowMapCascade,alphaTest:a.alphaTest,metal:a.metal,wrapAround:a.wrapAround,doubleSided:a.side===THREE.DoubleSide,flipSided:a.side===THREE.BackSide};d=[];p?d.push(p):(d.push(a.fragmentShader),d.push(a.vertexShader));for(var t in a.defines)d.push(t),d.push(a.defines[t]);for(l in c)d.push(l),d.push(c[l]);
+p=d.join();var u;l=0;for(t=Ba.length;l<t;l++)if(d=Ba[l],d.code===p){u=d;u.usedTimes++;break}void 0===u&&(u=new THREE.WebGLProgram(this,p,a,c),Ba.push(u),P.info.memory.programs=Ba.length);a.program=u;u=a.program.attributes;if(a.morphTargets)for(a.numSupportedMorphTargets=0,t="morphTarget",l=0;l<this.maxMorphTargets;l++)p=t+l,0<=u[p]&&a.numSupportedMorphTargets++;if(a.morphNormals)for(a.numSupportedMorphNormals=0,t="morphNormal",l=0;l<this.maxMorphNormals;l++)p=t+l,0<=u[p]&&a.numSupportedMorphNormals++;
+a.uniformsList=[];for(k in a.uniforms)a.uniformsList.push([a.uniforms[k],k])};this.setFaceCulling=function(a,b){a===THREE.CullFaceNone?m.disable(m.CULL_FACE):(b===THREE.FrontFaceDirectionCW?m.frontFace(m.CW):m.frontFace(m.CCW),a===THREE.CullFaceBack?m.cullFace(m.BACK):a===THREE.CullFaceFront?m.cullFace(m.FRONT):m.cullFace(m.FRONT_AND_BACK),m.enable(m.CULL_FACE))};this.setMaterialFaces=function(a){var b=a.side===THREE.DoubleSide;a=a.side===THREE.BackSide;W!==b&&(b?m.disable(m.CULL_FACE):m.enable(m.CULL_FACE),
+W=b);ia!==a&&(a?m.frontFace(m.CW):m.frontFace(m.CCW),ia=a)};this.setDepthTest=function(a){pa!==a&&(a?m.enable(m.DEPTH_TEST):m.disable(m.DEPTH_TEST),pa=a)};this.setDepthWrite=function(a){ma!==a&&(m.depthMask(a),ma=a)};this.setBlending=function(a,b,c,d){a!==Ka&&(a===THREE.NoBlending?m.disable(m.BLEND):a===THREE.AdditiveBlending?(m.enable(m.BLEND),m.blendEquation(m.FUNC_ADD),m.blendFunc(m.SRC_ALPHA,m.ONE)):a===THREE.SubtractiveBlending?(m.enable(m.BLEND),m.blendEquation(m.FUNC_ADD),m.blendFunc(m.ZERO,
+m.ONE_MINUS_SRC_COLOR)):a===THREE.MultiplyBlending?(m.enable(m.BLEND),m.blendEquation(m.FUNC_ADD),m.blendFunc(m.ZERO,m.SRC_COLOR)):a===THREE.CustomBlending?m.enable(m.BLEND):(m.enable(m.BLEND),m.blendEquationSeparate(m.FUNC_ADD,m.FUNC_ADD),m.blendFuncSeparate(m.SRC_ALPHA,m.ONE_MINUS_SRC_ALPHA,m.ONE,m.ONE_MINUS_SRC_ALPHA)),Ka=a);if(a===THREE.CustomBlending){if(b!==ta&&(m.blendEquation(G(b)),ta=b),c!==T||d!==la)m.blendFunc(G(c),G(d)),T=c,la=d}else la=T=ta=null};this.setTexture=function(a,b){if(a.needsUpdate){a.__webglInit||
+(a.__webglInit=!0,a.addEventListener("dispose",Eb),a.__webglTexture=m.createTexture(),P.info.memory.textures++);m.activeTexture(m.TEXTURE0+b);m.bindTexture(m.TEXTURE_2D,a.__webglTexture);m.pixelStorei(m.UNPACK_FLIP_Y_WEBGL,a.flipY);m.pixelStorei(m.UNPACK_PREMULTIPLY_ALPHA_WEBGL,a.premultiplyAlpha);m.pixelStorei(m.UNPACK_ALIGNMENT,a.unpackAlignment);var c=a.image,d=THREE.Math.isPowerOfTwo(c.width)&&THREE.Math.isPowerOfTwo(c.height),e=G(a.format),f=G(a.type);M(m.TEXTURE_2D,a,d);var g=a.mipmaps;if(a instanceof
+THREE.DataTexture)if(0<g.length&&d){for(var h=0,k=g.length;h<k;h++)c=g[h],m.texImage2D(m.TEXTURE_2D,h,e,c.width,c.height,0,e,f,c.data);a.generateMipmaps=!1}else m.texImage2D(m.TEXTURE_2D,0,e,c.width,c.height,0,e,f,c.data);else if(a instanceof THREE.CompressedTexture)for(h=0,k=g.length;h<k;h++)c=g[h],a.format!==THREE.RGBAFormat?m.compressedTexImage2D(m.TEXTURE_2D,h,e,c.width,c.height,0,c.data):m.texImage2D(m.TEXTURE_2D,h,e,c.width,c.height,0,e,f,c.data);else if(0<g.length&&d){h=0;for(k=g.length;h<
+k;h++)c=g[h],m.texImage2D(m.TEXTURE_2D,h,e,e,f,c);a.generateMipmaps=!1}else m.texImage2D(m.TEXTURE_2D,0,e,e,f,a.image);a.generateMipmaps&&d&&m.generateMipmap(m.TEXTURE_2D);a.needsUpdate=!1;if(a.onUpdate)a.onUpdate()}else m.activeTexture(m.TEXTURE0+b),m.bindTexture(m.TEXTURE_2D,a.__webglTexture)};this.setRenderTarget=function(a){var b=a instanceof THREE.WebGLRenderTargetCube;if(a&&!a.__webglFramebuffer){void 0===a.depthBuffer&&(a.depthBuffer=!0);void 0===a.stencilBuffer&&(a.stencilBuffer=!0);a.addEventListener("dispose",
+ec);a.__webglTexture=m.createTexture();P.info.memory.textures++;var c=THREE.Math.isPowerOfTwo(a.width)&&THREE.Math.isPowerOfTwo(a.height),d=G(a.format),e=G(a.type);if(b){a.__webglFramebuffer=[];a.__webglRenderbuffer=[];m.bindTexture(m.TEXTURE_CUBE_MAP,a.__webglTexture);M(m.TEXTURE_CUBE_MAP,a,c);for(var f=0;6>f;f++){a.__webglFramebuffer[f]=m.createFramebuffer();a.__webglRenderbuffer[f]=m.createRenderbuffer();m.texImage2D(m.TEXTURE_CUBE_MAP_POSITIVE_X+f,0,d,a.width,a.height,0,d,e,null);var g=a,h=m.TEXTURE_CUBE_MAP_POSITIVE_X+
+f;m.bindFramebuffer(m.FRAMEBUFFER,a.__webglFramebuffer[f]);m.framebufferTexture2D(m.FRAMEBUFFER,m.COLOR_ATTACHMENT0,h,g.__webglTexture,0);V(a.__webglRenderbuffer[f],a)}c&&m.generateMipmap(m.TEXTURE_CUBE_MAP)}else a.__webglFramebuffer=m.createFramebuffer(),a.__webglRenderbuffer=a.shareDepthFrom?a.shareDepthFrom.__webglRenderbuffer:m.createRenderbuffer(),m.bindTexture(m.TEXTURE_2D,a.__webglTexture),M(m.TEXTURE_2D,a,c),m.texImage2D(m.TEXTURE_2D,0,d,a.width,a.height,0,d,e,null),d=m.TEXTURE_2D,m.bindFramebuffer(m.FRAMEBUFFER,
+a.__webglFramebuffer),m.framebufferTexture2D(m.FRAMEBUFFER,m.COLOR_ATTACHMENT0,d,a.__webglTexture,0),a.shareDepthFrom?a.depthBuffer&&!a.stencilBuffer?m.framebufferRenderbuffer(m.FRAMEBUFFER,m.DEPTH_ATTACHMENT,m.RENDERBUFFER,a.__webglRenderbuffer):a.depthBuffer&&a.stencilBuffer&&m.framebufferRenderbuffer(m.FRAMEBUFFER,m.DEPTH_STENCIL_ATTACHMENT,m.RENDERBUFFER,a.__webglRenderbuffer):V(a.__webglRenderbuffer,a),c&&m.generateMipmap(m.TEXTURE_2D);b?m.bindTexture(m.TEXTURE_CUBE_MAP,null):m.bindTexture(m.TEXTURE_2D,
+null);m.bindRenderbuffer(m.RENDERBUFFER,null);m.bindFramebuffer(m.FRAMEBUFFER,null)}a?(b=b?a.__webglFramebuffer[a.activeCubeFace]:a.__webglFramebuffer,c=a.width,a=a.height,e=d=0):(b=null,c=ua,a=wb,d=Ga,e=Ha);b!==La&&(m.bindFramebuffer(m.FRAMEBUFFER,b),m.viewport(d,e,c,a),La=b);Qb=c;Rb=a};this.shadowMapPlugin=new THREE.ShadowMapPlugin;this.addPrePlugin(this.shadowMapPlugin);this.addPostPlugin(new THREE.SpritePlugin);this.addPostPlugin(new THREE.LensFlarePlugin)};THREE.WebGLRenderTarget=function(a,b,c){this.width=a;this.height=b;c=c||{};this.wrapS=void 0!==c.wrapS?c.wrapS:THREE.ClampToEdgeWrapping;this.wrapT=void 0!==c.wrapT?c.wrapT:THREE.ClampToEdgeWrapping;this.magFilter=void 0!==c.magFilter?c.magFilter:THREE.LinearFilter;this.minFilter=void 0!==c.minFilter?c.minFilter:THREE.LinearMipMapLinearFilter;this.anisotropy=void 0!==c.anisotropy?c.anisotropy:1;this.offset=new THREE.Vector2(0,0);this.repeat=new THREE.Vector2(1,1);this.format=void 0!==c.format?c.format:
 THREE.RGBAFormat;this.type=void 0!==c.type?c.type:THREE.UnsignedByteType;this.depthBuffer=void 0!==c.depthBuffer?c.depthBuffer:!0;this.stencilBuffer=void 0!==c.stencilBuffer?c.stencilBuffer:!0;this.generateMipmaps=!0;this.shareDepthFrom=null};
 THREE.WebGLRenderTarget.prototype={constructor:THREE.WebGLRenderTarget,setSize:function(a,b){this.width=a;this.height=b},clone:function(){var a=new THREE.WebGLRenderTarget(this.width,this.height);a.wrapS=this.wrapS;a.wrapT=this.wrapT;a.magFilter=this.magFilter;a.minFilter=this.minFilter;a.anisotropy=this.anisotropy;a.offset.copy(this.offset);a.repeat.copy(this.repeat);a.format=this.format;a.type=this.type;a.depthBuffer=this.depthBuffer;a.stencilBuffer=this.stencilBuffer;a.generateMipmaps=this.generateMipmaps;
 a.shareDepthFrom=this.shareDepthFrom;return a},dispose:function(){this.dispatchEvent({type:"dispose"})}};THREE.EventDispatcher.prototype.apply(THREE.WebGLRenderTarget.prototype);THREE.WebGLRenderTargetCube=function(a,b,c){THREE.WebGLRenderTarget.call(this,a,b,c);this.activeCubeFace=0};THREE.WebGLRenderTargetCube.prototype=Object.create(THREE.WebGLRenderTarget.prototype);THREE.WebGLProgram=function(){var a=0;return function(b,c,d,e){var f=b.context,g=d.fragmentShader,h=d.vertexShader,k=d.uniforms,l=d.attributes,n=d.defines,q=d.index0AttributeName;void 0===q&&!0===e.morphTargets&&(q="position");var r="SHADOWMAP_TYPE_BASIC";e.shadowMapType===THREE.PCFShadowMap?r="SHADOWMAP_TYPE_PCF":e.shadowMapType===THREE.PCFSoftShadowMap&&(r="SHADOWMAP_TYPE_PCF_SOFT");var t,s;t=[];for(var p in n)s=n[p],!1!==s&&(s="#define "+p+" "+s,t.push(s));t=t.join("\n");n=f.createProgram();d instanceof
@@ -532,7 +531,7 @@ break;case "l":k=b[a++]*c+d;n=b[a++]*c;e.lineTo(k,n);break;case "q":k=b[a++]*c+d
 r,s,v,n)}return{offset:u.ha*c,path:e}}}};
 THREE.FontUtils.generateShapes=function(a,b){b=b||{};var c=void 0!==b.curveSegments?b.curveSegments:4,d=void 0!==b.font?b.font:"helvetiker",e=void 0!==b.weight?b.weight:"normal",f=void 0!==b.style?b.style:"normal";THREE.FontUtils.size=void 0!==b.size?b.size:100;THREE.FontUtils.divisions=c;THREE.FontUtils.face=d;THREE.FontUtils.weight=e;THREE.FontUtils.style=f;c=THREE.FontUtils.drawText(a).paths;d=[];e=0;for(f=c.length;e<f;e++)Array.prototype.push.apply(d,c[e].toShapes());return d};
 (function(a){var b=function(a){for(var b=a.length,e=0,f=b-1,g=0;g<b;f=g++)e+=a[f].x*a[g].y-a[g].x*a[f].y;return 0.5*e};a.Triangulate=function(a,d){var e=a.length;if(3>e)return null;var f=[],g=[],h=[],k,l,n;if(0<b(a))for(l=0;l<e;l++)g[l]=l;else for(l=0;l<e;l++)g[l]=e-1-l;var q=2*e;for(l=e-1;2<e;){if(0>=q--){console.log("Warning, unable to triangulate polygon!");break}k=l;e<=k&&(k=0);l=k+1;e<=l&&(l=0);n=l+1;e<=n&&(n=0);var r;a:{var t=r=void 0,s=void 0,p=void 0,v=void 0,u=void 0,w=void 0,A=void 0,D=
-void 0,t=a[g[k]].x,s=a[g[k]].y,p=a[g[l]].x,v=a[g[l]].y,u=a[g[n]].x,w=a[g[n]].y;if(1E-10>(p-t)*(w-s)-(v-s)*(u-t))r=!1;else{var x=void 0,F=void 0,B=void 0,z=void 0,C=void 0,y=void 0,Q=void 0,E=void 0,M=void 0,W=void 0,M=E=Q=D=A=void 0,x=u-p,F=w-v,B=t-u,z=s-w,C=p-t,y=v-s;for(r=0;r<e;r++)if(A=a[g[r]].x,D=a[g[r]].y,!(A===t&&D===s||A===p&&D===v||A===u&&D===w)&&(Q=A-t,E=D-s,M=A-p,W=D-v,A-=u,D-=w,M=x*W-F*M,Q=C*E-y*Q,E=B*D-z*A,-1E-10<=M&&-1E-10<=E&&-1E-10<=Q)){r=!1;break a}r=!0}}if(r){f.push([a[g[k]],a[g[l]],
+void 0,t=a[g[k]].x,s=a[g[k]].y,p=a[g[l]].x,v=a[g[l]].y,u=a[g[n]].x,w=a[g[n]].y;if(1E-10>(p-t)*(w-s)-(v-s)*(u-t))r=!1;else{var x=void 0,F=void 0,B=void 0,z=void 0,C=void 0,y=void 0,Q=void 0,E=void 0,M=void 0,V=void 0,M=E=Q=D=A=void 0,x=u-p,F=w-v,B=t-u,z=s-w,C=p-t,y=v-s;for(r=0;r<e;r++)if(A=a[g[r]].x,D=a[g[r]].y,!(A===t&&D===s||A===p&&D===v||A===u&&D===w)&&(Q=A-t,E=D-s,M=A-p,V=D-v,A-=u,D-=w,M=x*V-F*M,Q=C*E-y*Q,E=B*D-z*A,-1E-10<=M&&-1E-10<=E&&-1E-10<=Q)){r=!1;break a}r=!0}}if(r){f.push([a[g[k]],a[g[l]],
 a[g[n]]]);h.push([g[k],g[l],g[n]]);k=l;for(n=l+1;n<e;k++,n++)g[k]=g[n];e--;q=2*e}}return d?h:f};a.Triangulate.area=b;return a})(THREE.FontUtils);self._typeface_js={faces:THREE.FontUtils.faces,loadFace:THREE.FontUtils.loadFace};THREE.typeface_js=self._typeface_js;THREE.Curve=function(){};THREE.Curve.prototype.getPoint=function(a){console.log("Warning, getPoint() not implemented!");return null};THREE.Curve.prototype.getPointAt=function(a){a=this.getUtoTmapping(a);return this.getPoint(a)};THREE.Curve.prototype.getPoints=function(a){a||(a=5);var b,c=[];for(b=0;b<=a;b++)c.push(this.getPoint(b/a));return c};THREE.Curve.prototype.getSpacedPoints=function(a){a||(a=5);var b,c=[];for(b=0;b<=a;b++)c.push(this.getPointAt(b/a));return c};
 THREE.Curve.prototype.getLength=function(){var a=this.getLengths();return a[a.length-1]};THREE.Curve.prototype.getLengths=function(a){a||(a=this.__arcLengthDivisions?this.__arcLengthDivisions:200);if(this.cacheArcLengths&&this.cacheArcLengths.length==a+1&&!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=!1;var b=[],c,d=this.getPoint(0),e,f=0;b.push(0);for(e=1;e<=a;e++)c=this.getPoint(e/a),f+=c.distanceTo(d),b.push(f),d=c;return this.cacheArcLengths=b};
 THREE.Curve.prototype.updateArcLengths=function(){this.needsUpdate=!0;this.getLengths()};THREE.Curve.prototype.getUtoTmapping=function(a,b){var c=this.getLengths(),d=0,e=c.length,f;f=b?b:a*c[e-1];for(var g=0,h=e-1,k;g<=h;)if(d=Math.floor(g+(h-g)/2),k=c[d]-f,0>k)g=d+1;else if(0<k)h=d-1;else{h=d;break}d=h;if(c[d]==f)return d/(e-1);g=c[d];return c=(d+(f-g)/(c[d+1]-g))/(e-1)};THREE.Curve.prototype.getTangent=function(a){var b=a-1E-4;a+=1E-4;0>b&&(b=0);1<a&&(a=1);b=this.getPoint(b);return this.getPoint(a).clone().sub(b).normalize()};
@@ -566,7 +565,7 @@ THREE.Shape.prototype.extractAllSpacedPoints=function(a){return{shape:this.getTr
 THREE.Shape.Utils={triangulateShape:function(a,b){function c(a,b,c){return a.x!=b.x?a.x<b.x?a.x<=c.x&&c.x<=b.x:b.x<=c.x&&c.x<=a.x:a.y<b.y?a.y<=c.y&&c.y<=b.y:b.y<=c.y&&c.y<=a.y}function d(a,b,d,e,f){var g=b.x-a.x,h=b.y-a.y,k=e.x-d.x,l=e.y-d.y,n=a.x-d.x,q=a.y-d.y,B=h*k-g*l,z=h*n-g*q;if(1E-10<Math.abs(B)){if(0<B){if(0>z||z>B)return[];k=l*n-k*q;if(0>k||k>B)return[]}else{if(0<z||z<B)return[];k=l*n-k*q;if(0<k||k<B)return[]}if(0==k)return!f||0!=z&&z!=B?[a]:[];if(k==B)return!f||0!=z&&z!=B?[b]:[];if(0==z)return[d];
 if(z==B)return[e];f=k/B;return[{x:a.x+f*g,y:a.y+f*h}]}if(0!=z||l*n!=k*q)return[];h=0==g&&0==h;k=0==k&&0==l;if(h&&k)return a.x!=d.x||a.y!=d.y?[]:[a];if(h)return c(d,e,a)?[a]:[];if(k)return c(a,b,d)?[d]:[];0!=g?(a.x<b.x?(g=a,k=a.x,h=b,a=b.x):(g=b,k=b.x,h=a,a=a.x),d.x<e.x?(b=d,B=d.x,l=e,d=e.x):(b=e,B=e.x,l=d,d=d.x)):(a.y<b.y?(g=a,k=a.y,h=b,a=b.y):(g=b,k=b.y,h=a,a=a.y),d.y<e.y?(b=d,B=d.y,l=e,d=e.y):(b=e,B=e.y,l=d,d=d.y));return k<=B?a<B?[]:a==B?f?[]:[b]:a<=d?[b,h]:[b,l]:k>d?[]:k==d?f?[]:[g]:a<=d?[g,h]:
 [g,l]}function e(a,b,c,d){var e=b.x-a.x,f=b.y-a.y;b=c.x-a.x;c=c.y-a.y;var g=d.x-a.x;d=d.y-a.y;a=e*c-f*b;e=e*d-f*g;return 1E-10<Math.abs(a)?(b=g*c-d*b,0<a?0<=e&&0<=b:0<=e||0<=b):0<e}var f,g,h,k,l,n={};h=a.concat();f=0;for(g=b.length;f<g;f++)Array.prototype.push.apply(h,b[f]);f=0;for(g=h.length;f<g;f++)l=h[f].x+":"+h[f].y,void 0!==n[l]&&console.log("Duplicate point",l),n[l]=f;f=function(a,b){function c(a,b){var d=h.length-1,f=a-1;0>f&&(f=d);var g=a+1;g>d&&(g=0);d=e(h[a],h[f],h[g],k[b]);if(!d)return!1;
-d=k.length-1;f=b-1;0>f&&(f=d);g=b+1;g>d&&(g=0);return(d=e(k[b],k[f],k[g],h[a]))?!0:!1}function f(a,b){var c,e;for(c=0;c<h.length;c++)if(e=c+1,e%=h.length,e=d(a,b,h[c],h[e],!0),0<e.length)return!0;return!1}function g(a,c){var e,f,h,k;for(e=0;e<l.length;e++)for(f=b[l[e]],h=0;h<f.length;h++)if(k=h+1,k%=f.length,k=d(a,c,f[h],f[k],!0),0<k.length)return!0;return!1}var h=a.concat(),k,l=[],n,q,F,B,z,C=[],y,Q,E,M=0;for(n=b.length;M<n;M++)l.push(M);y=0;for(var W=2*l.length;0<l.length;){W--;if(0>W){console.log("Infinite Loop! Holes left:"+
+d=k.length-1;f=b-1;0>f&&(f=d);g=b+1;g>d&&(g=0);return(d=e(k[b],k[f],k[g],h[a]))?!0:!1}function f(a,b){var c,e;for(c=0;c<h.length;c++)if(e=c+1,e%=h.length,e=d(a,b,h[c],h[e],!0),0<e.length)return!0;return!1}function g(a,c){var e,f,h,k;for(e=0;e<l.length;e++)for(f=b[l[e]],h=0;h<f.length;h++)if(k=h+1,k%=f.length,k=d(a,c,f[h],f[k],!0),0<k.length)return!0;return!1}var h=a.concat(),k,l=[],n,q,F,B,z,C=[],y,Q,E,M=0;for(n=b.length;M<n;M++)l.push(M);y=0;for(var V=2*l.length;0<l.length;){V--;if(0>V){console.log("Infinite Loop! Holes left:"+
 l.length+", Probably Hole outside Shape!");break}for(q=y;q<h.length;q++){F=h[q];n=-1;for(M=0;M<l.length;M++)if(B=l[M],z=F.x+":"+F.y+":"+B,void 0===C[z]){k=b[B];for(Q=0;Q<k.length;Q++)if(B=k[Q],c(q,Q)&&!f(F,B)&&!g(F,B)){n=Q;l.splice(M,1);y=h.slice(0,q+1);B=h.slice(q);Q=k.slice(n);E=k.slice(0,n+1);h=y.concat(Q).concat(E).concat(B);y=q;break}if(0<=n)break;C[z]=!0}if(0<=n)break}}return h}(a,b);var q=THREE.FontUtils.Triangulate(f,!1);f=0;for(g=q.length;f<g;f++)for(k=q[f],h=0;3>h;h++)l=k[h].x+":"+k[h].y,
 l=n[l],void 0!==l&&(k[h]=l);return q.concat()},isClockWise:function(a){return 0>THREE.FontUtils.Triangulate.area(a)},b2p0:function(a,b){var c=1-a;return c*c*b},b2p1:function(a,b){return 2*(1-a)*a*b},b2p2:function(a,b){return a*a*b},b2:function(a,b,c,d){return this.b2p0(a,b)+this.b2p1(a,c)+this.b2p2(a,d)},b3p0:function(a,b){var c=1-a;return c*c*c*b},b3p1:function(a,b){var c=1-a;return 3*c*c*a*b},b3p2:function(a,b){return 3*(1-a)*a*a*b},b3p3:function(a,b){return a*a*a*b},b3:function(a,b,c,d,e){return this.b3p0(a,
 b)+this.b3p1(a,c)+this.b3p2(a,d)+this.b3p3(a,e)}};THREE.LineCurve=function(a,b){this.v1=a;this.v2=b};THREE.LineCurve.prototype=Object.create(THREE.Curve.prototype);THREE.LineCurve.prototype.getPoint=function(a){var b=this.v2.clone().sub(this.v1);b.multiplyScalar(a).add(this.v1);return b};THREE.LineCurve.prototype.getPointAt=function(a){return this.getPoint(a)};THREE.LineCurve.prototype.getTangent=function(a){return this.v2.clone().sub(this.v1).normalize()};THREE.QuadraticBezierCurve=function(a,b,c){this.v0=a;this.v1=b;this.v2=c};THREE.QuadraticBezierCurve.prototype=Object.create(THREE.Curve.prototype);THREE.QuadraticBezierCurve.prototype.getPoint=function(a){var b;b=THREE.Shape.Utils.b2(a,this.v0.x,this.v1.x,this.v2.x);a=THREE.Shape.Utils.b2(a,this.v0.y,this.v1.y,this.v2.y);return new THREE.Vector2(b,a)};
@@ -604,13 +603,13 @@ b;e++)this.faces.push(new THREE.Face3(e,e+1,0,[c.clone(),c.clone(),c.clone()])),
 s,v,[u,w,D]));this.faceVertexUvs[0].push([x,F,z]);this.faces.push(new THREE.Face3(s,p,v,[w.clone(),A,D.clone()]));this.faceVertexUvs[0].push([F.clone(),B,z.clone()])}if(!1===f&&0<a)for(this.vertices.push(new THREE.Vector3(0,g,0)),h=0;h<d;h++)t=l[0][h],s=l[0][h+1],p=this.vertices.length-1,u=new THREE.Vector3(0,1,0),w=new THREE.Vector3(0,1,0),A=new THREE.Vector3(0,1,0),x=n[0][h].clone(),F=n[0][h+1].clone(),B=new THREE.Vector2(F.x,0),this.faces.push(new THREE.Face3(t,s,p,[u,w,A])),this.faceVertexUvs[0].push([x,
 F,B]);if(!1===f&&0<b)for(this.vertices.push(new THREE.Vector3(0,-g,0)),h=0;h<d;h++)t=l[k][h+1],s=l[k][h],p=this.vertices.length-1,u=new THREE.Vector3(0,-1,0),w=new THREE.Vector3(0,-1,0),A=new THREE.Vector3(0,-1,0),x=n[k][h+1].clone(),F=n[k][h].clone(),B=new THREE.Vector2(F.x,1),this.faces.push(new THREE.Face3(t,s,p,[u,w,A])),this.faceVertexUvs[0].push([x,F,B]);this.computeFaceNormals()};THREE.CylinderGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.ExtrudeGeometry=function(a,b){"undefined"!==typeof a&&(THREE.Geometry.call(this),a=a instanceof Array?a:[a],this.addShapeList(a,b),this.computeFaceNormals())};THREE.ExtrudeGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.ExtrudeGeometry.prototype.addShapeList=function(a,b){for(var c=a.length,d=0;d<c;d++)this.addShape(a[d],b)};
 THREE.ExtrudeGeometry.prototype.addShape=function(a,b){function c(a,b,c){b||console.log("die");return b.clone().multiplyScalar(c).add(a)}function d(a,b,c){var d=THREE.Math.sign,e=1,e=a.x-b.x,f=a.y-b.y,g=c.x-a.x,h=c.y-a.y,k=e*e+f*f;if(1E-10<Math.abs(e*h-f*g)){var l=Math.sqrt(k),d=Math.sqrt(g*g+h*h),k=b.x-f/l;b=b.y+e/l;g=((c.x-h/d-k)*h-(c.y+g/d-b)*g)/(e*h-f*g);c=k+e*g-a.x;a=b+f*g-a.y;e=c*c+a*a;if(2>=e)return new THREE.Vector2(c,a);e=Math.sqrt(e/2)}else a=!1,1E-10<e?1E-10<g&&(a=!0):-1E-10>e?-1E-10>g&&
-(a=!0):d(f)==d(h)&&(a=!0),a?(c=-f,a=e,e=Math.sqrt(k)):(c=e,a=f,e=Math.sqrt(k/2));return new THREE.Vector2(c/e,a/e)}function e(c,d){var e,f;for(O=c.length;0<=--O;){e=O;f=O-1;0>f&&(f=c.length-1);for(var g=0,h=t+2*n,g=0;g<h;g++){var k=ha*g,l=ha*(g+1),p=d+e+k,k=d+f+k,q=d+f+l,l=d+e+l,r=c,s=g,u=h,v=e,x=f,p=p+E,k=k+E,q=q+E,l=l+E;Q.faces.push(new THREE.Face3(p,k,l,null,null,w));Q.faces.push(new THREE.Face3(k,q,l,null,null,w));p=A.generateSideWallUV(Q,a,r,b,p,k,q,l,s,u,v,x);Q.faceVertexUvs[0].push([p[0],p[1],
+(a=!0):d(f)==d(h)&&(a=!0),a?(c=-f,a=e,e=Math.sqrt(k)):(c=e,a=f,e=Math.sqrt(k/2));return new THREE.Vector2(c/e,a/e)}function e(c,d){var e,f;for(O=c.length;0<=--O;){e=O;f=O-1;0>f&&(f=c.length-1);for(var g=0,h=t+2*n,g=0;g<h;g++){var k=ga*g,l=ga*(g+1),p=d+e+k,k=d+f+k,q=d+f+l,l=d+e+l,r=c,s=g,u=h,v=e,x=f,p=p+E,k=k+E,q=q+E,l=l+E;Q.faces.push(new THREE.Face3(p,k,l,null,null,w));Q.faces.push(new THREE.Face3(k,q,l,null,null,w));p=A.generateSideWallUV(Q,a,r,b,p,k,q,l,s,u,v,x);Q.faceVertexUvs[0].push([p[0],p[1],
 p[3]]);Q.faceVertexUvs[0].push([p[1],p[2],p[3]])}}}function f(a,b,c){Q.vertices.push(new THREE.Vector3(a,b,c))}function g(c,d,e,f){c+=E;d+=E;e+=E;Q.faces.push(new THREE.Face3(c,d,e,null,null,u));c=f?A.generateBottomUV(Q,a,b,c,d,e):A.generateTopUV(Q,a,b,c,d,e);Q.faceVertexUvs[0].push(c)}var h=void 0!==b.amount?b.amount:100,k=void 0!==b.bevelThickness?b.bevelThickness:6,l=void 0!==b.bevelSize?b.bevelSize:k-2,n=void 0!==b.bevelSegments?b.bevelSegments:3,q=void 0!==b.bevelEnabled?b.bevelEnabled:!0,r=
 void 0!==b.curveSegments?b.curveSegments:12,t=void 0!==b.steps?b.steps:1,s=b.extrudePath,p,v=!1,u=b.material,w=b.extrudeMaterial,A=void 0!==b.UVGenerator?b.UVGenerator:THREE.ExtrudeGeometry.WorldUVGenerator,D,x,F,B;s&&(p=s.getSpacedPoints(t),v=!0,q=!1,D=void 0!==b.frames?b.frames:new THREE.TubeGeometry.FrenetFrames(s,t,!1),x=new THREE.Vector3,F=new THREE.Vector3,B=new THREE.Vector3);q||(l=k=n=0);var z,C,y,Q=this,E=this.vertices.length,s=a.extractPoints(r),r=s.shape,M=s.holes;if(s=!THREE.Shape.Utils.isClockWise(r)){r=
-r.reverse();C=0;for(y=M.length;C<y;C++)z=M[C],THREE.Shape.Utils.isClockWise(z)&&(M[C]=z.reverse());s=!1}var W=THREE.Shape.Utils.triangulateShape(r,M),H=r;C=0;for(y=M.length;C<y;C++)z=M[C],r=r.concat(z);var G,J,K,X,L,ha=r.length,R,Z=W.length,s=[],O=0;K=H.length;G=K-1;for(J=O+1;O<K;O++,G++,J++)G===K&&(G=0),J===K&&(J=0),s[O]=d(H[O],H[G],H[J]);var ia=[],fa,Y=s.concat();C=0;for(y=M.length;C<y;C++){z=M[C];fa=[];O=0;K=z.length;G=K-1;for(J=O+1;O<K;O++,G++,J++)G===K&&(G=0),J===K&&(J=0),fa[O]=d(z[O],z[G],z[J]);
-ia.push(fa);Y=Y.concat(fa)}for(G=0;G<n;G++){K=G/n;X=k*(1-K);J=l*Math.sin(K*Math.PI/2);O=0;for(K=H.length;O<K;O++)L=c(H[O],s[O],J),f(L.x,L.y,-X);C=0;for(y=M.length;C<y;C++)for(z=M[C],fa=ia[C],O=0,K=z.length;O<K;O++)L=c(z[O],fa[O],J),f(L.x,L.y,-X)}J=l;for(O=0;O<ha;O++)L=q?c(r[O],Y[O],J):r[O],v?(F.copy(D.normals[0]).multiplyScalar(L.x),x.copy(D.binormals[0]).multiplyScalar(L.y),B.copy(p[0]).add(F).add(x),f(B.x,B.y,B.z)):f(L.x,L.y,0);for(K=1;K<=t;K++)for(O=0;O<ha;O++)L=q?c(r[O],Y[O],J):r[O],v?(F.copy(D.normals[K]).multiplyScalar(L.x),
-x.copy(D.binormals[K]).multiplyScalar(L.y),B.copy(p[K]).add(F).add(x),f(B.x,B.y,B.z)):f(L.x,L.y,h/t*K);for(G=n-1;0<=G;G--){K=G/n;X=k*(1-K);J=l*Math.sin(K*Math.PI/2);O=0;for(K=H.length;O<K;O++)L=c(H[O],s[O],J),f(L.x,L.y,h+X);C=0;for(y=M.length;C<y;C++)for(z=M[C],fa=ia[C],O=0,K=z.length;O<K;O++)L=c(z[O],fa[O],J),v?f(L.x,L.y+p[t-1].y,p[t-1].x+X):f(L.x,L.y,h+X)}(function(){if(q){var a;a=0*ha;for(O=0;O<Z;O++)R=W[O],g(R[2]+a,R[1]+a,R[0]+a,!0);a=t+2*n;a*=ha;for(O=0;O<Z;O++)R=W[O],g(R[0]+a,R[1]+a,R[2]+a,
-!1)}else{for(O=0;O<Z;O++)R=W[O],g(R[2],R[1],R[0],!0);for(O=0;O<Z;O++)R=W[O],g(R[0]+ha*t,R[1]+ha*t,R[2]+ha*t,!1)}})();(function(){var a=0;e(H,a);a+=H.length;C=0;for(y=M.length;C<y;C++)z=M[C],e(z,a),a+=z.length})()};
+r.reverse();C=0;for(y=M.length;C<y;C++)z=M[C],THREE.Shape.Utils.isClockWise(z)&&(M[C]=z.reverse());s=!1}var V=THREE.Shape.Utils.triangulateShape(r,M),H=r;C=0;for(y=M.length;C<y;C++)z=M[C],r=r.concat(z);var G,J,K,X,L,ga=r.length,R,Z=V.length,s=[],O=0;K=H.length;G=K-1;for(J=O+1;O<K;O++,G++,J++)G===K&&(G=0),J===K&&(J=0),s[O]=d(H[O],H[G],H[J]);var ha=[],ea,Y=s.concat();C=0;for(y=M.length;C<y;C++){z=M[C];ea=[];O=0;K=z.length;G=K-1;for(J=O+1;O<K;O++,G++,J++)G===K&&(G=0),J===K&&(J=0),ea[O]=d(z[O],z[G],z[J]);
+ha.push(ea);Y=Y.concat(ea)}for(G=0;G<n;G++){K=G/n;X=k*(1-K);J=l*Math.sin(K*Math.PI/2);O=0;for(K=H.length;O<K;O++)L=c(H[O],s[O],J),f(L.x,L.y,-X);C=0;for(y=M.length;C<y;C++)for(z=M[C],ea=ha[C],O=0,K=z.length;O<K;O++)L=c(z[O],ea[O],J),f(L.x,L.y,-X)}J=l;for(O=0;O<ga;O++)L=q?c(r[O],Y[O],J):r[O],v?(F.copy(D.normals[0]).multiplyScalar(L.x),x.copy(D.binormals[0]).multiplyScalar(L.y),B.copy(p[0]).add(F).add(x),f(B.x,B.y,B.z)):f(L.x,L.y,0);for(K=1;K<=t;K++)for(O=0;O<ga;O++)L=q?c(r[O],Y[O],J):r[O],v?(F.copy(D.normals[K]).multiplyScalar(L.x),
+x.copy(D.binormals[K]).multiplyScalar(L.y),B.copy(p[K]).add(F).add(x),f(B.x,B.y,B.z)):f(L.x,L.y,h/t*K);for(G=n-1;0<=G;G--){K=G/n;X=k*(1-K);J=l*Math.sin(K*Math.PI/2);O=0;for(K=H.length;O<K;O++)L=c(H[O],s[O],J),f(L.x,L.y,h+X);C=0;for(y=M.length;C<y;C++)for(z=M[C],ea=ha[C],O=0,K=z.length;O<K;O++)L=c(z[O],ea[O],J),v?f(L.x,L.y+p[t-1].y,p[t-1].x+X):f(L.x,L.y,h+X)}(function(){if(q){var a;a=0*ga;for(O=0;O<Z;O++)R=V[O],g(R[2]+a,R[1]+a,R[0]+a,!0);a=t+2*n;a*=ga;for(O=0;O<Z;O++)R=V[O],g(R[0]+a,R[1]+a,R[2]+a,
+!1)}else{for(O=0;O<Z;O++)R=V[O],g(R[2],R[1],R[0],!0);for(O=0;O<Z;O++)R=V[O],g(R[0]+ga*t,R[1]+ga*t,R[2]+ga*t,!1)}})();(function(){var a=0;e(H,a);a+=H.length;C=0;for(y=M.length;C<y;C++)z=M[C],e(z,a),a+=z.length})()};
 THREE.ExtrudeGeometry.WorldUVGenerator={generateTopUV:function(a,b,c,d,e,f){b=a.vertices[e].x;e=a.vertices[e].y;c=a.vertices[f].x;f=a.vertices[f].y;return[new THREE.Vector2(a.vertices[d].x,a.vertices[d].y),new THREE.Vector2(b,e),new THREE.Vector2(c,f)]},generateBottomUV:function(a,b,c,d,e,f){return this.generateTopUV(a,b,c,d,e,f)},generateSideWallUV:function(a,b,c,d,e,f,g,h,k,l,n,q){b=a.vertices[e].x;c=a.vertices[e].y;e=a.vertices[e].z;d=a.vertices[f].x;k=a.vertices[f].y;f=a.vertices[f].z;l=a.vertices[g].x;
 n=a.vertices[g].y;g=a.vertices[g].z;q=a.vertices[h].x;var r=a.vertices[h].y;a=a.vertices[h].z;return 0.01>Math.abs(c-k)?[new THREE.Vector2(b,1-e),new THREE.Vector2(d,1-f),new THREE.Vector2(l,1-g),new THREE.Vector2(q,1-a)]:[new THREE.Vector2(c,1-e),new THREE.Vector2(k,1-f),new THREE.Vector2(n,1-g),new THREE.Vector2(r,1-a)]}};THREE.ExtrudeGeometry.__v1=new THREE.Vector2;THREE.ExtrudeGeometry.__v2=new THREE.Vector2;THREE.ExtrudeGeometry.__v3=new THREE.Vector2;THREE.ExtrudeGeometry.__v4=new THREE.Vector2;
 THREE.ExtrudeGeometry.__v5=new THREE.Vector2;THREE.ExtrudeGeometry.__v6=new THREE.Vector2;THREE.ShapeGeometry=function(a,b){THREE.Geometry.call(this);!1===a instanceof Array&&(a=[a]);this.addShapeList(a,b);this.computeFaceNormals()};THREE.ShapeGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.ShapeGeometry.prototype.addShapeList=function(a,b){for(var c=0,d=a.length;c<d;c++)this.addShape(a[c],b);return this};
@@ -676,7 +675,7 @@ c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MAG_FILTER,c.NEAREST);c.texParameteri(c.T
 c.getUniformLocation(r,"opacity");s.color=c.getUniformLocation(r,"color");s.scale=c.getUniformLocation(r,"scale");s.rotation=c.getUniformLocation(r,"rotation");s.screenPosition=c.getUniformLocation(r,"screenPosition")};this.render=function(a,e,f,g){b.length=0;a.traverseVisible(function(a){a instanceof THREE.LensFlare&&b.push(a)});if(0!==b.length){a=new THREE.Vector3;var A=g/f,D=0.5*f,x=0.5*g,F=16/g,B=new THREE.Vector2(F*A,F),z=new THREE.Vector3(1,1,0),C=new THREE.Vector2(1,1),y=s,F=t;c.useProgram(r);
 c.enableVertexAttribArray(t.vertex);c.enableVertexAttribArray(t.uv);c.uniform1i(y.occlusionMap,0);c.uniform1i(y.map,1);c.bindBuffer(c.ARRAY_BUFFER,h);c.vertexAttribPointer(F.vertex,2,c.FLOAT,!1,16,0);c.vertexAttribPointer(F.uv,2,c.FLOAT,!1,16,8);c.bindBuffer(c.ELEMENT_ARRAY_BUFFER,k);c.disable(c.CULL_FACE);c.depthMask(!1);for(var Q=0,E=b.length;Q<E;Q++){F=16/g;B.set(F*A,F);var M=b[Q];a.set(M.matrixWorld.elements[12],M.matrixWorld.elements[13],M.matrixWorld.elements[14]);a.applyMatrix4(e.matrixWorldInverse);
 a.applyProjection(e.projectionMatrix);z.copy(a);C.x=z.x*D+D;C.y=z.y*x+x;if(q||0<C.x&&C.x<f&&0<C.y&&C.y<g){c.activeTexture(c.TEXTURE1);c.bindTexture(c.TEXTURE_2D,l);c.copyTexImage2D(c.TEXTURE_2D,0,c.RGB,C.x-8,C.y-8,16,16,0);c.uniform1i(y.renderType,0);c.uniform2f(y.scale,B.x,B.y);c.uniform3f(y.screenPosition,z.x,z.y,z.z);c.disable(c.BLEND);c.enable(c.DEPTH_TEST);c.drawElements(c.TRIANGLES,6,c.UNSIGNED_SHORT,0);c.activeTexture(c.TEXTURE0);c.bindTexture(c.TEXTURE_2D,n);c.copyTexImage2D(c.TEXTURE_2D,
-0,c.RGBA,C.x-8,C.y-8,16,16,0);c.uniform1i(y.renderType,1);c.disable(c.DEPTH_TEST);c.activeTexture(c.TEXTURE1);c.bindTexture(c.TEXTURE_2D,l);c.drawElements(c.TRIANGLES,6,c.UNSIGNED_SHORT,0);M.positionScreen.copy(z);M.customUpdateCallback?M.customUpdateCallback(M):M.updateLensFlares();c.uniform1i(y.renderType,2);c.enable(c.BLEND);for(var W=0,H=M.lensFlares.length;W<H;W++){var G=M.lensFlares[W];0.001<G.opacity&&0.001<G.scale&&(z.x=G.x,z.y=G.y,z.z=G.z,F=G.size*G.scale/g,B.x=F*A,B.y=F,c.uniform3f(y.screenPosition,
+0,c.RGBA,C.x-8,C.y-8,16,16,0);c.uniform1i(y.renderType,1);c.disable(c.DEPTH_TEST);c.activeTexture(c.TEXTURE1);c.bindTexture(c.TEXTURE_2D,l);c.drawElements(c.TRIANGLES,6,c.UNSIGNED_SHORT,0);M.positionScreen.copy(z);M.customUpdateCallback?M.customUpdateCallback(M):M.updateLensFlares();c.uniform1i(y.renderType,2);c.enable(c.BLEND);for(var V=0,H=M.lensFlares.length;V<H;V++){var G=M.lensFlares[V];0.001<G.opacity&&0.001<G.scale&&(z.x=G.x,z.y=G.y,z.z=G.z,F=G.size*G.scale/g,B.x=F*A,B.y=F,c.uniform3f(y.screenPosition,
 z.x,z.y,z.z),c.uniform2f(y.scale,B.x,B.y),c.uniform1f(y.rotation,G.rotation),c.uniform1f(y.opacity,G.opacity),c.uniform3f(y.color,G.color.r,G.color.g,G.color.b),d.setBlending(G.blending,G.blendEquation,G.blendSrc,G.blendDst),d.setTexture(G.texture,1),c.drawElements(c.TRIANGLES,6,c.UNSIGNED_SHORT,0))}}}c.enable(c.CULL_FACE);c.enable(c.DEPTH_TEST);c.depthMask(!0)}}};THREE.ShadowMapPlugin=function(){function a(b,c,d){if(c.visible){var e=b.__webglObjects[c.id];if(e&&c.castShadow&&(!1===c.frustumCulled||!0===h.intersectsObject(c)))for(var f=0,g=e.length;f<g;f++){var k=e[f];c._modelViewMatrix.multiplyMatrices(d.matrixWorldInverse,c.matrixWorld);r.push(k)}f=0;for(g=c.children.length;f<g;f++)a(b,c.children[f],d)}}var b,c,d,e,f,g,h=new THREE.Frustum,k=new THREE.Matrix4,l=new THREE.Vector3,n=new THREE.Vector3,q=new THREE.Vector3,r=[];this.init=function(a){b=a.context;
 c=a;a=THREE.ShaderLib.depthRGBA;var h=THREE.UniformsUtils.clone(a.uniforms);d=new THREE.ShaderMaterial({fragmentShader:a.fragmentShader,vertexShader:a.vertexShader,uniforms:h});e=new THREE.ShaderMaterial({fragmentShader:a.fragmentShader,vertexShader:a.vertexShader,uniforms:h,morphTargets:!0});f=new THREE.ShaderMaterial({fragmentShader:a.fragmentShader,vertexShader:a.vertexShader,uniforms:h,skinning:!0});g=new THREE.ShaderMaterial({fragmentShader:a.fragmentShader,vertexShader:a.vertexShader,uniforms:h,
 morphTargets:!0,skinning:!0});d._shadowPass=!0;e._shadowPass=!0;f._shadowPass=!0;g._shadowPass=!0};this.render=function(a,b){c.shadowMapEnabled&&c.shadowMapAutoUpdate&&this.update(a,b)};this.update=function(t,s){var p,v,u,w,A,D,x,F,B=[];w=0;b.clearColor(1,1,1,1);b.disable(b.BLEND);b.enable(b.CULL_FACE);b.frontFace(b.CCW);c.shadowMapCullFace===THREE.CullFaceFront?b.cullFace(b.FRONT):b.cullFace(b.BACK);c.setDepthTest(!0);p=0;for(v=t.__lights.length;p<v;p++)if(u=t.__lights[p],u.castShadow)if(u instanceof
@@ -692,9 +691,9 @@ t.__webglObjectsImmediate;u=0;for(w=C.length;u<w;u++)x=C[u],D=x.object,D.visible
 var x=w.createShader(w.VERTEX_SHADER),M=w.createShader(w.FRAGMENT_SHADER);w.shaderSource(x,["precision "+A.getPrecision()+" float;","uniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform float rotation;\nuniform vec2 scale;\nuniform vec2 uvOffset;\nuniform vec2 uvScale;\nattribute vec2 position;\nattribute vec2 uv;\nvarying vec2 vUV;\nvoid main() {\nvUV = uvOffset + uv * uvScale;\nvec2 alignedPosition = position * scale;\nvec2 rotatedPosition;\nrotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\nrotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\nvec4 finalPosition;\nfinalPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\nfinalPosition.xy += rotatedPosition;\nfinalPosition = projectionMatrix * finalPosition;\ngl_Position = finalPosition;\n}"].join("\n"));
 w.shaderSource(M,["precision "+A.getPrecision()+" float;","uniform vec3 color;\nuniform sampler2D map;\nuniform float opacity;\nuniform int fogType;\nuniform vec3 fogColor;\nuniform float fogDensity;\nuniform float fogNear;\nuniform float fogFar;\nuniform float alphaTest;\nvarying vec2 vUV;\nvoid main() {\nvec4 texture = texture2D( map, vUV );\nif ( texture.a < alphaTest ) discard;\ngl_FragColor = vec4( color * texture.xyz, texture.a * opacity );\nif ( fogType > 0 ) {\nfloat depth = gl_FragCoord.z / gl_FragCoord.w;\nfloat fogFactor = 0.0;\nif ( fogType == 1 ) {\nfogFactor = smoothstep( fogNear, fogFar, depth );\n} else {\nconst float LOG2 = 1.442695;\nfloat fogFactor = exp2( - fogDensity * fogDensity * depth * depth * LOG2 );\nfogFactor = 1.0 - clamp( fogFactor, 0.0, 1.0 );\n}\ngl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );\n}\n}"].join("\n"));
 w.compileShader(x);w.compileShader(M);w.attachShader(u,x);w.attachShader(u,M);w.linkProgram(u);y=u;p=w.getAttribLocation(y,"position");v=w.getAttribLocation(y,"uv");a=w.getUniformLocation(y,"uvOffset");b=w.getUniformLocation(y,"uvScale");c=w.getUniformLocation(y,"rotation");d=w.getUniformLocation(y,"scale");e=w.getUniformLocation(y,"color");f=w.getUniformLocation(y,"map");g=w.getUniformLocation(y,"opacity");h=w.getUniformLocation(y,"modelViewMatrix");k=w.getUniformLocation(y,"projectionMatrix");l=
-w.getUniformLocation(y,"fogType");n=w.getUniformLocation(y,"fogDensity");q=w.getUniformLocation(y,"fogNear");r=w.getUniformLocation(y,"fogFar");t=w.getUniformLocation(y,"fogColor");s=w.getUniformLocation(y,"alphaTest");u=document.createElement("canvas");u.width=8;u.height=8;x=u.getContext("2d");x.fillStyle="white";x.fillRect(0,0,8,8);D=new THREE.Texture(u);D.needsUpdate=!0};this.render=function(B,E,F,W){x.length=0;B.traverseVisible(function(a){a instanceof THREE.Sprite&&x.push(a)});if(0!==x.length){w.useProgram(y);
-w.enableVertexAttribArray(p);w.enableVertexAttribArray(v);w.disable(w.CULL_FACE);w.enable(w.BLEND);w.bindBuffer(w.ARRAY_BUFFER,z);w.vertexAttribPointer(p,2,w.FLOAT,!1,16,0);w.vertexAttribPointer(v,2,w.FLOAT,!1,16,8);w.bindBuffer(w.ELEMENT_ARRAY_BUFFER,C);w.uniformMatrix4fv(k,!1,E.projectionMatrix.elements);w.activeTexture(w.TEXTURE0);w.uniform1i(f,0);W=F=0;var H=B.fog;H?(w.uniform3f(t,H.color.r,H.color.g,H.color.b),H instanceof THREE.Fog?(w.uniform1f(q,H.near),w.uniform1f(r,H.far),w.uniform1i(l,1),
-W=F=1):H instanceof THREE.FogExp2&&(w.uniform1f(n,H.density),w.uniform1i(l,2),W=F=2)):(w.uniform1i(l,0),W=F=0);for(var H=0,G=x.length;H<G;H++){var J=x[H],K=J.material;J._modelViewMatrix.multiplyMatrices(E.matrixWorldInverse,J.matrixWorld);J.z=-J._modelViewMatrix.elements[14]}x.sort(u);E=[];H=0;for(G=x.length;H<G;H++)J=x[H],K=J.material,w.uniform1f(s,K.alphaTest),w.uniformMatrix4fv(h,!1,J._modelViewMatrix.elements),E[0]=J.scale.x,E[1]=J.scale.y,J=0,B.fog&&K.fog&&(J=W),F!==J&&(w.uniform1i(l,J),F=J),
+w.getUniformLocation(y,"fogType");n=w.getUniformLocation(y,"fogDensity");q=w.getUniformLocation(y,"fogNear");r=w.getUniformLocation(y,"fogFar");t=w.getUniformLocation(y,"fogColor");s=w.getUniformLocation(y,"alphaTest");u=document.createElement("canvas");u.width=8;u.height=8;x=u.getContext("2d");x.fillStyle="white";x.fillRect(0,0,8,8);D=new THREE.Texture(u);D.needsUpdate=!0};this.render=function(B,E,F,V){x.length=0;B.traverseVisible(function(a){a instanceof THREE.Sprite&&x.push(a)});if(0!==x.length){w.useProgram(y);
+w.enableVertexAttribArray(p);w.enableVertexAttribArray(v);w.disable(w.CULL_FACE);w.enable(w.BLEND);w.bindBuffer(w.ARRAY_BUFFER,z);w.vertexAttribPointer(p,2,w.FLOAT,!1,16,0);w.vertexAttribPointer(v,2,w.FLOAT,!1,16,8);w.bindBuffer(w.ELEMENT_ARRAY_BUFFER,C);w.uniformMatrix4fv(k,!1,E.projectionMatrix.elements);w.activeTexture(w.TEXTURE0);w.uniform1i(f,0);V=F=0;var H=B.fog;H?(w.uniform3f(t,H.color.r,H.color.g,H.color.b),H instanceof THREE.Fog?(w.uniform1f(q,H.near),w.uniform1f(r,H.far),w.uniform1i(l,1),
+V=F=1):H instanceof THREE.FogExp2&&(w.uniform1f(n,H.density),w.uniform1i(l,2),V=F=2)):(w.uniform1i(l,0),V=F=0);for(var H=0,G=x.length;H<G;H++){var J=x[H],K=J.material;J._modelViewMatrix.multiplyMatrices(E.matrixWorldInverse,J.matrixWorld);J.z=-J._modelViewMatrix.elements[14]}x.sort(u);E=[];H=0;for(G=x.length;H<G;H++)J=x[H],K=J.material,w.uniform1f(s,K.alphaTest),w.uniformMatrix4fv(h,!1,J._modelViewMatrix.elements),E[0]=J.scale.x,E[1]=J.scale.y,J=0,B.fog&&K.fog&&(J=V),F!==J&&(w.uniform1i(l,J),F=J),
 null!==K.map?(w.uniform2f(a,K.map.offset.x,K.map.offset.y),w.uniform2f(b,K.map.repeat.x,K.map.repeat.y)):(w.uniform2f(a,0,0),w.uniform2f(b,1,1)),w.uniform1f(g,K.opacity),w.uniform3f(e,K.color.r,K.color.g,K.color.b),w.uniform1f(c,K.rotation),w.uniform2fv(d,E),A.setBlending(K.blending,K.blendEquation,K.blendSrc,K.blendDst),A.setDepthTest(K.depthTest),A.setDepthWrite(K.depthWrite),K.map&&K.map.image&&K.map.image.width?A.setTexture(K.map,0):A.setTexture(D,0),w.drawElements(w.TRIANGLES,6,w.UNSIGNED_SHORT,
 0);w.enable(w.CULL_FACE)}}};THREE.DepthPassPlugin=function(){function a(b,c,d){if(c.visible){var e=b.__webglObjects[c.id];if(e&&(!1===c.frustumCulled||!0===h.intersectsObject(c)))for(var f=0,g=e.length;f<g;f++){var k=e[f];c._modelViewMatrix.multiplyMatrices(d.matrixWorldInverse,c.matrixWorld);l.push(k)}f=0;for(g=c.children.length;f<g;f++)a(b,c.children[f],d)}}this.enabled=!1;this.renderTarget=null;var b,c,d,e,f,g,h=new THREE.Frustum,k=new THREE.Matrix4,l=[];this.init=function(a){b=a.context;c=a;a=THREE.ShaderLib.depthRGBA;var h=
 THREE.UniformsUtils.clone(a.uniforms);d=new THREE.ShaderMaterial({fragmentShader:a.fragmentShader,vertexShader:a.vertexShader,uniforms:h});e=new THREE.ShaderMaterial({fragmentShader:a.fragmentShader,vertexShader:a.vertexShader,uniforms:h,morphTargets:!0});f=new THREE.ShaderMaterial({fragmentShader:a.fragmentShader,vertexShader:a.vertexShader,uniforms:h,skinning:!0});g=new THREE.ShaderMaterial({fragmentShader:a.fragmentShader,vertexShader:a.vertexShader,uniforms:h,morphTargets:!0,skinning:!0});d._shadowPass=