From 3a83436ef21aab56ed6fc222664a9e54d86e7aad Mon Sep 17 00:00:00 2001 From: Paul Graffam Date: Thu, 24 Jan 2019 17:59:07 -0500 Subject: [PATCH] Remove old files --- build/public/assets/css/app.css | 1 - build/public/assets/css/rStats.css | 87 - build/public/assets/js/app.js | 12 - build/public/assets/js/app.js.map | 1 - build/public/assets/js/dat.gui.min.js | 13 - build/public/assets/js/rStats.extras.js | 265 - build/public/assets/js/rStats.js | 478 -- build/public/assets/models/Teapot.json | 2 - build/public/assets/textures/UV_Grid_Sm.jpg | Bin 650948 -> 0 bytes yarn.lock | 5072 ------------------- 10 files changed, 5931 deletions(-) delete mode 100644 build/public/assets/css/app.css delete mode 100644 build/public/assets/css/rStats.css delete mode 100644 build/public/assets/js/app.js delete mode 100644 build/public/assets/js/app.js.map delete mode 100644 build/public/assets/js/dat.gui.min.js delete mode 100644 build/public/assets/js/rStats.extras.js delete mode 100644 build/public/assets/js/rStats.js delete mode 100644 build/public/assets/models/Teapot.json delete mode 100644 build/public/assets/textures/UV_Grid_Sm.jpg delete mode 100644 yarn.lock diff --git a/build/public/assets/css/app.css b/build/public/assets/css/app.css deleted file mode 100644 index 614a9e6..0000000 --- a/build/public/assets/css/app.css +++ /dev/null @@ -1 +0,0 @@ -html{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0;font:16px/1 sans-serif;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}h1,h2,h3,h4,p,blockquote,figure,ol,ul{margin:0;padding:0}main,li{display:block}h1,h2,h3,h4{font-size:inherit}strong{font-weight:bold}a,button{color:inherit;transition:.3s}a{text-decoration:none}button{overflow:visible;border:0;font:inherit;-webkit-font-smoothing:inherit;letter-spacing:inherit;background:none;cursor:pointer}::-moz-focus-inner{padding:0;border:0}:focus{outline:0}img{max-width:100%;height:auto;border:0}body{overflow:hidden}.main{position:relative;width:100%;height:100vh}#loading{position:absolute;top:calc(50% - 8px);left:calc(50% - 35px)} diff --git a/build/public/assets/css/rStats.css b/build/public/assets/css/rStats.css deleted file mode 100644 index 1f38baa..0000000 --- a/build/public/assets/css/rStats.css +++ /dev/null @@ -1,87 +0,0 @@ -.alarm{ - color: #b70000; - text-shadow: 0 0 0 #b70000, - 0 0 1px #fff, - 0 0 1px #fff, - 0 0 2px #fff, - 0 0 2px #fff, - 0 0 3px #fff, - 0 0 3px #fff, - 0 0 4px #fff, - 0 0 4px #fff; -} - -.rs-base{ - position: absolute; - z-index: 10000; - padding: 10px; - background-color: #222; - font-size: 10px; - line-height: 1.2em; - width: 350px; - font-family: 'Roboto Condensed', tahoma, sans-serif; - left: 0; - top: 0; - overflow: hidden; -} - -.rs-base h1{ - margin: 0; - padding: 0; - font-size: 1.4em; - color: #fff; - margin-bottom: 5px; - cursor: pointer; -} - -.rs-base div.rs-group{ - margin-bottom: 10px; -} - -.rs-base div.rs-group.hidden{ - display: none; -} - -.rs-base div.rs-fraction{ - position: relative; - margin-bottom: 5px; -} - -.rs-base div.rs-fraction p{ - width: 120px; - text-align: right; - margin: 0; - padding: 0; -} - -.rs-base div.rs-legend{ - position: absolute; - line-height: 1em; -} - -.rs-base div.rs-counter-base{ - position: relative; - margin: 2px 0; - height: 1em; - color: white; -} - -.rs-base span.rs-counter-id{ - position: absolute; - left: 0; - top: 0; -} - -.rs-base div.rs-counter-value{ - position: absolute; - left: 90px; - width: 30px; - height: 1em; - top: 0; - text-align: right; -} - -.rs-base canvas.rs-canvas{ - position: absolute; - right: 0; -} diff --git a/build/public/assets/js/app.js b/build/public/assets/js/app.js deleted file mode 100644 index 89c0aed..0000000 --- a/build/public/assets/js/app.js +++ /dev/null @@ -1,12 +0,0 @@ -!function(t){var e={};function n(r){if(e[r])return e[r].exports;var i=e[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{configurable:!1,enumerable:!0,get:r})},n.r=function(t){Object.defineProperty(t,"__esModule",{value:!0})},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="assets/js",n(n.s=24)}([function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r,i=n(5),o=(r=i)&&r.__esModule?r:{default:r};e.default={isDev:!1,isShowingStats:!0,isLoaded:!1,isTweening:!1,isRotating:!0,isMouseMoving:!1,isMouseOver:!1,maxAnisotropy:1,dpr:1,easing:o.default.Easing.Quadratic.InOut,duration:500,model:{path:"./assets/models/Teapot.json",scale:20},texture:{path:"./assets/textures/",imageFiles:[{name:"UV",image:"UV_Grid_Sm.jpg"}]},mesh:{enableHelper:!1,wireframe:!1,translucent:!1,material:{color:16777215,emissive:16777215}},fog:{color:16777215,near:8e-4},camera:{fov:40,near:2,far:1e3,aspect:1,posX:0,posY:30,posZ:40},controls:{autoRotate:!0,autoRotateSpeed:-.5,rotateSpeed:.5,zoomSpeed:.8,minDistance:200,maxDistance:600,minPolarAngle:Math.PI/5,maxPolarAngle:Math.PI/2,minAzimuthAngle:-1/0,maxAzimuthAngle:1/0,enableDamping:!0,dampingFactor:.5,enableZoom:!0,target:{x:0,y:0,z:0}},ambientLight:{enabled:!1,color:1315860},directionalLight:{enabled:!0,color:15790320,intensity:.4,x:-75,y:280,z:150},shadow:{enabled:!0,helperEnabled:!0,bias:0,mapWidth:2048,mapHeight:2048,near:250,far:400,top:100,right:100,bottom:-100,left:-100},pointLight:{enabled:!0,color:16777215,intensity:.34,distance:115,x:0,y:0,z:0},hemiLight:{enabled:!0,color:13158600,groundColor:16777215,intensity:.55,x:0,y:0,z:0}}},function(t,e,n){"use strict";function r(){}n.r(e),n.d(e,"WebGLRenderTargetCube",function(){return sn}),n.d(e,"WebGLRenderTarget",function(){return an}),n.d(e,"WebGLRenderer",function(){return Fi}),n.d(e,"ShaderLib",function(){return bn}),n.d(e,"UniformsLib",function(){return xn}),n.d(e,"UniformsUtils",function(){return mn}),n.d(e,"ShaderChunk",function(){return fn}),n.d(e,"FogExp2",function(){return zi}),n.d(e,"Fog",function(){return Hi}),n.d(e,"Scene",function(){return Gi}),n.d(e,"Sprite",function(){return ji}),n.d(e,"LOD",function(){return Vi}),n.d(e,"SkinnedMesh",function(){return qi}),n.d(e,"Skeleton",function(){return Wi}),n.d(e,"Bone",function(){return Xi}),n.d(e,"Mesh",function(){return mr}),n.d(e,"LineSegments",function(){return Ji}),n.d(e,"LineLoop",function(){return Qi}),n.d(e,"Line",function(){return Zi}),n.d(e,"Points",function(){return $i}),n.d(e,"Group",function(){return to}),n.d(e,"VideoTexture",function(){return eo}),n.d(e,"DataTexture",function(){return cn}),n.d(e,"CompressedTexture",function(){return no}),n.d(e,"CubeTexture",function(){return vr}),n.d(e,"CanvasTexture",function(){return Pi}),n.d(e,"DepthTexture",function(){return ro}),n.d(e,"Texture",function(){return rn}),n.d(e,"CompressedTextureLoader",function(){return Oa}),n.d(e,"DataTextureLoader",function(){return Ia}),n.d(e,"CubeTextureLoader",function(){return Da}),n.d(e,"TextureLoader",function(){return Ua}),n.d(e,"ObjectLoader",function(){return Hs}),n.d(e,"MaterialLoader",function(){return Cs}),n.d(e,"BufferGeometryLoader",function(){return Ps}),n.d(e,"DefaultLoadingManager",function(){return Ra}),n.d(e,"LoadingManager",function(){return La}),n.d(e,"JSONLoader",function(){return zs}),n.d(e,"ImageLoader",function(){return Na}),n.d(e,"ImageBitmapLoader",function(){return Ws}),n.d(e,"FontLoader",function(){return Zs}),n.d(e,"FileLoader",function(){return Pa}),n.d(e,"Loader",function(){return Bs}),n.d(e,"LoaderUtils",function(){return Fs}),n.d(e,"Cache",function(){return Aa}),n.d(e,"AudioLoader",function(){return sc}),n.d(e,"SpotLightShadow",function(){return us}),n.d(e,"SpotLight",function(){return hs}),n.d(e,"PointLight",function(){return ls}),n.d(e,"RectAreaLight",function(){return ms}),n.d(e,"HemisphereLight",function(){return ss}),n.d(e,"DirectionalLightShadow",function(){return ds}),n.d(e,"DirectionalLight",function(){return ps}),n.d(e,"AmbientLight",function(){return fs}),n.d(e,"LightShadow",function(){return cs}),n.d(e,"Light",function(){return as}),n.d(e,"StereoCamera",function(){return cc}),n.d(e,"PerspectiveCamera",function(){return Di}),n.d(e,"OrthographicCamera",function(){return Pn}),n.d(e,"CubeCamera",function(){return uc}),n.d(e,"ArrayCamera",function(){return Ui}),n.d(e,"Camera",function(){return Cn}),n.d(e,"AudioListener",function(){return hc}),n.d(e,"PositionalAudio",function(){return dc}),n.d(e,"AudioContext",function(){return ac}),n.d(e,"AudioAnalyser",function(){return pc}),n.d(e,"Audio",function(){return lc}),n.d(e,"VectorKeyframeTrack",function(){return Ls}),n.d(e,"StringKeyframeTrack",function(){return gs}),n.d(e,"QuaternionKeyframeTrack",function(){return bs}),n.d(e,"NumberKeyframeTrack",function(){return _s}),n.d(e,"ColorKeyframeTrack",function(){return ws}),n.d(e,"BooleanKeyframeTrack",function(){return vs}),n.d(e,"PropertyMixer",function(){return fc}),n.d(e,"PropertyBinding",function(){return Rc}),n.d(e,"KeyframeTrack",function(){return As}),n.d(e,"AnimationUtils",function(){return Ss}),n.d(e,"AnimationObjectGroup",function(){return Cc}),n.d(e,"AnimationMixer",function(){return Oc}),n.d(e,"AnimationClip",function(){return Rs}),n.d(e,"Uniform",function(){return Ic}),n.d(e,"InstancedBufferGeometry",function(){return Nc}),n.d(e,"BufferGeometry",function(){return Jn}),n.d(e,"Geometry",function(){return Un}),n.d(e,"InterleavedBufferAttribute",function(){return Dc}),n.d(e,"InstancedInterleavedBuffer",function(){return Bc}),n.d(e,"InterleavedBuffer",function(){return Uc}),n.d(e,"InstancedBufferAttribute",function(){return Fc}),n.d(e,"Face3",function(){return On}),n.d(e,"Object3D",function(){return Rn}),n.d(e,"Raycaster",function(){return zc}),n.d(e,"Layers",function(){return Mn}),n.d(e,"EventDispatcher",function(){return r}),n.d(e,"Clock",function(){return kc}),n.d(e,"QuaternionLinearInterpolant",function(){return xs}),n.d(e,"LinearInterpolant",function(){return Es}),n.d(e,"DiscreteInterpolant",function(){return Ts}),n.d(e,"CubicInterpolant",function(){return Ms}),n.d(e,"Interpolant",function(){return ys}),n.d(e,"Triangle",function(){return fr}),n.d(e,"Math",function(){return Ve}),n.d(e,"Spherical",function(){return jc}),n.d(e,"Cylindrical",function(){return Vc}),n.d(e,"Plane",function(){return ln}),n.d(e,"Frustum",function(){return dn}),n.d(e,"Sphere",function(){return hn}),n.d(e,"Ray",function(){return dr}),n.d(e,"Matrix4",function(){return Xe}),n.d(e,"Matrix3",function(){return Ze}),n.d(e,"Box3",function(){return un}),n.d(e,"Box2",function(){return Wc}),n.d(e,"Line3",function(){return pr}),n.d(e,"Euler",function(){return _n}),n.d(e,"Vector4",function(){return on}),n.d(e,"Vector3",function(){return Ye}),n.d(e,"Vector2",function(){return We}),n.d(e,"Quaternion",function(){return qe}),n.d(e,"Color",function(){return vn}),n.d(e,"ImmediateRenderObject",function(){return Xc}),n.d(e,"VertexNormalsHelper",function(){return qc}),n.d(e,"SpotLightHelper",function(){return Yc}),n.d(e,"SkeletonHelper",function(){return Zc}),n.d(e,"PointLightHelper",function(){return Jc}),n.d(e,"RectAreaLightHelper",function(){return Qc}),n.d(e,"HemisphereLightHelper",function(){return Kc}),n.d(e,"GridHelper",function(){return $c}),n.d(e,"PolarGridHelper",function(){return tu}),n.d(e,"FaceNormalsHelper",function(){return eu}),n.d(e,"DirectionalLightHelper",function(){return nu}),n.d(e,"CameraHelper",function(){return ru}),n.d(e,"BoxHelper",function(){return iu}),n.d(e,"Box3Helper",function(){return ou}),n.d(e,"PlaneHelper",function(){return au}),n.d(e,"ArrowHelper",function(){return su}),n.d(e,"AxesHelper",function(){return cu}),n.d(e,"Shape",function(){return os}),n.d(e,"Path",function(){return is}),n.d(e,"ShapePath",function(){return Xs}),n.d(e,"Font",function(){return qs}),n.d(e,"CurvePath",function(){return rs}),n.d(e,"Curve",function(){return Ba}),n.d(e,"ShapeUtils",function(){return Xo}),n.d(e,"WebGLUtils",function(){return Ni}),n.d(e,"WireframeGeometry",function(){return io}),n.d(e,"ParametricGeometry",function(){return oo}),n.d(e,"ParametricBufferGeometry",function(){return ao}),n.d(e,"TetrahedronGeometry",function(){return uo}),n.d(e,"TetrahedronBufferGeometry",function(){return ho}),n.d(e,"OctahedronGeometry",function(){return lo}),n.d(e,"OctahedronBufferGeometry",function(){return po}),n.d(e,"IcosahedronGeometry",function(){return fo}),n.d(e,"IcosahedronBufferGeometry",function(){return mo}),n.d(e,"DodecahedronGeometry",function(){return go}),n.d(e,"DodecahedronBufferGeometry",function(){return vo}),n.d(e,"PolyhedronGeometry",function(){return so}),n.d(e,"PolyhedronBufferGeometry",function(){return co}),n.d(e,"TubeGeometry",function(){return yo}),n.d(e,"TubeBufferGeometry",function(){return xo}),n.d(e,"TorusKnotGeometry",function(){return bo}),n.d(e,"TorusKnotBufferGeometry",function(){return wo}),n.d(e,"TorusGeometry",function(){return _o}),n.d(e,"TorusBufferGeometry",function(){return Mo}),n.d(e,"TextGeometry",function(){return Ko}),n.d(e,"TextBufferGeometry",function(){return $o}),n.d(e,"SphereGeometry",function(){return ta}),n.d(e,"SphereBufferGeometry",function(){return ea}),n.d(e,"RingGeometry",function(){return na}),n.d(e,"RingBufferGeometry",function(){return ra}),n.d(e,"PlaneGeometry",function(){return $n}),n.d(e,"PlaneBufferGeometry",function(){return tr}),n.d(e,"LatheGeometry",function(){return ia}),n.d(e,"LatheBufferGeometry",function(){return oa}),n.d(e,"ShapeGeometry",function(){return aa}),n.d(e,"ShapeBufferGeometry",function(){return sa}),n.d(e,"ExtrudeGeometry",function(){return Zo}),n.d(e,"ExtrudeBufferGeometry",function(){return Jo}),n.d(e,"EdgesGeometry",function(){return ua}),n.d(e,"ConeGeometry",function(){return da}),n.d(e,"ConeBufferGeometry",function(){return pa}),n.d(e,"CylinderGeometry",function(){return ha}),n.d(e,"CylinderBufferGeometry",function(){return la}),n.d(e,"CircleGeometry",function(){return fa}),n.d(e,"CircleBufferGeometry",function(){return ma}),n.d(e,"BoxGeometry",function(){return Qn}),n.d(e,"BoxBufferGeometry",function(){return Kn}),n.d(e,"ShadowMaterial",function(){return va}),n.d(e,"SpriteMaterial",function(){return ki}),n.d(e,"RawShaderMaterial",function(){return ya}),n.d(e,"ShaderMaterial",function(){return lr}),n.d(e,"PointsMaterial",function(){return Ki}),n.d(e,"MeshPhysicalMaterial",function(){return ba}),n.d(e,"MeshStandardMaterial",function(){return xa}),n.d(e,"MeshPhongMaterial",function(){return wa}),n.d(e,"MeshToonMaterial",function(){return _a}),n.d(e,"MeshNormalMaterial",function(){return Ma}),n.d(e,"MeshLambertMaterial",function(){return Ea}),n.d(e,"MeshDepthMaterial",function(){return Li}),n.d(e,"MeshDistanceMaterial",function(){return Ri}),n.d(e,"MeshBasicMaterial",function(){return hr}),n.d(e,"LineDashedMaterial",function(){return Ta}),n.d(e,"LineBasicMaterial",function(){return Yi}),n.d(e,"Material",function(){return ur}),n.d(e,"Float64BufferAttribute",function(){return Xn}),n.d(e,"Float32BufferAttribute",function(){return Wn}),n.d(e,"Uint32BufferAttribute",function(){return Vn}),n.d(e,"Int32BufferAttribute",function(){return jn}),n.d(e,"Uint16BufferAttribute",function(){return kn}),n.d(e,"Int16BufferAttribute",function(){return Gn}),n.d(e,"Uint8ClampedBufferAttribute",function(){return Hn}),n.d(e,"Uint8BufferAttribute",function(){return zn}),n.d(e,"Int8BufferAttribute",function(){return Fn}),n.d(e,"BufferAttribute",function(){return Bn}),n.d(e,"ArcCurve",function(){return za}),n.d(e,"CatmullRomCurve3",function(){return Wa}),n.d(e,"CubicBezierCurve",function(){return Za}),n.d(e,"CubicBezierCurve3",function(){return Ja}),n.d(e,"EllipseCurve",function(){return Fa}),n.d(e,"LineCurve",function(){return Qa}),n.d(e,"LineCurve3",function(){return Ka}),n.d(e,"QuadraticBezierCurve",function(){return $a}),n.d(e,"QuadraticBezierCurve3",function(){return ts}),n.d(e,"SplineCurve",function(){return es}),n.d(e,"REVISION",function(){return p}),n.d(e,"MOUSE",function(){return f}),n.d(e,"CullFaceNone",function(){return m}),n.d(e,"CullFaceBack",function(){return g}),n.d(e,"CullFaceFront",function(){return v}),n.d(e,"CullFaceFrontBack",function(){return y}),n.d(e,"FrontFaceDirectionCW",function(){return x}),n.d(e,"FrontFaceDirectionCCW",function(){return b}),n.d(e,"BasicShadowMap",function(){return w}),n.d(e,"PCFShadowMap",function(){return _}),n.d(e,"PCFSoftShadowMap",function(){return M}),n.d(e,"FrontSide",function(){return E}),n.d(e,"BackSide",function(){return T}),n.d(e,"DoubleSide",function(){return S}),n.d(e,"FlatShading",function(){return A}),n.d(e,"SmoothShading",function(){return L}),n.d(e,"NoColors",function(){return R}),n.d(e,"FaceColors",function(){return C}),n.d(e,"VertexColors",function(){return P}),n.d(e,"NoBlending",function(){return O}),n.d(e,"NormalBlending",function(){return I}),n.d(e,"AdditiveBlending",function(){return N}),n.d(e,"SubtractiveBlending",function(){return D}),n.d(e,"MultiplyBlending",function(){return U}),n.d(e,"CustomBlending",function(){return B}),n.d(e,"AddEquation",function(){return F}),n.d(e,"SubtractEquation",function(){return z}),n.d(e,"ReverseSubtractEquation",function(){return H}),n.d(e,"MinEquation",function(){return G}),n.d(e,"MaxEquation",function(){return k}),n.d(e,"ZeroFactor",function(){return j}),n.d(e,"OneFactor",function(){return V}),n.d(e,"SrcColorFactor",function(){return W}),n.d(e,"OneMinusSrcColorFactor",function(){return X}),n.d(e,"SrcAlphaFactor",function(){return q}),n.d(e,"OneMinusSrcAlphaFactor",function(){return Y}),n.d(e,"DstAlphaFactor",function(){return Z}),n.d(e,"OneMinusDstAlphaFactor",function(){return J}),n.d(e,"DstColorFactor",function(){return Q}),n.d(e,"OneMinusDstColorFactor",function(){return K}),n.d(e,"SrcAlphaSaturateFactor",function(){return $}),n.d(e,"NeverDepth",function(){return tt}),n.d(e,"AlwaysDepth",function(){return et}),n.d(e,"LessDepth",function(){return nt}),n.d(e,"LessEqualDepth",function(){return rt}),n.d(e,"EqualDepth",function(){return it}),n.d(e,"GreaterEqualDepth",function(){return ot}),n.d(e,"GreaterDepth",function(){return at}),n.d(e,"NotEqualDepth",function(){return st}),n.d(e,"MultiplyOperation",function(){return ct}),n.d(e,"MixOperation",function(){return ut}),n.d(e,"AddOperation",function(){return ht}),n.d(e,"NoToneMapping",function(){return lt}),n.d(e,"LinearToneMapping",function(){return dt}),n.d(e,"ReinhardToneMapping",function(){return pt}),n.d(e,"Uncharted2ToneMapping",function(){return ft}),n.d(e,"CineonToneMapping",function(){return mt}),n.d(e,"UVMapping",function(){return gt}),n.d(e,"CubeReflectionMapping",function(){return vt}),n.d(e,"CubeRefractionMapping",function(){return yt}),n.d(e,"EquirectangularReflectionMapping",function(){return xt}),n.d(e,"EquirectangularRefractionMapping",function(){return bt}),n.d(e,"SphericalReflectionMapping",function(){return wt}),n.d(e,"CubeUVReflectionMapping",function(){return _t}),n.d(e,"CubeUVRefractionMapping",function(){return Mt}),n.d(e,"RepeatWrapping",function(){return Et}),n.d(e,"ClampToEdgeWrapping",function(){return Tt}),n.d(e,"MirroredRepeatWrapping",function(){return St}),n.d(e,"NearestFilter",function(){return At}),n.d(e,"NearestMipMapNearestFilter",function(){return Lt}),n.d(e,"NearestMipMapLinearFilter",function(){return Rt}),n.d(e,"LinearFilter",function(){return Ct}),n.d(e,"LinearMipMapNearestFilter",function(){return Pt}),n.d(e,"LinearMipMapLinearFilter",function(){return Ot}),n.d(e,"UnsignedByteType",function(){return It}),n.d(e,"ByteType",function(){return Nt}),n.d(e,"ShortType",function(){return Dt}),n.d(e,"UnsignedShortType",function(){return Ut}),n.d(e,"IntType",function(){return Bt}),n.d(e,"UnsignedIntType",function(){return Ft}),n.d(e,"FloatType",function(){return zt}),n.d(e,"HalfFloatType",function(){return Ht}),n.d(e,"UnsignedShort4444Type",function(){return Gt}),n.d(e,"UnsignedShort5551Type",function(){return kt}),n.d(e,"UnsignedShort565Type",function(){return jt}),n.d(e,"UnsignedInt248Type",function(){return Vt}),n.d(e,"AlphaFormat",function(){return Wt}),n.d(e,"RGBFormat",function(){return Xt}),n.d(e,"RGBAFormat",function(){return qt}),n.d(e,"LuminanceFormat",function(){return Yt}),n.d(e,"LuminanceAlphaFormat",function(){return Zt}),n.d(e,"RGBEFormat",function(){return Jt}),n.d(e,"DepthFormat",function(){return Qt}),n.d(e,"DepthStencilFormat",function(){return Kt}),n.d(e,"RGB_S3TC_DXT1_Format",function(){return $t}),n.d(e,"RGBA_S3TC_DXT1_Format",function(){return te}),n.d(e,"RGBA_S3TC_DXT3_Format",function(){return ee}),n.d(e,"RGBA_S3TC_DXT5_Format",function(){return ne}),n.d(e,"RGB_PVRTC_4BPPV1_Format",function(){return re}),n.d(e,"RGB_PVRTC_2BPPV1_Format",function(){return ie}),n.d(e,"RGBA_PVRTC_4BPPV1_Format",function(){return oe}),n.d(e,"RGBA_PVRTC_2BPPV1_Format",function(){return ae}),n.d(e,"RGB_ETC1_Format",function(){return se}),n.d(e,"RGBA_ASTC_4x4_Format",function(){return ce}),n.d(e,"RGBA_ASTC_5x4_Format",function(){return ue}),n.d(e,"RGBA_ASTC_5x5_Format",function(){return he}),n.d(e,"RGBA_ASTC_6x5_Format",function(){return le}),n.d(e,"RGBA_ASTC_6x6_Format",function(){return de}),n.d(e,"RGBA_ASTC_8x5_Format",function(){return pe}),n.d(e,"RGBA_ASTC_8x6_Format",function(){return fe}),n.d(e,"RGBA_ASTC_8x8_Format",function(){return me}),n.d(e,"RGBA_ASTC_10x5_Format",function(){return ge}),n.d(e,"RGBA_ASTC_10x6_Format",function(){return ve}),n.d(e,"RGBA_ASTC_10x8_Format",function(){return ye}),n.d(e,"RGBA_ASTC_10x10_Format",function(){return xe}),n.d(e,"RGBA_ASTC_12x10_Format",function(){return be}),n.d(e,"RGBA_ASTC_12x12_Format",function(){return we}),n.d(e,"LoopOnce",function(){return _e}),n.d(e,"LoopRepeat",function(){return Me}),n.d(e,"LoopPingPong",function(){return Ee}),n.d(e,"InterpolateDiscrete",function(){return Te}),n.d(e,"InterpolateLinear",function(){return Se}),n.d(e,"InterpolateSmooth",function(){return Ae}),n.d(e,"ZeroCurvatureEnding",function(){return Le}),n.d(e,"ZeroSlopeEnding",function(){return Re}),n.d(e,"WrapAroundEnding",function(){return Ce}),n.d(e,"TrianglesDrawMode",function(){return Pe}),n.d(e,"TriangleStripDrawMode",function(){return Oe}),n.d(e,"TriangleFanDrawMode",function(){return Ie}),n.d(e,"LinearEncoding",function(){return Ne}),n.d(e,"sRGBEncoding",function(){return De}),n.d(e,"GammaEncoding",function(){return Ue}),n.d(e,"RGBEEncoding",function(){return Be}),n.d(e,"LogLuvEncoding",function(){return Fe}),n.d(e,"RGBM7Encoding",function(){return ze}),n.d(e,"RGBM16Encoding",function(){return He}),n.d(e,"RGBDEncoding",function(){return Ge}),n.d(e,"BasicDepthPacking",function(){return ke}),n.d(e,"RGBADepthPacking",function(){return je}),n.d(e,"CubeGeometry",function(){return Qn}),n.d(e,"Face4",function(){return uu}),n.d(e,"LineStrip",function(){return hu}),n.d(e,"LinePieces",function(){return lu}),n.d(e,"MeshFaceMaterial",function(){return du}),n.d(e,"MultiMaterial",function(){return pu}),n.d(e,"PointCloud",function(){return fu}),n.d(e,"Particle",function(){return mu}),n.d(e,"ParticleSystem",function(){return gu}),n.d(e,"PointCloudMaterial",function(){return vu}),n.d(e,"ParticleBasicMaterial",function(){return yu}),n.d(e,"ParticleSystemMaterial",function(){return xu}),n.d(e,"Vertex",function(){return bu}),n.d(e,"DynamicBufferAttribute",function(){return wu}),n.d(e,"Int8Attribute",function(){return _u}),n.d(e,"Uint8Attribute",function(){return Mu}),n.d(e,"Uint8ClampedAttribute",function(){return Eu}),n.d(e,"Int16Attribute",function(){return Tu}),n.d(e,"Uint16Attribute",function(){return Su}),n.d(e,"Int32Attribute",function(){return Au}),n.d(e,"Uint32Attribute",function(){return Lu}),n.d(e,"Float32Attribute",function(){return Ru}),n.d(e,"Float64Attribute",function(){return Cu}),n.d(e,"ClosedSplineCurve3",function(){return Pu}),n.d(e,"SplineCurve3",function(){return Ou}),n.d(e,"Spline",function(){return Iu}),n.d(e,"AxisHelper",function(){return Nu}),n.d(e,"BoundingBoxHelper",function(){return Du}),n.d(e,"EdgesHelper",function(){return Uu}),n.d(e,"WireframeHelper",function(){return Bu}),n.d(e,"XHRLoader",function(){return Fu}),n.d(e,"BinaryTextureLoader",function(){return zu}),n.d(e,"GeometryUtils",function(){return Hu}),n.d(e,"ImageUtils",function(){return Gu}),n.d(e,"Projector",function(){return ku}),n.d(e,"CanvasRenderer",function(){return ju}),n.d(e,"SceneUtils",function(){return Vu}),n.d(e,"LensFlare",function(){return Wu}),void 0===Number.EPSILON&&(Number.EPSILON=Math.pow(2,-52)),void 0===Number.isInteger&&(Number.isInteger=function(t){return"number"==typeof t&&isFinite(t)&&Math.floor(t)===t}),void 0===Math.sign&&(Math.sign=function(t){return t<0?-1:t>0?1:+t}),"name"in Function.prototype==!1&&Object.defineProperty(Function.prototype,"name",{get:function(){return this.toString().match(/^\s*function\s*([^\(\s]*)/)[1]}}),void 0===Object.assign&&(Object.assign=function(t){if(void 0===t||null===t)throw new TypeError("Cannot convert undefined or null to object");for(var e=Object(t),n=1;n>8&255]+t[e>>16&255]+t[e>>24&255]+"-"+t[255&n]+t[n>>8&255]+"-"+t[n>>16&15|64]+t[n>>24&255]+"-"+t[63&r|128]+t[r>>8&255]+"-"+t[r>>16&255]+t[r>>24&255]+t[255&i]+t[i>>8&255]+t[i>>16&255]+t[i>>24&255]).toUpperCase()}}(),clamp:function(t,e,n){return Math.max(e,Math.min(n,t))},euclideanModulo:function(t,e){return(t%e+e)%e},mapLinear:function(t,e,n,r,i){return r+(t-e)*(i-r)/(n-e)},lerp:function(t,e,n){return(1-n)*t+n*e},smoothstep:function(t,e,n){return t<=e?0:t>=n?1:(t=(t-e)/(n-e))*t*(3-2*t)},smootherstep:function(t,e,n){return t<=e?0:t>=n?1:(t=(t-e)/(n-e))*t*t*(t*(6*t-15)+10)},randInt:function(t,e){return t+Math.floor(Math.random()*(e-t+1))},randFloat:function(t,e){return t+Math.random()*(e-t)},randFloatSpread:function(t){return t*(.5-Math.random())},degToRad:function(t){return t*Ve.DEG2RAD},radToDeg:function(t){return t*Ve.RAD2DEG},isPowerOfTwo:function(t){return 0==(t&t-1)&&0!==t},ceilPowerOfTwo:function(t){return Math.pow(2,Math.ceil(Math.log(t)/Math.LN2))},floorPowerOfTwo:function(t){return Math.pow(2,Math.floor(Math.log(t)/Math.LN2))}};function We(t,e){this.x=t||0,this.y=e||0}function Xe(){this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],arguments.length>0&&console.error("THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.")}function qe(t,e,n,r){this._x=t||0,this._y=e||0,this._z=n||0,this._w=void 0!==r?r:1}function Ye(t,e,n){this.x=t||0,this.y=e||0,this.z=n||0}function Ze(){this.elements=[1,0,0,0,1,0,0,0,1],arguments.length>0&&console.error("THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.")}Object.defineProperties(We.prototype,{width:{get:function(){return this.x},set:function(t){this.x=t}},height:{get:function(){return this.y},set:function(t){this.y=t}}}),Object.assign(We.prototype,{isVector2:!0,set:function(t,e){return this.x=t,this.y=e,this},setScalar:function(t){return this.x=t,this.y=t,this},setX:function(t){return this.x=t,this},setY:function(t){return this.y=t,this},setComponent:function(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;default:throw new Error("index is out of range: "+t)}return this},getComponent:function(t){switch(t){case 0:return this.x;case 1:return this.y;default:throw new Error("index is out of range: "+t)}},clone:function(){return new this.constructor(this.x,this.y)},copy:function(t){return this.x=t.x,this.y=t.y,this},add:function(t,e){return void 0!==e?(console.warn("THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this)},addScalar:function(t){return this.x+=t,this.y+=t,this},addVectors:function(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this},addScaledVector:function(t,e){return this.x+=t.x*e,this.y+=t.y*e,this},sub:function(t,e){return void 0!==e?(console.warn("THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this)},subScalar:function(t){return this.x-=t,this.y-=t,this},subVectors:function(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this},multiply:function(t){return this.x*=t.x,this.y*=t.y,this},multiplyScalar:function(t){return this.x*=t,this.y*=t,this},divide:function(t){return this.x/=t.x,this.y/=t.y,this},divideScalar:function(t){return this.multiplyScalar(1/t)},applyMatrix3:function(t){var e=this.x,n=this.y,r=t.elements;return this.x=r[0]*e+r[3]*n+r[6],this.y=r[1]*e+r[4]*n+r[7],this},min:function(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this},max:function(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this},clamp:function(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this},clampScalar:(i=new We,o=new We,function(t,e){return i.set(t,t),o.set(e,e),this.clamp(i,o)}),clampLength:function(t,e){var n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))},floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this},ceil:function(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this},round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this},roundToZero:function(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this},negate:function(){return this.x=-this.x,this.y=-this.y,this},dot:function(t){return this.x*t.x+this.y*t.y},lengthSq:function(){return this.x*this.x+this.y*this.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},manhattanLength:function(){return Math.abs(this.x)+Math.abs(this.y)},normalize:function(){return this.divideScalar(this.length()||1)},angle:function(){var t=Math.atan2(this.y,this.x);return t<0&&(t+=2*Math.PI),t},distanceTo:function(t){return Math.sqrt(this.distanceToSquared(t))},distanceToSquared:function(t){var e=this.x-t.x,n=this.y-t.y;return e*e+n*n},manhattanDistanceTo:function(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)},setLength:function(t){return this.normalize().multiplyScalar(t)},lerp:function(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this},lerpVectors:function(t,e,n){return this.subVectors(e,t).multiplyScalar(n).add(t)},equals:function(t){return t.x===this.x&&t.y===this.y},fromArray:function(t,e){return void 0===e&&(e=0),this.x=t[e],this.y=t[e+1],this},toArray:function(t,e){return void 0===t&&(t=[]),void 0===e&&(e=0),t[e]=this.x,t[e+1]=this.y,t},fromBufferAttribute:function(t,e,n){return void 0!==n&&console.warn("THREE.Vector2: offset has been removed from .fromBufferAttribute()."),this.x=t.getX(e),this.y=t.getY(e),this},rotateAround:function(t,e){var n=Math.cos(e),r=Math.sin(e),i=this.x-t.x,o=this.y-t.y;return this.x=i*n-o*r+t.x,this.y=i*r+o*n+t.y,this}}),Object.assign(Xe.prototype,{isMatrix4:!0,set:function(t,e,n,r,i,o,a,s,c,u,h,l,d,p,f,m){var g=this.elements;return g[0]=t,g[4]=e,g[8]=n,g[12]=r,g[1]=i,g[5]=o,g[9]=a,g[13]=s,g[2]=c,g[6]=u,g[10]=h,g[14]=l,g[3]=d,g[7]=p,g[11]=f,g[15]=m,this},identity:function(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this},clone:function(){return(new Xe).fromArray(this.elements)},copy:function(t){var e=this.elements,n=t.elements;return e[0]=n[0],e[1]=n[1],e[2]=n[2],e[3]=n[3],e[4]=n[4],e[5]=n[5],e[6]=n[6],e[7]=n[7],e[8]=n[8],e[9]=n[9],e[10]=n[10],e[11]=n[11],e[12]=n[12],e[13]=n[13],e[14]=n[14],e[15]=n[15],this},copyPosition:function(t){var e=this.elements,n=t.elements;return e[12]=n[12],e[13]=n[13],e[14]=n[14],this},extractBasis:function(t,e,n){return t.setFromMatrixColumn(this,0),e.setFromMatrixColumn(this,1),n.setFromMatrixColumn(this,2),this},makeBasis:function(t,e,n){return this.set(t.x,e.x,n.x,0,t.y,e.y,n.y,0,t.z,e.z,n.z,0,0,0,0,1),this},extractRotation:(l=new Ye,function(t){var e=this.elements,n=t.elements,r=1/l.setFromMatrixColumn(t,0).length(),i=1/l.setFromMatrixColumn(t,1).length(),o=1/l.setFromMatrixColumn(t,2).length();return e[0]=n[0]*r,e[1]=n[1]*r,e[2]=n[2]*r,e[4]=n[4]*i,e[5]=n[5]*i,e[6]=n[6]*i,e[8]=n[8]*o,e[9]=n[9]*o,e[10]=n[10]*o,this}),makeRotationFromEuler:function(t){t&&t.isEuler||console.error("THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.");var e=this.elements,n=t.x,r=t.y,i=t.z,o=Math.cos(n),a=Math.sin(n),s=Math.cos(r),c=Math.sin(r),u=Math.cos(i),h=Math.sin(i);if("XYZ"===t.order){var l=o*u,d=o*h,p=a*u,f=a*h;e[0]=s*u,e[4]=-s*h,e[8]=c,e[1]=d+p*c,e[5]=l-f*c,e[9]=-a*s,e[2]=f-l*c,e[6]=p+d*c,e[10]=o*s}else if("YXZ"===t.order){var m=s*u,g=s*h,v=c*u,y=c*h;e[0]=m+y*a,e[4]=v*a-g,e[8]=o*c,e[1]=o*h,e[5]=o*u,e[9]=-a,e[2]=g*a-v,e[6]=y+m*a,e[10]=o*s}else if("ZXY"===t.order){m=s*u,g=s*h,v=c*u,y=c*h;e[0]=m-y*a,e[4]=-o*h,e[8]=v+g*a,e[1]=g+v*a,e[5]=o*u,e[9]=y-m*a,e[2]=-o*c,e[6]=a,e[10]=o*s}else if("ZYX"===t.order){l=o*u,d=o*h,p=a*u,f=a*h;e[0]=s*u,e[4]=p*c-d,e[8]=l*c+f,e[1]=s*h,e[5]=f*c+l,e[9]=d*c-p,e[2]=-c,e[6]=a*s,e[10]=o*s}else if("YZX"===t.order){var x=o*s,b=o*c,w=a*s,_=a*c;e[0]=s*u,e[4]=_-x*h,e[8]=w*h+b,e[1]=h,e[5]=o*u,e[9]=-a*u,e[2]=-c*u,e[6]=b*h+w,e[10]=x-_*h}else if("XZY"===t.order){x=o*s,b=o*c,w=a*s,_=a*c;e[0]=s*u,e[4]=-h,e[8]=c*u,e[1]=x*h+_,e[5]=o*u,e[9]=b*h-w,e[2]=w*h-b,e[6]=a*u,e[10]=_*h+x}return e[3]=0,e[7]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this},makeRotationFromQuaternion:function(t){var e=this.elements,n=t._x,r=t._y,i=t._z,o=t._w,a=n+n,s=r+r,c=i+i,u=n*a,h=n*s,l=n*c,d=r*s,p=r*c,f=i*c,m=o*a,g=o*s,v=o*c;return e[0]=1-(d+f),e[4]=h-v,e[8]=l+g,e[1]=h+v,e[5]=1-(u+f),e[9]=p-m,e[2]=l-g,e[6]=p+m,e[10]=1-(u+d),e[3]=0,e[7]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this},lookAt:(c=new Ye,u=new Ye,h=new Ye,function(t,e,n){var r=this.elements;return h.subVectors(t,e),0===h.lengthSq()&&(h.z=1),h.normalize(),c.crossVectors(n,h),0===c.lengthSq()&&(1===Math.abs(n.z)?h.x+=1e-4:h.z+=1e-4,h.normalize(),c.crossVectors(n,h)),c.normalize(),u.crossVectors(h,c),r[0]=c.x,r[4]=u.x,r[8]=h.x,r[1]=c.y,r[5]=u.y,r[9]=h.y,r[2]=c.z,r[6]=u.z,r[10]=h.z,this}),multiply:function(t,e){return void 0!==e?(console.warn("THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead."),this.multiplyMatrices(t,e)):this.multiplyMatrices(this,t)},premultiply:function(t){return this.multiplyMatrices(t,this)},multiplyMatrices:function(t,e){var n=t.elements,r=e.elements,i=this.elements,o=n[0],a=n[4],s=n[8],c=n[12],u=n[1],h=n[5],l=n[9],d=n[13],p=n[2],f=n[6],m=n[10],g=n[14],v=n[3],y=n[7],x=n[11],b=n[15],w=r[0],_=r[4],M=r[8],E=r[12],T=r[1],S=r[5],A=r[9],L=r[13],R=r[2],C=r[6],P=r[10],O=r[14],I=r[3],N=r[7],D=r[11],U=r[15];return i[0]=o*w+a*T+s*R+c*I,i[4]=o*_+a*S+s*C+c*N,i[8]=o*M+a*A+s*P+c*D,i[12]=o*E+a*L+s*O+c*U,i[1]=u*w+h*T+l*R+d*I,i[5]=u*_+h*S+l*C+d*N,i[9]=u*M+h*A+l*P+d*D,i[13]=u*E+h*L+l*O+d*U,i[2]=p*w+f*T+m*R+g*I,i[6]=p*_+f*S+m*C+g*N,i[10]=p*M+f*A+m*P+g*D,i[14]=p*E+f*L+m*O+g*U,i[3]=v*w+y*T+x*R+b*I,i[7]=v*_+y*S+x*C+b*N,i[11]=v*M+y*A+x*P+b*D,i[15]=v*E+y*L+x*O+b*U,this},multiplyScalar:function(t){var e=this.elements;return e[0]*=t,e[4]*=t,e[8]*=t,e[12]*=t,e[1]*=t,e[5]*=t,e[9]*=t,e[13]*=t,e[2]*=t,e[6]*=t,e[10]*=t,e[14]*=t,e[3]*=t,e[7]*=t,e[11]*=t,e[15]*=t,this},applyToBufferAttribute:function(){var t=new Ye;return function(e){for(var n=0,r=e.count;n=0?1:-1,y=1-g*g;if(y>Number.EPSILON){var x=Math.sqrt(y),b=Math.atan2(x,g*v);m=Math.sin(m*b)/x,a=Math.sin(a*b)/x}var w=a*v;if(s=s*m+l*w,c=c*m+d*w,u=u*m+p*w,h=h*m+f*w,m===1-a){var _=1/Math.sqrt(s*s+c*c+u*u+h*h);s*=_,c*=_,u*=_,h*=_}}t[e]=s,t[e+1]=c,t[e+2]=u,t[e+3]=h}}),Object.defineProperties(qe.prototype,{x:{get:function(){return this._x},set:function(t){this._x=t,this.onChangeCallback()}},y:{get:function(){return this._y},set:function(t){this._y=t,this.onChangeCallback()}},z:{get:function(){return this._z},set:function(t){this._z=t,this.onChangeCallback()}},w:{get:function(){return this._w},set:function(t){this._w=t,this.onChangeCallback()}}}),Object.assign(qe.prototype,{set:function(t,e,n,r){return this._x=t,this._y=e,this._z=n,this._w=r,this.onChangeCallback(),this},clone:function(){return new this.constructor(this._x,this._y,this._z,this._w)},copy:function(t){return this._x=t.x,this._y=t.y,this._z=t.z,this._w=t.w,this.onChangeCallback(),this},setFromEuler:function(t,e){if(!t||!t.isEuler)throw new Error("THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.");var n=t._x,r=t._y,i=t._z,o=t.order,a=Math.cos,s=Math.sin,c=a(n/2),u=a(r/2),h=a(i/2),l=s(n/2),d=s(r/2),p=s(i/2);return"XYZ"===o?(this._x=l*u*h+c*d*p,this._y=c*d*h-l*u*p,this._z=c*u*p+l*d*h,this._w=c*u*h-l*d*p):"YXZ"===o?(this._x=l*u*h+c*d*p,this._y=c*d*h-l*u*p,this._z=c*u*p-l*d*h,this._w=c*u*h+l*d*p):"ZXY"===o?(this._x=l*u*h-c*d*p,this._y=c*d*h+l*u*p,this._z=c*u*p+l*d*h,this._w=c*u*h-l*d*p):"ZYX"===o?(this._x=l*u*h-c*d*p,this._y=c*d*h+l*u*p,this._z=c*u*p-l*d*h,this._w=c*u*h+l*d*p):"YZX"===o?(this._x=l*u*h+c*d*p,this._y=c*d*h+l*u*p,this._z=c*u*p-l*d*h,this._w=c*u*h-l*d*p):"XZY"===o&&(this._x=l*u*h-c*d*p,this._y=c*d*h-l*u*p,this._z=c*u*p+l*d*h,this._w=c*u*h+l*d*p),!1!==e&&this.onChangeCallback(),this},setFromAxisAngle:function(t,e){var n=e/2,r=Math.sin(n);return this._x=t.x*r,this._y=t.y*r,this._z=t.z*r,this._w=Math.cos(n),this.onChangeCallback(),this},setFromRotationMatrix:function(t){var e,n=t.elements,r=n[0],i=n[4],o=n[8],a=n[1],s=n[5],c=n[9],u=n[2],h=n[6],l=n[10],d=r+s+l;return d>0?(e=.5/Math.sqrt(d+1),this._w=.25/e,this._x=(h-c)*e,this._y=(o-u)*e,this._z=(a-i)*e):r>s&&r>l?(e=2*Math.sqrt(1+r-s-l),this._w=(h-c)/e,this._x=.25*e,this._y=(i+a)/e,this._z=(o+u)/e):s>l?(e=2*Math.sqrt(1+s-r-l),this._w=(o-u)/e,this._x=(i+a)/e,this._y=.25*e,this._z=(c+h)/e):(e=2*Math.sqrt(1+l-r-s),this._w=(a-i)/e,this._x=(o+u)/e,this._y=(c+h)/e,this._z=.25*e),this.onChangeCallback(),this},setFromUnitVectors:function(){var t,e=new Ye;return function(n,r){return void 0===e&&(e=new Ye),(t=n.dot(r)+1)<1e-6?(t=0,Math.abs(n.x)>Math.abs(n.z)?e.set(-n.y,n.x,0):e.set(0,-n.z,n.y)):e.crossVectors(n,r),this._x=e.x,this._y=e.y,this._z=e.z,this._w=t,this.normalize()}}(),inverse:function(){return this.conjugate()},conjugate:function(){return this._x*=-1,this._y*=-1,this._z*=-1,this.onChangeCallback(),this},dot:function(t){return this._x*t._x+this._y*t._y+this._z*t._z+this._w*t._w},lengthSq:function(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w},length:function(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)},normalize:function(){var t=this.length();return 0===t?(this._x=0,this._y=0,this._z=0,this._w=1):(t=1/t,this._x=this._x*t,this._y=this._y*t,this._z=this._z*t,this._w=this._w*t),this.onChangeCallback(),this},multiply:function(t,e){return void 0!==e?(console.warn("THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."),this.multiplyQuaternions(t,e)):this.multiplyQuaternions(this,t)},premultiply:function(t){return this.multiplyQuaternions(t,this)},multiplyQuaternions:function(t,e){var n=t._x,r=t._y,i=t._z,o=t._w,a=e._x,s=e._y,c=e._z,u=e._w;return this._x=n*u+o*a+r*c-i*s,this._y=r*u+o*s+i*a-n*c,this._z=i*u+o*c+n*s-r*a,this._w=o*u-n*a-r*s-i*c,this.onChangeCallback(),this},slerp:function(t,e){if(0===e)return this;if(1===e)return this.copy(t);var n=this._x,r=this._y,i=this._z,o=this._w,a=o*t._w+n*t._x+r*t._y+i*t._z;if(a<0?(this._w=-t._w,this._x=-t._x,this._y=-t._y,this._z=-t._z,a=-a):this.copy(t),a>=1)return this._w=o,this._x=n,this._y=r,this._z=i,this;var s=Math.sqrt(1-a*a);if(Math.abs(s)<.001)return this._w=.5*(o+this._w),this._x=.5*(n+this._x),this._y=.5*(r+this._y),this._z=.5*(i+this._z),this;var c=Math.atan2(s,a),u=Math.sin((1-e)*c)/s,h=Math.sin(e*c)/s;return this._w=o*u+this._w*h,this._x=n*u+this._x*h,this._y=r*u+this._y*h,this._z=i*u+this._z*h,this.onChangeCallback(),this},equals:function(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._w===this._w},fromArray:function(t,e){return void 0===e&&(e=0),this._x=t[e],this._y=t[e+1],this._z=t[e+2],this._w=t[e+3],this.onChangeCallback(),this},toArray:function(t,e){return void 0===t&&(t=[]),void 0===e&&(e=0),t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._w,t},onChange:function(t){return this.onChangeCallback=t,this},onChangeCallback:function(){}}),Object.assign(Ye.prototype,{isVector3:!0,set:function(t,e,n){return this.x=t,this.y=e,this.z=n,this},setScalar:function(t){return this.x=t,this.y=t,this.z=t,this},setX:function(t){return this.x=t,this},setY:function(t){return this.y=t,this},setZ:function(t){return this.z=t,this},setComponent:function(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;default:throw new Error("index is out of range: "+t)}return this},getComponent:function(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+t)}},clone:function(){return new this.constructor(this.x,this.y,this.z)},copy:function(t){return this.x=t.x,this.y=t.y,this.z=t.z,this},add:function(t,e){return void 0!==e?(console.warn("THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this.z+=t.z,this)},addScalar:function(t){return this.x+=t,this.y+=t,this.z+=t,this},addVectors:function(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this},addScaledVector:function(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this},sub:function(t,e){return void 0!==e?(console.warn("THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this.z-=t.z,this)},subScalar:function(t){return this.x-=t,this.y-=t,this.z-=t,this},subVectors:function(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this},multiply:function(t,e){return void 0!==e?(console.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."),this.multiplyVectors(t,e)):(this.x*=t.x,this.y*=t.y,this.z*=t.z,this)},multiplyScalar:function(t){return this.x*=t,this.y*=t,this.z*=t,this},multiplyVectors:function(t,e){return this.x=t.x*e.x,this.y=t.y*e.y,this.z=t.z*e.z,this},applyEuler:(d=new qe,function(t){return t&&t.isEuler||console.error("THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order."),this.applyQuaternion(d.setFromEuler(t))}),applyAxisAngle:function(){var t=new qe;return function(e,n){return this.applyQuaternion(t.setFromAxisAngle(e,n))}}(),applyMatrix3:function(t){var e=this.x,n=this.y,r=this.z,i=t.elements;return this.x=i[0]*e+i[3]*n+i[6]*r,this.y=i[1]*e+i[4]*n+i[7]*r,this.z=i[2]*e+i[5]*n+i[8]*r,this},applyMatrix4:function(t){var e=this.x,n=this.y,r=this.z,i=t.elements,o=1/(i[3]*e+i[7]*n+i[11]*r+i[15]);return this.x=(i[0]*e+i[4]*n+i[8]*r+i[12])*o,this.y=(i[1]*e+i[5]*n+i[9]*r+i[13])*o,this.z=(i[2]*e+i[6]*n+i[10]*r+i[14])*o,this},applyQuaternion:function(t){var e=this.x,n=this.y,r=this.z,i=t.x,o=t.y,a=t.z,s=t.w,c=s*e+o*r-a*n,u=s*n+a*e-i*r,h=s*r+i*n-o*e,l=-i*e-o*n-a*r;return this.x=c*s+l*-i+u*-a-h*-o,this.y=u*s+l*-o+h*-i-c*-a,this.z=h*s+l*-a+c*-o-u*-i,this},project:function(){var t=new Xe;return function(e){return t.multiplyMatrices(e.projectionMatrix,t.getInverse(e.matrixWorld)),this.applyMatrix4(t)}}(),unproject:function(){var t=new Xe;return function(e){return t.multiplyMatrices(e.matrixWorld,t.getInverse(e.projectionMatrix)),this.applyMatrix4(t)}}(),transformDirection:function(t){var e=this.x,n=this.y,r=this.z,i=t.elements;return this.x=i[0]*e+i[4]*n+i[8]*r,this.y=i[1]*e+i[5]*n+i[9]*r,this.z=i[2]*e+i[6]*n+i[10]*r,this.normalize()},divide:function(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this},divideScalar:function(t){return this.multiplyScalar(1/t)},min:function(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this},max:function(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this},clamp:function(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this.z=Math.max(t.z,Math.min(e.z,this.z)),this},clampScalar:function(){var t=new Ye,e=new Ye;return function(n,r){return t.set(n,n,n),e.set(r,r,r),this.clamp(t,e)}}(),clampLength:function(t,e){var n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))},floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this},ceil:function(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this},round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this},roundToZero:function(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z<0?Math.ceil(this.z):Math.floor(this.z),this},negate:function(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this},dot:function(t){return this.x*t.x+this.y*t.y+this.z*t.z},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)},manhattanLength:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)},normalize:function(){return this.divideScalar(this.length()||1)},setLength:function(t){return this.normalize().multiplyScalar(t)},lerp:function(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this},lerpVectors:function(t,e,n){return this.subVectors(e,t).multiplyScalar(n).add(t)},cross:function(t,e){return void 0!==e?(console.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."),this.crossVectors(t,e)):this.crossVectors(this,t)},crossVectors:function(t,e){var n=t.x,r=t.y,i=t.z,o=e.x,a=e.y,s=e.z;return this.x=r*s-i*a,this.y=i*o-n*s,this.z=n*a-r*o,this},projectOnVector:function(t){var e=t.dot(this)/t.lengthSq();return this.copy(t).multiplyScalar(e)},projectOnPlane:function(){var t=new Ye;return function(e){return t.copy(this).projectOnVector(e),this.sub(t)}}(),reflect:function(){var t=new Ye;return function(e){return this.sub(t.copy(e).multiplyScalar(2*this.dot(e)))}}(),angleTo:function(t){var e=this.dot(t)/Math.sqrt(this.lengthSq()*t.lengthSq());return Math.acos(Ve.clamp(e,-1,1))},distanceTo:function(t){return Math.sqrt(this.distanceToSquared(t))},distanceToSquared:function(t){var e=this.x-t.x,n=this.y-t.y,r=this.z-t.z;return e*e+n*n+r*r},manhattanDistanceTo:function(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)+Math.abs(this.z-t.z)},setFromSpherical:function(t){var e=Math.sin(t.phi)*t.radius;return this.x=e*Math.sin(t.theta),this.y=Math.cos(t.phi)*t.radius,this.z=e*Math.cos(t.theta),this},setFromCylindrical:function(t){return this.x=t.radius*Math.sin(t.theta),this.y=t.y,this.z=t.radius*Math.cos(t.theta),this},setFromMatrixPosition:function(t){var e=t.elements;return this.x=e[12],this.y=e[13],this.z=e[14],this},setFromMatrixScale:function(t){var e=this.setFromMatrixColumn(t,0).length(),n=this.setFromMatrixColumn(t,1).length(),r=this.setFromMatrixColumn(t,2).length();return this.x=e,this.y=n,this.z=r,this},setFromMatrixColumn:function(t,e){return this.fromArray(t.elements,4*e)},equals:function(t){return t.x===this.x&&t.y===this.y&&t.z===this.z},fromArray:function(t,e){return void 0===e&&(e=0),this.x=t[e],this.y=t[e+1],this.z=t[e+2],this},toArray:function(t,e){return void 0===t&&(t=[]),void 0===e&&(e=0),t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t},fromBufferAttribute:function(t,e,n){return void 0!==n&&console.warn("THREE.Vector3: offset has been removed from .fromBufferAttribute()."),this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this}}),Object.assign(Ze.prototype,{isMatrix3:!0,set:function(t,e,n,r,i,o,a,s,c){var u=this.elements;return u[0]=t,u[1]=r,u[2]=a,u[3]=e,u[4]=i,u[5]=s,u[6]=n,u[7]=o,u[8]=c,this},identity:function(){return this.set(1,0,0,0,1,0,0,0,1),this},clone:function(){return(new this.constructor).fromArray(this.elements)},copy:function(t){var e=this.elements,n=t.elements;return e[0]=n[0],e[1]=n[1],e[2]=n[2],e[3]=n[3],e[4]=n[4],e[5]=n[5],e[6]=n[6],e[7]=n[7],e[8]=n[8],this},setFromMatrix4:function(t){var e=t.elements;return this.set(e[0],e[4],e[8],e[1],e[5],e[9],e[2],e[6],e[10]),this},applyToBufferAttribute:function(){var t=new Ye;return function(e){for(var n=0,r=e.count;n2048||e.height>2048?e.toDataURL("image/jpeg",.6):e.toDataURL("image/png")}(r)}),n.image=r.uuid}return e||(t.textures[this.uuid]=n),n},dispose:function(){this.dispatchEvent({type:"dispose"})},transformUv:function(t){if(this.mapping===gt){if(t.applyMatrix3(this.matrix),t.x<0||t.x>1)switch(this.wrapS){case Et:t.x=t.x-Math.floor(t.x);break;case Tt:t.x=t.x<0?0:1;break;case St:1===Math.abs(Math.floor(t.x)%2)?t.x=Math.ceil(t.x)-t.x:t.x=t.x-Math.floor(t.x)}if(t.y<0||t.y>1)switch(this.wrapT){case Et:t.y=t.y-Math.floor(t.y);break;case Tt:t.y=t.y<0?0:1;break;case St:1===Math.abs(Math.floor(t.y)%2)?t.y=Math.ceil(t.y)-t.y:t.y=t.y-Math.floor(t.y)}this.flipY&&(t.y=1-t.y)}}}),Object.defineProperty(rn.prototype,"needsUpdate",{set:function(t){!0===t&&this.version++}}),Object.assign(on.prototype,{isVector4:!0,set:function(t,e,n,r){return this.x=t,this.y=e,this.z=n,this.w=r,this},setScalar:function(t){return this.x=t,this.y=t,this.z=t,this.w=t,this},setX:function(t){return this.x=t,this},setY:function(t){return this.y=t,this},setZ:function(t){return this.z=t,this},setW:function(t){return this.w=t,this},setComponent:function(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;case 3:this.w=e;break;default:throw new Error("index is out of range: "+t)}return this},getComponent:function(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw new Error("index is out of range: "+t)}},clone:function(){return new this.constructor(this.x,this.y,this.z,this.w)},copy:function(t){return this.x=t.x,this.y=t.y,this.z=t.z,this.w=void 0!==t.w?t.w:1,this},add:function(t,e){return void 0!==e?(console.warn("THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this.z+=t.z,this.w+=t.w,this)},addScalar:function(t){return this.x+=t,this.y+=t,this.z+=t,this.w+=t,this},addVectors:function(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this.w=t.w+e.w,this},addScaledVector:function(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this.w+=t.w*e,this},sub:function(t,e){return void 0!==e?(console.warn("THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this.z-=t.z,this.w-=t.w,this)},subScalar:function(t){return this.x-=t,this.y-=t,this.z-=t,this.w-=t,this},subVectors:function(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this.w=t.w-e.w,this},multiplyScalar:function(t){return this.x*=t,this.y*=t,this.z*=t,this.w*=t,this},applyMatrix4:function(t){var e=this.x,n=this.y,r=this.z,i=this.w,o=t.elements;return this.x=o[0]*e+o[4]*n+o[8]*r+o[12]*i,this.y=o[1]*e+o[5]*n+o[9]*r+o[13]*i,this.z=o[2]*e+o[6]*n+o[10]*r+o[14]*i,this.w=o[3]*e+o[7]*n+o[11]*r+o[15]*i,this},divideScalar:function(t){return this.multiplyScalar(1/t)},setAxisAngleFromQuaternion:function(t){this.w=2*Math.acos(t.w);var e=Math.sqrt(1-t.w*t.w);return e<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=t.x/e,this.y=t.y/e,this.z=t.z/e),this},setAxisAngleFromRotationMatrix:function(t){var e,n,r,i,o=t.elements,a=o[0],s=o[4],c=o[8],u=o[1],h=o[5],l=o[9],d=o[2],p=o[6],f=o[10];if(Math.abs(s-u)<.01&&Math.abs(c-d)<.01&&Math.abs(l-p)<.01){if(Math.abs(s+u)<.1&&Math.abs(c+d)<.1&&Math.abs(l+p)<.1&&Math.abs(a+h+f-3)<.1)return this.set(1,0,0,0),this;e=Math.PI;var m=(a+1)/2,g=(h+1)/2,v=(f+1)/2,y=(s+u)/4,x=(c+d)/4,b=(l+p)/4;return m>g&&m>v?m<.01?(n=0,r=.707106781,i=.707106781):(r=y/(n=Math.sqrt(m)),i=x/n):g>v?g<.01?(n=.707106781,r=0,i=.707106781):(n=y/(r=Math.sqrt(g)),i=b/r):v<.01?(n=.707106781,r=.707106781,i=0):(n=x/(i=Math.sqrt(v)),r=b/i),this.set(n,r,i,e),this}var w=Math.sqrt((p-l)*(p-l)+(c-d)*(c-d)+(u-s)*(u-s));return Math.abs(w)<.001&&(w=1),this.x=(p-l)/w,this.y=(c-d)/w,this.z=(u-s)/w,this.w=Math.acos((a+h+f-1)/2),this},min:function(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this.w=Math.min(this.w,t.w),this},max:function(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this.w=Math.max(this.w,t.w),this},clamp:function(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this.z=Math.max(t.z,Math.min(e.z,this.z)),this.w=Math.max(t.w,Math.min(e.w,this.w)),this},clampScalar:function(){var t,e;return function(n,r){return void 0===t&&(t=new on,e=new on),t.set(n,n,n,n),e.set(r,r,r,r),this.clamp(t,e)}}(),clampLength:function(t,e){var n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))},floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this.w=Math.floor(this.w),this},ceil:function(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this.w=Math.ceil(this.w),this},round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this.w=Math.round(this.w),this},roundToZero:function(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z<0?Math.ceil(this.z):Math.floor(this.z),this.w=this.w<0?Math.ceil(this.w):Math.floor(this.w),this},negate:function(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this.w=-this.w,this},dot:function(t){return this.x*t.x+this.y*t.y+this.z*t.z+this.w*t.w},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)},manhattanLength:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)},normalize:function(){return this.divideScalar(this.length()||1)},setLength:function(t){return this.normalize().multiplyScalar(t)},lerp:function(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this.w+=(t.w-this.w)*e,this},lerpVectors:function(t,e,n){return this.subVectors(e,t).multiplyScalar(n).add(t)},equals:function(t){return t.x===this.x&&t.y===this.y&&t.z===this.z&&t.w===this.w},fromArray:function(t,e){return void 0===e&&(e=0),this.x=t[e],this.y=t[e+1],this.z=t[e+2],this.w=t[e+3],this},toArray:function(t,e){return void 0===t&&(t=[]),void 0===e&&(e=0),t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t[e+3]=this.w,t},fromBufferAttribute:function(t,e,n){return void 0!==n&&console.warn("THREE.Vector4: offset has been removed from .fromBufferAttribute()."),this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this.w=t.getW(e),this}}),an.prototype=Object.assign(Object.create(r.prototype),{constructor:an,isWebGLRenderTarget:!0,setSize:function(t,e){this.width===t&&this.height===e||(this.width=t,this.height=e,this.dispose()),this.viewport.set(0,0,t,e),this.scissor.set(0,0,t,e)},clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.width=t.width,this.height=t.height,this.viewport.copy(t.viewport),this.texture=t.texture.clone(),this.depthBuffer=t.depthBuffer,this.stencilBuffer=t.stencilBuffer,this.depthTexture=t.depthTexture,this},dispose:function(){this.dispatchEvent({type:"dispose"})}}),sn.prototype=Object.create(an.prototype),sn.prototype.constructor=sn,sn.prototype.isWebGLRenderTargetCube=!0,cn.prototype=Object.create(rn.prototype),cn.prototype.constructor=cn,cn.prototype.isDataTexture=!0,Object.assign(un.prototype,{isBox3:!0,set:function(t,e){return this.min.copy(t),this.max.copy(e),this},setFromArray:function(t){for(var e=1/0,n=1/0,r=1/0,i=-1/0,o=-1/0,a=-1/0,s=0,c=t.length;si&&(i=u),h>o&&(o=h),l>a&&(a=l)}return this.min.set(e,n,r),this.max.set(i,o,a),this},setFromBufferAttribute:function(t){for(var e=1/0,n=1/0,r=1/0,i=-1/0,o=-1/0,a=-1/0,s=0,c=t.count;si&&(i=u),h>o&&(o=h),l>a&&(a=l)}return this.min.set(e,n,r),this.max.set(i,o,a),this},setFromPoints:function(t){this.makeEmpty();for(var e=0,n=t.length;ethis.max.x||t.ythis.max.y||t.zthis.max.z)},containsBox:function(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y&&this.min.z<=t.min.z&&t.max.z<=this.max.z},getParameter:function(t,e){return void 0===e&&(console.warn("THREE.Box3: .getParameter() target is now required"),e=new Ye),e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y),(t.z-this.min.z)/(this.max.z-this.min.z))},intersectsBox:function(t){return!(t.max.xthis.max.x||t.max.ythis.max.y||t.max.zthis.max.z)},intersectsSphere:(Qe=new Ye,function(t){return this.clampPoint(t.center,Qe),Qe.distanceToSquared(t.center)<=t.radius*t.radius}),intersectsPlane:function(t){var e,n;return t.normal.x>0?(e=t.normal.x*this.min.x,n=t.normal.x*this.max.x):(e=t.normal.x*this.max.x,n=t.normal.x*this.min.x),t.normal.y>0?(e+=t.normal.y*this.min.y,n+=t.normal.y*this.max.y):(e+=t.normal.y*this.max.y,n+=t.normal.y*this.min.y),t.normal.z>0?(e+=t.normal.z*this.min.z,n+=t.normal.z*this.max.z):(e+=t.normal.z*this.max.z,n+=t.normal.z*this.min.z),e<=t.constant&&n>=t.constant},intersectsTriangle:function(){var t=new Ye,e=new Ye,n=new Ye,r=new Ye,i=new Ye,o=new Ye,a=new Ye,s=new Ye,c=new Ye,u=new Ye;function h(r){var i,o;for(i=0,o=r.length-3;i<=o;i+=3){a.fromArray(r,i);var s=c.x*Math.abs(a.x)+c.y*Math.abs(a.y)+c.z*Math.abs(a.z),u=t.dot(a),h=e.dot(a),l=n.dot(a);if(Math.max(-Math.max(u,h,l),Math.min(u,h,l))>s)return!1}return!0}return function(a){if(this.isEmpty())return!1;this.getCenter(s),c.subVectors(this.max,s),t.subVectors(a.a,s),e.subVectors(a.b,s),n.subVectors(a.c,s),r.subVectors(e,t),i.subVectors(n,e),o.subVectors(t,n);var l=[0,-r.z,r.y,0,-i.z,i.y,0,-o.z,o.y,r.z,0,-r.x,i.z,0,-i.x,o.z,0,-o.x,-r.y,r.x,0,-i.y,i.x,0,-o.y,o.x,0];return!!h(l)&&(!!h(l=[1,0,0,0,1,0,0,0,1])&&(u.crossVectors(r,i),h(l=[u.x,u.y,u.z])))}}(),clampPoint:function(t,e){return void 0===e&&(console.warn("THREE.Box3: .clampPoint() target is now required"),e=new Ye),e.copy(t).clamp(this.min,this.max)},distanceToPoint:function(){var t=new Ye;return function(e){return t.copy(e).clamp(this.min,this.max).sub(e).length()}}(),getBoundingSphere:function(){var t=new Ye;return function(e){return void 0===e&&(console.warn("THREE.Box3: .getBoundingSphere() target is now required"),e=new hn),this.getCenter(e.center),e.radius=.5*this.getSize(t).length(),e}}(),intersect:function(t){return this.min.max(t.min),this.max.min(t.max),this.isEmpty()&&this.makeEmpty(),this},union:function(t){return this.min.min(t.min),this.max.max(t.max),this},applyMatrix4:(Je=[new Ye,new Ye,new Ye,new Ye,new Ye,new Ye,new Ye,new Ye],function(t){return this.isEmpty()?this:(Je[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(t),Je[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(t),Je[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(t),Je[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(t),Je[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(t),Je[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(t),Je[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(t),Je[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(t),this.setFromPoints(Je),this)}),translate:function(t){return this.min.add(t),this.max.add(t),this},equals:function(t){return t.min.equals(this.min)&&t.max.equals(this.max)}}),Object.assign(hn.prototype,{set:function(t,e){return this.center.copy(t),this.radius=e,this},setFromPoints:(Ke=new un,function(t,e){var n=this.center;void 0!==e?n.copy(e):Ke.setFromPoints(t).getCenter(n);for(var r=0,i=0,o=t.length;ithis.radius*this.radius&&(e.sub(this.center).normalize(),e.multiplyScalar(this.radius).add(this.center)),e},getBoundingBox:function(t){return void 0===t&&(console.warn("THREE.Sphere: .getBoundingBox() target is now required"),t=new un),t.set(this.center,this.center),t.expandByScalar(this.radius),t},applyMatrix4:function(t){return this.center.applyMatrix4(t),this.radius=this.radius*t.getMaxScaleOnAxis(),this},translate:function(t){return this.center.add(t),this},equals:function(t){return t.center.equals(this.center)&&t.radius===this.radius}}),Object.assign(ln.prototype,{set:function(t,e){return this.normal.copy(t),this.constant=e,this},setComponents:function(t,e,n,r){return this.normal.set(t,e,n),this.constant=r,this},setFromNormalAndCoplanarPoint:function(t,e){return this.normal.copy(t),this.constant=-e.dot(this.normal),this},setFromCoplanarPoints:function(){var t=new Ye,e=new Ye;return function(n,r,i){var o=t.subVectors(i,r).cross(e.subVectors(n,r)).normalize();return this.setFromNormalAndCoplanarPoint(o,n),this}}(),clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.normal.copy(t.normal),this.constant=t.constant,this},normalize:function(){var t=1/this.normal.length();return this.normal.multiplyScalar(t),this.constant*=t,this},negate:function(){return this.constant*=-1,this.normal.negate(),this},distanceToPoint:function(t){return this.normal.dot(t)+this.constant},distanceToSphere:function(t){return this.distanceToPoint(t.center)-t.radius},projectPoint:function(t,e){return void 0===e&&(console.warn("THREE.Plane: .projectPoint() target is now required"),e=new Ye),e.copy(this.normal).multiplyScalar(-this.distanceToPoint(t)).add(t)},intersectLine:function(){var t=new Ye;return function(e,n){void 0===n&&(console.warn("THREE.Plane: .intersectLine() target is now required"),n=new Ye);var r=e.delta(t),i=this.normal.dot(r);if(0===i)return 0===this.distanceToPoint(e.start)?n.copy(e.start):void 0;var o=-(e.start.dot(this.normal)+this.constant)/i;return o<0||o>1?void 0:n.copy(r).multiplyScalar(o).add(e.start)}}(),intersectsLine:function(t){var e=this.distanceToPoint(t.start),n=this.distanceToPoint(t.end);return e<0&&n>0||n<0&&e>0},intersectsBox:function(t){return t.intersectsPlane(this)},intersectsSphere:function(t){return t.intersectsPlane(this)},coplanarPoint:function(t){return void 0===t&&(console.warn("THREE.Plane: .coplanarPoint() target is now required"),t=new Ye),t.copy(this.normal).multiplyScalar(-this.constant)},applyMatrix4:function(){var t=new Ye,e=new Ze;return function(n,r){var i=r||e.getNormalMatrix(n),o=this.coplanarPoint(t).applyMatrix4(n),a=this.normal.applyMatrix3(i).normalize();return this.constant=-o.dot(a),this}}(),translate:function(t){return this.constant-=t.dot(this.normal),this},equals:function(t){return t.normal.equals(this.normal)&&t.constant===this.constant}}),Object.assign(dn.prototype,{set:function(t,e,n,r,i,o){var a=this.planes;return a[0].copy(t),a[1].copy(e),a[2].copy(n),a[3].copy(r),a[4].copy(i),a[5].copy(o),this},clone:function(){return(new this.constructor).copy(this)},copy:function(t){for(var e=this.planes,n=0;n<6;n++)e[n].copy(t.planes[n]);return this},setFromMatrix:function(t){var e=this.planes,n=t.elements,r=n[0],i=n[1],o=n[2],a=n[3],s=n[4],c=n[5],u=n[6],h=n[7],l=n[8],d=n[9],p=n[10],f=n[11],m=n[12],g=n[13],v=n[14],y=n[15];return e[0].setComponents(a-r,h-s,f-l,y-m).normalize(),e[1].setComponents(a+r,h+s,f+l,y+m).normalize(),e[2].setComponents(a+i,h+c,f+d,y+g).normalize(),e[3].setComponents(a-i,h-c,f-d,y-g).normalize(),e[4].setComponents(a-o,h-u,f-p,y-v).normalize(),e[5].setComponents(a+o,h+u,f+p,y+v).normalize(),this},intersectsObject:(en=new hn,function(t){var e=t.geometry;return null===e.boundingSphere&&e.computeBoundingSphere(),en.copy(e.boundingSphere).applyMatrix4(t.matrixWorld),this.intersectsSphere(en)}),intersectsSprite:function(){var t=new hn;return function(e){return t.center.set(0,0,0),t.radius=.7071067811865476,t.applyMatrix4(e.matrixWorld),this.intersectsSphere(t)}}(),intersectsSphere:function(t){for(var e=this.planes,n=t.center,r=-t.radius,i=0;i<6;i++){if(e[i].distanceToPoint(n)0?t.min.x:t.max.x,tn.x=r.normal.x>0?t.max.x:t.min.x,$e.y=r.normal.y>0?t.min.y:t.max.y,tn.y=r.normal.y>0?t.max.y:t.min.y,$e.z=r.normal.z>0?t.min.z:t.max.z,tn.z=r.normal.z>0?t.max.z:t.min.z;var i=r.distanceToPoint($e),o=r.distanceToPoint(tn);if(i<0&&o<0)return!1}return!0}),containsPoint:function(t){for(var e=this.planes,n=0;n<6;n++)if(e[n].distanceToPoint(t)<0)return!1;return!0}});var pn,fn={alphamap_fragment:"#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\n#endif\n",alphamap_pars_fragment:"#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif\n",alphatest_fragment:"#ifdef ALPHATEST\n\tif ( diffuseColor.a < ALPHATEST ) discard;\n#endif\n",aomap_fragment:"#ifdef USE_AOMAP\n\tfloat ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\n\treflectedLight.indirectDiffuse *= ambientOcclusion;\n\t#if defined( USE_ENVMAP ) && defined( PHYSICAL )\n\t\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.specularRoughness );\n\t#endif\n#endif\n",aomap_pars_fragment:"#ifdef USE_AOMAP\n\tuniform sampler2D aoMap;\n\tuniform float aoMapIntensity;\n#endif",begin_vertex:"\nvec3 transformed = vec3( position );\n",beginnormal_vertex:"\nvec3 objectNormal = vec3( normal );\n",bsdfs:"float punctualLightIntensityToIrradianceFactor( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\n\tif( decayExponent > 0.0 ) {\n#if defined ( PHYSICALLY_CORRECT_LIGHTS )\n\t\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n\t\tfloat maxDistanceCutoffFactor = pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t\treturn distanceFalloff * maxDistanceCutoffFactor;\n#else\n\t\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\n#endif\n\t}\n\treturn 1.0;\n}\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\n\treturn RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\n\treturn ( 1.0 - specularColor ) * fresnel + specularColor;\n}\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\tfloat gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\treturn 1.0 / ( gl * gv );\n}\nfloat G_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\treturn 0.5 / max( gv + gl, EPSILON );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n\tfloat a2 = pow2( alpha );\n\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n\treturn RECIPROCAL_PI * a2 / pow2( denom );\n}\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float roughness ) {\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNL = saturate( dot( geometry.normal, incidentLight.direction ) );\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\tfloat D = D_GGX( alpha, dotNH );\n\treturn F * ( G * D );\n}\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\n\tconst float LUT_SIZE = 64.0;\n\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\n\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\n\tfloat dotNV = saturate( dot( N, V ) );\n\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\n\tuv = uv * LUT_SCALE + LUT_BIAS;\n\treturn uv;\n}\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\n\tfloat l = length( f );\n\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\n}\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\n\tfloat x = dot( v1, v2 );\n\tfloat y = abs( x );\n\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\n\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\n\tfloat v = a / b;\n\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\n\treturn cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n\tvec3 lightNormal = cross( v1, v2 );\n\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n\tvec3 T1, T2;\n\tT1 = normalize( V - N * dot( V, N ) );\n\tT2 = - cross( N, T1 );\n\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\n\tvec3 coords[ 4 ];\n\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n\tcoords[ 0 ] = normalize( coords[ 0 ] );\n\tcoords[ 1 ] = normalize( coords[ 1 ] );\n\tcoords[ 2 ] = normalize( coords[ 2 ] );\n\tcoords[ 3 ] = normalize( coords[ 3 ] );\n\tvec3 vectorFormFactor = vec3( 0.0 );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\n\treturn vec3( result );\n}\nvec3 BRDF_Specular_GGX_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness ) {\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\n\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\n\tvec4 r = roughness * c0 + c1;\n\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\n\tvec2 AB = vec2( -1.04, 1.04 ) * a004 + r.zw;\n\treturn specularColor * AB.x + AB.y;\n}\nfloat G_BlinnPhong_Implicit( ) {\n\treturn 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_BlinnPhong_Implicit( );\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\treturn F * ( G * D );\n}\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\n\treturn ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\n}\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\n\treturn sqrt( 2.0 / ( blinnExponent + 2.0 ) );\n}\n",bumpmap_pars_fragment:"#ifdef USE_BUMPMAP\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\tvec2 dHdxy_fwd() {\n\t\tvec2 dSTdx = dFdx( vUv );\n\t\tvec2 dSTdy = dFdy( vUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n\t\treturn vec2( dBx, dBy );\n\t}\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\n\t\tvec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\n\t\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\n\t\tvec3 vN = surf_norm;\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\t\tfloat fDet = dot( vSigmaX, R1 );\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\t}\n#endif\n",clipping_planes_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvec4 plane;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\tplane = clippingPlanes[ i ];\n\t\tif ( dot( vViewPosition, plane.xyz ) > plane.w ) discard;\n\t}\n\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\tbool clipped = true;\n\t\t#pragma unroll_loop\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vViewPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t}\n\t\tif ( clipped ) discard;\n\t#endif\n#endif\n",clipping_planes_pars_fragment:"#if NUM_CLIPPING_PLANES > 0\n\t#if ! defined( PHYSICAL ) && ! defined( PHONG )\n\t\tvarying vec3 vViewPosition;\n\t#endif\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif\n",clipping_planes_pars_vertex:"#if NUM_CLIPPING_PLANES > 0 && ! defined( PHYSICAL ) && ! defined( PHONG )\n\tvarying vec3 vViewPosition;\n#endif\n",clipping_planes_vertex:"#if NUM_CLIPPING_PLANES > 0 && ! defined( PHYSICAL ) && ! defined( PHONG )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n",color_fragment:"#ifdef USE_COLOR\n\tdiffuseColor.rgb *= vColor;\n#endif",color_pars_fragment:"#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif\n",color_pars_vertex:"#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif",color_vertex:"#ifdef USE_COLOR\n\tvColor.xyz = color.xyz;\n#endif",common:"#define PI 3.14159265359\n#define PI2 6.28318530718\n#define PI_HALF 1.5707963267949\n#define RECIPROCAL_PI 0.31830988618\n#define RECIPROCAL_PI2 0.15915494\n#define LOG2 1.442695\n#define EPSILON 1e-6\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#define whiteCompliment(a) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\nhighp float rand( const in vec2 uv ) {\n\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\n\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n\treturn fract(sin(sn) * c);\n}\nstruct IncidentLight {\n\tvec3 color;\n\tvec3 direction;\n\tbool visible;\n};\nstruct ReflectedLight {\n\tvec3 directDiffuse;\n\tvec3 directSpecular;\n\tvec3 indirectDiffuse;\n\tvec3 indirectSpecular;\n};\nstruct GeometricContext {\n\tvec3 position;\n\tvec3 normal;\n\tvec3 viewDir;\n};\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\tfloat distance = dot( planeNormal, point - pointOnPlane );\n\treturn - distance * planeNormal + point;\n}\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn sign( dot( point - pointOnPlane, planeNormal ) );\n}\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\n}\nmat3 transposeMat3( const in mat3 m ) {\n\tmat3 tmp;\n\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\n\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\n\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\n\treturn tmp;\n}\nfloat linearToRelativeLuminance( const in vec3 color ) {\n\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\n\treturn dot( weights, color.rgb );\n}\n",cube_uv_reflection_fragment:"#ifdef ENVMAP_TYPE_CUBE_UV\n#define cubeUV_textureSize (1024.0)\nint getFaceFromDirection(vec3 direction) {\n\tvec3 absDirection = abs(direction);\n\tint face = -1;\n\tif( absDirection.x > absDirection.z ) {\n\t\tif(absDirection.x > absDirection.y )\n\t\t\tface = direction.x > 0.0 ? 0 : 3;\n\t\telse\n\t\t\tface = direction.y > 0.0 ? 1 : 4;\n\t}\n\telse {\n\t\tif(absDirection.z > absDirection.y )\n\t\t\tface = direction.z > 0.0 ? 2 : 5;\n\t\telse\n\t\t\tface = direction.y > 0.0 ? 1 : 4;\n\t}\n\treturn face;\n}\n#define cubeUV_maxLods1 (log2(cubeUV_textureSize*0.25) - 1.0)\n#define cubeUV_rangeClamp (exp2((6.0 - 1.0) * 2.0))\nvec2 MipLevelInfo( vec3 vec, float roughnessLevel, float roughness ) {\n\tfloat scale = exp2(cubeUV_maxLods1 - roughnessLevel);\n\tfloat dxRoughness = dFdx(roughness);\n\tfloat dyRoughness = dFdy(roughness);\n\tvec3 dx = dFdx( vec * scale * dxRoughness );\n\tvec3 dy = dFdy( vec * scale * dyRoughness );\n\tfloat d = max( dot( dx, dx ), dot( dy, dy ) );\n\td = clamp(d, 1.0, cubeUV_rangeClamp);\n\tfloat mipLevel = 0.5 * log2(d);\n\treturn vec2(floor(mipLevel), fract(mipLevel));\n}\n#define cubeUV_maxLods2 (log2(cubeUV_textureSize*0.25) - 2.0)\n#define cubeUV_rcpTextureSize (1.0 / cubeUV_textureSize)\nvec2 getCubeUV(vec3 direction, float roughnessLevel, float mipLevel) {\n\tmipLevel = roughnessLevel > cubeUV_maxLods2 - 3.0 ? 0.0 : mipLevel;\n\tfloat a = 16.0 * cubeUV_rcpTextureSize;\n\tvec2 exp2_packed = exp2( vec2( roughnessLevel, mipLevel ) );\n\tvec2 rcp_exp2_packed = vec2( 1.0 ) / exp2_packed;\n\tfloat powScale = exp2_packed.x * exp2_packed.y;\n\tfloat scale = rcp_exp2_packed.x * rcp_exp2_packed.y * 0.25;\n\tfloat mipOffset = 0.75*(1.0 - rcp_exp2_packed.y) * rcp_exp2_packed.x;\n\tbool bRes = mipLevel == 0.0;\n\tscale = bRes && (scale < a) ? a : scale;\n\tvec3 r;\n\tvec2 offset;\n\tint face = getFaceFromDirection(direction);\n\tfloat rcpPowScale = 1.0 / powScale;\n\tif( face == 0) {\n\t\tr = vec3(direction.x, -direction.z, direction.y);\n\t\toffset = vec2(0.0+mipOffset,0.75 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\n\t}\n\telse if( face == 1) {\n\t\tr = vec3(direction.y, direction.x, direction.z);\n\t\toffset = vec2(scale+mipOffset, 0.75 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\n\t}\n\telse if( face == 2) {\n\t\tr = vec3(direction.z, direction.x, direction.y);\n\t\toffset = vec2(2.0*scale+mipOffset, 0.75 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\n\t}\n\telse if( face == 3) {\n\t\tr = vec3(direction.x, direction.z, direction.y);\n\t\toffset = vec2(0.0+mipOffset,0.5 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\n\t}\n\telse if( face == 4) {\n\t\tr = vec3(direction.y, direction.x, -direction.z);\n\t\toffset = vec2(scale+mipOffset, 0.5 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\n\t}\n\telse {\n\t\tr = vec3(direction.z, -direction.x, direction.y);\n\t\toffset = vec2(2.0*scale+mipOffset, 0.5 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\n\t}\n\tr = normalize(r);\n\tfloat texelOffset = 0.5 * cubeUV_rcpTextureSize;\n\tvec2 s = ( r.yz / abs( r.x ) + vec2( 1.0 ) ) * 0.5;\n\tvec2 base = offset + vec2( texelOffset );\n\treturn base + s * ( scale - 2.0 * texelOffset );\n}\n#define cubeUV_maxLods3 (log2(cubeUV_textureSize*0.25) - 3.0)\nvec4 textureCubeUV(vec3 reflectedDirection, float roughness ) {\n\tfloat roughnessVal = roughness* cubeUV_maxLods3;\n\tfloat r1 = floor(roughnessVal);\n\tfloat r2 = r1 + 1.0;\n\tfloat t = fract(roughnessVal);\n\tvec2 mipInfo = MipLevelInfo(reflectedDirection, r1, roughness);\n\tfloat s = mipInfo.y;\n\tfloat level0 = mipInfo.x;\n\tfloat level1 = level0 + 1.0;\n\tlevel1 = level1 > 5.0 ? 5.0 : level1;\n\tlevel0 += min( floor( s + 0.5 ), 5.0 );\n\tvec2 uv_10 = getCubeUV(reflectedDirection, r1, level0);\n\tvec4 color10 = envMapTexelToLinear(texture2D(envMap, uv_10));\n\tvec2 uv_20 = getCubeUV(reflectedDirection, r2, level0);\n\tvec4 color20 = envMapTexelToLinear(texture2D(envMap, uv_20));\n\tvec4 result = mix(color10, color20, t);\n\treturn vec4(result.rgb, 1.0);\n}\n#endif\n",defaultnormal_vertex:"vec3 transformedNormal = normalMatrix * objectNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\n",displacementmap_pars_vertex:"#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif\n",displacementmap_vertex:"#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, uv ).x * displacementScale + displacementBias );\n#endif\n",emissivemap_fragment:"#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\n\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif\n",emissivemap_pars_fragment:"#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif\n",encodings_fragment:" gl_FragColor = linearToOutputTexel( gl_FragColor );\n",encodings_pars_fragment:"\nvec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.xyz, vec3( gammaFactor ) ), value.w );\n}\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.xyz, vec3( 1.0 / gammaFactor ) ), value.w );\n}\nvec4 sRGBToLinear( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.w );\n}\nvec4 LinearTosRGB( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.w );\n}\nvec4 RGBEToLinear( in vec4 value ) {\n\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\n}\nvec4 LinearToRGBE( in vec4 value ) {\n\tfloat maxComponent = max( max( value.r, value.g ), value.b );\n\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\n\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\n}\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.xyz * value.w * maxRange, 1.0 );\n}\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.x, max( value.g, value.b ) );\n\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\n\tM = ceil( M * 255.0 ) / 255.0;\n\treturn vec4( value.rgb / ( M * maxRange ), M );\n}\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\n}\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.x, max( value.g, value.b ) );\n\tfloat D = max( maxRange / maxRGB, 1.0 );\n\tD = min( floor( D ) / 255.0, 1.0 );\n\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\n}\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\nvec4 LinearToLogLuv( in vec4 value ) {\n\tvec3 Xp_Y_XYZp = value.rgb * cLogLuvM;\n\tXp_Y_XYZp = max(Xp_Y_XYZp, vec3(1e-6, 1e-6, 1e-6));\n\tvec4 vResult;\n\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\n\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\n\tvResult.w = fract(Le);\n\tvResult.z = (Le - (floor(vResult.w*255.0))/255.0)/255.0;\n\treturn vResult;\n}\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\nvec4 LogLuvToLinear( in vec4 value ) {\n\tfloat Le = value.z * 255.0 + value.w;\n\tvec3 Xp_Y_XYZp;\n\tXp_Y_XYZp.y = exp2((Le - 127.0) / 2.0);\n\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\n\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\n\tvec3 vRGB = Xp_Y_XYZp.rgb * cLogLuvInverseM;\n\treturn vec4( max(vRGB, 0.0), 1.0 );\n}\n",envmap_fragment:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\tvec3 cameraToVertex = normalize( vWorldPosition - cameraPosition );\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#else\n\t\tvec3 reflectVec = vReflect;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#elif defined( ENVMAP_TYPE_EQUIREC )\n\t\tvec2 sampleUV;\n\t\treflectVec = normalize( reflectVec );\n\t\tsampleUV.y = asin( clamp( reflectVec.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\t\tsampleUV.x = atan( reflectVec.z, reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\n\t\tvec4 envColor = texture2D( envMap, sampleUV );\n\t#elif defined( ENVMAP_TYPE_SPHERE )\n\t\treflectVec = normalize( reflectVec );\n\t\tvec3 reflectView = normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0, 0.0, 1.0 ) );\n\t\tvec4 envColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5 );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\tenvColor = envMapTexelToLinear( envColor );\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\t#endif\n#endif\n",envmap_pars_fragment:"#if defined( USE_ENVMAP ) || defined( PHYSICAL )\n\tuniform float reflectivity;\n\tuniform float envMapIntensity;\n#endif\n#ifdef USE_ENVMAP\n\t#if ! defined( PHYSICAL ) && ( defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) )\n\t\tvarying vec3 vWorldPosition;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n\tuniform float flipEnvMap;\n\tuniform int maxMipLevel;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( PHYSICAL )\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif\n",envmap_pars_vertex:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\tvarying vec3 vWorldPosition;\n\t#else\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\t#endif\n#endif\n",envmap_vertex:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\tvWorldPosition = worldPosition.xyz;\n\t#else\n\t\tvec3 cameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#endif\n#endif\n",fog_vertex:"\n#ifdef USE_FOG\nfogDepth = -mvPosition.z;\n#endif",fog_pars_vertex:"#ifdef USE_FOG\n varying float fogDepth;\n#endif\n",fog_fragment:"#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = whiteCompliment( exp2( - fogDensity * fogDensity * fogDepth * fogDepth * LOG2 ) );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, fogDepth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif\n",fog_pars_fragment:"#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\tvarying float fogDepth;\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\n",gradientmap_pars_fragment:"#ifdef TOON\n\tuniform sampler2D gradientMap;\n\tvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n\t\tfloat dotNL = dot( normal, lightDirection );\n\t\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n\t\t#ifdef USE_GRADIENTMAP\n\t\t\treturn texture2D( gradientMap, coord ).rgb;\n\t\t#else\n\t\t\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\n\t\t#endif\n\t}\n#endif\n",lightmap_fragment:"#ifdef USE_LIGHTMAP\n\treflectedLight.indirectDiffuse += PI * texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\n#endif\n",lightmap_pars_fragment:"#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif",lights_lambert_vertex:"vec3 diffuse = vec3( 1.0 );\nGeometricContext geometry;\ngeometry.position = mvPosition.xyz;\ngeometry.normal = normalize( transformedNormal );\ngeometry.viewDir = normalize( -mvPosition.xyz );\nGeometricContext backGeometry;\nbackGeometry.position = geometry.position;\nbackGeometry.normal = -geometry.normal;\nbackGeometry.viewDir = geometry.viewDir;\nvLightFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\n\tvLightBack = vec3( 0.0 );\n#endif\nIncidentLight directLight;\nfloat dotNL;\nvec3 directLightColor_Diffuse;\n#if NUM_POINT_LIGHTS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tgetPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tgetSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n#endif\n#if NUM_DIR_LIGHTS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tgetDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\tvLightFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\n\t\t#endif\n\t}\n#endif\n",lights_pars_begin:"uniform vec3 ambientLightColor;\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treturn irradiance;\n}\n#if NUM_DIR_LIGHTS > 0\n\tstruct DirectionalLight {\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tint shadow;\n\t\tfloat shadowBias;\n\t\tfloat shadowRadius;\n\t\tvec2 shadowMapSize;\n\t};\n\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n\tvoid getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tdirectLight.color = directionalLight.color;\n\t\tdirectLight.direction = directionalLight.direction;\n\t\tdirectLight.visible = true;\n\t}\n#endif\n#if NUM_POINT_LIGHTS > 0\n\tstruct PointLight {\n\t\tvec3 position;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tint shadow;\n\t\tfloat shadowBias;\n\t\tfloat shadowRadius;\n\t\tvec2 shadowMapSize;\n\t\tfloat shadowCameraNear;\n\t\tfloat shadowCameraFar;\n\t};\n\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n\tvoid getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = pointLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tdirectLight.color = pointLight.color;\n\t\tdirectLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\n\t\tdirectLight.visible = ( directLight.color != vec3( 0.0 ) );\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tstruct SpotLight {\n\t\tvec3 position;\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tfloat coneCos;\n\t\tfloat penumbraCos;\n\t\tint shadow;\n\t\tfloat shadowBias;\n\t\tfloat shadowRadius;\n\t\tvec2 shadowMapSize;\n\t};\n\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n\tvoid getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = spotLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tfloat angleCos = dot( directLight.direction, spotLight.direction );\n\t\tif ( angleCos > spotLight.coneCos ) {\n\t\t\tfloat spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\t\tdirectLight.color = spotLight.color;\n\t\t\tdirectLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tdirectLight.visible = true;\n\t\t} else {\n\t\t\tdirectLight.color = vec3( 0.0 );\n\t\t\tdirectLight.visible = false;\n\t\t}\n\t}\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n\tstruct RectAreaLight {\n\t\tvec3 color;\n\t\tvec3 position;\n\t\tvec3 halfWidth;\n\t\tvec3 halfHeight;\n\t};\n\tuniform sampler2D ltc_1;\tuniform sampler2D ltc_2;\n\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tstruct HemisphereLight {\n\t\tvec3 direction;\n\t\tvec3 skyColor;\n\t\tvec3 groundColor;\n\t};\n\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in GeometricContext geometry ) {\n\t\tfloat dotNL = dot( geometry.normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tirradiance *= PI;\n\t\t#endif\n\t\treturn irradiance;\n\t}\n#endif\n",lights_pars_maps:"#if defined( USE_ENVMAP ) && defined( PHYSICAL )\n\tvec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\n\t\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\tvec4 envMapColor = textureCubeUV( queryVec, 1.0 );\n\t\t#else\n\t\t\tvec4 envMapColor = vec4( 0.0 );\n\t\t#endif\n\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t}\n\tfloat getSpecularMIPLevel( const in float blinnShininessExponent, const in int maxMIPLevel ) {\n\t\tfloat maxMIPLevelScalar = float( maxMIPLevel );\n\t\tfloat desiredMIPLevel = maxMIPLevelScalar + 0.79248 - 0.5 * log2( pow2( blinnShininessExponent ) + 1.0 );\n\t\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\n\t}\n\tvec3 getLightProbeIndirectRadiance( const in GeometricContext geometry, const in float blinnShininessExponent, const in int maxMIPLevel ) {\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( -geometry.viewDir, geometry.normal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( -geometry.viewDir, geometry.normal, refractionRatio );\n\t\t#endif\n\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\tfloat specularMIPLevel = getSpecularMIPLevel( blinnShininessExponent, maxMIPLevel );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\tvec4 envMapColor = textureCubeUV(queryReflectVec, BlinnExponentToGGXRoughness(blinnShininessExponent));\n\t\t#elif defined( ENVMAP_TYPE_EQUIREC )\n\t\t\tvec2 sampleUV;\n\t\t\tsampleUV.y = asin( clamp( reflectVec.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\t\t\tsampleUV.x = atan( reflectVec.z, reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = texture2DLodEXT( envMap, sampleUV, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = texture2D( envMap, sampleUV, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_SPHERE )\n\t\t\tvec3 reflectView = normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0,0.0,1.0 ) );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = texture2DLodEXT( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#endif\n\t\treturn envMapColor.rgb * envMapIntensity;\n\t}\n#endif\n",lights_phong_fragment:"BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;\n",lights_phong_pars_fragment:"varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct BlinnPhongMaterial {\n\tvec3\tdiffuseColor;\n\tvec3\tspecularColor;\n\tfloat\tspecularShininess;\n\tfloat\tspecularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\t#ifdef TOON\n\t\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\n\t#else\n\t\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\t\tvec3 irradiance = dotNL * directLight.color;\n\t#endif\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong\n#define Material_LightProbeLOD( material )\t(0)\n",lights_physical_fragment:"PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nmaterial.specularRoughness = clamp( roughnessFactor, 0.04, 1.0 );\n#ifdef STANDARD\n\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\n\tmaterial.clearCoat = saturate( clearCoat );\tmaterial.clearCoatRoughness = clamp( clearCoatRoughness, 0.04, 1.0 );\n#endif\n",lights_physical_pars_fragment:"struct PhysicalMaterial {\n\tvec3\tdiffuseColor;\n\tfloat\tspecularRoughness;\n\tvec3\tspecularColor;\n\t#ifndef STANDARD\n\t\tfloat clearCoat;\n\t\tfloat clearCoatRoughness;\n\t#endif\n};\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\nfloat clearCoatDHRApprox( const in float roughness, const in float dotNL ) {\n\treturn DEFAULT_SPECULAR_COEFFICIENT + ( 1.0 - DEFAULT_SPECULAR_COEFFICIENT ) * ( pow( 1.0 - dotNL, 5.0 ) * pow( 1.0 - roughness, 2.0 ) );\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometry.normal;\n\t\tvec3 viewDir = geometry.viewDir;\n\t\tvec3 position = geometry.position;\n\t\tvec3 lightPos = rectAreaLight.position;\n\t\tvec3 halfWidth = rectAreaLight.halfWidth;\n\t\tvec3 halfHeight = rectAreaLight.halfHeight;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = material.specularRoughness;\n\t\tvec3 rectCoords[ 4 ];\n\t\trectCoords[ 0 ] = lightPos - halfWidth - halfHeight;\t\trectCoords[ 1 ] = lightPos + halfWidth - halfHeight;\n\t\trectCoords[ 2 ] = lightPos + halfWidth + halfHeight;\n\t\trectCoords[ 3 ] = lightPos - halfWidth + halfHeight;\n\t\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\n\t\tvec4 t1 = texture2D( ltc_1, uv );\n\t\tvec4 t2 = texture2D( ltc_2, uv );\n\t\tmat3 mInv = mat3(\n\t\t\tvec3( t1.x, 0, t1.y ),\n\t\t\tvec3( 0, 1, 0 ),\n\t\t\tvec3( t1.z, 0, t1.w )\n\t\t);\n\t\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\n\t\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n\t\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\n\t}\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\t#ifndef STANDARD\n\t\tfloat clearCoatDHR = material.clearCoat * clearCoatDHRApprox( material.clearCoatRoughness, dotNL );\n\t#else\n\t\tfloat clearCoatDHR = 0.0;\n\t#endif\n\treflectedLight.directSpecular += ( 1.0 - clearCoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry, material.specularColor, material.specularRoughness );\n\treflectedLight.directDiffuse += ( 1.0 - clearCoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\t#ifndef STANDARD\n\t\treflectedLight.directSpecular += irradiance * material.clearCoat * BRDF_Specular_GGX( directLight, geometry, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearCoatRoughness );\n\t#endif\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 clearCoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t#ifndef STANDARD\n\t\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\t\tfloat dotNL = dotNV;\n\t\tfloat clearCoatDHR = material.clearCoat * clearCoatDHRApprox( material.clearCoatRoughness, dotNL );\n\t#else\n\t\tfloat clearCoatDHR = 0.0;\n\t#endif\n\treflectedLight.indirectSpecular += ( 1.0 - clearCoatDHR ) * radiance * BRDF_Specular_GGX_Environment( geometry, material.specularColor, material.specularRoughness );\n\t#ifndef STANDARD\n\t\treflectedLight.indirectSpecular += clearCoatRadiance * material.clearCoat * BRDF_Specular_GGX_Environment( geometry, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearCoatRoughness );\n\t#endif\n}\n#define RE_Direct\t\t\t\tRE_Direct_Physical\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular\t\tRE_IndirectSpecular_Physical\n#define Material_BlinnShininessExponent( material ) GGXRoughnessToBlinnExponent( material.specularRoughness )\n#define Material_ClearCoat_BlinnShininessExponent( material ) GGXRoughnessToBlinnExponent( material.clearCoatRoughness )\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}\n",lights_fragment_begin:"\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = normalize( vViewPosition );\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\tPointLight pointLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\n\t\t#ifdef USE_SHADOWMAP\n\t\tdirectLight.color *= all( bvec2( pointLight.shadow, directLight.visible ) ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\tSpotLight spotLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\n\t\t#ifdef USE_SHADOWMAP\n\t\tdirectLight.color *= all( bvec2( spotLight.shadow, directLight.visible ) ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n\tDirectionalLight directionalLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n\t\t#ifdef USE_SHADOWMAP\n\t\tdirectLight.color *= all( bvec2( directionalLight.shadow, directLight.visible ) ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\tRectAreaLight rectAreaLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if defined( RE_IndirectDiffuse )\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\t\t#pragma unroll_loop\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t}\n\t#endif\n#endif\n#if defined( RE_IndirectSpecular )\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearCoatRadiance = vec3( 0.0 );\n#endif\n",lights_fragment_maps:"#if defined( RE_IndirectDiffuse )\n\t#ifdef USE_LIGHTMAP\n\t\tvec3 lightMapIrradiance = texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tlightMapIrradiance *= PI;\n\t\t#endif\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( PHYSICAL ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tirradiance += getLightProbeIndirectIrradiance( geometry, maxMipLevel );\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\tradiance += getLightProbeIndirectRadiance( geometry, Material_BlinnShininessExponent( material ), maxMipLevel );\n\t#ifndef STANDARD\n\t\tclearCoatRadiance += getLightProbeIndirectRadiance( geometry, Material_ClearCoat_BlinnShininessExponent( material ), maxMipLevel );\n\t#endif\n#endif\n",lights_fragment_end:"#if defined( RE_IndirectDiffuse )\n\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\n\tRE_IndirectSpecular( radiance, clearCoatRadiance, geometry, material, reflectedLight );\n#endif\n",logdepthbuf_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tgl_FragDepthEXT = log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif",logdepthbuf_pars_fragment:"#ifdef USE_LOGDEPTHBUF\n\tuniform float logDepthBufFC;\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t#endif\n#endif\n",logdepthbuf_pars_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t#endif\n\tuniform float logDepthBufFC;\n#endif",logdepthbuf_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t#else\n\t\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\n\t\tgl_Position.z *= gl_Position.w;\n\t#endif\n#endif\n",map_fragment:"#ifdef USE_MAP\n\tvec4 texelColor = texture2D( map, vUv );\n\ttexelColor = mapTexelToLinear( texelColor );\n\tdiffuseColor *= texelColor;\n#endif\n",map_pars_fragment:"#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n",map_particle_fragment:"#ifdef USE_MAP\n\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n\tvec4 mapTexel = texture2D( map, uv );\n\tdiffuseColor *= mapTexelToLinear( mapTexel );\n#endif\n",map_particle_pars_fragment:"#ifdef USE_MAP\n\tuniform mat3 uvTransform;\n\tuniform sampler2D map;\n#endif\n",metalnessmap_fragment:"float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif\n",metalnessmap_pars_fragment:"#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif",morphnormal_vertex:"#ifdef USE_MORPHNORMALS\n\tobjectNormal += ( morphNormal0 - normal ) * morphTargetInfluences[ 0 ];\n\tobjectNormal += ( morphNormal1 - normal ) * morphTargetInfluences[ 1 ];\n\tobjectNormal += ( morphNormal2 - normal ) * morphTargetInfluences[ 2 ];\n\tobjectNormal += ( morphNormal3 - normal ) * morphTargetInfluences[ 3 ];\n#endif\n",morphtarget_pars_vertex:"#ifdef USE_MORPHTARGETS\n\t#ifndef USE_MORPHNORMALS\n\tuniform float morphTargetInfluences[ 8 ];\n\t#else\n\tuniform float morphTargetInfluences[ 4 ];\n\t#endif\n#endif",morphtarget_vertex:"#ifdef USE_MORPHTARGETS\n\ttransformed += ( morphTarget0 - position ) * morphTargetInfluences[ 0 ];\n\ttransformed += ( morphTarget1 - position ) * morphTargetInfluences[ 1 ];\n\ttransformed += ( morphTarget2 - position ) * morphTargetInfluences[ 2 ];\n\ttransformed += ( morphTarget3 - position ) * morphTargetInfluences[ 3 ];\n\t#ifndef USE_MORPHNORMALS\n\ttransformed += ( morphTarget4 - position ) * morphTargetInfluences[ 4 ];\n\ttransformed += ( morphTarget5 - position ) * morphTargetInfluences[ 5 ];\n\ttransformed += ( morphTarget6 - position ) * morphTargetInfluences[ 6 ];\n\ttransformed += ( morphTarget7 - position ) * morphTargetInfluences[ 7 ];\n\t#endif\n#endif\n",normal_fragment_begin:"#ifdef FLAT_SHADED\n\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\n\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t#endif\n#endif\n",normal_fragment_maps:"#ifdef USE_NORMALMAP\n\tnormal = perturbNormal2Arb( -vViewPosition, normal );\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\n#endif\n",normalmap_pars_fragment:"#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm ) {\n\t\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\n\t\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\n\t\tvec2 st0 = dFdx( vUv.st );\n\t\tvec2 st1 = dFdy( vUv.st );\n\t\tfloat scale = sign( st1.t * st0.s - st0.t * st1.s );\t\tscale *= float( gl_FrontFacing ) * 2.0 - 1.0;\n\t\tvec3 S = normalize( ( q0 * st1.t - q1 * st0.t ) * scale );\n\t\tvec3 T = normalize( ( - q0 * st1.s + q1 * st0.s ) * scale );\n\t\tvec3 N = normalize( surf_norm );\n\t\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t\tmapN.xy = normalScale * mapN.xy;\n\t\tmat3 tsn = mat3( S, T, N );\n\t\treturn normalize( tsn * mapN );\n\t}\n#endif\n",packing:"vec3 packNormalToRGB( const in vec3 normal ) {\n\treturn normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n\treturn 2.0 * rgb.xyz - 1.0;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\nconst float ShiftRight8 = 1. / 256.;\nvec4 packDepthToRGBA( const in float v ) {\n\tvec4 r = vec4( fract( v * PackFactors ), v );\n\tr.yzw -= r.xyz * ShiftRight8;\treturn r * PackUpscale;\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n\treturn dot( v, UnpackFactors );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\n\treturn linearClipZ * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn (( near + viewZ ) * far ) / (( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\n}\n",premultiplied_alpha_fragment:"#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif\n",project_vertex:"vec4 mvPosition = modelViewMatrix * vec4( transformed, 1.0 );\ngl_Position = projectionMatrix * mvPosition;\n",dithering_fragment:"#if defined( DITHERING )\n gl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif\n",dithering_pars_fragment:"#if defined( DITHERING )\n\tvec3 dithering( vec3 color ) {\n\t\tfloat grid_position = rand( gl_FragCoord.xy );\n\t\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n\t\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n\t\treturn color + dither_shift_RGB;\n\t}\n#endif\n",roughnessmap_fragment:"float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\troughnessFactor *= texelRoughness.g;\n#endif\n",roughnessmap_pars_fragment:"#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif",shadowmap_pars_fragment:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHTS > 0\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHTS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\n\t#endif\n\t#if NUM_SPOT_LIGHTS > 0\n\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHTS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHTS ];\n\t#endif\n\t#if NUM_POINT_LIGHTS > 0\n\t\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHTS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHTS ];\n\t#endif\n\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n\t\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n\t}\n\tfloat texture2DShadowLerp( sampler2D depths, vec2 size, vec2 uv, float compare ) {\n\t\tconst vec2 offset = vec2( 0.0, 1.0 );\n\t\tvec2 texelSize = vec2( 1.0 ) / size;\n\t\tvec2 centroidUV = floor( uv * size + 0.5 ) / size;\n\t\tfloat lb = texture2DCompare( depths, centroidUV + texelSize * offset.xx, compare );\n\t\tfloat lt = texture2DCompare( depths, centroidUV + texelSize * offset.xy, compare );\n\t\tfloat rb = texture2DCompare( depths, centroidUV + texelSize * offset.yx, compare );\n\t\tfloat rt = texture2DCompare( depths, centroidUV + texelSize * offset.yy, compare );\n\t\tvec2 f = fract( uv * size + 0.5 );\n\t\tfloat a = mix( lb, lt, f.y );\n\t\tfloat b = mix( rb, rt, f.y );\n\t\tfloat c = mix( a, b, f.x );\n\t\treturn c;\n\t}\n\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\tfloat shadow = 1.0;\n\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\tshadowCoord.z += shadowBias;\n\t\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n\t\tbool inFrustum = all( inFrustumVec );\n\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n\t\tbool frustumTest = all( frustumTestVec );\n\t\tif ( frustumTest ) {\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tshadow = (\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn shadow;\n\t}\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\t\tvec3 absV = abs( v );\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\t\tvec2 planar = v.xy;\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\t\tif ( absV.z >= almostOne ) {\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\t\t} else if ( absV.x >= almostOne ) {\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\t\t} else if ( absV.y >= almostOne ) {\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\t\t}\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\t}\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\t\tdp += shadowBias;\n\t\tvec3 bd3D = normalize( lightToPosition );\n\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t#endif\n\t}\n#endif\n",shadowmap_pars_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHTS > 0\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHTS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\n\t#endif\n\t#if NUM_SPOT_LIGHTS > 0\n\t\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHTS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHTS ];\n\t#endif\n\t#if NUM_POINT_LIGHTS > 0\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHTS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHTS ];\n\t#endif\n#endif\n",shadowmap_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHTS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * worldPosition;\n\t}\n\t#endif\n\t#if NUM_SPOT_LIGHTS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * worldPosition;\n\t}\n\t#endif\n\t#if NUM_POINT_LIGHTS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * worldPosition;\n\t}\n\t#endif\n#endif\n",shadowmask_pars_fragment:"float getShadowMask() {\n\tfloat shadow = 1.0;\n\t#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHTS > 0\n\tDirectionalLight directionalLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tshadow *= bool( directionalLight.shadow ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t}\n\t#endif\n\t#if NUM_SPOT_LIGHTS > 0\n\tSpotLight spotLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tshadow *= bool( spotLight.shadow ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t}\n\t#endif\n\t#if NUM_POINT_LIGHTS > 0\n\tPointLight pointLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tshadow *= bool( pointLight.shadow ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t}\n\t#endif\n\t#endif\n\treturn shadow;\n}\n",skinbase_vertex:"#ifdef USE_SKINNING\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif",skinning_pars_vertex:"#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\t#ifdef BONE_TEXTURE\n\t\tuniform sampler2D boneTexture;\n\t\tuniform int boneTextureSize;\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tfloat j = i * 4.0;\n\t\t\tfloat x = mod( j, float( boneTextureSize ) );\n\t\t\tfloat y = floor( j / float( boneTextureSize ) );\n\t\t\tfloat dx = 1.0 / float( boneTextureSize );\n\t\t\tfloat dy = 1.0 / float( boneTextureSize );\n\t\t\ty = dy * ( y + 0.5 );\n\t\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\t\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\t\t\treturn bone;\n\t\t}\n\t#else\n\t\tuniform mat4 boneMatrices[ MAX_BONES ];\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tmat4 bone = boneMatrices[ int(i) ];\n\t\t\treturn bone;\n\t\t}\n\t#endif\n#endif\n",skinning_vertex:"#ifdef USE_SKINNING\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\ttransformed = ( bindMatrixInverse * skinned ).xyz;\n#endif\n",skinnormal_vertex:"#ifdef USE_SKINNING\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n#endif\n",specularmap_fragment:"float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif",specularmap_pars_fragment:"#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif",tonemapping_fragment:"#if defined( TONE_MAPPING )\n gl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif\n",tonemapping_pars_fragment:"#ifndef saturate\n\t#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\nuniform float toneMappingExposure;\nuniform float toneMappingWhitePoint;\nvec3 LinearToneMapping( vec3 color ) {\n\treturn toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n}\n#define Uncharted2Helper( x ) max( ( ( x * ( 0.15 * x + 0.10 * 0.50 ) + 0.20 * 0.02 ) / ( x * ( 0.15 * x + 0.50 ) + 0.20 * 0.30 ) ) - 0.02 / 0.30, vec3( 0.0 ) )\nvec3 Uncharted2ToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( Uncharted2Helper( color ) / Uncharted2Helper( vec3( toneMappingWhitePoint ) ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\n",uv_pars_fragment:"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n\tvarying vec2 vUv;\n#endif",uv_pars_vertex:"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n\tvarying vec2 vUv;\n\tuniform mat3 uvTransform;\n#endif\n",uv_vertex:"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n#endif",uv2_pars_fragment:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvarying vec2 vUv2;\n#endif",uv2_pars_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tattribute vec2 uv2;\n\tvarying vec2 vUv2;\n#endif",uv2_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvUv2 = uv2;\n#endif",worldpos_vertex:"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )\n\tvec4 worldPosition = modelMatrix * vec4( transformed, 1.0 );\n#endif\n",cube_frag:"uniform samplerCube tCube;\nuniform float tFlip;\nuniform float opacity;\nvarying vec3 vWorldPosition;\nvoid main() {\n\tgl_FragColor = textureCube( tCube, vec3( tFlip * vWorldPosition.x, vWorldPosition.yz ) );\n\tgl_FragColor.a *= opacity;\n}\n",cube_vert:"varying vec3 vWorldPosition;\n#include \nvoid main() {\n\tvWorldPosition = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n\tgl_Position.z = gl_Position.w;\n}\n",depth_frag:"#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#if DEPTH_PACKING == 3200\n\t\tgl_FragColor = vec4( vec3( 1.0 - gl_FragCoord.z ), opacity );\n\t#elif DEPTH_PACKING == 3201\n\t\tgl_FragColor = packDepthToRGBA( gl_FragCoord.z );\n\t#endif\n}\n",depth_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}\n",distanceRGBA_frag:"#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main () {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include \n\t#include \n\t#include \n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist );\n\tgl_FragColor = packDepthToRGBA( dist );\n}\n",distanceRGBA_vert:"#define DISTANCE\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvWorldPosition = worldPosition.xyz;\n}\n",equirect_frag:"uniform sampler2D tEquirect;\nvarying vec3 vWorldPosition;\n#include \nvoid main() {\n\tvec3 direction = normalize( vWorldPosition );\n\tvec2 sampleUV;\n\tsampleUV.y = asin( clamp( direction.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\tsampleUV.x = atan( direction.z, direction.x ) * RECIPROCAL_PI2 + 0.5;\n\tgl_FragColor = texture2D( tEquirect, sampleUV );\n}\n",equirect_vert:"varying vec3 vWorldPosition;\n#include \nvoid main() {\n\tvWorldPosition = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}\n",linedashed_frag:"uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}\n",linedashed_vert:"uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvLineDistance = scale * lineDistance;\n\tvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include \n\t#include \n\t#include \n}\n",meshbasic_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\treflectedLight.indirectDiffuse += texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}\n",meshbasic_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef USE_ENVMAP\n\t#include \n\t#include \n\t#include \n\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}\n",meshlambert_frag:"uniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\nvarying vec3 vLightFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\treflectedLight.indirectDiffuse = getAmbientLightIrradiance( ambientLightColor );\n\t#include \n\treflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\n\t#else\n\t\treflectedLight.directDiffuse = vLightFront;\n\t#endif\n\treflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}\n",meshlambert_vert:"#define LAMBERT\nvarying vec3 vLightFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}\n",meshphong_frag:"#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}\n",meshphong_vert:"#define PHONG\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}\n",meshphysical_frag:"#define PHYSICAL\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifndef STANDARD\n\tuniform float clearCoat;\n\tuniform float clearCoatRoughness;\n#endif\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}\n",meshphysical_vert:"#define PHYSICAL\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}\n",normal_frag:"#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n}\n",normal_vert:"#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}\n",points_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}\n",points_vert:"uniform float size;\nuniform float scale;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#ifdef USE_SIZEATTENUATION\n\t\tgl_PointSize = size * ( scale / - mvPosition.z );\n\t#else\n\t\tgl_PointSize = size;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}\n",shadow_frag:"uniform vec3 color;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\t#include \n}\n",shadow_vert:"#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}\n"},mn={merge:function(t){for(var e={},n=0;n>16&255)/255,this.g=(t>>8&255)/255,this.b=(255&t)/255,this},setRGB:function(t,e,n){return this.r=t,this.g=e,this.b=n,this},setHSL:function(){function t(t,e,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?t+6*(e-t)*n:n<.5?e:n<2/3?t+6*(e-t)*(2/3-n):t}return function(e,n,r){if(e=Ve.euclideanModulo(e,1),n=Ve.clamp(n,0,1),r=Ve.clamp(r,0,1),0===n)this.r=this.g=this.b=r;else{var i=r<=.5?r*(1+n):r+n-r*n,o=2*r-i;this.r=t(o,i,e+1/3),this.g=t(o,i,e),this.b=t(o,i,e-1/3)}return this}}(),setStyle:function(t){function e(e){void 0!==e&&parseFloat(e)<1&&console.warn("THREE.Color: Alpha component of "+t+" will be ignored.")}var n;if(n=/^((?:rgb|hsl)a?)\(\s*([^\)]*)\)/.exec(t)){var r,i=n[1],o=n[2];switch(i){case"rgb":case"rgba":if(r=/^(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(o))return this.r=Math.min(255,parseInt(r[1],10))/255,this.g=Math.min(255,parseInt(r[2],10))/255,this.b=Math.min(255,parseInt(r[3],10))/255,e(r[5]),this;if(r=/^(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(o))return this.r=Math.min(100,parseInt(r[1],10))/100,this.g=Math.min(100,parseInt(r[2],10))/100,this.b=Math.min(100,parseInt(r[3],10))/100,e(r[5]),this;break;case"hsl":case"hsla":if(r=/^([0-9]*\.?[0-9]+)\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(o)){var a=parseFloat(r[1])/360,s=parseInt(r[2],10)/100,c=parseInt(r[3],10)/100;return e(r[5]),this.setHSL(a,s,c)}}}else if(n=/^\#([A-Fa-f0-9]+)$/.exec(t)){var u,h=(u=n[1]).length;if(3===h)return this.r=parseInt(u.charAt(0)+u.charAt(0),16)/255,this.g=parseInt(u.charAt(1)+u.charAt(1),16)/255,this.b=parseInt(u.charAt(2)+u.charAt(2),16)/255,this;if(6===h)return this.r=parseInt(u.charAt(0)+u.charAt(1),16)/255,this.g=parseInt(u.charAt(2)+u.charAt(3),16)/255,this.b=parseInt(u.charAt(4)+u.charAt(5),16)/255,this}t&&t.length>0&&(void 0!==(u=gn[t])?this.setHex(u):console.warn("THREE.Color: Unknown color "+t));return this},clone:function(){return new this.constructor(this.r,this.g,this.b)},copy:function(t){return this.r=t.r,this.g=t.g,this.b=t.b,this},copyGammaToLinear:function(t,e){return void 0===e&&(e=2),this.r=Math.pow(t.r,e),this.g=Math.pow(t.g,e),this.b=Math.pow(t.b,e),this},copyLinearToGamma:function(t,e){void 0===e&&(e=2);var n=e>0?1/e:1;return this.r=Math.pow(t.r,n),this.g=Math.pow(t.g,n),this.b=Math.pow(t.b,n),this},convertGammaToLinear:function(){var t=this.r,e=this.g,n=this.b;return this.r=t*t,this.g=e*e,this.b=n*n,this},convertLinearToGamma:function(){return this.r=Math.sqrt(this.r),this.g=Math.sqrt(this.g),this.b=Math.sqrt(this.b),this},getHex:function(){return 255*this.r<<16^255*this.g<<8^255*this.b<<0},getHexString:function(){return("000000"+this.getHex().toString(16)).slice(-6)},getHSL:function(t){void 0===t&&(console.warn("THREE.Color: .getHSL() target is now required"),t={h:0,s:0,l:0});var e,n,r=this.r,i=this.g,o=this.b,a=Math.max(r,i,o),s=Math.min(r,i,o),c=(s+a)/2;if(s===a)e=0,n=0;else{var u=a-s;switch(n=c<=.5?u/(a+s):u/(2-a-s),a){case r:e=(i-o)/u+(i1){for(var e=0;e1){for(var e=0;e0){r.children=[];for(s=0;s0&&(n.geometries=l),d.length>0&&(n.materials=d),p.length>0&&(n.textures=p),f.length>0&&(n.images=f),a.length>0&&(n.shapes=a)}return n.object=r,n;function m(t){var e=[];for(var n in t){var r=t[n];delete r.metadata,e.push(r)}return e}},clone:function(t){return(new this.constructor).copy(this,t)},copy:function(t,e){if(void 0===e&&(e=!0),this.name=t.name,this.up.copy(t.up),this.position.copy(t.position),this.quaternion.copy(t.quaternion),this.scale.copy(t.scale),this.matrix.copy(t.matrix),this.matrixWorld.copy(t.matrixWorld),this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrixWorldNeedsUpdate=t.matrixWorldNeedsUpdate,this.layers.mask=t.layers.mask,this.visible=t.visible,this.castShadow=t.castShadow,this.receiveShadow=t.receiveShadow,this.frustumCulled=t.frustumCulled,this.renderOrder=t.renderOrder,this.userData=JSON.parse(JSON.stringify(t.userData)),!0===e)for(var n=0;ne&&(e=t[n]);return e}Un.prototype=Object.assign(Object.create(r.prototype),{constructor:Un,isGeometry:!0,applyMatrix:function(t){for(var e=(new Ze).getNormalMatrix(t),n=0,r=this.vertices.length;n0)for(d=0;d0&&(this.normalsNeedUpdate=!0)},computeFlatVertexNormals:function(){var t,e,n;for(this.computeFaceNormals(),t=0,e=this.faces.length;t0&&(this.normalsNeedUpdate=!0)},computeMorphNormals:function(){var t,e,n,r,i;for(n=0,r=this.faces.length;n=0;n--){var f=d[n];for(this.faces.splice(f,1),a=0,s=this.faceVertexUvs.length;a0,g=p.vertexNormals.length>0,v=1!==p.color.r||1!==p.color.g||1!==p.color.b,y=p.vertexColors.length>0,x=0;if(x=M(x=M(x=M(x=M(x=M(x=M(x=M(x=M(x,0,0),1,!0),2,!1),3,f),4,m),5,g),6,v),7,y),a.push(x),a.push(p.a,p.b,p.c),a.push(p.materialIndex),f){var b=this.faceVertexUvs[0][i];a.push(S(b[0]),S(b[1]),S(b[2]))}if(m&&a.push(E(p.normal)),g){var w=p.vertexNormals;a.push(E(w[0]),E(w[1]),E(w[2]))}if(v&&a.push(T(p.color)),y){var _=p.vertexColors;a.push(T(_[0]),T(_[1]),T(_[2]))}}function M(t,e,n){return n?t|1<0&&(t.data.colors=u),l.length>0&&(t.data.uvs=[l]),t.data.faces=a,t},clone:function(){return(new Un).copy(this)},copy:function(t){var e,n,r,i,o,a;this.vertices=[],this.colors=[],this.faces=[],this.faceVertexUvs=[[]],this.morphTargets=[],this.morphNormals=[],this.skinWeights=[],this.skinIndices=[],this.lineDistances=[],this.boundingBox=null,this.boundingSphere=null,this.name=t.name;var s=t.vertices;for(e=0,n=s.length;e0,a=i[1]&&i[1].length>0,s=t.morphTargets,c=s.length;if(c>0){e=[];for(var u=0;u0){h=[];for(u=0;u0?1:-1,u.push(R.x,R.y,R.z),h.push(y/m),h.push(1-x/g),A+=1}}for(x=0;x65535?Vn:kn)(t,1):this.index=t},addAttribute:function(t,e){return e&&e.isBufferAttribute||e&&e.isInterleavedBufferAttribute?"index"===t?(console.warn("THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute."),void this.setIndex(e)):(this.attributes[t]=e,this):(console.warn("THREE.BufferGeometry: .addAttribute() now expects ( name, attribute )."),void this.addAttribute(t,new Bn(arguments[1],arguments[2])))},getAttribute:function(t){return this.attributes[t]},removeAttribute:function(t){return delete this.attributes[t],this},addGroup:function(t,e,n){this.groups.push({start:t,count:e,materialIndex:void 0!==n?n:0})},clearGroups:function(){this.groups=[]},setDrawRange:function(t,e){this.drawRange.start=t,this.drawRange.count=e},applyMatrix:function(t){var e=this.attributes.position;void 0!==e&&(t.applyToBufferAttribute(e),e.needsUpdate=!0);var n=this.attributes.normal;void 0!==n&&((new Ze).getNormalMatrix(t).applyToBufferAttribute(n),n.needsUpdate=!0);return null!==this.boundingBox&&this.computeBoundingBox(),null!==this.boundingSphere&&this.computeBoundingSphere(),this},rotateX:function(){var t=new Xe;return function(e){return t.makeRotationX(e),this.applyMatrix(t),this}}(),rotateY:function(){var t=new Xe;return function(e){return t.makeRotationY(e),this.applyMatrix(t),this}}(),rotateZ:function(){var t=new Xe;return function(e){return t.makeRotationZ(e),this.applyMatrix(t),this}}(),translate:function(){var t=new Xe;return function(e,n,r){return t.makeTranslation(e,n,r),this.applyMatrix(t),this}}(),scale:function(){var t=new Xe;return function(e,n,r){return t.makeScale(e,n,r),this.applyMatrix(t),this}}(),lookAt:function(){var t=new Rn;return function(e){t.lookAt(e),t.updateMatrix(),this.applyMatrix(t.matrix)}}(),center:function(){var t=new Ye;return function(){return this.computeBoundingBox(),this.boundingBox.getCenter(t).negate(),this.translate(t.x,t.y,t.z),this}}(),setFromObject:function(t){var e=t.geometry;if(t.isPoints||t.isLine){var n=new Wn(3*e.vertices.length,3),r=new Wn(3*e.colors.length,3);if(this.addAttribute("position",n.copyVector3sArray(e.vertices)),this.addAttribute("color",r.copyColorsArray(e.colors)),e.lineDistances&&e.lineDistances.length===e.vertices.length){var i=new Wn(e.lineDistances.length,1);this.addAttribute("lineDistance",i.copyArray(e.lineDistances))}null!==e.boundingSphere&&(this.boundingSphere=e.boundingSphere.clone()),null!==e.boundingBox&&(this.boundingBox=e.boundingBox.clone())}else t.isMesh&&e&&e.isGeometry&&this.fromGeometry(e);return this},setFromPoints:function(t){for(var e=[],n=0,r=t.length;n0){var n=new Float32Array(3*t.normals.length);this.addAttribute("normal",new Bn(n,3).copyVector3sArray(t.normals))}if(t.colors.length>0){var r=new Float32Array(3*t.colors.length);this.addAttribute("color",new Bn(r,3).copyColorsArray(t.colors))}if(t.uvs.length>0){var i=new Float32Array(2*t.uvs.length);this.addAttribute("uv",new Bn(i,2).copyVector2sArray(t.uvs))}if(t.uvs2.length>0){var o=new Float32Array(2*t.uvs2.length);this.addAttribute("uv2",new Bn(o,2).copyVector2sArray(t.uvs2))}for(var a in this.groups=t.groups,t.morphTargets){for(var s=[],c=t.morphTargets[a],u=0,h=c.length;u0){var p=new Wn(4*t.skinIndices.length,4);this.addAttribute("skinIndex",p.copyVector4sArray(t.skinIndices))}if(t.skinWeights.length>0){var f=new Wn(4*t.skinWeights.length,4);this.addAttribute("skinWeight",f.copyVector4sArray(t.skinWeights))}return null!==t.boundingSphere&&(this.boundingSphere=t.boundingSphere.clone()),null!==t.boundingBox&&(this.boundingBox=t.boundingBox.clone()),this},computeBoundingBox:function(){null===this.boundingBox&&(this.boundingBox=new un);var t=this.attributes.position;void 0!==t?this.boundingBox.setFromBufferAttribute(t):this.boundingBox.makeEmpty(),(isNaN(this.boundingBox.min.x)||isNaN(this.boundingBox.min.y)||isNaN(this.boundingBox.min.z))&&console.error('THREE.BufferGeometry.computeBoundingBox: Computed min/max have NaN values. The "position" attribute is likely to have NaN values.',this)},computeBoundingSphere:function(){var t=new un,e=new Ye;return function(){null===this.boundingSphere&&(this.boundingSphere=new hn);var n=this.attributes.position;if(n){var r=this.boundingSphere.center;t.setFromBufferAttribute(n),t.getCenter(r);for(var i=0,o=0,a=n.count;o0&&(t.data.groups=JSON.parse(JSON.stringify(s)));var c=this.boundingSphere;return null!==c&&(t.data.boundingSphere={center:c.center.toArray(),radius:c.radius}),t},clone:function(){return(new Jn).copy(this)},copy:function(t){var e,n,r;this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null,this.name=t.name;var i=t.index;null!==i&&this.setIndex(i.clone());var o=t.attributes;for(e in o){var a=o[e];this.addAttribute(e,a.clone())}var s=t.morphAttributes;for(e in s){var c=[],u=s[e];for(n=0,r=u.length;n0&&(n.alphaTest=this.alphaTest),!0===this.premultipliedAlpha&&(n.premultipliedAlpha=this.premultipliedAlpha),!0===this.wireframe&&(n.wireframe=this.wireframe),this.wireframeLinewidth>1&&(n.wireframeLinewidth=this.wireframeLinewidth),"round"!==this.wireframeLinecap&&(n.wireframeLinecap=this.wireframeLinecap),"round"!==this.wireframeLinejoin&&(n.wireframeLinejoin=this.wireframeLinejoin),!0===this.morphTargets&&(n.morphTargets=!0),!0===this.skinning&&(n.skinning=!0),!1===this.visible&&(n.visible=!1),"{}"!==JSON.stringify(this.userData)&&(n.userData=this.userData),e){var i=r(t.textures),o=r(t.images);i.length>0&&(n.textures=i),o.length>0&&(n.images=o)}return n},clone:function(){return(new this.constructor).copy(this)},copy:function(t){this.name=t.name,this.fog=t.fog,this.lights=t.lights,this.blending=t.blending,this.side=t.side,this.flatShading=t.flatShading,this.vertexColors=t.vertexColors,this.opacity=t.opacity,this.transparent=t.transparent,this.blendSrc=t.blendSrc,this.blendDst=t.blendDst,this.blendEquation=t.blendEquation,this.blendSrcAlpha=t.blendSrcAlpha,this.blendDstAlpha=t.blendDstAlpha,this.blendEquationAlpha=t.blendEquationAlpha,this.depthFunc=t.depthFunc,this.depthTest=t.depthTest,this.depthWrite=t.depthWrite,this.colorWrite=t.colorWrite,this.precision=t.precision,this.polygonOffset=t.polygonOffset,this.polygonOffsetFactor=t.polygonOffsetFactor,this.polygonOffsetUnits=t.polygonOffsetUnits,this.dithering=t.dithering,this.alphaTest=t.alphaTest,this.premultipliedAlpha=t.premultipliedAlpha,this.overdraw=t.overdraw,this.visible=t.visible,this.userData=JSON.parse(JSON.stringify(t.userData)),this.clipShadows=t.clipShadows,this.clipIntersection=t.clipIntersection;var e=t.clippingPlanes,n=null;if(null!==e){var r=e.length;n=new Array(r);for(var i=0;i!==r;++i)n[i]=e[i].clone()}return this.clippingPlanes=n,this.shadowSide=t.shadowSide,this},dispose:function(){this.dispatchEvent({type:"dispose"})}}),hr.prototype=Object.create(ur.prototype),hr.prototype.constructor=hr,hr.prototype.isMeshBasicMaterial=!0,hr.prototype.copy=function(t){return ur.prototype.copy.call(this,t),this.color.copy(t.color),this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.skinning=t.skinning,this.morphTargets=t.morphTargets,this},lr.prototype=Object.create(ur.prototype),lr.prototype.constructor=lr,lr.prototype.isShaderMaterial=!0,lr.prototype.copy=function(t){return ur.prototype.copy.call(this,t),this.fragmentShader=t.fragmentShader,this.vertexShader=t.vertexShader,this.uniforms=mn.clone(t.uniforms),this.defines=Object.assign({},t.defines),this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.lights=t.lights,this.clipping=t.clipping,this.skinning=t.skinning,this.morphTargets=t.morphTargets,this.morphNormals=t.morphNormals,this.extensions=t.extensions,this},lr.prototype.toJSON=function(t){var e=ur.prototype.toJSON.call(this,t);return e.uniforms=this.uniforms,e.vertexShader=this.vertexShader,e.fragmentShader=this.fragmentShader,e},Object.assign(dr.prototype,{set:function(t,e){return this.origin.copy(t),this.direction.copy(e),this},clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.origin.copy(t.origin),this.direction.copy(t.direction),this},at:function(t,e){return void 0===e&&(console.warn("THREE.Ray: .at() target is now required"),e=new Ye),e.copy(this.direction).multiplyScalar(t).add(this.origin)},lookAt:function(t){return this.direction.copy(t).sub(this.origin).normalize(),this},recast:function(){var t=new Ye;return function(e){return this.origin.copy(this.at(e,t)),this}}(),closestPointToPoint:function(t,e){void 0===e&&(console.warn("THREE.Ray: .closestPointToPoint() target is now required"),e=new Ye),e.subVectors(t,this.origin);var n=e.dot(this.direction);return n<0?e.copy(this.origin):e.copy(this.direction).multiplyScalar(n).add(this.origin)},distanceToPoint:function(t){return Math.sqrt(this.distanceSqToPoint(t))},distanceSqToPoint:function(){var t=new Ye;return function(e){var n=t.subVectors(e,this.origin).dot(this.direction);return n<0?this.origin.distanceToSquared(e):(t.copy(this.direction).multiplyScalar(n).add(this.origin),t.distanceToSquared(e))}}(),distanceSqToSegment:(nr=new Ye,rr=new Ye,ir=new Ye,function(t,e,n,r){nr.copy(t).add(e).multiplyScalar(.5),rr.copy(e).sub(t).normalize(),ir.copy(this.origin).sub(nr);var i,o,a,s,c=.5*t.distanceTo(e),u=-this.direction.dot(rr),h=ir.dot(this.direction),l=-ir.dot(rr),d=ir.lengthSq(),p=Math.abs(1-u*u);if(p>0)if(o=u*h-l,s=c*p,(i=u*l-h)>=0)if(o>=-s)if(o<=s){var f=1/p;a=(i*=f)*(i+u*(o*=f)+2*h)+o*(u*i+o+2*l)+d}else o=c,a=-(i=Math.max(0,-(u*o+h)))*i+o*(o+2*l)+d;else o=-c,a=-(i=Math.max(0,-(u*o+h)))*i+o*(o+2*l)+d;else o<=-s?a=-(i=Math.max(0,-(-u*c+h)))*i+(o=i>0?-c:Math.min(Math.max(-c,-l),c))*(o+2*l)+d:o<=s?(i=0,a=(o=Math.min(Math.max(-c,-l),c))*(o+2*l)+d):a=-(i=Math.max(0,-(u*c+h)))*i+(o=i>0?c:Math.min(Math.max(-c,-l),c))*(o+2*l)+d;else o=u>0?-c:c,a=-(i=Math.max(0,-(u*o+h)))*i+o*(o+2*l)+d;return n&&n.copy(this.direction).multiplyScalar(i).add(this.origin),r&&r.copy(rr).multiplyScalar(o).add(nr),a}),intersectSphere:function(){var t=new Ye;return function(e,n){t.subVectors(e.center,this.origin);var r=t.dot(this.direction),i=t.dot(t)-r*r,o=e.radius*e.radius;if(i>o)return null;var a=Math.sqrt(o-i),s=r-a,c=r+a;return s<0&&c<0?null:s<0?this.at(c,n):this.at(s,n)}}(),intersectsSphere:function(t){return this.distanceToPoint(t.center)<=t.radius},distanceToPlane:function(t){var e=t.normal.dot(this.direction);if(0===e)return 0===t.distanceToPoint(this.origin)?0:null;var n=-(this.origin.dot(t.normal)+t.constant)/e;return n>=0?n:null},intersectPlane:function(t,e){var n=this.distanceToPlane(t);return null===n?null:this.at(n,e)},intersectsPlane:function(t){var e=t.distanceToPoint(this.origin);return 0===e||t.normal.dot(this.direction)*e<0},intersectBox:function(t,e){var n,r,i,o,a,s,c=1/this.direction.x,u=1/this.direction.y,h=1/this.direction.z,l=this.origin;return c>=0?(n=(t.min.x-l.x)*c,r=(t.max.x-l.x)*c):(n=(t.max.x-l.x)*c,r=(t.min.x-l.x)*c),u>=0?(i=(t.min.y-l.y)*u,o=(t.max.y-l.y)*u):(i=(t.max.y-l.y)*u,o=(t.min.y-l.y)*u),n>o||i>r?null:((i>n||n!=n)&&(n=i),(o=0?(a=(t.min.z-l.z)*h,s=(t.max.z-l.z)*h):(a=(t.max.z-l.z)*h,s=(t.min.z-l.z)*h),n>s||a>r?null:((a>n||n!=n)&&(n=a),(s=0?n:r,e)))},intersectsBox:(er=new Ye,function(t){return null!==this.intersectBox(t,er)}),intersectTriangle:function(){var t=new Ye,e=new Ye,n=new Ye,r=new Ye;return function(i,o,a,s,c){e.subVectors(o,i),n.subVectors(a,i),r.crossVectors(e,n);var u,h=this.direction.dot(r);if(h>0){if(s)return null;u=1}else{if(!(h<0))return null;u=-1,h=-h}t.subVectors(this.origin,i);var l=u*this.direction.dot(n.crossVectors(t,n));if(l<0)return null;var d=u*this.direction.dot(e.cross(t));if(d<0)return null;if(l+d>h)return null;var p=-u*t.dot(r);return p<0?null:this.at(p/h,c)}}(),applyMatrix4:function(t){return this.origin.applyMatrix4(t),this.direction.transformDirection(t),this},equals:function(t){return t.origin.equals(this.origin)&&t.direction.equals(this.direction)}}),Object.assign(pr.prototype,{set:function(t,e){return this.start.copy(t),this.end.copy(e),this},clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.start.copy(t.start),this.end.copy(t.end),this},getCenter:function(t){return void 0===t&&(console.warn("THREE.Line3: .getCenter() target is now required"),t=new Ye),t.addVectors(this.start,this.end).multiplyScalar(.5)},delta:function(t){return void 0===t&&(console.warn("THREE.Line3: .delta() target is now required"),t=new Ye),t.subVectors(this.end,this.start)},distanceSq:function(){return this.start.distanceToSquared(this.end)},distance:function(){return this.start.distanceTo(this.end)},at:function(t,e){return void 0===e&&(console.warn("THREE.Line3: .at() target is now required"),e=new Ye),this.delta(e).multiplyScalar(t).add(this.start)},closestPointToPointParameter:(or=new Ye,ar=new Ye,function(t,e){or.subVectors(t,this.start),ar.subVectors(this.end,this.start);var n=ar.dot(ar),r=ar.dot(or)/n;return e&&(r=Ve.clamp(r,0,1)),r}),closestPointToPoint:function(t,e,n){var r=this.closestPointToPointParameter(t,e);return void 0===n&&(console.warn("THREE.Line3: .closestPointToPoint() target is now required"),n=new Ye),this.delta(n).multiplyScalar(r).add(this.start)},applyMatrix4:function(t){return this.start.applyMatrix4(t),this.end.applyMatrix4(t),this},equals:function(t){return t.start.equals(this.start)&&t.end.equals(this.end)}}),Object.assign(fr,{getNormal:(sr=new Ye,function(t,e,n,r){void 0===r&&(console.warn("THREE.Triangle: .getNormal() target is now required"),r=new Ye),r.subVectors(n,e),sr.subVectors(t,e),r.cross(sr);var i=r.lengthSq();return i>0?r.multiplyScalar(1/Math.sqrt(i)):r.set(0,0,0)}),getBarycoord:function(){var t=new Ye,e=new Ye,n=new Ye;return function(r,i,o,a,s){t.subVectors(a,i),e.subVectors(o,i),n.subVectors(r,i);var c=t.dot(t),u=t.dot(e),h=t.dot(n),l=e.dot(e),d=e.dot(n),p=c*l-u*u;if(void 0===s&&(console.warn("THREE.Triangle: .getBarycoord() target is now required"),s=new Ye),0===p)return s.set(-2,-1,-1);var f=1/p,m=(l*h-u*d)*f,g=(c*d-u*h)*f;return s.set(1-m-g,g,m)}}(),containsPoint:function(){var t=new Ye;return function(e,n,r,i){return fr.getBarycoord(e,n,r,i,t),t.x>=0&&t.y>=0&&t.x+t.y<=1}}()}),Object.assign(fr.prototype,{set:function(t,e,n){return this.a.copy(t),this.b.copy(e),this.c.copy(n),this},setFromPointsAndIndices:function(t,e,n,r){return this.a.copy(t[e]),this.b.copy(t[n]),this.c.copy(t[r]),this},clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.a.copy(t.a),this.b.copy(t.b),this.c.copy(t.c),this},getArea:function(){var t=new Ye,e=new Ye;return function(){return t.subVectors(this.c,this.b),e.subVectors(this.a,this.b),.5*t.cross(e).length()}}(),getMidpoint:function(t){return void 0===t&&(console.warn("THREE.Triangle: .getMidpoint() target is now required"),t=new Ye),t.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)},getNormal:function(t){return fr.getNormal(this.a,this.b,this.c,t)},getPlane:function(t){return void 0===t&&(console.warn("THREE.Triangle: .getPlane() target is now required"),t=new Ye),t.setFromCoplanarPoints(this.a,this.b,this.c)},getBarycoord:function(t,e){return fr.getBarycoord(t,this.a,this.b,this.c,e)},containsPoint:function(t){return fr.containsPoint(t,this.a,this.b,this.c)},intersectsBox:function(t){return t.intersectsTriangle(this)},closestPointToPoint:function(){var t=new ln,e=[new pr,new pr,new pr],n=new Ye,r=new Ye;return function(i,o){void 0===o&&(console.warn("THREE.Triangle: .closestPointToPoint() target is now required"),o=new Ye);var a=1/0;if(t.setFromCoplanarPoints(this.a,this.b,this.c),t.projectPoint(i,n),!0===this.containsPoint(n))o.copy(n);else{e[0].set(this.a,this.b),e[1].set(this.b,this.c),e[2].set(this.c,this.a);for(var s=0;s0){var a=i[o[0]];if(void 0!==a)for(this.morphTargetInfluences=[],this.morphTargetDictionary={},t=0,e=a.length;t0)for(this.morphTargetInfluences=[],this.morphTargetDictionary={},t=0,e=s.length;tn.far?null:{distance:c,point:f.clone(),object:t}}function v(t,e,n,a,s,c,d,f){r.fromBufferAttribute(a,c),i.fromBufferAttribute(a,d),o.fromBufferAttribute(a,f);var v=g(t,t.material,e,n,r,i,o,p);if(v){s&&(u.fromBufferAttribute(s,c),h.fromBufferAttribute(s,d),l.fromBufferAttribute(s,f),v.uv=m(p,r,i,o,u,h,l));var y=new On(c,d,f);fr.getNormal(r,i,o,y.normal),v.face=y,v.faceIndex=c}return v}return function(d,f){var y,x=this.geometry,b=this.material,w=this.matrixWorld;if(void 0!==b&&(null===x.boundingSphere&&x.computeBoundingSphere(),n.copy(x.boundingSphere),n.applyMatrix4(w),!1!==d.ray.intersectsSphere(n)&&(t.getInverse(w),e.copy(d.ray).applyMatrix4(t),null===x.boundingBox||!1!==e.intersectsBox(x.boundingBox))))if(x.isBufferGeometry){var _,M,E,T,S,A=x.index,L=x.attributes.position,R=x.attributes.uv;if(null!==A)for(T=0,S=A.count;T0&&(I=B);for(var F=0,z=U.length;F0)return t;var i=e*n,o=wr[i];if(void 0===o&&(o=new Float32Array(i),wr[i]=o),0!==e){r.toArray(o,0);for(var a=1,s=0;a!==e;++a)s+=n,t[a].toArray(o,s)}return o}function Sr(t,e){var n=_r[e];void 0===n&&(n=new Int32Array(e),_r[e]=n);for(var r=0;r!==e;++r)n[r]=t.allocTextureUnit();return n}function Ar(t,e){t.uniform1f(this.addr,e)}function Lr(t,e){t.uniform1i(this.addr,e)}function Rr(t,e){void 0===e.x?t.uniform2fv(this.addr,e):t.uniform2f(this.addr,e.x,e.y)}function Cr(t,e){void 0!==e.x?t.uniform3f(this.addr,e.x,e.y,e.z):void 0!==e.r?t.uniform3f(this.addr,e.r,e.g,e.b):t.uniform3fv(this.addr,e)}function Pr(t,e){void 0===e.x?t.uniform4fv(this.addr,e):t.uniform4f(this.addr,e.x,e.y,e.z,e.w)}function Or(t,e){t.uniformMatrix2fv(this.addr,!1,e.elements||e)}function Ir(t,e){void 0===e.elements?t.uniformMatrix3fv(this.addr,!1,e):(Er.set(e.elements),t.uniformMatrix3fv(this.addr,!1,Er))}function Nr(t,e){void 0===e.elements?t.uniformMatrix4fv(this.addr,!1,e):(Mr.set(e.elements),t.uniformMatrix4fv(this.addr,!1,Mr))}function Dr(t,e,n){var r=n.allocTextureUnit();t.uniform1i(this.addr,r),n.setTexture2D(e||yr,r)}function Ur(t,e,n){var r=n.allocTextureUnit();t.uniform1i(this.addr,r),n.setTextureCube(e||xr,r)}function Br(t,e){t.uniform2iv(this.addr,e)}function Fr(t,e){t.uniform3iv(this.addr,e)}function zr(t,e){t.uniform4iv(this.addr,e)}function Hr(t,e){t.uniform1fv(this.addr,e)}function Gr(t,e){t.uniform1iv(this.addr,e)}function kr(t,e){t.uniform2fv(this.addr,Tr(e,this.size,2))}function jr(t,e){t.uniform3fv(this.addr,Tr(e,this.size,3))}function Vr(t,e){t.uniform4fv(this.addr,Tr(e,this.size,4))}function Wr(t,e){t.uniformMatrix2fv(this.addr,!1,Tr(e,this.size,4))}function Xr(t,e){t.uniformMatrix3fv(this.addr,!1,Tr(e,this.size,9))}function qr(t,e){t.uniformMatrix4fv(this.addr,!1,Tr(e,this.size,16))}function Yr(t,e,n){var r=e.length,i=Sr(n,r);t.uniform1iv(this.addr,i);for(var o=0;o!==r;++o)n.setTexture2D(e[o]||yr,i[o])}function Zr(t,e,n){var r=e.length,i=Sr(n,r);t.uniform1iv(this.addr,i);for(var o=0;o!==r;++o)n.setTextureCube(e[o]||xr,i[o])}function Jr(t,e,n){this.id=t,this.addr=n,this.setValue=function(t){switch(t){case 5126:return Ar;case 35664:return Rr;case 35665:return Cr;case 35666:return Pr;case 35674:return Or;case 35675:return Ir;case 35676:return Nr;case 35678:case 36198:return Dr;case 35680:return Ur;case 5124:case 35670:return Lr;case 35667:case 35671:return Br;case 35668:case 35672:return Fr;case 35669:case 35673:return zr}}(e.type)}function Qr(t,e,n){this.id=t,this.addr=n,this.size=e.size,this.setValue=function(t){switch(t){case 5126:return Hr;case 35664:return kr;case 35665:return jr;case 35666:return Vr;case 35674:return Wr;case 35675:return Xr;case 35676:return qr;case 35678:return Yr;case 35680:return Zr;case 5124:case 35670:return Gr;case 35667:case 35671:return Br;case 35668:case 35672:return Fr;case 35669:case 35673:return zr}}(e.type)}function Kr(t){this.id=t,br.call(this)}Kr.prototype.setValue=function(t,e){for(var n=this.seq,r=0,i=n.length;r!==i;++r){var o=n[r];o.setValue(t,e[o.id])}};var $r=/([\w\d_]+)(\])?(\[|\.)?/g;function ti(t,e){t.seq.push(e),t.map[e.id]=e}function ei(t,e,n){var r=t.name,i=r.length;for($r.lastIndex=0;;){var o=$r.exec(r),a=$r.lastIndex,s=o[1],c="]"===o[2],u=o[3];if(c&&(s|=0),void 0===u||"["===u&&a+2===i){ti(n,void 0===u?new Jr(s,t,e):new Qr(s,t,e));break}var h=n.map[s];void 0===h&&ti(n,h=new Kr(s)),n=h}}function ni(t,e,n){br.call(this),this.renderer=n;for(var r=t.getProgramParameter(e,t.ACTIVE_UNIFORMS),i=0;i/gm,function(t,e){var n=fn[e];if(void 0===n)throw new Error("Can not resolve #include <"+e+">");return hi(n)})}function li(t){return t.replace(/#pragma unroll_loop[\s]+?for \( int i \= (\d+)\; i < (\d+)\; i \+\+ \) \{([\s\S]+?)(?=\})\}/g,function(t,e,n,r){for(var i="",o=parseInt(e);o0?t.gammaFactor:1,b=function(t,e,n){return[(t=t||{}).derivatives||e.envMapCubeUV||e.bumpMap||e.normalMap||e.flatShading?"#extension GL_OES_standard_derivatives : enable":"",(t.fragDepth||e.logarithmicDepthBuffer)&&n.get("EXT_frag_depth")?"#extension GL_EXT_frag_depth : enable":"",t.drawBuffers&&n.get("WEBGL_draw_buffers")?"#extension GL_EXT_draw_buffers : require":"",(t.shaderTextureLOD||e.envMap)&&n.get("EXT_shader_texture_lod")?"#extension GL_EXT_shader_texture_lod : enable":""].filter(si).join("\n")}(r.extensions,o,e),w=function(t){var e=[];for(var n in t){var r=t[n];!1!==r&&e.push("#define "+n+" "+r)}return e.join("\n")}(s),E=a.createProgram();r.isRawShaderMaterial?((f=[w].filter(si).join("\n")).length>0&&(f+="\n"),(m=[b,w].filter(si).join("\n")).length>0&&(m+="\n")):(f=["precision "+o.precision+" float;","precision "+o.precision+" int;","#define SHADER_NAME "+i.name,w,o.supportsVertexTextures?"#define VERTEX_TEXTURES":"","#define GAMMA_FACTOR "+x,"#define MAX_BONES "+o.maxBones,o.useFog&&o.fog?"#define USE_FOG":"",o.useFog&&o.fogExp?"#define FOG_EXP2":"",o.map?"#define USE_MAP":"",o.envMap?"#define USE_ENVMAP":"",o.envMap?"#define "+d:"",o.lightMap?"#define USE_LIGHTMAP":"",o.aoMap?"#define USE_AOMAP":"",o.emissiveMap?"#define USE_EMISSIVEMAP":"",o.bumpMap?"#define USE_BUMPMAP":"",o.normalMap?"#define USE_NORMALMAP":"",o.displacementMap&&o.supportsVertexTextures?"#define USE_DISPLACEMENTMAP":"",o.specularMap?"#define USE_SPECULARMAP":"",o.roughnessMap?"#define USE_ROUGHNESSMAP":"",o.metalnessMap?"#define USE_METALNESSMAP":"",o.alphaMap?"#define USE_ALPHAMAP":"",o.vertexColors?"#define USE_COLOR":"",o.flatShading?"#define FLAT_SHADED":"",o.skinning?"#define USE_SKINNING":"",o.useVertexTexture?"#define BONE_TEXTURE":"",o.morphTargets?"#define USE_MORPHTARGETS":"",o.morphNormals&&!1===o.flatShading?"#define USE_MORPHNORMALS":"",o.doubleSided?"#define DOUBLE_SIDED":"",o.flipSided?"#define FLIP_SIDED":"",o.shadowMapEnabled?"#define USE_SHADOWMAP":"",o.shadowMapEnabled?"#define "+h:"",o.sizeAttenuation?"#define USE_SIZEATTENUATION":"",o.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",o.logarithmicDepthBuffer&&e.get("EXT_frag_depth")?"#define USE_LOGDEPTHBUF_EXT":"","uniform mat4 modelMatrix;","uniform mat4 modelViewMatrix;","uniform mat4 projectionMatrix;","uniform mat4 viewMatrix;","uniform mat3 normalMatrix;","uniform vec3 cameraPosition;","attribute vec3 position;","attribute vec3 normal;","attribute vec2 uv;","#ifdef USE_COLOR","\tattribute vec3 color;","#endif","#ifdef USE_MORPHTARGETS","\tattribute vec3 morphTarget0;","\tattribute vec3 morphTarget1;","\tattribute vec3 morphTarget2;","\tattribute vec3 morphTarget3;","\t#ifdef USE_MORPHNORMALS","\t\tattribute vec3 morphNormal0;","\t\tattribute vec3 morphNormal1;","\t\tattribute vec3 morphNormal2;","\t\tattribute vec3 morphNormal3;","\t#else","\t\tattribute vec3 morphTarget4;","\t\tattribute vec3 morphTarget5;","\t\tattribute vec3 morphTarget6;","\t\tattribute vec3 morphTarget7;","\t#endif","#endif","#ifdef USE_SKINNING","\tattribute vec4 skinIndex;","\tattribute vec4 skinWeight;","#endif","\n"].filter(si).join("\n"),m=[b,"precision "+o.precision+" float;","precision "+o.precision+" int;","#define SHADER_NAME "+i.name,w,o.alphaTest?"#define ALPHATEST "+o.alphaTest:"","#define GAMMA_FACTOR "+x,o.useFog&&o.fog?"#define USE_FOG":"",o.useFog&&o.fogExp?"#define FOG_EXP2":"",o.map?"#define USE_MAP":"",o.envMap?"#define USE_ENVMAP":"",o.envMap?"#define "+l:"",o.envMap?"#define "+d:"",o.envMap?"#define "+p:"",o.lightMap?"#define USE_LIGHTMAP":"",o.aoMap?"#define USE_AOMAP":"",o.emissiveMap?"#define USE_EMISSIVEMAP":"",o.bumpMap?"#define USE_BUMPMAP":"",o.normalMap?"#define USE_NORMALMAP":"",o.specularMap?"#define USE_SPECULARMAP":"",o.roughnessMap?"#define USE_ROUGHNESSMAP":"",o.metalnessMap?"#define USE_METALNESSMAP":"",o.alphaMap?"#define USE_ALPHAMAP":"",o.vertexColors?"#define USE_COLOR":"",o.gradientMap?"#define USE_GRADIENTMAP":"",o.flatShading?"#define FLAT_SHADED":"",o.doubleSided?"#define DOUBLE_SIDED":"",o.flipSided?"#define FLIP_SIDED":"",o.shadowMapEnabled?"#define USE_SHADOWMAP":"",o.shadowMapEnabled?"#define "+h:"",o.premultipliedAlpha?"#define PREMULTIPLIED_ALPHA":"",o.physicallyCorrectLights?"#define PHYSICALLY_CORRECT_LIGHTS":"",o.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",o.logarithmicDepthBuffer&&e.get("EXT_frag_depth")?"#define USE_LOGDEPTHBUF_EXT":"",o.envMap&&e.get("EXT_shader_texture_lod")?"#define TEXTURE_LOD_EXT":"","uniform mat4 viewMatrix;","uniform vec3 cameraPosition;",o.toneMapping!==lt?"#define TONE_MAPPING":"",o.toneMapping!==lt?fn.tonemapping_pars_fragment:"",o.toneMapping!==lt?function(t,e){var n;switch(e){case dt:n="Linear";break;case pt:n="Reinhard";break;case ft:n="Uncharted2";break;case mt:n="OptimizedCineon";break;default:throw new Error("unsupported toneMapping: "+e)}return"vec3 "+t+"( vec3 color ) { return "+n+"ToneMapping( color ); }"}("toneMapping",o.toneMapping):"",o.dithering?"#define DITHERING":"",o.outputEncoding||o.mapEncoding||o.envMapEncoding||o.emissiveMapEncoding?fn.encodings_pars_fragment:"",o.mapEncoding?ai("mapTexelToLinear",o.mapEncoding):"",o.envMapEncoding?ai("envMapTexelToLinear",o.envMapEncoding):"",o.emissiveMapEncoding?ai("emissiveMapTexelToLinear",o.emissiveMapEncoding):"",o.outputEncoding?(g="linearToOutputTexel",v=o.outputEncoding,y=oi(v),"vec4 "+g+"( vec4 value ) { return LinearTo"+y[0]+y[1]+"; }"):"",o.depthPacking?"#define DEPTH_PACKING "+r.depthPacking:"","\n"].filter(si).join("\n")),c=ui(c=ci(c=hi(c),o),o),u=ui(u=ci(u=hi(u),o),o);var T=f+(c=li(c)),S=m+(u=li(u)),A=ri(a,a.VERTEX_SHADER,T),L=ri(a,a.FRAGMENT_SHADER,S);a.attachShader(E,A),a.attachShader(E,L),void 0!==r.index0AttributeName?a.bindAttribLocation(E,0,r.index0AttributeName):!0===o.morphTargets&&a.bindAttribLocation(E,0,"position"),a.linkProgram(E);var R,C,P=a.getProgramInfoLog(E).trim(),O=a.getShaderInfoLog(A).trim(),I=a.getShaderInfoLog(L).trim(),N=!0,D=!0;return!1===a.getProgramParameter(E,a.LINK_STATUS)?(N=!1,console.error("THREE.WebGLProgram: shader error: ",a.getError(),"gl.VALIDATE_STATUS",a.getProgramParameter(E,a.VALIDATE_STATUS),"gl.getProgramInfoLog",P,O,I)):""!==P?console.warn("THREE.WebGLProgram: gl.getProgramInfoLog()",P):""!==O&&""!==I||(D=!1),D&&(this.diagnostics={runnable:N,material:r,programLog:P,vertexShader:{log:O,prefix:f},fragmentShader:{log:I,prefix:m}}),a.deleteShader(A),a.deleteShader(L),this.getUniforms=function(){return void 0===R&&(R=new ni(a,E,t)),R},this.getAttributes=function(){return void 0===C&&(C=function(t,e){for(var n={},r=t.getProgramParameter(e,t.ACTIVE_ATTRIBUTES),i=0;i0,maxBones:d,useVertexTexture:n.floatVertexTextures,morphTargets:e.morphTargets,morphNormals:e.morphNormals,maxMorphTargets:t.maxMorphTargets,maxMorphNormals:t.maxMorphNormals,numDirLights:r.directional.length,numPointLights:r.point.length,numSpotLights:r.spot.length,numRectAreaLights:r.rectArea.length,numHemiLights:r.hemi.length,numClippingPlanes:c,numClipIntersection:u,dithering:e.dithering,shadowMapEnabled:t.shadowMap.enabled&&h.receiveShadow&&o.length>0,shadowMapType:t.shadowMap.type,toneMapping:t.toneMapping,physicallyCorrectLights:t.physicallyCorrectLights,premultipliedAlpha:e.premultipliedAlpha,alphaTest:e.alphaTest,doubleSided:e.side===S,flipSided:e.side===T,depthPacking:void 0!==e.depthPacking&&e.depthPacking}},this.getProgramCode=function(e,n){var r=[];if(n.shaderID?r.push(n.shaderID):(r.push(e.fragmentShader),r.push(e.vertexShader)),void 0!==e.defines)for(var i in e.defines)r.push(i),r.push(e.defines[i]);for(var a=0;a1&&n.sort(fi),r.length>1&&r.sort(mi)}}},t[r]=i),i},dispose:function(){t={}}}}var vi,yi,xi,bi,wi,_i,Mi,Ei,Ti=0;function Si(){var t=new function(){var t={};return{get:function(e){if(void 0!==t[e.id])return t[e.id];var n;switch(e.type){case"DirectionalLight":n={direction:new Ye,color:new vn,shadow:!1,shadowBias:0,shadowRadius:1,shadowMapSize:new We};break;case"SpotLight":n={position:new Ye,direction:new Ye,color:new vn,distance:0,coneCos:0,penumbraCos:0,decay:0,shadow:!1,shadowBias:0,shadowRadius:1,shadowMapSize:new We};break;case"PointLight":n={position:new Ye,color:new vn,distance:0,decay:0,shadow:!1,shadowBias:0,shadowRadius:1,shadowMapSize:new We,shadowCameraNear:1,shadowCameraFar:1e3};break;case"HemisphereLight":n={direction:new Ye,skyColor:new vn,groundColor:new vn};break;case"RectAreaLight":n={color:new vn,position:new Ye,halfWidth:new Ye,halfHeight:new Ye}}return t[e.id]=n,n}}},e={id:Ti++,hash:"",ambient:[0,0,0],directional:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotShadowMap:[],spotShadowMatrix:[],rectArea:[],point:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[]},n=new Ye,r=new Xe,i=new Xe;return{setup:function(o,a,s){for(var c=0,u=0,h=0,l=0,d=0,p=0,f=0,m=0,g=s.matrixWorldInverse,v=0,y=o.length;v0:s&&s.isGeometry&&(v=s.morphTargets&&s.morphTargets.length>0)),e.isSkinnedMesh&&!1===n.skinning&&console.warn("THREE.WebGLShadowMap: THREE.SkinnedMesh with material.skinning set to false:",e);var y=e.isSkinnedMesh&&n.skinning,x=0;v&&(x|=u),y&&(x|=h),c=l[x]}if(t.localClippingEnabled&&!0===n.clipShadows&&0!==n.clippingPlanes.length){var b=c.uuid,w=n.uuid,_=f[b];void 0===_&&(_={},f[b]=_);var M=_[w];void 0===M&&(M=c.clone(),_[w]=M),c=M}return c.visible=n.visible,c.wireframe=n.wireframe,c.side=null!=n.shadowSide?n.shadowSide:m[n.side],c.clipShadows=n.clipShadows,c.clippingPlanes=n.clippingPlanes,c.clipIntersection=n.clipIntersection,c.wireframeLinewidth=n.wireframeLinewidth,c.linewidth=n.linewidth,r&&c.isMeshDistanceMaterial&&(c.referencePosition.copy(i),c.nearDistance=o,c.farDistance=a),c}function C(n,i,o,a){if(!1!==n.visible){if(n.layers.test(i.layers)&&(n.isMesh||n.isLine||n.isPoints)&&n.castShadow&&(!n.frustumCulled||r.intersectsObject(n))){n.modelViewMatrix.multiplyMatrices(o.matrixWorldInverse,n.matrixWorld);var s=e.update(n),u=n.material;if(Array.isArray(u))for(var h=s.groups,l=0,d=h.length;l 0 ) {","\t\tfloat fogFactor = 0.0;","\t\tif ( fogType == 1 ) {","\t\t\tfogFactor = smoothstep( fogNear, fogFar, fogDepth );","\t\t} else {","\t\t\tconst float LOG2 = 1.442695;","\t\t\tfogFactor = exp2( - fogDensity * fogDensity * fogDepth * fogDepth * LOG2 );","\t\t\tfogFactor = 1.0 - clamp( fogFactor, 0.0, 1.0 );","\t\t}","\t\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );","\t}","}"].join("\n")),e.compileShader(n),e.compileShader(r),e.attachShader(t,n),e.attachShader(t,r),e.linkProgram(t),t}(),c={position:e.getAttribLocation(s,"position"),uv:e.getAttribLocation(s,"uv")},u={uvOffset:e.getUniformLocation(s,"uvOffset"),uvScale:e.getUniformLocation(s,"uvScale"),rotation:e.getUniformLocation(s,"rotation"),center:e.getUniformLocation(s,"center"),scale:e.getUniformLocation(s,"scale"),color:e.getUniformLocation(s,"color"),map:e.getUniformLocation(s,"map"),opacity:e.getUniformLocation(s,"opacity"),modelViewMatrix:e.getUniformLocation(s,"modelViewMatrix"),projectionMatrix:e.getUniformLocation(s,"projectionMatrix"),fogType:e.getUniformLocation(s,"fogType"),fogDensity:e.getUniformLocation(s,"fogDensity"),fogNear:e.getUniformLocation(s,"fogNear"),fogFar:e.getUniformLocation(s,"fogFar"),fogColor:e.getUniformLocation(s,"fogColor"),fogDepth:e.getUniformLocation(s,"fogDepth"),alphaTest:e.getUniformLocation(s,"alphaTest")};var r=document.createElementNS("http://www.w3.org/1999/xhtml","canvas");r.width=8,r.height=8;var l=r.getContext("2d");l.fillStyle="white",l.fillRect(0,0,8,8),h=new Pi(r)}function m(t,e){return t.renderOrder!==e.renderOrder?t.renderOrder-e.renderOrder:t.z!==e.z?e.z-t.z:e.id-t.id}this.render=function(i,g,v){if(0!==i.length){void 0===s&&f(),n.useProgram(s),n.initAttributes(),n.enableAttribute(c.position),n.enableAttribute(c.uv),n.disableUnusedAttributes(),n.disable(e.CULL_FACE),n.enable(e.BLEND),e.bindBuffer(e.ARRAY_BUFFER,o),e.vertexAttribPointer(c.position,2,e.FLOAT,!1,16,0),e.vertexAttribPointer(c.uv,2,e.FLOAT,!1,16,8),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,a),e.uniformMatrix4fv(u.projectionMatrix,!1,v.projectionMatrix.elements),n.activeTexture(e.TEXTURE0),e.uniform1i(u.map,0);var y=0,x=0,b=g.fog;b?(e.uniform3f(u.fogColor,b.color.r,b.color.g,b.color.b),b.isFog?(e.uniform1f(u.fogNear,b.near),e.uniform1f(u.fogFar,b.far),e.uniform1i(u.fogType,1),y=1,x=1):b.isFogExp2&&(e.uniform1f(u.fogDensity,b.density),e.uniform1i(u.fogType,2),y=2,x=2)):(e.uniform1i(u.fogType,0),y=0,x=0);for(var w=0,_=i.length;w<_;w++){(T=i[w]).modelViewMatrix.multiplyMatrices(v.matrixWorldInverse,T.matrixWorld),T.z=-T.modelViewMatrix.elements[14]}i.sort(m);var M=[],E=[];for(w=0,_=i.length;w<_;w++){var T,S=(T=i[w]).material;if(!1!==S.visible){T.onBeforeRender(t,g,v,void 0,S,void 0),e.uniform1f(u.alphaTest,S.alphaTest),e.uniformMatrix4fv(u.modelViewMatrix,!1,T.modelViewMatrix.elements),T.matrixWorld.decompose(l,d,p),M[0]=p.x,M[1]=p.y,E[0]=T.center.x-.5,E[1]=T.center.y-.5;var A=0;g.fog&&S.fog&&(A=x),y!==A&&(e.uniform1i(u.fogType,A),y=A),null!==S.map?(e.uniform2f(u.uvOffset,S.map.offset.x,S.map.offset.y),e.uniform2f(u.uvScale,S.map.repeat.x,S.map.repeat.y)):(e.uniform2f(u.uvOffset,0,0),e.uniform2f(u.uvScale,1,1)),e.uniform1f(u.opacity,S.opacity),e.uniform3f(u.color,S.color.r,S.color.g,S.color.b),e.uniform1f(u.rotation,S.rotation),e.uniform2fv(u.center,E),e.uniform2fv(u.scale,M),n.setBlending(S.blending,S.blendEquation,S.blendSrc,S.blendDst,S.blendEquationAlpha,S.blendSrcAlpha,S.blendDstAlpha,S.premultipliedAlpha),n.buffers.depth.setTest(S.depthTest),n.buffers.depth.setMask(S.depthWrite),n.buffers.color.setMask(S.colorWrite),r.setTexture2D(S.map||h,0),e.drawElements(e.TRIANGLES,6,e.UNSIGNED_SHORT,0),T.onAfterRender(t,g,v,void 0,S,void 0)}}n.enable(e.CULL_FACE),n.reset()}}}function Ii(t,e,n,r,i,o,a){var s,c="undefined"!=typeof WebGL2RenderingContext&&t instanceof WebGL2RenderingContext,u={};function h(t,e){if(t.width>e||t.height>e){if("data"in t)return void console.warn("THREE.WebGLRenderer: image in DataTexture is too big ("+t.width+"x"+t.height+").");var n=e/Math.max(t.width,t.height),r=document.createElementNS("http://www.w3.org/1999/xhtml","canvas");return r.width=Math.floor(t.width*n),r.height=Math.floor(t.height*n),r.getContext("2d").drawImage(t,0,0,t.width,t.height,0,0,r.width,r.height),console.warn("THREE.WebGLRenderer: image is too big ("+t.width+"x"+t.height+"). Resized to "+r.width+"x"+r.height,t),r}return t}function l(t){return Ve.isPowerOfTwo(t.width)&&Ve.isPowerOfTwo(t.height)}function d(t,e){return t.generateMipmaps&&e&&t.minFilter!==At&&t.minFilter!==Ct}function p(e,n,i,o){t.generateMipmap(e),r.get(n).__maxMipLevel=Math.log(Math.max(i,o))*Math.LOG2E}function f(e){return e===At||e===Lt||e===Rt?t.NEAREST:t.LINEAR}function m(e){var n=e.target;n.removeEventListener("dispose",m),function(e){var n=r.get(e);if(e.image&&n.__image__webglTextureCube)t.deleteTexture(n.__image__webglTextureCube);else{if(void 0===n.__webglInit)return;t.deleteTexture(n.__webglTexture)}r.remove(e)}(n),n.isVideoTexture&&delete u[n.id],a.memory.textures--}function g(e){var n=e.target;n.removeEventListener("dispose",g),function(e){var n=r.get(e),i=r.get(e.texture);if(!e)return;void 0!==i.__webglTexture&&t.deleteTexture(i.__webglTexture);e.depthTexture&&e.depthTexture.dispose();if(e.isWebGLRenderTargetCube)for(var o=0;o<6;o++)t.deleteFramebuffer(n.__webglFramebuffer[o]),n.__webglDepthbuffer&&t.deleteRenderbuffer(n.__webglDepthbuffer[o]);else t.deleteFramebuffer(n.__webglFramebuffer),n.__webglDepthbuffer&&t.deleteRenderbuffer(n.__webglDepthbuffer);r.remove(e.texture),r.remove(e)}(n),a.memory.textures--}function v(e,f){var g=r.get(e);if(e.isVideoTexture&&function(t){var e=t.id,n=a.render.frame;u[e]!==n&&(u[e]=n,t.update())}(e),e.version>0&&g.__version!==e.version){var v=e.image;if(void 0===v)console.warn("THREE.WebGLRenderer: Texture marked for update but image is undefined",e);else{if(!1!==v.complete)return void function(e,r,u){void 0===e.__webglInit&&(e.__webglInit=!0,r.addEventListener("dispose",m),e.__webglTexture=t.createTexture(),a.memory.textures++);n.activeTexture(t.TEXTURE0+u),n.bindTexture(t.TEXTURE_2D,e.__webglTexture),t.pixelStorei(t.UNPACK_FLIP_Y_WEBGL,r.flipY),t.pixelStorei(t.UNPACK_PREMULTIPLY_ALPHA_WEBGL,r.premultiplyAlpha),t.pixelStorei(t.UNPACK_ALIGNMENT,r.unpackAlignment);var f=h(r.image,i.maxTextureSize);(function(t){return t.wrapS!==Tt||t.wrapT!==Tt||t.minFilter!==At&&t.minFilter!==Ct})(r)&&!1===l(f)&&(f=function(t){return t instanceof HTMLImageElement||t instanceof HTMLCanvasElement||t instanceof ImageBitmap?(void 0===s&&(s=document.createElementNS("http://www.w3.org/1999/xhtml","canvas")),s.width=Ve.floorPowerOfTwo(t.width),s.height=Ve.floorPowerOfTwo(t.height),s.getContext("2d").drawImage(t,0,0,s.width,s.height),console.warn("THREE.WebGLRenderer: image is not power of two ("+t.width+"x"+t.height+"). Resized to "+s.width+"x"+s.height,t),s):t}(f));var g=l(f),v=o.convert(r.format),x=o.convert(r.type);y(t.TEXTURE_2D,r,g);var b,w=r.mipmaps;if(r.isDepthTexture){var _=t.DEPTH_COMPONENT;if(r.type===zt){if(!c)throw new Error("Float Depth Texture only supported in WebGL2.0");_=t.DEPTH_COMPONENT32F}else c&&(_=t.DEPTH_COMPONENT16);r.format===Qt&&_===t.DEPTH_COMPONENT&&r.type!==Ut&&r.type!==Ft&&(console.warn("THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture."),r.type=Ut,x=o.convert(r.type)),r.format===Kt&&(_=t.DEPTH_STENCIL,r.type!==Vt&&(console.warn("THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture."),r.type=Vt,x=o.convert(r.type))),n.texImage2D(t.TEXTURE_2D,0,_,f.width,f.height,0,v,x,null)}else if(r.isDataTexture)if(w.length>0&&g){for(var M=0,E=w.length;M-1?n.compressedTexImage2D(t.TEXTURE_2D,M,v,b.width,b.height,0,b.data):console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()"):n.texImage2D(t.TEXTURE_2D,M,v,b.width,b.height,0,v,x,b.data);e.__maxMipLevel=w.length-1}else if(w.length>0&&g){for(var M=0,E=w.length;M1||r.get(a).__currentAnisotropy)&&(t.texParameterf(n,c.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(a.anisotropy,i.getMaxAnisotropy())),r.get(a).__currentAnisotropy=a.anisotropy)}}function x(e,i,a,s){var c=o.convert(i.texture.format),u=o.convert(i.texture.type);n.texImage2D(s,0,c,i.width,i.height,0,c,u,null),t.bindFramebuffer(t.FRAMEBUFFER,e),t.framebufferTexture2D(t.FRAMEBUFFER,a,s,r.get(i.texture).__webglTexture,0),t.bindFramebuffer(t.FRAMEBUFFER,null)}function b(e,n){t.bindRenderbuffer(t.RENDERBUFFER,e),n.depthBuffer&&!n.stencilBuffer?(t.renderbufferStorage(t.RENDERBUFFER,t.DEPTH_COMPONENT16,n.width,n.height),t.framebufferRenderbuffer(t.FRAMEBUFFER,t.DEPTH_ATTACHMENT,t.RENDERBUFFER,e)):n.depthBuffer&&n.stencilBuffer?(t.renderbufferStorage(t.RENDERBUFFER,t.DEPTH_STENCIL,n.width,n.height),t.framebufferRenderbuffer(t.FRAMEBUFFER,t.DEPTH_STENCIL_ATTACHMENT,t.RENDERBUFFER,e)):t.renderbufferStorage(t.RENDERBUFFER,t.RGBA4,n.width,n.height),t.bindRenderbuffer(t.RENDERBUFFER,null)}function w(e){var n=r.get(e),i=!0===e.isWebGLRenderTargetCube;if(e.depthTexture){if(i)throw new Error("target.depthTexture not supported in Cube render targets");!function(e,n){if(n&&n.isWebGLRenderTargetCube)throw new Error("Depth Texture with cube render targets is not supported");if(t.bindFramebuffer(t.FRAMEBUFFER,e),!n.depthTexture||!n.depthTexture.isDepthTexture)throw new Error("renderTarget.depthTexture must be an instance of THREE.DepthTexture");r.get(n.depthTexture).__webglTexture&&n.depthTexture.image.width===n.width&&n.depthTexture.image.height===n.height||(n.depthTexture.image.width=n.width,n.depthTexture.image.height=n.height,n.depthTexture.needsUpdate=!0),v(n.depthTexture,0);var i=r.get(n.depthTexture).__webglTexture;if(n.depthTexture.format===Qt)t.framebufferTexture2D(t.FRAMEBUFFER,t.DEPTH_ATTACHMENT,t.TEXTURE_2D,i,0);else{if(n.depthTexture.format!==Kt)throw new Error("Unknown depthTexture format");t.framebufferTexture2D(t.FRAMEBUFFER,t.DEPTH_STENCIL_ATTACHMENT,t.TEXTURE_2D,i,0)}}(n.__webglFramebuffer,e)}else if(i){n.__webglDepthbuffer=[];for(var o=0;o<6;o++)t.bindFramebuffer(t.FRAMEBUFFER,n.__webglFramebuffer[o]),n.__webglDepthbuffer[o]=t.createRenderbuffer(),b(n.__webglDepthbuffer[o],e)}else t.bindFramebuffer(t.FRAMEBUFFER,n.__webglFramebuffer),n.__webglDepthbuffer=t.createRenderbuffer(),b(n.__webglDepthbuffer,e);t.bindFramebuffer(t.FRAMEBUFFER,null)}this.setTexture2D=v,this.setTextureCube=function(e,s){var c=r.get(e);if(6===e.image.length)if(e.version>0&&c.__version!==e.version){c.__image__webglTextureCube||(e.addEventListener("dispose",m),c.__image__webglTextureCube=t.createTexture(),a.memory.textures++),n.activeTexture(t.TEXTURE0+s),n.bindTexture(t.TEXTURE_CUBE_MAP,c.__image__webglTextureCube),t.pixelStorei(t.UNPACK_FLIP_Y_WEBGL,e.flipY);for(var u=e&&e.isCompressedTexture,f=e.image[0]&&e.image[0].isDataTexture,g=[],v=0;v<6;v++)g[v]=u||f?f?e.image[v].image:e.image[v]:h(e.image[v],i.maxCubemapSize);var x=g[0],b=l(x),w=o.convert(e.format),_=o.convert(e.type);for(y(t.TEXTURE_CUBE_MAP,e,b),v=0;v<6;v++)if(u)for(var M,E=g[v].mipmaps,T=0,S=E.length;T-1?n.compressedTexImage2D(t.TEXTURE_CUBE_MAP_POSITIVE_X+v,T,w,M.width,M.height,0,M.data):console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()"):n.texImage2D(t.TEXTURE_CUBE_MAP_POSITIVE_X+v,T,w,M.width,M.height,0,w,_,M.data);else f?n.texImage2D(t.TEXTURE_CUBE_MAP_POSITIVE_X+v,0,w,g[v].width,g[v].height,0,w,_,g[v].data):n.texImage2D(t.TEXTURE_CUBE_MAP_POSITIVE_X+v,0,w,w,_,g[v]);c.__maxMipLevel=u?E.length-1:0,d(e,b)&&p(t.TEXTURE_CUBE_MAP,e,x.width,x.height),c.__version=e.version,e.onUpdate&&e.onUpdate(e)}else n.activeTexture(t.TEXTURE0+s),n.bindTexture(t.TEXTURE_CUBE_MAP,c.__image__webglTextureCube)},this.setTextureCubeDynamic=function(e,i){n.activeTexture(t.TEXTURE0+i),n.bindTexture(t.TEXTURE_CUBE_MAP,r.get(e).__webglTexture)},this.setupRenderTarget=function(e){var i=r.get(e),o=r.get(e.texture);e.addEventListener("dispose",g),o.__webglTexture=t.createTexture(),a.memory.textures++;var s=!0===e.isWebGLRenderTargetCube,c=l(e);if(s){i.__webglFramebuffer=[];for(var u=0;u<6;u++)i.__webglFramebuffer[u]=t.createFramebuffer()}else i.__webglFramebuffer=t.createFramebuffer();if(s){for(n.bindTexture(t.TEXTURE_CUBE_MAP,o.__webglTexture),y(t.TEXTURE_CUBE_MAP,e.texture,c),u=0;u<6;u++)x(i.__webglFramebuffer[u],e,t.COLOR_ATTACHMENT0,t.TEXTURE_CUBE_MAP_POSITIVE_X+u);d(e.texture,c)&&p(t.TEXTURE_CUBE_MAP,e.texture,e.width,e.height),n.bindTexture(t.TEXTURE_CUBE_MAP,null)}else n.bindTexture(t.TEXTURE_2D,o.__webglTexture),y(t.TEXTURE_2D,e.texture,c),x(i.__webglFramebuffer,e,t.COLOR_ATTACHMENT0,t.TEXTURE_2D),d(e.texture,c)&&p(t.TEXTURE_2D,e.texture,e.width,e.height),n.bindTexture(t.TEXTURE_2D,null);e.depthBuffer&&w(e)},this.updateRenderTargetMipmap=function(e){var i=e.texture;if(d(i,l(e))){var o=e.isWebGLRenderTargetCube?t.TEXTURE_CUBE_MAP:t.TEXTURE_2D,a=r.get(i).__webglTexture;n.bindTexture(o,a),p(o,i,e.width,e.height),n.bindTexture(o,null)}}}function Ni(t,e){return{convert:function(n){var r;if(n===Et)return t.REPEAT;if(n===Tt)return t.CLAMP_TO_EDGE;if(n===St)return t.MIRRORED_REPEAT;if(n===At)return t.NEAREST;if(n===Lt)return t.NEAREST_MIPMAP_NEAREST;if(n===Rt)return t.NEAREST_MIPMAP_LINEAR;if(n===Ct)return t.LINEAR;if(n===Pt)return t.LINEAR_MIPMAP_NEAREST;if(n===Ot)return t.LINEAR_MIPMAP_LINEAR;if(n===It)return t.UNSIGNED_BYTE;if(n===Gt)return t.UNSIGNED_SHORT_4_4_4_4;if(n===kt)return t.UNSIGNED_SHORT_5_5_5_1;if(n===jt)return t.UNSIGNED_SHORT_5_6_5;if(n===Nt)return t.BYTE;if(n===Dt)return t.SHORT;if(n===Ut)return t.UNSIGNED_SHORT;if(n===Bt)return t.INT;if(n===Ft)return t.UNSIGNED_INT;if(n===zt)return t.FLOAT;if(n===Ht&&null!==(r=e.get("OES_texture_half_float")))return r.HALF_FLOAT_OES;if(n===Wt)return t.ALPHA;if(n===Xt)return t.RGB;if(n===qt)return t.RGBA;if(n===Yt)return t.LUMINANCE;if(n===Zt)return t.LUMINANCE_ALPHA;if(n===Qt)return t.DEPTH_COMPONENT;if(n===Kt)return t.DEPTH_STENCIL;if(n===F)return t.FUNC_ADD;if(n===z)return t.FUNC_SUBTRACT;if(n===H)return t.FUNC_REVERSE_SUBTRACT;if(n===j)return t.ZERO;if(n===V)return t.ONE;if(n===W)return t.SRC_COLOR;if(n===X)return t.ONE_MINUS_SRC_COLOR;if(n===q)return t.SRC_ALPHA;if(n===Y)return t.ONE_MINUS_SRC_ALPHA;if(n===Z)return t.DST_ALPHA;if(n===J)return t.ONE_MINUS_DST_ALPHA;if(n===Q)return t.DST_COLOR;if(n===K)return t.ONE_MINUS_DST_COLOR;if(n===$)return t.SRC_ALPHA_SATURATE;if((n===$t||n===te||n===ee||n===ne)&&null!==(r=e.get("WEBGL_compressed_texture_s3tc"))){if(n===$t)return r.COMPRESSED_RGB_S3TC_DXT1_EXT;if(n===te)return r.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(n===ee)return r.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(n===ne)return r.COMPRESSED_RGBA_S3TC_DXT5_EXT}if((n===re||n===ie||n===oe||n===ae)&&null!==(r=e.get("WEBGL_compressed_texture_pvrtc"))){if(n===re)return r.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(n===ie)return r.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(n===oe)return r.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(n===ae)return r.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}if(n===se&&null!==(r=e.get("WEBGL_compressed_texture_etc1")))return r.COMPRESSED_RGB_ETC1_WEBGL;if((n===ce||n===ue||n===he||n===le||n===de||n===pe||n===fe||n===me||n===ge||n===ve||n===ye||n===xe||n===be||n===we)&&null!==(r=e.get("WEBGL_compressed_texture_astc")))return n;if((n===G||n===k)&&null!==(r=e.get("EXT_blend_minmax"))){if(n===G)return r.MIN_EXT;if(n===k)return r.MAX_EXT}return n===Vt&&null!==(r=e.get("WEBGL_depth_texture"))?r.UNSIGNED_INT_24_8_WEBGL:0}}}function Di(t,e,n,r){Cn.call(this),this.type="PerspectiveCamera",this.fov=void 0!==t?t:50,this.zoom=1,this.near=void 0!==n?n:.1,this.far=void 0!==r?r:2e3,this.focus=10,this.aspect=void 0!==e?e:1,this.view=null,this.filmGauge=35,this.filmOffset=0,this.updateProjectionMatrix()}function Ui(t){Di.call(this),this.cameras=t||[]}function Bi(t){var e=this,n=null,r=null,i=null,o=new Xe,a=new Xe;"undefined"!=typeof window&&"VRFrameData"in window&&(r=new window.VRFrameData,window.addEventListener("vrdisplaypresentchange",g,!1));var s=new Xe,c=new qe,u=new Ye,h=new Di;h.bounds=new on(0,0,.5,1),h.layers.enable(1);var l=new Di;l.bounds=new on(.5,0,.5,1),l.layers.enable(2);var d,p,f=new Ui([h,l]);function m(){return null!==n&&!0===n.isPresenting}function g(){if(m()){var r=n.getEyeParameters("left"),i=r.renderWidth,o=r.renderHeight;p=t.getPixelRatio(),d=t.getSize(),t.setDrawingBufferSize(2*i,o,1)}else e.enabled&&t.setDrawingBufferSize(d.width,d.height,p)}f.layers.enable(1),f.layers.enable(2),this.enabled=!1,this.userHeight=1.6,this.getDevice=function(){return n},this.setDevice=function(t){void 0!==t&&(n=t)},this.setPoseTarget=function(t){void 0!==t&&(i=t)},this.getCamera=function(t){if(null===n)return t;n.depthNear=t.near,n.depthFar=t.far,n.getFrameData(r);var d=n.stageParameters;d?o.fromArray(d.sittingToStandingTransform):o.makeTranslation(0,e.userHeight,0);var p=r.pose,m=null!==i?i:t;if(m.matrix.copy(o),m.matrix.decompose(m.position,m.quaternion,m.scale),null!==p.orientation&&(c.fromArray(p.orientation),m.quaternion.multiply(c)),null!==p.position&&(c.setFromRotationMatrix(o),u.fromArray(p.position),u.applyQuaternion(c),m.position.add(u)),m.updateMatrixWorld(),!1===n.isPresenting)return t;h.near=t.near,l.near=t.near,h.far=t.far,l.far=t.far,f.matrixWorld.copy(t.matrixWorld),f.matrixWorldInverse.copy(t.matrixWorldInverse),h.matrixWorldInverse.fromArray(r.leftViewMatrix),l.matrixWorldInverse.fromArray(r.rightViewMatrix),a.getInverse(o),h.matrixWorldInverse.multiply(a),l.matrixWorldInverse.multiply(a);var g=m.parent;null!==g&&(s.getInverse(g.matrixWorld),h.matrixWorldInverse.multiply(s),l.matrixWorldInverse.multiply(s)),h.matrixWorld.getInverse(h.matrixWorldInverse),l.matrixWorld.getInverse(l.matrixWorldInverse),h.projectionMatrix.fromArray(r.leftProjectionMatrix),l.projectionMatrix.fromArray(r.rightProjectionMatrix),f.projectionMatrix.copy(h.projectionMatrix);var v=n.getLayers();if(v.length){var y=v[0];null!==y.leftBounds&&4===y.leftBounds.length&&h.bounds.fromArray(y.leftBounds),null!==y.rightBounds&&4===y.rightBounds.length&&l.bounds.fromArray(y.rightBounds)}return f},this.getStandingMatrix=function(){return o},this.submitFrame=function(){m()&&n.submitFrame()},this.dispose=function(){"undefined"!=typeof window&&window.removeEventListener("vrdisplaypresentchange",g)}}function Fi(t){console.log("THREE.WebGLRenderer",p);var e=void 0!==(t=t||{}).canvas?t.canvas:document.createElementNS("http://www.w3.org/1999/xhtml","canvas"),n=void 0!==t.context?t.context:null,r=void 0!==t.alpha&&t.alpha,i=void 0===t.depth||t.depth,o=void 0===t.stencil||t.stencil,a=void 0!==t.antialias&&t.antialias,s=void 0===t.premultipliedAlpha||t.premultipliedAlpha,c=void 0!==t.preserveDrawingBuffer&&t.preserveDrawingBuffer,u=void 0!==t.powerPreference?t.powerPreference:"default",h=null,l=null;this.domElement=e,this.context=null,this.autoClear=!0,this.autoClearColor=!0,this.autoClearDepth=!0,this.autoClearStencil=!0,this.sortObjects=!0,this.clippingPlanes=[],this.localClippingEnabled=!1,this.gammaFactor=2,this.gammaInput=!1,this.gammaOutput=!1,this.physicallyCorrectLights=!1,this.toneMapping=dt,this.toneMappingExposure=1,this.toneMappingWhitePoint=1,this.maxMorphTargets=8,this.maxMorphNormals=4;var d,f,y,x,b,w,_,M,E,A,L,C,P,F,z,H,G,k,j,V=this,W=!1,X=null,q=null,Y=-1,Z="",J=null,Q=null,K=new on,$=new on,ct=null,ut=0,ht=e.width,lt=e.height,pt=1,ft=new on(0,0,ht,lt),mt=new on(0,0,ht,lt),gt=!1,vt=new dn,yt=new function(){var t=this,e=null,n=0,r=!1,i=!1,o=new ln,a=new Ze,s={value:null,needsUpdate:!1};function c(){s.value!==e&&(s.value=e,s.needsUpdate=n>0),t.numPlanes=n,t.numIntersection=0}function u(e,n,r,i){var c=null!==e?e.length:0,u=null;if(0!==c){if(u=s.value,!0!==i||null===u){var h=r+4*c,l=n.matrixWorldInverse;a.getNormalMatrix(l),(null===u||u.length0&&t.getShaderPrecisionFormat(t.FRAGMENT_SHADER,t.HIGH_FLOAT).precision>0)return"highp";e="mediump"}return"mediump"===e&&t.getShaderPrecisionFormat(t.VERTEX_SHADER,t.MEDIUM_FLOAT).precision>0&&t.getShaderPrecisionFormat(t.FRAGMENT_SHADER,t.MEDIUM_FLOAT).precision>0?"mediump":"lowp"}var o=void 0!==n.precision?n.precision:"highp",a=i(o);a!==o&&(console.warn("THREE.WebGLRenderer:",o,"not supported, using",a,"instead."),o=a);var s=!0===n.logarithmicDepthBuffer,c=t.getParameter(t.MAX_TEXTURE_IMAGE_UNITS),u=t.getParameter(t.MAX_VERTEX_TEXTURE_IMAGE_UNITS),h=t.getParameter(t.MAX_TEXTURE_SIZE),l=t.getParameter(t.MAX_CUBE_MAP_TEXTURE_SIZE),d=t.getParameter(t.MAX_VERTEX_ATTRIBS),p=t.getParameter(t.MAX_VERTEX_UNIFORM_VECTORS),f=t.getParameter(t.MAX_VARYING_VECTORS),m=t.getParameter(t.MAX_FRAGMENT_UNIFORM_VECTORS),g=u>0,v=!!e.get("OES_texture_float");return{getMaxAnisotropy:function(){if(void 0!==r)return r;var n=e.get("EXT_texture_filter_anisotropic");return r=null!==n?t.getParameter(n.MAX_TEXTURE_MAX_ANISOTROPY_EXT):0},getMaxPrecision:i,precision:o,logarithmicDepthBuffer:s,maxTextures:c,maxVertexTextures:u,maxTextureSize:h,maxCubemapSize:l,maxAttributes:d,maxVertexUniforms:p,maxVaryings:f,maxFragmentUniforms:m,vertexTextures:g,floatFragmentTextures:v,floatVertexTextures:g&&v}}(d,f,t),(x=new function(t,e,n){var r=new function(){var e=!1,n=new on,r=null,i=new on(0,0,0,0);return{setMask:function(n){r===n||e||(t.colorMask(n,n,n,n),r=n)},setLocked:function(t){e=t},setClear:function(e,r,o,a,s){!0===s&&(e*=a,r*=a,o*=a),n.set(e,r,o,a),!1===i.equals(n)&&(t.clearColor(e,r,o,a),i.copy(n))},reset:function(){e=!1,r=null,i.set(-1,0,0,0)}}},i=new function(){var e=!1,n=null,r=null,i=null;return{setTest:function(e){e?q(t.DEPTH_TEST):Y(t.DEPTH_TEST)},setMask:function(r){n===r||e||(t.depthMask(r),n=r)},setFunc:function(e){if(r!==e){if(e)switch(e){case tt:t.depthFunc(t.NEVER);break;case et:t.depthFunc(t.ALWAYS);break;case nt:t.depthFunc(t.LESS);break;case rt:t.depthFunc(t.LEQUAL);break;case it:t.depthFunc(t.EQUAL);break;case ot:t.depthFunc(t.GEQUAL);break;case at:t.depthFunc(t.GREATER);break;case st:t.depthFunc(t.NOTEQUAL);break;default:t.depthFunc(t.LEQUAL)}else t.depthFunc(t.LEQUAL);r=e}},setLocked:function(t){e=t},setClear:function(e){i!==e&&(t.clearDepth(e),i=e)},reset:function(){e=!1,n=null,r=null,i=null}}},o=new function(){var e=!1,n=null,r=null,i=null,o=null,a=null,s=null,c=null,u=null;return{setTest:function(e){e?q(t.STENCIL_TEST):Y(t.STENCIL_TEST)},setMask:function(r){n===r||e||(t.stencilMask(r),n=r)},setFunc:function(e,n,a){r===e&&i===n&&o===a||(t.stencilFunc(e,n,a),r=e,i=n,o=a)},setOp:function(e,n,r){a===e&&s===n&&c===r||(t.stencilOp(e,n,r),a=e,s=n,c=r)},setLocked:function(t){e=t},setClear:function(e){u!==e&&(t.clearStencil(e),u=e)},reset:function(){e=!1,n=null,r=null,i=null,o=null,a=null,s=null,c=null,u=null}}},a=t.getParameter(t.MAX_VERTEX_ATTRIBS),s=new Uint8Array(a),c=new Uint8Array(a),u=new Uint8Array(a),h={},l=null,d=null,p=null,f=null,y=null,x=null,b=null,w=null,_=null,M=!1,E=null,A=null,L=null,R=null,C=null,P=t.getParameter(t.MAX_COMBINED_TEXTURE_IMAGE_UNITS),F=!1,z=0,H=t.getParameter(t.VERSION);-1!==H.indexOf("WebGL")?(z=parseFloat(/^WebGL\ ([0-9])/.exec(H)[1]),F=z>=1):-1!==H.indexOf("OpenGL ES")&&(z=parseFloat(/^OpenGL\ ES\ ([0-9])/.exec(H)[1]),F=z>=2);var G=null,k={},j=new on,V=new on;function W(e,n,r){var i=new Uint8Array(4),o=t.createTexture();t.bindTexture(e,o),t.texParameteri(e,t.TEXTURE_MIN_FILTER,t.NEAREST),t.texParameteri(e,t.TEXTURE_MAG_FILTER,t.NEAREST);for(var a=0;a65535?Vn:kn)(a,1),e.update(r,t.ELEMENT_ARRAY_BUFFER),i[n.id]=r,r}}}(d,M,b),A=new function(t,e){var n={};return{update:function(r){var i=e.render.frame,o=r.geometry,a=t.get(r,o);return n[a.id]!==i&&(o.isGeometry&&a.updateFromObject(r),t.update(a),n[a.id]=i),a},dispose:function(){n={}}}}(E,b),z=new function(t){var e={},n=new Float32Array(8);return{update:function(r,i,o,a){var s=r.morphTargetInfluences,c=s.length,u=e[i.id];if(void 0===u){u=[];for(var h=0;h=0){var c=r[a];if(void 0!==c){var u=c.normalized,h=c.itemSize,l=M.get(c);if(void 0===l)continue;var p=l.buffer,m=l.type,g=l.bytesPerElement;if(c.isInterleavedBufferAttribute){var v=c.data,y=v.stride,b=c.offset;v&&v.isInstancedInterleavedBuffer?(x.enableAttributeAndDivisor(s,v.meshPerAttribute),void 0===n.maxInstancedCount&&(n.maxInstancedCount=v.meshPerAttribute*v.count)):x.enableAttribute(s),d.bindBuffer(d.ARRAY_BUFFER,p),d.vertexAttribPointer(s,h,m,u,y*g,b*g)}else c.isInstancedBufferAttribute?(x.enableAttributeAndDivisor(s,c.meshPerAttribute),void 0===n.maxInstancedCount&&(n.maxInstancedCount=c.meshPerAttribute*c.count)):x.enableAttribute(s),d.bindBuffer(d.ARRAY_BUFFER,p),d.vertexAttribPointer(s,h,m,u,0,0)}else if(void 0!==o){var w=o[a];if(void 0!==w)switch(w.length){case 2:d.vertexAttrib2fv(s,w);break;case 3:d.vertexAttrib3fv(s,w);break;case 4:d.vertexAttrib4fv(s,w);break;default:d.vertexAttrib1fv(s,w)}}}}x.disableUnusedAttributes()}(r,s,n),null!==l&&d.bindBuffer(d.ELEMENT_ARRAY_BUFFER,h.buffer));var v=1/0;null!==l?v=l.count:void 0!==p&&(v=p.count);var y=n.drawRange.start*m,b=n.drawRange.count*m,w=null!==o?o.start*m:0,_=null!==o?o.count*m:1/0,T=Math.max(y,w),S=Math.min(v,y+b,w+_)-1,A=Math.max(0,S-T+1);if(0!==A){if(i.isMesh)if(!0===r.wireframe)x.setLineWidth(r.wireframeLinewidth*Mt()),g.setMode(d.LINES);else switch(i.drawMode){case Pe:g.setMode(d.TRIANGLES);break;case Oe:g.setMode(d.TRIANGLE_STRIP);break;case Ie:g.setMode(d.TRIANGLE_FAN)}else if(i.isLine){var L=r.linewidth;void 0===L&&(L=1),x.setLineWidth(L*Mt()),i.isLineSegments?g.setMode(d.LINES):i.isLineLoop?g.setMode(d.LINE_LOOP):g.setMode(d.LINE_STRIP)}else i.isPoints&&g.setMode(d.POINTS);n&&n.isInstancedBufferGeometry?n.maxInstancedCount>0&&g.renderInstances(n,T,A):g.render(T,A)}},this.compile=function(t,e){(l=P.get(t,e)).init(),t.traverse(function(t){t.isLight&&(l.pushLight(t),t.castShadow&&l.pushShadow(t))}),l.setupLights(e),t.traverse(function(e){if(e.material)if(Array.isArray(e.material))for(var n=0;n=0&&t.numSupportedMorphTargets++}if(t.morphNormals){t.numSupportedMorphNormals=0;for(p=0;p=0&&t.numSupportedMorphNormals++}var f=r.shader.uniforms;(t.isShaderMaterial||t.isRawShaderMaterial)&&!0!==t.clipping||(r.numClippingPlanes=yt.numPlanes,r.numIntersection=yt.numIntersection,f.clippingPlanes=yt.uniform),r.fog=e,r.lightsHash=i.state.hash,t.lights&&(f.ambientLightColor.value=i.state.ambient,f.directionalLights.value=i.state.directional,f.spotLights.value=i.state.spot,f.rectAreaLights.value=i.state.rectArea,f.pointLights.value=i.state.point,f.hemisphereLights.value=i.state.hemi,f.directionalShadowMap.value=i.state.directionalShadowMap,f.directionalShadowMatrix.value=i.state.directionalShadowMatrix,f.spotShadowMap.value=i.state.spotShadowMap,f.spotShadowMatrix.value=i.state.spotShadowMatrix,f.pointShadowMap.value=i.state.pointShadowMap,f.pointShadowMatrix.value=i.state.pointShadowMatrix);var m=r.program.getUniforms(),g=ni.seqWithValue(m.seq,f);r.uniformsList=g}function Vt(t,e,n,r){ut=0;var i=w.get(n),o=l.state.lights;if(xt&&(bt||t!==J)){var a=t===J&&n.id===Y;yt.setState(n.clippingPlanes,n.clipIntersection,n.clipShadows,t,i,a)}!1===n.needsUpdate&&(void 0===i.program?n.needsUpdate=!0:n.fog&&i.fog!==e?n.needsUpdate=!0:n.lights&&i.lightsHash!==o.state.hash?n.needsUpdate=!0:void 0===i.numClippingPlanes||i.numClippingPlanes===yt.numPlanes&&i.numIntersection===yt.numIntersection||(n.needsUpdate=!0)),n.needsUpdate&&(jt(n,e,r),n.needsUpdate=!1);var s,c,u=!1,h=!1,p=!1,f=i.program,m=f.getUniforms(),g=i.shader.uniforms;if(x.useProgram(f.program)&&(u=!0,h=!0,p=!0),n.id!==Y&&(Y=n.id,h=!0),u||t!==J){if(m.setValue(d,"projectionMatrix",t.projectionMatrix),y.logarithmicDepthBuffer&&m.setValue(d,"logDepthBufFC",2/(Math.log(t.far+1)/Math.LN2)),J!==(Q||t)&&(J=Q||t,h=!0,p=!0),n.isShaderMaterial||n.isMeshPhongMaterial||n.isMeshStandardMaterial||n.envMap){var v=m.map.cameraPosition;void 0!==v&&v.setValue(d,_t.setFromMatrixPosition(t.matrixWorld))}(n.isMeshPhongMaterial||n.isMeshLambertMaterial||n.isMeshBasicMaterial||n.isMeshStandardMaterial||n.isShaderMaterial||n.skinning)&&m.setValue(d,"viewMatrix",t.matrixWorldInverse)}if(n.skinning){m.setOptional(d,r,"bindMatrix"),m.setOptional(d,r,"bindMatrixInverse");var b=r.skeleton;if(b){var _=b.bones;if(y.floatVertexTextures){if(void 0===b.boneTexture){var M=Math.sqrt(4*_.length);M=Ve.ceilPowerOfTwo(M),M=Math.max(M,4);var E=new Float32Array(M*M*4);E.set(b.boneMatrices);var T=new cn(E,M,M,qt,zt);T.needsUpdate=!0,b.boneMatrices=E,b.boneTexture=T,b.boneTextureSize=M}m.setValue(d,"boneTexture",b.boneTexture),m.setValue(d,"boneTextureSize",b.boneTextureSize)}else m.setOptional(d,b,"boneMatrices")}}return h&&(m.setValue(d,"toneMappingExposure",V.toneMappingExposure),m.setValue(d,"toneMappingWhitePoint",V.toneMappingWhitePoint),n.lights&&(c=p,(s=g).ambientLightColor.needsUpdate=c,s.directionalLights.needsUpdate=c,s.pointLights.needsUpdate=c,s.spotLights.needsUpdate=c,s.rectAreaLights.needsUpdate=c,s.hemisphereLights.needsUpdate=c),e&&n.fog&&function(t,e){t.fogColor.value=e.color,e.isFog?(t.fogNear.value=e.near,t.fogFar.value=e.far):e.isFogExp2&&(t.fogDensity.value=e.density)}(g,e),n.isMeshBasicMaterial?Wt(g,n):n.isMeshLambertMaterial?(Wt(g,n),function(t,e){e.emissiveMap&&(t.emissiveMap.value=e.emissiveMap)}(g,n)):n.isMeshPhongMaterial?(Wt(g,n),n.isMeshToonMaterial?function(t,e){Xt(t,e),e.gradientMap&&(t.gradientMap.value=e.gradientMap)}(g,n):Xt(g,n)):n.isMeshStandardMaterial?(Wt(g,n),n.isMeshPhysicalMaterial?function(t,e){t.clearCoat.value=e.clearCoat,t.clearCoatRoughness.value=e.clearCoatRoughness,Yt(t,e)}(g,n):Yt(g,n)):n.isMeshDepthMaterial?(Wt(g,n),function(t,e){e.displacementMap&&(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias)}(g,n)):n.isMeshDistanceMaterial?(Wt(g,n),function(t,e){e.displacementMap&&(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias);t.referencePosition.value.copy(e.referencePosition),t.nearDistance.value=e.nearDistance,t.farDistance.value=e.farDistance}(g,n)):n.isMeshNormalMaterial?(Wt(g,n),function(t,e){e.bumpMap&&(t.bumpMap.value=e.bumpMap,t.bumpScale.value=e.bumpScale);e.normalMap&&(t.normalMap.value=e.normalMap,t.normalScale.value.copy(e.normalScale));e.displacementMap&&(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias)}(g,n)):n.isLineBasicMaterial?(function(t,e){t.diffuse.value=e.color,t.opacity.value=e.opacity}(g,n),n.isLineDashedMaterial&&function(t,e){t.dashSize.value=e.dashSize,t.totalSize.value=e.dashSize+e.gapSize,t.scale.value=e.scale}(g,n)):n.isPointsMaterial?function(t,e){t.diffuse.value=e.color,t.opacity.value=e.opacity,t.size.value=e.size*pt,t.scale.value=.5*lt,t.map.value=e.map,null!==e.map&&(!0===e.map.matrixAutoUpdate&&e.map.updateMatrix(),t.uvTransform.value.copy(e.map.matrix))}(g,n):n.isShadowMaterial&&(g.color.value=n.color,g.opacity.value=n.opacity),void 0!==g.ltc_1&&(g.ltc_1.value=xn.LTC_1),void 0!==g.ltc_2&&(g.ltc_2.value=xn.LTC_2),ni.upload(d,i.uniformsList,g,V)),n.isShaderMaterial&&!0===n.uniformsNeedUpdate&&(ni.upload(d,i.uniformsList,g,V),n.uniformsNeedUpdate=!1),m.setValue(d,"modelViewMatrix",r.modelViewMatrix),m.setValue(d,"normalMatrix",r.normalMatrix),m.setValue(d,"modelMatrix",r.matrixWorld),f}function Wt(t,e){var n;t.opacity.value=e.opacity,e.color&&(t.diffuse.value=e.color),e.emissive&&t.emissive.value.copy(e.emissive).multiplyScalar(e.emissiveIntensity),e.map&&(t.map.value=e.map),e.alphaMap&&(t.alphaMap.value=e.alphaMap),e.specularMap&&(t.specularMap.value=e.specularMap),e.envMap&&(t.envMap.value=e.envMap,t.flipEnvMap.value=e.envMap&&e.envMap.isCubeTexture?-1:1,t.reflectivity.value=e.reflectivity,t.refractionRatio.value=e.refractionRatio,t.maxMipLevel.value=w.get(e.envMap).__maxMipLevel),e.lightMap&&(t.lightMap.value=e.lightMap,t.lightMapIntensity.value=e.lightMapIntensity),e.aoMap&&(t.aoMap.value=e.aoMap,t.aoMapIntensity.value=e.aoMapIntensity),e.map?n=e.map:e.specularMap?n=e.specularMap:e.displacementMap?n=e.displacementMap:e.normalMap?n=e.normalMap:e.bumpMap?n=e.bumpMap:e.roughnessMap?n=e.roughnessMap:e.metalnessMap?n=e.metalnessMap:e.alphaMap?n=e.alphaMap:e.emissiveMap&&(n=e.emissiveMap),void 0!==n&&(n.isWebGLRenderTarget&&(n=n.texture),!0===n.matrixAutoUpdate&&n.updateMatrix(),t.uvTransform.value.copy(n.matrix))}function Xt(t,e){t.specular.value=e.specular,t.shininess.value=Math.max(e.shininess,1e-4),e.emissiveMap&&(t.emissiveMap.value=e.emissiveMap),e.bumpMap&&(t.bumpMap.value=e.bumpMap,t.bumpScale.value=e.bumpScale),e.normalMap&&(t.normalMap.value=e.normalMap,t.normalScale.value.copy(e.normalScale)),e.displacementMap&&(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias)}function Yt(t,e){t.roughness.value=e.roughness,t.metalness.value=e.metalness,e.roughnessMap&&(t.roughnessMap.value=e.roughnessMap),e.metalnessMap&&(t.metalnessMap.value=e.metalnessMap),e.emissiveMap&&(t.emissiveMap.value=e.emissiveMap),e.bumpMap&&(t.bumpMap.value=e.bumpMap,t.bumpScale.value=e.bumpScale),e.normalMap&&(t.normalMap.value=e.normalMap,t.normalScale.value.copy(e.normalScale)),e.displacementMap&&(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias),e.envMap&&(t.envMapIntensity.value=e.envMapIntensity)}this.animate=function(t){null!==(Dt=t)?Nt||(Bt(),Nt=!0):Ut()},this.render=function(t,e,n,r){if(e&&e.isCamera){if(!W){Z="",Y=-1,J=null,!0===t.autoUpdate&&t.updateMatrixWorld(),null===e.parent&&e.updateMatrixWorld(),St.enabled&&(e=St.getCamera(e)),(l=P.get(t,e)).init(),t.onBeforeRender(V,t,e,n),wt.multiplyMatrices(e.projectionMatrix,e.matrixWorldInverse),vt.setFromMatrix(wt),bt=this.localClippingEnabled,xt=yt.init(this.clippingPlanes,bt,e),(h=C.get(t,e)).init(),function t(e,n,r){if(!1===e.visible)return;var i=e.layers.test(n.layers);if(i)if(e.isLight)l.pushLight(e),e.castShadow&&l.pushShadow(e);else if(e.isSprite)e.frustumCulled&&!vt.intersectsSprite(e)||l.pushSprite(e);else if(e.isImmediateRenderObject)r&&_t.setFromMatrixPosition(e.matrixWorld).applyMatrix4(wt),h.push(e,null,e.material,_t.z,null);else if((e.isMesh||e.isLine||e.isPoints)&&(e.isSkinnedMesh&&e.skeleton.update(),!e.frustumCulled||vt.intersectsObject(e))){r&&_t.setFromMatrixPosition(e.matrixWorld).applyMatrix4(wt);var o=A.update(e),a=e.material;if(Array.isArray(a))for(var s=o.groups,c=0,u=s.length;c=y.maxTextures&&console.warn("THREE.WebGLRenderer: Trying to use "+t+" texture units while this GPU supports only "+y.maxTextures),ut+=1,t},this.setTexture2D=(Ot=!1,function(t,e){t&&t.isWebGLRenderTarget&&(Ot||(console.warn("THREE.WebGLRenderer.setTexture2D: don't use render targets as textures. Use their .texture property instead."),Ot=!0),t=t.texture),_.setTexture2D(t,e)}),this.setTexture=function(){var t=!1;return function(e,n){t||(console.warn("THREE.WebGLRenderer: .setTexture is deprecated, use setTexture2D instead."),t=!0),_.setTexture2D(e,n)}}(),this.setTextureCube=function(){var t=!1;return function(e,n){e&&e.isWebGLRenderTargetCube&&(t||(console.warn("THREE.WebGLRenderer.setTextureCube: don't use cube render targets as textures. Use their .texture property instead."),t=!0),e=e.texture),e&&e.isCubeTexture||Array.isArray(e.image)&&6===e.image.length?_.setTextureCube(e,n):_.setTextureCubeDynamic(e,n)}}(),this.getRenderTarget=function(){return X},this.setRenderTarget=function(t){X=t,t&&void 0===w.get(t).__webglFramebuffer&&_.setupRenderTarget(t);var e=null,n=!1;if(t){var r=w.get(t).__webglFramebuffer;t.isWebGLRenderTargetCube?(e=r[t.activeCubeFace],n=!0):e=r,K.copy(t.viewport),$.copy(t.scissor),ct=t.scissorTest}else K.copy(ft).multiplyScalar(pt),$.copy(mt).multiplyScalar(pt),ct=gt;if(q!==e&&(d.bindFramebuffer(d.FRAMEBUFFER,e),q=e),x.viewport(K),x.scissor($),x.setScissorTest(ct),n){var i=w.get(t.texture);d.framebufferTexture2D(d.FRAMEBUFFER,d.COLOR_ATTACHMENT0,d.TEXTURE_CUBE_MAP_POSITIVE_X+t.activeCubeFace,i.__webglTexture,t.activeMipMapLevel)}},this.readRenderTargetPixels=function(t,e,n,r,i,o){if(t&&t.isWebGLRenderTarget){var a=w.get(t).__webglFramebuffer;if(a){var s=!1;a!==q&&(d.bindFramebuffer(d.FRAMEBUFFER,a),s=!0);try{var c=t.texture,u=c.format,h=c.type;if(u!==qt&&j.convert(u)!==d.getParameter(d.IMPLEMENTATION_COLOR_READ_FORMAT))return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.");if(!(h===It||j.convert(h)===d.getParameter(d.IMPLEMENTATION_COLOR_READ_TYPE)||h===zt&&(f.get("OES_texture_float")||f.get("WEBGL_color_buffer_float"))||h===Ht&&f.get("EXT_color_buffer_half_float")))return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.");d.checkFramebufferStatus(d.FRAMEBUFFER)===d.FRAMEBUFFER_COMPLETE?e>=0&&e<=t.width-r&&n>=0&&n<=t.height-i&&d.readPixels(e,n,r,i,j.convert(u),j.convert(h),o):console.error("THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.")}finally{s&&d.bindFramebuffer(d.FRAMEBUFFER,q)}}}else console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.")},this.copyFramebufferToTexture=function(t,e,n){var r=e.image.width,i=e.image.height,o=j.convert(e.format);this.setTexture2D(e,0),d.copyTexImage2D(d.TEXTURE_2D,n||0,o,t.x,t.y,r,i,0)},this.copyTextureToTexture=function(t,e,n,r){var i=e.image.width,o=e.image.height,a=j.convert(n.format),s=j.convert(n.type),c=e.isDataTexture?e.image.data:e.image;this.setTexture2D(n,0),d.texSubImage2D(d.TEXTURE_2D,r||0,t.x,t.y,i,o,a,s,c)}}function zi(t,e){this.name="",this.color=new vn(t),this.density=void 0!==e?e:25e-5}function Hi(t,e,n){this.name="",this.color=new vn(t),this.near=void 0!==e?e:1,this.far=void 0!==n?n:1e3}function Gi(){Rn.call(this),this.type="Scene",this.background=null,this.fog=null,this.overrideMaterial=null,this.autoUpdate=!0}function ki(t){ur.call(this),this.type="SpriteMaterial",this.color=new vn(16777215),this.map=null,this.rotation=0,this.fog=!1,this.lights=!1,this.setValues(t)}function ji(t){Rn.call(this),this.type="Sprite",this.material=void 0!==t?t:new ki,this.center=new We(.5,.5)}function Vi(){Rn.call(this),this.type="LOD",Object.defineProperties(this,{levels:{enumerable:!0,value:[]}})}function Wi(t,e){if(t=t||[],this.bones=t.slice(0),this.boneMatrices=new Float32Array(16*this.bones.length),void 0===e)this.calculateInverses();else if(this.bones.length===e.length)this.boneInverses=e.slice(0);else{console.warn("THREE.Skeleton boneInverses is the wrong length."),this.boneInverses=[];for(var n=0,r=this.bones.length;n=0?(t(g-1e-5,m,l),d.subVectors(h,l)):(t(g+1e-5,m,l),d.subVectors(l,h)),m-1e-5>=0?(t(g,m-1e-5,l),p.subVectors(h,l)):(t(g,m+1e-5,l),p.subVectors(l,h)),u.crossVectors(d,p).normalize(),s.push(u.x,u.y,u.z),c.push(g,m)}}for(r=0;r.9&&a<.1&&(e<.2&&(o[t+0]+=1),n<.2&&(o[t+2]+=1),r<.2&&(o[t+4]+=1))}}()}(),this.addAttribute("position",new Wn(i,3)),this.addAttribute("normal",new Wn(i.slice(),3)),this.addAttribute("uv",new Wn(o,2)),0===r?this.computeVertexNormals():this.normalizeNormals()}function uo(t,e){Un.call(this),this.type="TetrahedronGeometry",this.parameters={radius:t,detail:e},this.fromBufferGeometry(new ho(t,e)),this.mergeVertices()}function ho(t,e){co.call(this,[1,1,1,-1,-1,1,-1,1,-1,1,-1,-1],[2,1,0,0,3,2,1,3,0,2,3,1],t,e),this.type="TetrahedronBufferGeometry",this.parameters={radius:t,detail:e}}function lo(t,e){Un.call(this),this.type="OctahedronGeometry",this.parameters={radius:t,detail:e},this.fromBufferGeometry(new po(t,e)),this.mergeVertices()}function po(t,e){co.call(this,[1,0,0,-1,0,0,0,1,0,0,-1,0,0,0,1,0,0,-1],[0,2,4,0,4,3,0,3,5,0,5,2,1,2,5,1,5,3,1,3,4,1,4,2],t,e),this.type="OctahedronBufferGeometry",this.parameters={radius:t,detail:e}}function fo(t,e){Un.call(this),this.type="IcosahedronGeometry",this.parameters={radius:t,detail:e},this.fromBufferGeometry(new mo(t,e)),this.mergeVertices()}function mo(t,e){var n=(1+Math.sqrt(5))/2,r=[-1,n,0,1,n,0,-1,-n,0,1,-n,0,0,-1,n,0,1,n,0,-1,-n,0,1,-n,n,0,-1,n,0,1,-n,0,-1,-n,0,1];co.call(this,r,[0,11,5,0,5,1,0,1,7,0,7,10,0,10,11,1,5,9,5,11,4,11,10,2,10,7,6,7,1,8,3,9,4,3,4,2,3,2,6,3,6,8,3,8,9,4,9,5,2,4,11,6,2,10,8,6,7,9,8,1],t,e),this.type="IcosahedronBufferGeometry",this.parameters={radius:t,detail:e}}function go(t,e){Un.call(this),this.type="DodecahedronGeometry",this.parameters={radius:t,detail:e},this.fromBufferGeometry(new vo(t,e)),this.mergeVertices()}function vo(t,e){var n=(1+Math.sqrt(5))/2,r=1/n,i=[-1,-1,-1,-1,-1,1,-1,1,-1,-1,1,1,1,-1,-1,1,-1,1,1,1,-1,1,1,1,0,-r,-n,0,-r,n,0,r,-n,0,r,n,-r,-n,0,-r,n,0,r,-n,0,r,n,0,-n,0,-r,n,0,-r,-n,0,r,n,0,r];co.call(this,i,[3,11,7,3,7,15,3,15,13,7,19,17,7,17,6,7,6,15,17,4,8,17,8,10,17,10,6,8,0,16,8,16,2,8,2,10,0,12,1,0,1,18,0,18,16,6,10,2,6,2,13,6,13,15,2,16,18,2,18,3,2,3,13,18,1,9,18,9,11,18,11,3,4,14,12,4,12,0,4,0,8,11,9,5,11,5,19,11,19,7,19,5,14,19,14,4,19,4,17,1,12,14,1,14,5,1,5,9],t,e),this.type="DodecahedronBufferGeometry",this.parameters={radius:t,detail:e}}function yo(t,e,n,r,i,o){Un.call(this),this.type="TubeGeometry",this.parameters={path:t,tubularSegments:e,radius:n,radialSegments:r,closed:i},void 0!==o&&console.warn("THREE.TubeGeometry: taper has been removed.");var a=new xo(t,e,n,r,i);this.tangents=a.tangents,this.normals=a.normals,this.binormals=a.binormals,this.fromBufferGeometry(a),this.mergeVertices()}function xo(t,e,n,r,i){Jn.call(this),this.type="TubeBufferGeometry",this.parameters={path:t,tubularSegments:e,radius:n,radialSegments:r,closed:i},e=e||64,n=n||1,r=r||8,i=i||!1;var o=t.computeFrenetFrames(e,i);this.tangents=o.tangents,this.normals=o.normals,this.binormals=o.binormals;var a,s,c=new Ye,u=new Ye,h=new We,l=new Ye,d=[],p=[],f=[],m=[];function g(i){l=t.getPointAt(i/e,l);var a=o.normals[i],h=o.binormals[i];for(s=0;s<=r;s++){var f=s/r*Math.PI*2,m=Math.sin(f),g=-Math.cos(f);u.x=g*a.x+m*h.x,u.y=g*a.y+m*h.y,u.z=g*a.z+m*h.z,u.normalize(),p.push(u.x,u.y,u.z),c.x=l.x+n*u.x,c.y=l.y+n*u.y,c.z=l.z+n*u.z,d.push(c.x,c.y,c.z)}}!function(){for(a=0;an)){var r=t.ray.origin.distanceTo(vi);rt.far||e.push({distance:r,point:vi.clone(),face:null,object:this})}}),clone:function(){return new this.constructor(this.material).copy(this)},copy:function(t){return Rn.prototype.copy.call(this,t),void 0!==t.center&&this.center.copy(t.center),this}}),Vi.prototype=Object.assign(Object.create(Rn.prototype),{constructor:Vi,copy:function(t){Rn.prototype.copy.call(this,t,!1);for(var e=t.levels,n=0,r=e.length;n1){t.setFromMatrixPosition(n.matrixWorld),e.setFromMatrixPosition(this.matrixWorld);var i=t.distanceTo(e);r[0].object.visible=!0;for(var o=1,a=r.length;o=r[o].distance;o++)r[o-1].object.visible=!1,r[o].object.visible=!0;for(;oa))d.applyMatrix4(this.matrixWorld),(M=r.ray.origin.distanceTo(d))r.far||i.push({distance:M,point:l.clone().applyMatrix4(this.matrixWorld),index:v,face:null,faceIndex:null,object:this})}else for(v=0,y=m.length/3-1;va))d.applyMatrix4(this.matrixWorld),(M=r.ray.origin.distanceTo(d))r.far||i.push({distance:M,point:l.clone().applyMatrix4(this.matrixWorld),index:v,face:null,faceIndex:null,object:this})}}else if(s.isGeometry){var w=s.vertices,_=w.length;for(v=0;v<_-1;v+=p){var M;if(!(e.distanceSqToSegment(w[v],w[v+1],d,l)>a))d.applyMatrix4(this.matrixWorld),(M=r.ray.origin.distanceTo(d))r.far||i.push({distance:M,point:l.clone().applyMatrix4(this.matrixWorld),index:v,face:null,faceIndex:null,object:this})}}}}}(),clone:function(){return new this.constructor(this.geometry,this.material).copy(this)}}),Ji.prototype=Object.assign(Object.create(Zi.prototype),{constructor:Ji,isLineSegments:!0,computeLineDistances:function(){var t=new Ye,e=new Ye;return function(){var n=this.geometry;if(n.isBufferGeometry)if(null===n.index){for(var r=n.attributes.position,i=[],o=0,a=r.count;or.far)return;i.push({distance:c,distanceToRay:Math.sqrt(a),point:d.clone(),index:n,face:null,object:o})}}}}(),clone:function(){return new this.constructor(this.geometry,this.material).copy(this)}}),to.prototype=Object.assign(Object.create(Rn.prototype),{constructor:to,isGroup:!0}),eo.prototype=Object.assign(Object.create(rn.prototype),{constructor:eo,isVideoTexture:!0,update:function(){var t=this.image;t.readyState>=t.HAVE_CURRENT_DATA&&(this.needsUpdate=!0)}}),no.prototype=Object.create(rn.prototype),no.prototype.constructor=no,no.prototype.isCompressedTexture=!0,ro.prototype=Object.create(rn.prototype),ro.prototype.constructor=ro,ro.prototype.isDepthTexture=!0,io.prototype=Object.create(Jn.prototype),io.prototype.constructor=io,oo.prototype=Object.create(Un.prototype),oo.prototype.constructor=oo,ao.prototype=Object.create(Jn.prototype),ao.prototype.constructor=ao,so.prototype=Object.create(Un.prototype),so.prototype.constructor=so,co.prototype=Object.create(Jn.prototype),co.prototype.constructor=co,uo.prototype=Object.create(Un.prototype),uo.prototype.constructor=uo,ho.prototype=Object.create(co.prototype),ho.prototype.constructor=ho,lo.prototype=Object.create(Un.prototype),lo.prototype.constructor=lo,po.prototype=Object.create(co.prototype),po.prototype.constructor=po,fo.prototype=Object.create(Un.prototype),fo.prototype.constructor=fo,mo.prototype=Object.create(co.prototype),mo.prototype.constructor=mo,go.prototype=Object.create(Un.prototype),go.prototype.constructor=go,vo.prototype=Object.create(co.prototype),vo.prototype.constructor=vo,yo.prototype=Object.create(Un.prototype),yo.prototype.constructor=yo,xo.prototype=Object.create(Jn.prototype),xo.prototype.constructor=xo,bo.prototype=Object.create(Un.prototype),bo.prototype.constructor=bo,wo.prototype=Object.create(Jn.prototype),wo.prototype.constructor=wo,_o.prototype=Object.create(Un.prototype),_o.prototype.constructor=_o,Mo.prototype=Object.create(Jn.prototype),Mo.prototype.constructor=Mo;var Eo=function(t,e,n){n=n||2;var r,i,o,a,s,c,u,h=e&&e.length,l=h?e[0]*n:t.length,d=To(t,0,l,n,!0),p=[];if(!d)return p;if(h&&(d=function(t,e,n,r){var i,o,a,s,c,u=[];for(i=0,o=e.length;i80*n){r=o=t[0],i=a=t[1];for(var f=n;fo&&(o=s),c>a&&(a=c);u=0!==(u=Math.max(o-r,a-i))?1/u:0}return Ao(d,p,n,r,i,u),p};function To(t,e,n,r,i){var o,a;if(i===function(t,e,n,r){for(var i=0,o=e,a=n-r;o0)for(o=e;o=e;o-=r)a=jo(o,t[o],t[o+1],a);return a&&zo(a,a.next)&&(Vo(a),a=a.next),a}function So(t,e){if(!t)return t;e||(e=t);var n,r=t;do{if(n=!1,r.steiner||!zo(r,r.next)&&0!==Fo(r.prev,r,r.next))r=r.next;else{if(Vo(r),(r=e=r.prev)===r.next)break;n=!0}}while(n||r!==e);return e}function Ao(t,e,n,r,i,o,a){if(t){!a&&o&&function(t,e,n,r){var i=t;do{null===i.z&&(i.z=No(i.x,i.y,e,n,r)),i.prevZ=i.prev,i.nextZ=i.next,i=i.next}while(i!==t);i.prevZ.nextZ=null,i.prevZ=null,function(t){var e,n,r,i,o,a,s,c,u=1;do{for(n=t,t=null,o=null,a=0;n;){for(a++,r=n,s=0,e=0;e0||c>0&&r;)0!==s&&(0===c||!r||n.z<=r.z)?(i=n,n=n.nextZ,s--):(i=r,r=r.nextZ,c--),o?o.nextZ=i:t=i,i.prevZ=o,o=i;n=r}o.nextZ=null,u*=2}while(a>1)}(i)}(t,r,i,o);for(var s,c,u=t;t.prev!==t.next;)if(s=t.prev,c=t.next,o?Ro(t,r,i,o):Lo(t))e.push(s.i/n),e.push(t.i/n),e.push(c.i/n),Vo(t),t=c.next,u=c.next;else if((t=c)===u){a?1===a?Ao(t=Co(t,e,n),e,n,r,i,o,2):2===a&&Po(t,e,n,r,i,o):Ao(So(t),e,n,r,i,o,1);break}}}function Lo(t){var e=t.prev,n=t,r=t.next;if(Fo(e,n,r)>=0)return!1;for(var i=t.next.next;i!==t.prev;){if(Uo(e.x,e.y,n.x,n.y,r.x,r.y,i.x,i.y)&&Fo(i.prev,i,i.next)>=0)return!1;i=i.next}return!0}function Ro(t,e,n,r){var i=t.prev,o=t,a=t.next;if(Fo(i,o,a)>=0)return!1;for(var s=i.xo.x?i.x>a.x?i.x:a.x:o.x>a.x?o.x:a.x,h=i.y>o.y?i.y>a.y?i.y:a.y:o.y>a.y?o.y:a.y,l=No(s,c,e,n,r),d=No(u,h,e,n,r),p=t.nextZ;p&&p.z<=d;){if(p!==t.prev&&p!==t.next&&Uo(i.x,i.y,o.x,o.y,a.x,a.y,p.x,p.y)&&Fo(p.prev,p,p.next)>=0)return!1;p=p.nextZ}for(p=t.prevZ;p&&p.z>=l;){if(p!==t.prev&&p!==t.next&&Uo(i.x,i.y,o.x,o.y,a.x,a.y,p.x,p.y)&&Fo(p.prev,p,p.next)>=0)return!1;p=p.prevZ}return!0}function Co(t,e,n){var r=t;do{var i=r.prev,o=r.next.next;!zo(i,o)&&Ho(i,r,r.next,o)&&Go(i,o)&&Go(o,i)&&(e.push(i.i/n),e.push(r.i/n),e.push(o.i/n),Vo(r),Vo(r.next),r=t=o),r=r.next}while(r!==t);return r}function Po(t,e,n,r,i,o){var a=t;do{for(var s=a.next.next;s!==a.prev;){if(a.i!==s.i&&Bo(a,s)){var c=ko(a,s);return a=So(a,a.next),c=So(c,c.next),Ao(a,e,n,r,i,o),void Ao(c,e,n,r,i,o)}s=s.next}a=a.next}while(a!==t)}function Oo(t,e){return t.x-e.x}function Io(t,e){if(e=function(t,e){var n,r=e,i=t.x,o=t.y,a=-1/0;do{if(o<=r.y&&o>=r.next.y&&r.next.y!==r.y){var s=r.x+(o-r.y)*(r.next.x-r.x)/(r.next.y-r.y);if(s<=i&&s>a){if(a=s,s===i){if(o===r.y)return r;if(o===r.next.y)return r.next}n=r.x=r.x&&r.x>=h&&i!==r.x&&Uo(on.x)&&Go(r,t)&&(n=r,d=c),r=r.next;return n}(t,e)){var n=ko(e,t);So(n,n.next)}}function No(t,e,n,r,i){return(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=32767*(t-n)*i)|t<<8))|t<<4))|t<<2))|t<<1))|(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=32767*(e-r)*i)|e<<8))|e<<4))|e<<2))|e<<1))<<1}function Do(t){var e=t,n=t;do{e.x=0&&(t-a)*(r-s)-(n-a)*(e-s)>=0&&(n-a)*(o-s)-(i-a)*(r-s)>=0}function Bo(t,e){return t.next.i!==e.i&&t.prev.i!==e.i&&!function(t,e){var n=t;do{if(n.i!==t.i&&n.next.i!==t.i&&n.i!==e.i&&n.next.i!==e.i&&Ho(n,n.next,t,e))return!0;n=n.next}while(n!==t);return!1}(t,e)&&Go(t,e)&&Go(e,t)&&function(t,e){var n=t,r=!1,i=(t.x+e.x)/2,o=(t.y+e.y)/2;do{n.y>o!=n.next.y>o&&n.next.y!==n.y&&i<(n.next.x-n.x)*(o-n.y)/(n.next.y-n.y)+n.x&&(r=!r),n=n.next}while(n!==t);return r}(t,e)}function Fo(t,e,n){return(e.y-t.y)*(n.x-e.x)-(e.x-t.x)*(n.y-e.y)}function zo(t,e){return t.x===e.x&&t.y===e.y}function Ho(t,e,n,r){return!!(zo(t,e)&&zo(n,r)||zo(t,r)&&zo(n,e))||Fo(t,e,n)>0!=Fo(t,e,r)>0&&Fo(n,r,t)>0!=Fo(n,r,e)>0}function Go(t,e){return Fo(t.prev,t,t.next)<0?Fo(t,e,t.next)>=0&&Fo(t,t.prev,e)>=0:Fo(t,e,t.prev)<0||Fo(t,t.next,e)<0}function ko(t,e){var n=new Wo(t.i,t.x,t.y),r=new Wo(e.i,e.x,e.y),i=t.next,o=e.prev;return t.next=e,e.prev=t,n.next=i,i.prev=n,r.next=n,n.prev=r,o.next=r,r.prev=o,r}function jo(t,e,n,r){var i=new Wo(t,e,n);return r?(i.next=r.next,i.prev=r,r.next.prev=i,r.next=i):(i.prev=i,i.next=i),i}function Vo(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function Wo(t,e,n){this.i=t,this.x=e,this.y=n,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}var Xo={area:function(t){for(var e=t.length,n=0,r=e-1,i=0;i2&&t[e-1].equals(t[0])&&t.pop()}function Yo(t,e){for(var n=0;nNumber.EPSILON){var d=Math.sqrt(h),p=Math.sqrt(c*c+u*u),f=e.x-s/d,m=e.y+a/d,g=((n.x-u/p-f)*u-(n.y+c/p-m)*c)/(a*u-s*c),v=(r=f+a*g-t.x)*r+(i=m+s*g-t.y)*i;if(v<=2)return new We(r,i);o=Math.sqrt(v/2)}else{var y=!1;a>Number.EPSILON?c>Number.EPSILON&&(y=!0):a<-Number.EPSILON?c<-Number.EPSILON&&(y=!0):Math.sign(s)===Math.sign(u)&&(y=!0),y?(r=-s,i=a,o=Math.sqrt(h)):(r=a,i=s,o=Math.sqrt(h/2))}return new We(r/o,i/o)}for(var z=[],H=0,G=L.length,k=G-1,j=H+1;H=0;C--){for(O=C/b,I=y*Math.cos(O*Math.PI/2),P=x*Math.sin(O*Math.PI/2),H=0,G=L.length;H=0;){n=H,(r=H-1)<0&&(r=t.length-1);var i=0,o=m+2*b;for(i=0;i0)&&f.push(w,_,E),(c!==n-1||u0&&v(!0),e>0&&v(!1)),this.setIndex(u),this.addAttribute("position",new Wn(h,3)),this.addAttribute("normal",new Wn(l,3)),this.addAttribute("uv",new Wn(d,2))}function da(t,e,n,r,i,o,a){ha.call(this,0,t,e,n,r,i,o,a),this.type="ConeGeometry",this.parameters={radius:t,height:e,radialSegments:n,heightSegments:r,openEnded:i,thetaStart:o,thetaLength:a}}function pa(t,e,n,r,i,o,a){la.call(this,0,t,e,n,r,i,o,a),this.type="ConeBufferGeometry",this.parameters={radius:t,height:e,radialSegments:n,heightSegments:r,openEnded:i,thetaStart:o,thetaLength:a}}function fa(t,e,n,r){Un.call(this),this.type="CircleGeometry",this.parameters={radius:t,segments:e,thetaStart:n,thetaLength:r},this.fromBufferGeometry(new ma(t,e,n,r)),this.mergeVertices()}function ma(t,e,n,r){Jn.call(this),this.type="CircleBufferGeometry",this.parameters={radius:t,segments:e,thetaStart:n,thetaLength:r},t=t||1,e=void 0!==e?Math.max(3,e):8,n=void 0!==n?n:0,r=void 0!==r?r:2*Math.PI;var i,o,a=[],s=[],c=[],u=[],h=new Ye,l=new We;for(s.push(0,0,0),c.push(0,0,1),u.push(.5,.5),o=0,i=3;o<=e;o++,i+=3){var d=n+o/e*r;h.x=t*Math.cos(d),h.y=t*Math.sin(d),s.push(h.x,h.y,h.z),c.push(0,0,1),l.x=(s[i]/t+1)/2,l.y=(s[i+1]/t+1)/2,u.push(l.x,l.y)}for(i=1;i<=e;i++)a.push(i,i+1,0);this.setIndex(a),this.addAttribute("position",new Wn(s,3)),this.addAttribute("normal",new Wn(c,3)),this.addAttribute("uv",new Wn(u,2))}Ko.prototype=Object.create(Un.prototype),Ko.prototype.constructor=Ko,$o.prototype=Object.create(Jo.prototype),$o.prototype.constructor=$o,ta.prototype=Object.create(Un.prototype),ta.prototype.constructor=ta,ea.prototype=Object.create(Jn.prototype),ea.prototype.constructor=ea,na.prototype=Object.create(Un.prototype),na.prototype.constructor=na,ra.prototype=Object.create(Jn.prototype),ra.prototype.constructor=ra,ia.prototype=Object.create(Un.prototype),ia.prototype.constructor=ia,oa.prototype=Object.create(Jn.prototype),oa.prototype.constructor=oa,aa.prototype=Object.create(Un.prototype),aa.prototype.constructor=aa,aa.prototype.toJSON=function(){var t=Un.prototype.toJSON.call(this);return ca(this.parameters.shapes,t)},sa.prototype=Object.create(Jn.prototype),sa.prototype.constructor=sa,sa.prototype.toJSON=function(){var t=Jn.prototype.toJSON.call(this);return ca(this.parameters.shapes,t)},ua.prototype=Object.create(Jn.prototype),ua.prototype.constructor=ua,ha.prototype=Object.create(Un.prototype),ha.prototype.constructor=ha,la.prototype=Object.create(Jn.prototype),la.prototype.constructor=la,da.prototype=Object.create(ha.prototype),da.prototype.constructor=da,pa.prototype=Object.create(la.prototype),pa.prototype.constructor=pa,fa.prototype=Object.create(Un.prototype),fa.prototype.constructor=fa,ma.prototype=Object.create(Jn.prototype),ma.prototype.constructor=ma;var ga=Object.freeze({WireframeGeometry:io,ParametricGeometry:oo,ParametricBufferGeometry:ao,TetrahedronGeometry:uo,TetrahedronBufferGeometry:ho,OctahedronGeometry:lo,OctahedronBufferGeometry:po,IcosahedronGeometry:fo,IcosahedronBufferGeometry:mo,DodecahedronGeometry:go,DodecahedronBufferGeometry:vo,PolyhedronGeometry:so,PolyhedronBufferGeometry:co,TubeGeometry:yo,TubeBufferGeometry:xo,TorusKnotGeometry:bo,TorusKnotBufferGeometry:wo,TorusGeometry:_o,TorusBufferGeometry:Mo,TextGeometry:Ko,TextBufferGeometry:$o,SphereGeometry:ta,SphereBufferGeometry:ea,RingGeometry:na,RingBufferGeometry:ra,PlaneGeometry:$n,PlaneBufferGeometry:tr,LatheGeometry:ia,LatheBufferGeometry:oa,ShapeGeometry:aa,ShapeBufferGeometry:sa,ExtrudeGeometry:Zo,ExtrudeBufferGeometry:Jo,EdgesGeometry:ua,ConeGeometry:da,ConeBufferGeometry:pa,CylinderGeometry:ha,CylinderBufferGeometry:la,CircleGeometry:fa,CircleBufferGeometry:ma,BoxGeometry:Qn,BoxBufferGeometry:Kn});function va(t){ur.call(this),this.type="ShadowMaterial",this.color=new vn(0),this.transparent=!0,this.setValues(t)}function ya(t){lr.call(this,t),this.type="RawShaderMaterial"}function xa(t){ur.call(this),this.defines={STANDARD:""},this.type="MeshStandardMaterial",this.color=new vn(16777215),this.roughness=.5,this.metalness=.5,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new vn(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalScale=new We(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.roughnessMap=null,this.metalnessMap=null,this.alphaMap=null,this.envMap=null,this.envMapIntensity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.skinning=!1,this.morphTargets=!1,this.morphNormals=!1,this.setValues(t)}function ba(t){xa.call(this),this.defines={PHYSICAL:""},this.type="MeshPhysicalMaterial",this.reflectivity=.5,this.clearCoat=0,this.clearCoatRoughness=0,this.setValues(t)}function wa(t){ur.call(this),this.type="MeshPhongMaterial",this.color=new vn(16777215),this.specular=new vn(1118481),this.shininess=30,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new vn(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalScale=new We(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.combine=ct,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.skinning=!1,this.morphTargets=!1,this.morphNormals=!1,this.setValues(t)}function _a(t){wa.call(this),this.defines={TOON:""},this.type="MeshToonMaterial",this.gradientMap=null,this.setValues(t)}function Ma(t){ur.call(this),this.type="MeshNormalMaterial",this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalScale=new We(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.lights=!1,this.skinning=!1,this.morphTargets=!1,this.morphNormals=!1,this.setValues(t)}function Ea(t){ur.call(this),this.type="MeshLambertMaterial",this.color=new vn(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new vn(0),this.emissiveIntensity=1,this.emissiveMap=null,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.combine=ct,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.skinning=!1,this.morphTargets=!1,this.morphNormals=!1,this.setValues(t)}function Ta(t){Yi.call(this),this.type="LineDashedMaterial",this.scale=1,this.dashSize=3,this.gapSize=1,this.setValues(t)}va.prototype=Object.create(ur.prototype),va.prototype.constructor=va,va.prototype.isShadowMaterial=!0,va.prototype.copy=function(t){return ur.prototype.copy.call(this,t),this.color.copy(t.color),this},ya.prototype=Object.create(lr.prototype),ya.prototype.constructor=ya,ya.prototype.isRawShaderMaterial=!0,xa.prototype=Object.create(ur.prototype),xa.prototype.constructor=xa,xa.prototype.isMeshStandardMaterial=!0,xa.prototype.copy=function(t){return ur.prototype.copy.call(this,t),this.defines={STANDARD:""},this.color.copy(t.color),this.roughness=t.roughness,this.metalness=t.metalness,this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.roughnessMap=t.roughnessMap,this.metalnessMap=t.metalnessMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.envMapIntensity=t.envMapIntensity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.skinning=t.skinning,this.morphTargets=t.morphTargets,this.morphNormals=t.morphNormals,this},ba.prototype=Object.create(xa.prototype),ba.prototype.constructor=ba,ba.prototype.isMeshPhysicalMaterial=!0,ba.prototype.copy=function(t){return xa.prototype.copy.call(this,t),this.defines={PHYSICAL:""},this.reflectivity=t.reflectivity,this.clearCoat=t.clearCoat,this.clearCoatRoughness=t.clearCoatRoughness,this},wa.prototype=Object.create(ur.prototype),wa.prototype.constructor=wa,wa.prototype.isMeshPhongMaterial=!0,wa.prototype.copy=function(t){return ur.prototype.copy.call(this,t),this.color.copy(t.color),this.specular.copy(t.specular),this.shininess=t.shininess,this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.skinning=t.skinning,this.morphTargets=t.morphTargets,this.morphNormals=t.morphNormals,this},_a.prototype=Object.create(wa.prototype),_a.prototype.constructor=_a,_a.prototype.isMeshToonMaterial=!0,_a.prototype.copy=function(t){return wa.prototype.copy.call(this,t),this.gradientMap=t.gradientMap,this},Ma.prototype=Object.create(ur.prototype),Ma.prototype.constructor=Ma,Ma.prototype.isMeshNormalMaterial=!0,Ma.prototype.copy=function(t){return ur.prototype.copy.call(this,t),this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.skinning=t.skinning,this.morphTargets=t.morphTargets,this.morphNormals=t.morphNormals,this},Ea.prototype=Object.create(ur.prototype),Ea.prototype.constructor=Ea,Ea.prototype.isMeshLambertMaterial=!0,Ea.prototype.copy=function(t){return ur.prototype.copy.call(this,t),this.color.copy(t.color),this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.skinning=t.skinning,this.morphTargets=t.morphTargets,this.morphNormals=t.morphNormals,this},Ta.prototype=Object.create(Yi.prototype),Ta.prototype.constructor=Ta,Ta.prototype.isLineDashedMaterial=!0,Ta.prototype.copy=function(t){return Yi.prototype.copy.call(this,t),this.scale=t.scale,this.dashSize=t.dashSize,this.gapSize=t.gapSize,this};var Sa=Object.freeze({ShadowMaterial:va,SpriteMaterial:ki,RawShaderMaterial:ya,ShaderMaterial:lr,PointsMaterial:Ki,MeshPhysicalMaterial:ba,MeshStandardMaterial:xa,MeshPhongMaterial:wa,MeshToonMaterial:_a,MeshNormalMaterial:Ma,MeshLambertMaterial:Ea,MeshDepthMaterial:Li,MeshDistanceMaterial:Ri,MeshBasicMaterial:hr,LineDashedMaterial:Ta,LineBasicMaterial:Yi,Material:ur}),Aa={enabled:!1,files:{},add:function(t,e){!1!==this.enabled&&(this.files[t]=e)},get:function(t){if(!1!==this.enabled)return this.files[t]},remove:function(t){delete this.files[t]},clear:function(){this.files={}}};function La(t,e,n){var r=this,i=!1,o=0,a=0,s=void 0;this.onStart=void 0,this.onLoad=t,this.onProgress=e,this.onError=n,this.itemStart=function(t){a++,!1===i&&void 0!==r.onStart&&r.onStart(t,o,a),i=!0},this.itemEnd=function(t){o++,void 0!==r.onProgress&&r.onProgress(t,o,a),o===a&&(i=!1,void 0!==r.onLoad&&r.onLoad())},this.itemError=function(t){void 0!==r.onError&&r.onError(t)},this.resolveURL=function(t){return s?s(t):t},this.setURLModifier=function(t){return s=t,this}}var Ra=new La,Ca={};function Pa(t){this.manager=void 0!==t?t:Ra}function Oa(t){this.manager=void 0!==t?t:Ra,this._parser=null}function Ia(t){this.manager=void 0!==t?t:Ra,this._parser=null}function Na(t){this.manager=void 0!==t?t:Ra}function Da(t){this.manager=void 0!==t?t:Ra}function Ua(t){this.manager=void 0!==t?t:Ra}function Ba(){this.type="Curve",this.arcLengthDivisions=200}function Fa(t,e,n,r,i,o,a,s){Ba.call(this),this.type="EllipseCurve",this.aX=t||0,this.aY=e||0,this.xRadius=n||1,this.yRadius=r||1,this.aStartAngle=i||0,this.aEndAngle=o||2*Math.PI,this.aClockwise=a||!1,this.aRotation=s||0}function za(t,e,n,r,i,o){Fa.call(this,t,e,n,n,r,i,o),this.type="ArcCurve"}function Ha(){var t=0,e=0,n=0,r=0;function i(i,o,a,s){t=i,e=a,n=-3*i+3*o-2*a-s,r=2*i-2*o+a+s}return{initCatmullRom:function(t,e,n,r,o){i(e,n,o*(n-t),o*(r-e))},initNonuniformCatmullRom:function(t,e,n,r,o,a,s){var c=(e-t)/o-(n-t)/(o+a)+(n-e)/a,u=(n-e)/a-(r-e)/(a+s)+(r-n)/s;i(e,n,c*=a,u*=a)},calc:function(i){var o=i*i;return t+e*i+n*o+r*(o*i)}}}Object.assign(Pa.prototype,{load:function(t,e,n,r){void 0===t&&(t=""),void 0!==this.path&&(t=this.path+t),t=this.manager.resolveURL(t);var i=this,o=Aa.get(t);if(void 0!==o)return i.manager.itemStart(t),setTimeout(function(){e&&e(o),i.manager.itemEnd(t)},0),o;if(void 0===Ca[t]){var a=t.match(/^data:(.*?)(;base64)?,(.*)$/);if(a){var s=a[1],c=!!a[2],u=a[3];u=window.decodeURIComponent(u),c&&(u=window.atob(u));try{var h,l=(this.responseType||"").toLowerCase();switch(l){case"arraybuffer":case"blob":for(var d=new Uint8Array(u.length),p=0;p0||0===t.search(/^data\:image\/jpeg/);i.format=r?Xt:qt,i.needsUpdate=!0,void 0!==e&&e(i)},n,r),i},setCrossOrigin:function(t){return this.crossOrigin=t,this},setPath:function(t){return this.path=t,this}}),Object.assign(Ba.prototype,{getPoint:function(){return console.warn("THREE.Curve: .getPoint() not implemented."),null},getPointAt:function(t,e){var n=this.getUtoTmapping(t);return this.getPoint(n,e)},getPoints:function(t){void 0===t&&(t=5);for(var e=[],n=0;n<=t;n++)e.push(this.getPoint(n/t));return e},getSpacedPoints:function(t){void 0===t&&(t=5);for(var e=[],n=0;n<=t;n++)e.push(this.getPointAt(n/t));return e},getLength:function(){var t=this.getLengths();return t[t.length-1]},getLengths:function(t){if(void 0===t&&(t=this.arcLengthDivisions),this.cacheArcLengths&&this.cacheArcLengths.length===t+1&&!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=!1;var e,n,r=[],i=this.getPoint(0),o=0;for(r.push(0),n=1;n<=t;n++)o+=(e=this.getPoint(n/t)).distanceTo(i),r.push(o),i=e;return this.cacheArcLengths=r,r},updateArcLengths:function(){this.needsUpdate=!0,this.getLengths()},getUtoTmapping:function(t,e){var n,r=this.getLengths(),i=0,o=r.length;n=e||t*r[o-1];for(var a,s=0,c=o-1;s<=c;)if((a=r[i=Math.floor(s+(c-s)/2)]-n)<0)s=i+1;else{if(!(a>0)){c=i;break}c=i-1}if(r[i=c]===n)return i/(o-1);var u=r[i];return(i+(n-u)/(r[i+1]-u))/(o-1)},getTangent:function(t){var e=t-1e-4,n=t+1e-4;e<0&&(e=0),n>1&&(n=1);var r=this.getPoint(e);return this.getPoint(n).clone().sub(r).normalize()},getTangentAt:function(t){var e=this.getUtoTmapping(t);return this.getTangent(e)},computeFrenetFrames:function(t,e){var n,r,i,o=new Ye,a=[],s=[],c=[],u=new Ye,h=new Xe;for(n=0;n<=t;n++)r=n/t,a[n]=this.getTangentAt(r),a[n].normalize();s[0]=new Ye,c[0]=new Ye;var l=Number.MAX_VALUE,d=Math.abs(a[0].x),p=Math.abs(a[0].y),f=Math.abs(a[0].z);for(d<=l&&(l=d,o.set(1,0,0)),p<=l&&(l=p,o.set(0,1,0)),f<=l&&o.set(0,0,1),u.crossVectors(a[0],o).normalize(),s[0].crossVectors(a[0],u),c[0].crossVectors(a[0],s[0]),n=1;n<=t;n++)s[n]=s[n-1].clone(),c[n]=c[n-1].clone(),u.crossVectors(a[n-1],a[n]),u.length()>Number.EPSILON&&(u.normalize(),i=Math.acos(Ve.clamp(a[n-1].dot(a[n]),-1,1)),s[n].applyMatrix4(h.makeRotationAxis(u,i))),c[n].crossVectors(a[n],s[n]);if(!0===e)for(i=Math.acos(Ve.clamp(s[0].dot(s[t]),-1,1)),i/=t,a[0].dot(u.crossVectors(s[0],s[t]))>0&&(i=-i),n=1;n<=t;n++)s[n].applyMatrix4(h.makeRotationAxis(a[n],i*n)),c[n].crossVectors(a[n],s[n]);return{tangents:a,normals:s,binormals:c}},clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.arcLengthDivisions=t.arcLengthDivisions,this},toJSON:function(){var t={metadata:{version:4.5,type:"Curve",generator:"Curve.toJSON"}};return t.arcLengthDivisions=this.arcLengthDivisions,t.type=this.type,t},fromJSON:function(t){return this.arcLengthDivisions=t.arcLengthDivisions,this}}),Fa.prototype=Object.create(Ba.prototype),Fa.prototype.constructor=Fa,Fa.prototype.isEllipseCurve=!0,Fa.prototype.getPoint=function(t,e){for(var n=e||new We,r=2*Math.PI,i=this.aEndAngle-this.aStartAngle,o=Math.abs(i)r;)i-=r;i0?0:(Math.floor(Math.abs(h)/c)+1)*c:0===l&&h===c-1&&(h=c-2,l=1),this.closed||h>0?n=s[(h-1)%c]:(Ga.subVectors(s[0],s[1]).add(s[0]),n=Ga),r=s[h%c],i=s[(h+1)%c],this.closed||h+2r.length-2?r.length-1:o+1],h=r[o>r.length-3?r.length-1:o+2];return n.set(Xa(a,s.x,c.x,u.x,h.x),Xa(a,s.y,c.y,u.y,h.y)),n},es.prototype.copy=function(t){Ba.prototype.copy.call(this,t),this.points=[];for(var e=0,n=t.points.length;e=e){var i=n[r]-e,o=this.curves[r],a=o.getLength(),s=0===a?0:1-i/a;return o.getPointAt(s)}r++}return null},getLength:function(){var t=this.getCurveLengths();return t[t.length-1]},updateArcLengths:function(){this.needsUpdate=!0,this.cacheLengths=null,this.getCurveLengths()},getCurveLengths:function(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;for(var t=[],e=0,n=0,r=this.curves.length;n1&&!n[n.length-1].equals(n[0])&&n.push(n[0]),n},copy:function(t){Ba.prototype.copy.call(this,t),this.curves=[];for(var e=0,n=t.curves.length;e0){var u=c.getPoint(0);u.equals(this.currentPoint)||this.lineTo(u.x,u.y)}this.curves.push(c);var h=c.getPoint(1);this.currentPoint.copy(h)},copy:function(t){return rs.prototype.copy.call(this,t),this.currentPoint.copy(t.currentPoint),this},toJSON:function(){var t=rs.prototype.toJSON.call(this);return t.currentPoint=this.currentPoint.toArray(),t},fromJSON:function(t){return rs.prototype.fromJSON.call(this,t),this.currentPoint.fromArray(t.currentPoint),this}}),os.prototype=Object.assign(Object.create(is.prototype),{constructor:os,getPointsHoles:function(t){for(var e=[],n=0,r=this.holes.length;n=i)break t;var s=e[1];t=(i=e[--n-1]))break e}o=n,n=0}for(;n>>1;te;)--o;if(++o,0!==i||o!==r){i>=o&&(i=(o=Math.max(o,1))-1);var a=this.getValueSize();this.times=Ss.arraySlice(n,i,o),this.values=Ss.arraySlice(this.values,i*a,o*a)}return this},validate:function(){var t=!0,e=this.getValueSize();e-Math.floor(e)!=0&&(console.error("THREE.KeyframeTrack: Invalid value size in track.",this),t=!1);var n=this.times,r=this.values,i=n.length;0===i&&(console.error("THREE.KeyframeTrack: Track is empty.",this),t=!1);for(var o=null,a=0;a!==i;a++){var s=n[a];if("number"==typeof s&&isNaN(s)){console.error("THREE.KeyframeTrack: Time is not a valid number.",this,a,s),t=!1;break}if(null!==o&&o>s){console.error("THREE.KeyframeTrack: Out of order keys.",this,a,s,o),t=!1;break}o=s}if(void 0!==r&&Ss.isTypedArray(r)){a=0;for(var c=r.length;a!==c;++a){var u=r[a];if(isNaN(u)){console.error("THREE.KeyframeTrack: Value is not a valid number.",this,a,u),t=!1;break}}}return t},optimize:function(){for(var t=this.times,e=this.values,n=this.getValueSize(),r=this.getInterpolation()===Ae,i=1,o=t.length-1,a=1;a0){t[i]=t[o];for(f=o*n,m=i*n,d=0;d!==n;++d)e[m+d]=e[f+d];++i}return i!==t.length&&(this.times=Ss.arraySlice(t,0,i),this.values=Ss.arraySlice(e,0,i*n)),this}}),Ls.prototype=Object.assign(Object.create(As.prototype),{constructor:Ls,ValueTypeName:"vector"}),Object.assign(Rs,{parse:function(t){for(var e=[],n=t.tracks,r=1/(t.fps||1),i=0,o=n.length;i!==o;++i)e.push(As.parse(n[i]).scale(r));return new Rs(t.name,t.duration,e)},toJSON:function(t){for(var e=[],n=t.tracks,r={name:t.name,duration:t.duration,tracks:e},i=0,o=n.length;i!==o;++i)e.push(As.toJSON(n[i]));return r},CreateFromMorphTargetSequence:function(t,e,n,r){for(var i=e.length,o=[],a=0;a1){var u=r[l=c[1]];u||(r[l]=u=[]),u.push(s)}}var h=[];for(var l in r)h.push(Rs.CreateFromMorphTargetSequence(l,r[l],e,n));return h},parseAnimation:function(t,e){if(!t)return console.error("THREE.AnimationClip: No animation in JSONLoader data."),null;for(var n=function(t,e,n,r,i){if(0!==n.length){var o=[],a=[];Ss.flattenJSON(n,o,a,r),0!==o.length&&i.push(new t(e,o,a))}},r=[],i=t.name||"default",o=t.length||-1,a=t.fps||30,s=t.hierarchy||[],c=0;c1?t.skinWeights[r+1]:0,s=n>2?t.skinWeights[r+2]:0,c=n>3?t.skinWeights[r+3]:0;e.skinWeights.push(new on(o,a,s,c))}if(t.skinIndices)for(r=0,i=t.skinIndices.length;r1?t.skinIndices[r+1]:0,l=n>2?t.skinIndices[r+2]:0,d=n>3?t.skinIndices[r+3]:0;e.skinIndices.push(new on(u,h,l,d))}e.bones=t.bones,e.bones&&e.bones.length>0&&(e.skinWeights.length!==e.skinIndices.length||e.skinIndices.length!==e.vertices.length)&&console.warn("When skinning, number of vertices ("+e.vertices.length+"), skinIndices ("+e.skinIndices.length+"), and skinWeights ("+e.skinWeights.length+") should match.")}(t,n),function(t,e){var n=t.scale;if(void 0!==t.morphTargets)for(var r=0,i=t.morphTargets.length;r0){console.warn('THREE.JSONLoader: "morphColors" no longer supported. Using them as face colors.');var h=e.faces,l=t.morphColors[0].colors;for(r=0,i=h.length;r0&&(e.animations=n)}(t,n),n.computeFaceNormals(),n.computeBoundingSphere(),void 0===t.materials||0===t.materials.length?{geometry:n}:{geometry:n,materials:Bs.prototype.initMaterials(t.materials,e,this.crossOrigin)}}}()}),Object.assign(Hs.prototype,{load:function(t,e,n,r){""===this.texturePath&&(this.texturePath=t.substring(0,t.lastIndexOf("/")+1));var i=this;new Pa(i.manager).load(t,function(n){var o=null;try{o=JSON.parse(n)}catch(e){return void 0!==r&&r(e),void console.error("THREE:ObjectLoader: Can't parse "+t+".",e.message)}var a=o.metadata;void 0!==a&&void 0!==a.type&&"geometry"!==a.type.toLowerCase()?i.parse(o,e):console.error("THREE.ObjectLoader: Can't load "+t+". Use THREE.JSONLoader instead.")},n,r)},setTexturePath:function(t){this.texturePath=t},setCrossOrigin:function(t){this.crossOrigin=t},parse:function(t,e){var n=this.parseShape(t.shapes),r=this.parseGeometries(t.geometries,n),i=this.parseImages(t.images,function(){void 0!==e&&e(s)}),o=this.parseTextures(t.textures,i),a=this.parseMaterials(t.materials,o),s=this.parseObject(t.object,r,a);return t.animations&&(s.animations=this.parseAnimations(t.animations)),void 0!==t.images&&0!==t.images.length||void 0!==e&&e(s),s},parseShape:function(t){var e={};if(void 0!==t)for(var n=0,r=t.length;n0){var o=new Na(new La(e));o.setCrossOrigin(this.crossOrigin);for(var a=0,s=t.length;a0?new qi(a,s):new mr(a,s);break;case"LOD":r=new Vi;break;case"Line":r=new Zi(i(t.geometry),o(t.material),t.mode);break;case"LineLoop":r=new Qi(i(t.geometry),o(t.material));break;case"LineSegments":r=new Ji(i(t.geometry),o(t.material));break;case"PointCloud":case"Points":r=new $i(i(t.geometry),o(t.material));break;case"Sprite":r=new ji(o(t.material));break;case"Group":r=new to;break;default:r=new Rn}if(r.uuid=t.uuid,void 0!==t.name&&(r.name=t.name),void 0!==t.matrix?(r.matrix.fromArray(t.matrix),void 0!==t.matrixAutoUpdate&&(r.matrixAutoUpdate=t.matrixAutoUpdate),r.matrixAutoUpdate&&r.matrix.decompose(r.position,r.quaternion,r.scale)):(void 0!==t.position&&r.position.fromArray(t.position),void 0!==t.rotation&&r.rotation.fromArray(t.rotation),void 0!==t.quaternion&&r.quaternion.fromArray(t.quaternion),void 0!==t.scale&&r.scale.fromArray(t.scale)),void 0!==t.castShadow&&(r.castShadow=t.castShadow),void 0!==t.receiveShadow&&(r.receiveShadow=t.receiveShadow),t.shadow&&(void 0!==t.shadow.bias&&(r.shadow.bias=t.shadow.bias),void 0!==t.shadow.radius&&(r.shadow.radius=t.shadow.radius),void 0!==t.shadow.mapSize&&r.shadow.mapSize.fromArray(t.shadow.mapSize),void 0!==t.shadow.camera&&(r.shadow.camera=this.parseObject(t.shadow.camera))),void 0!==t.visible&&(r.visible=t.visible),void 0!==t.frustumCulled&&(r.frustumCulled=t.frustumCulled),void 0!==t.renderOrder&&(r.renderOrder=t.renderOrder),void 0!==t.userData&&(r.userData=t.userData),void 0!==t.children)for(var c=t.children,u=0;uNumber.EPSILON){if(u<0&&(a=e[o],c=-c,s=e[i],u=-u),t.ys.y)continue;if(t.y===a.y){if(t.x===a.x)return!0}else{var h=u*(t.x-a.x)-c*(t.y-a.y);if(0===h)return!0;if(h<0)continue;r=!r}}else{if(t.y!==a.y)continue;if(s.x<=t.x&&t.x<=a.x||a.x<=t.x&&t.x<=s.x)return!0}}return r}var i=Xo.isClockWise,o=this.subPaths;if(0===o.length)return[];if(!0===e)return n(o);var a,s,c,u=[];if(1===o.length)return s=o[0],(c=new os).curves=s.curves,u.push(c),u;var h=!i(o[0].getPoints());h=t?!h:h;var l,d,p=[],f=[],m=[],g=0;f[g]=void 0,m[g]=[];for(var v=0,y=o.length;v1){for(var x=!1,b=[],w=0,_=f.length;w<_;w++)p[w]=[];for(w=0,_=f.length;w<_;w++)for(var M=m[w],E=0;E0&&(x||(m=p))}v=0;for(var L=f.length;v0){this.source.connect(this.filters[0]);for(var t=1,e=this.filters.length;t0){this.source.disconnect(this.filters[0]);for(var t=1,e=this.filters.length;t=.5)for(var o=0;o!==i;++o)t[e+o]=t[n+o]},_slerp:function(t,e,n,r){qe.slerpFlat(t,e,t,e,t,n,r)},_lerp:function(t,e,n,r,i){for(var o=1-r,a=0;a!==i;++a){var s=e+a;t[s]=t[s]*o+t[n+a]*r}}});var mc,gc,vc,yc,xc,bc,wc,_c,Mc,Ec,Tc,Sc,Ac;function Lc(t,e,n){var r=n||Rc.parseTrackName(e);this._targetGroup=t,this._bindings=t.subscribe_(e,r)}function Rc(t,e,n){this.path=e,this.parsedPath=n||Rc.parseTrackName(e),this.node=Rc.findNode(t,this.parsedPath.nodeName)||t,this.rootNode=t}function Cc(){this.uuid=Ve.generateUUID(),this._objects=Array.prototype.slice.call(arguments),this.nCachedObjects_=0;var t={};this._indicesByUUID=t;for(var e=0,n=arguments.length;e!==n;++e)t[arguments[e].uuid]=e;this._paths=[],this._parsedPaths=[],this._bindings=[],this._bindingsIndicesByPath={};var r=this;this.stats={objects:{get total(){return r._objects.length},get inUse(){return this.total-r.nCachedObjects_}},get bindingsPerObject(){return r._bindings.length}}}function Pc(t,e,n){this._mixer=t,this._clip=e,this._localRoot=n||null;for(var r=e.tracks,i=r.length,o=new Array(i),a={endingStart:Le,endingEnd:Le},s=0;s!==i;++s){var c=r[s].createInterpolant(null);o[s]=c,c.settings=a}this._interpolantSettings=a,this._interpolants=o,this._propertyBindings=new Array(i),this._cacheIndex=null,this._byClipCacheIndex=null,this._timeScaleInterpolant=null,this._weightInterpolant=null,this.loop=Me,this._loopCount=-1,this._startTime=null,this.time=0,this.timeScale=1,this._effectiveTimeScale=1,this.weight=1,this._effectiveWeight=1,this.repetitions=1/0,this.paused=!1,this.enabled=!0,this.clampWhenFinished=!1,this.zeroSlopeAtStart=!0,this.zeroSlopeAtEnd=!0}function Oc(t){this._root=t,this._initMemoryManager(),this._accuIndex=0,this.time=0,this.timeScale=1}function Ic(t){"string"==typeof t&&(console.warn("THREE.Uniform: Type parameter is no longer needed."),t=arguments[1]),this.value=t}function Nc(){Jn.call(this),this.type="InstancedBufferGeometry",this.maxInstancedCount=void 0}function Dc(t,e,n,r){this.data=t,this.itemSize=e,this.offset=n,this.normalized=!0===r}function Uc(t,e){this.array=t,this.stride=e,this.count=void 0!==t?t.length/e:0,this.dynamic=!1,this.updateRange={offset:0,count:-1},this.version=0}function Bc(t,e,n){Uc.call(this,t,e),this.meshPerAttribute=n||1}function Fc(t,e,n){Bn.call(this,t,e),this.meshPerAttribute=n||1}function zc(t,e,n,r){this.ray=new dr(t,e),this.near=n||0,this.far=r||1/0,this.params={Mesh:{},Line:{},LOD:{},Points:{threshold:1},Sprite:{}},Object.defineProperties(this.params,{PointCloud:{get:function(){return console.warn("THREE.Raycaster: params.PointCloud has been renamed to params.Points."),this.Points}}})}function Hc(t,e){return t.distance-e.distance}function Gc(t,e,n,r){if(!1!==t.visible&&(t.raycast(e,n),!0===r))for(var i=t.children,o=0,a=i.length;o=e){var h=e++,l=t[h];n[l.uuid]=u,t[u]=l,n[c]=h,t[h]=s;for(var d=0,p=i;d!==p;++d){var f=r[d],m=f[h],g=f[u];f[u]=m,f[h]=g}}}this.nCachedObjects_=e},uncache:function(){for(var t=this._objects,e=t.length,n=this.nCachedObjects_,r=this._indicesByUUID,i=this._bindings,o=i.length,a=0,s=arguments.length;a!==s;++a){var c=arguments[a].uuid,u=r[c];if(void 0!==u)if(delete r[c],u0)for(var c=this._interpolants,u=this._propertyBindings,h=0,l=c.length;h!==l;++h)c[h].evaluate(a),u[h].accumulate(r,s)}else this._updateWeight(t)},_updateWeight:function(t){var e=0;if(this.enabled){e=this.weight;var n=this._weightInterpolant;if(null!==n){var r=n.evaluate(t)[0];e*=r,t>n.parameterPositions[1]&&(this.stopFading(),0===r&&(this.enabled=!1))}}return this._effectiveWeight=e,e},_updateTimeScale:function(t){var e=0;if(!this.paused){e=this.timeScale;var n=this._timeScaleInterpolant;if(null!==n)e*=n.evaluate(t)[0],t>n.parameterPositions[1]&&(this.stopWarping(),0===e?this.paused=!0:this.timeScale=e)}return this._effectiveTimeScale=e,e},_updateTime:function(t){var e=this.time+t;if(0===t)return e;var n=this._clip.duration,r=this.loop,i=this._loopCount;if(r===_e){-1===i&&(this._loopCount=0,this._setEndings(!0,!0,!1));t:{if(e>=n)e=n;else{if(!(e<0))break t;e=0}this.clampWhenFinished?this.paused=!0:this.enabled=!1,this._mixer.dispatchEvent({type:"finished",action:this,direction:t<0?-1:1})}}else{var o=r===Ee;if(-1===i&&(t>=0?(i=0,this._setEndings(!0,0===this.repetitions,o)):this._setEndings(0===this.repetitions,!0,o)),e>=n||e<0){var a=Math.floor(e/n);e-=n*a,i+=Math.abs(a);var s=this.repetitions-i;if(s<=0)this.clampWhenFinished?this.paused=!0:this.enabled=!1,e=t>0?n:0,this._mixer.dispatchEvent({type:"finished",action:this,direction:t>0?1:-1});else{if(1===s){var c=t<0;this._setEndings(c,!c,o)}else this._setEndings(!1,!1,o);this._loopCount=i,this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:a})}}if(o&&1==(1&i))return this.time=e,n-e}return this.time=e,e},_setEndings:function(t,e,n){var r=this._interpolantSettings;n?(r.endingStart=Re,r.endingEnd=Re):(r.endingStart=t?this.zeroSlopeAtStart?Re:Le:Ce,r.endingEnd=e?this.zeroSlopeAtEnd?Re:Le:Ce)},_scheduleFading:function(t,e,n){var r=this._mixer,i=r.time,o=this._weightInterpolant;null===o&&(o=r._lendControlInterpolant(),this._weightInterpolant=o);var a=o.parameterPositions,s=o.sampleValues;return a[0]=i,s[0]=e,a[1]=i+t,s[1]=n,this}}),Oc.prototype=Object.assign(Object.create(r.prototype),{constructor:Oc,_bindAction:function(t,e){var n=t._localRoot||this._root,r=t._clip.tracks,i=r.length,o=t._propertyBindings,a=t._interpolants,s=n.uuid,c=this._bindingsByRootAndName,u=c[s];void 0===u&&(u={},c[s]=u);for(var h=0;h!==i;++h){var l=r[h],d=l.name,p=u[d];if(void 0!==p)o[h]=p;else{if(void 0!==(p=o[h])){null===p._cacheIndex&&(++p.referenceCount,this._addInactiveBinding(p,s,d));continue}var f=e&&e._propertyBindings[h].binding.parsedPath;++(p=new fc(Rc.create(n,d,f),l.ValueTypeName,l.getValueSize())).referenceCount,this._addInactiveBinding(p,s,d),o[h]=p}a[h].resultBuffer=p.buffer}},_activateAction:function(t){if(!this._isActiveAction(t)){if(null===t._cacheIndex){var e=(t._localRoot||this._root).uuid,n=t._clip.uuid,r=this._actionsByClip[n];this._bindAction(t,r&&r.knownActions[0]),this._addInactiveAction(t,n,e)}for(var i=t._propertyBindings,o=0,a=i.length;o!==a;++o){var s=i[o];0==s.useCount++&&(this._lendBinding(s),s.saveOriginalState())}this._lendAction(t)}},_deactivateAction:function(t){if(this._isActiveAction(t)){for(var e=t._propertyBindings,n=0,r=e.length;n!==r;++n){var i=e[n];0==--i.useCount&&(i.restoreOriginalState(),this._takeBackBinding(i))}this._takeBackAction(t)}},_initMemoryManager:function(){this._actions=[],this._nActiveActions=0,this._actionsByClip={},this._bindings=[],this._nActiveBindings=0,this._bindingsByRootAndName={},this._controlInterpolants=[],this._nActiveControlInterpolants=0;var t=this;this.stats={actions:{get total(){return t._actions.length},get inUse(){return t._nActiveActions}},bindings:{get total(){return t._bindings.length},get inUse(){return t._nActiveBindings}},controlInterpolants:{get total(){return t._controlInterpolants.length},get inUse(){return t._nActiveControlInterpolants}}}},_isActiveAction:function(t){var e=t._cacheIndex;return null!==e&&ethis.max.x||t.ythis.max.y)},containsBox:function(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y},getParameter:function(t,e){return void 0===e&&(console.warn("THREE.Box2: .getParameter() target is now required"),e=new We),e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y))},intersectsBox:function(t){return!(t.max.xthis.max.x||t.max.ythis.max.y)},clampPoint:function(t,e){return void 0===e&&(console.warn("THREE.Box2: .clampPoint() target is now required"),e=new We),e.copy(t).clamp(this.min,this.max)},distanceToPoint:function(){var t=new We;return function(e){return t.copy(e).clamp(this.min,this.max).sub(e).length()}}(),intersect:function(t){return this.min.max(t.min),this.max.min(t.max),this},union:function(t){return this.min.min(t.min),this.max.max(t.max),this},translate:function(t){return this.min.add(t),this.max.add(t),this},equals:function(t){return t.min.equals(this.min)&&t.max.equals(this.max)}}),Xc.prototype=Object.create(Rn.prototype),Xc.prototype.constructor=Xc,Xc.prototype.isImmediateRenderObject=!0,qc.prototype=Object.create(Ji.prototype),qc.prototype.constructor=qc,qc.prototype.update=function(){var t=new Ye,e=new Ye,n=new Ze;return function(){var r=["a","b","c"];this.object.updateMatrixWorld(!0),n.getNormalMatrix(this.object.matrixWorld);var i=this.object.matrixWorld,o=this.geometry.attributes.position,a=this.object.geometry;if(a&&a.isGeometry)for(var s=a.vertices,c=a.faces,u=0,h=0,l=c.length;h.99999?this.quaternion.set(0,0,0,1):t.y<-.99999?this.quaternion.set(1,0,0,0):(Ac.set(t.z,0,-t.x).normalize(),Sc=Math.acos(t.y),this.quaternion.setFromAxisAngle(Ac,Sc))}),su.prototype.setLength=function(t,e,n){void 0===e&&(e=.2*t),void 0===n&&(n=.2*e),this.line.scale.set(1,Math.max(0,t-e),1),this.line.updateMatrix(),this.cone.scale.set(n,e,n),this.cone.position.y=t,this.cone.updateMatrix()},su.prototype.setColor=function(t){this.line.material.color.copy(t),this.cone.material.color.copy(t)},cu.prototype=Object.create(Ji.prototype),cu.prototype.constructor=cu;var hu=0,lu=1;function du(t){return console.warn("THREE.MeshFaceMaterial has been removed. Use an Array instead."),t}function pu(t){return void 0===t&&(t=[]),console.warn("THREE.MultiMaterial has been removed. Use an Array instead."),t.isMultiMaterial=!0,t.materials=t,t.clone=function(){return t.slice()},t}function fu(t,e){return console.warn("THREE.PointCloud has been renamed to THREE.Points."),new $i(t,e)}function mu(t){return console.warn("THREE.Particle has been renamed to THREE.Sprite."),new ji(t)}function gu(t,e){return console.warn("THREE.ParticleSystem has been renamed to THREE.Points."),new $i(t,e)}function vu(t){return console.warn("THREE.PointCloudMaterial has been renamed to THREE.PointsMaterial."),new Ki(t)}function yu(t){return console.warn("THREE.ParticleBasicMaterial has been renamed to THREE.PointsMaterial."),new Ki(t)}function xu(t){return console.warn("THREE.ParticleSystemMaterial has been renamed to THREE.PointsMaterial."),new Ki(t)}function bu(t,e,n){return console.warn("THREE.Vertex has been removed. Use THREE.Vector3 instead."),new Ye(t,e,n)}function wu(t,e){return console.warn("THREE.DynamicBufferAttribute has been removed. Use new THREE.BufferAttribute().setDynamic( true ) instead."),new Bn(t,e).setDynamic(!0)}function _u(t,e){return console.warn("THREE.Int8Attribute has been removed. Use new THREE.Int8BufferAttribute() instead."),new Fn(t,e)}function Mu(t,e){return console.warn("THREE.Uint8Attribute has been removed. Use new THREE.Uint8BufferAttribute() instead."),new zn(t,e)}function Eu(t,e){return console.warn("THREE.Uint8ClampedAttribute has been removed. Use new THREE.Uint8ClampedBufferAttribute() instead."),new Hn(t,e)}function Tu(t,e){return console.warn("THREE.Int16Attribute has been removed. Use new THREE.Int16BufferAttribute() instead."),new Gn(t,e)}function Su(t,e){return console.warn("THREE.Uint16Attribute has been removed. Use new THREE.Uint16BufferAttribute() instead."),new kn(t,e)}function Au(t,e){return console.warn("THREE.Int32Attribute has been removed. Use new THREE.Int32BufferAttribute() instead."),new jn(t,e)}function Lu(t,e){return console.warn("THREE.Uint32Attribute has been removed. Use new THREE.Uint32BufferAttribute() instead."),new Vn(t,e)}function Ru(t,e){return console.warn("THREE.Float32Attribute has been removed. Use new THREE.Float32BufferAttribute() instead."),new Wn(t,e)}function Cu(t,e){return console.warn("THREE.Float64Attribute has been removed. Use new THREE.Float64BufferAttribute() instead."),new Xn(t,e)}function Pu(t){console.warn("THREE.ClosedSplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead."),Wa.call(this,t),this.type="catmullrom",this.closed=!0}function Ou(t){console.warn("THREE.SplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead."),Wa.call(this,t),this.type="catmullrom"}function Iu(t){console.warn("THREE.Spline has been removed. Use THREE.CatmullRomCurve3 instead."),Wa.call(this,t),this.type="catmullrom"}function Nu(t){return console.warn("THREE.AxisHelper has been renamed to THREE.AxesHelper."),new cu(t)}function Du(t,e){return console.warn("THREE.BoundingBoxHelper has been deprecated. Creating a THREE.BoxHelper instead."),new iu(t,e)}function Uu(t,e){return console.warn("THREE.EdgesHelper has been removed. Use THREE.EdgesGeometry instead."),new Ji(new ua(t.geometry),new Yi({color:void 0!==e?e:16777215}))}function Bu(t,e){return console.warn("THREE.WireframeHelper has been removed. Use THREE.WireframeGeometry instead."),new Ji(new io(t.geometry),new Yi({color:void 0!==e?e:16777215}))}function Fu(t){return console.warn("THREE.XHRLoader has been renamed to THREE.FileLoader."),new Pa(t)}function zu(t){return console.warn("THREE.BinaryTextureLoader has been renamed to THREE.DataTextureLoader."),new Ia(t)}Ba.create=function(t,e){return console.log("THREE.Curve.create() has been deprecated"),t.prototype=Object.create(Ba.prototype),t.prototype.constructor=t,t.prototype.getPoint=e,t},Object.assign(rs.prototype,{createPointsGeometry:function(t){console.warn("THREE.CurvePath: .createPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.");var e=this.getPoints(t);return this.createGeometry(e)},createSpacedPointsGeometry:function(t){console.warn("THREE.CurvePath: .createSpacedPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.");var e=this.getSpacedPoints(t);return this.createGeometry(e)},createGeometry:function(t){console.warn("THREE.CurvePath: .createGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.");for(var e=new Un,n=0,r=t.length;n1)for(var n=1;n1?1:h),i)if(void 0!==r[a]){var _=r[a]||0,M=i[a];M instanceof Array?n[a]=m(M,w):("string"==typeof M&&(M="+"===M.charAt(0)||"-"===M.charAt(0)?_+parseFloat(M):parseFloat(M)),"number"==typeof M&&(n[a]=_+(M-_)*w))}if(null!==x&&x.call(n,w),1===h){if(c>0){for(a in isFinite(c)&&c--,o){if("string"==typeof i[a]&&(o[a]=o[a]+parseFloat(i[a])),u){var E=o[a];o[a]=i[a],i[a]=E}r[a]=o[a]}return u&&(l=!l),p=void 0!==e?t+e:t+d,!0}null!==b&&b.call(n,n);for(var T=0,S=g.length;T1?o(t[n],t[n-1],n-r):o(t[i],t[i+1>n?n:i+1],r-i)},Bezier:function(t,e){for(var n=0,r=t.length-1,i=Math.pow,o=a.Interpolation.Utils.Bernstein,s=0;s<=r;s++)n+=i(1-e,r-s)*i(e,s)*t[s]*o(r,s);return n},CatmullRom:function(t,e){var n=t.length-1,r=n*e,i=Math.floor(r),o=a.Interpolation.Utils.CatmullRom;return t[0]===t[n]?(e<0&&(i=Math.floor(r=n*(1+e))),o(t[(i-1+n)%n],t[i],t[(i+1)%n],t[(i+2)%n],r-i)):e<0?t[0]-(o(t[0],t[0],t[1],t[1],-r)-t[0]):e>1?t[n]-(o(t[n],t[n],t[n-1],t[n-1],r-n)-t[n]):o(t[i?i-1:0],t[i],t[n1;n--)e*=n;return o[t]=e,e}),CatmullRom:function(t,e,n,r,i){var o=.5*(n-t),a=.5*(r-e),s=i*i;return(2*e-2*n+o+a)*(i*s)+(-3*e+3*n-2*o-a)*s+o*i+e}}},void 0===(r=function(){return a}.apply(e,[]))||(t.exports=r)}).call(this,n(4))},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r,i=n(0),o=(r=i)&&r.__esModule?r:{default:r};e.default=function t(e,n){var r=this;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t);var i=new dat.GUI;this.camera=e.camera.threeCamera,this.controls=e.controls.threeControls,this.light=e.light;var a=i.addFolder("Camera"),s=a.add(o.default.camera,"fov",0,180).name("Camera FOV");s.onChange(function(t){r.controls.enableRotate=!1,r.camera.fov=t}),s.onFinishChange(function(){r.camera.updateProjectionMatrix(),r.controls.enableRotate=!0});var c=a.add(o.default.camera,"aspect",0,4).name("Camera Aspect");c.onChange(function(t){r.controls.enableRotate=!1,r.camera.aspect=t}),c.onFinishChange(function(){r.camera.updateProjectionMatrix(),r.controls.enableRotate=!0}),a.addColor(o.default.fog,"color").name("Fog Color").onChange(function(t){e.scene.fog.color.setHex(t)});var u=a.add(o.default.fog,"near",0,.01).name("Fog Near");u.onChange(function(t){r.controls.enableRotate=!1,e.scene.fog.density=t}),u.onFinishChange(function(){r.controls.enableRotate=!0});var h=i.addFolder("Controls");h.add(o.default.controls,"autoRotate").name("Auto Rotate").onChange(function(t){r.controls.autoRotate=t});var l=h.add(o.default.controls,"autoRotateSpeed",-1,1).name("Rotation Speed");l.onChange(function(t){r.controls.enableRotate=!1,r.controls.autoRotateSpeed=t}),l.onFinishChange(function(){r.controls.enableRotate=!0});var d=i.addFolder("Mesh");d.add(o.default.mesh,"translucent",!0).name("Translucent").onChange(function(t){t?(n.material.transparent=!0,n.material.opacity=.5):n.material.opacity=1}),d.add(o.default.mesh,"wireframe",!0).name("Wireframe").onChange(function(t){n.material.wireframe=t});var p=i.addFolder("Ambient Light");p.add(o.default.ambientLight,"enabled").name("Enabled").onChange(function(t){r.light.ambientLight.visible=t}),p.addColor(o.default.ambientLight,"color").name("Color").onChange(function(t){r.light.ambientLight.color.setHex(t)});var f=i.addFolder("Directional Light");f.add(o.default.directionalLight,"enabled").name("Enabled").onChange(function(t){r.light.directionalLight.visible=t}),f.addColor(o.default.directionalLight,"color").name("Color").onChange(function(t){r.light.directionalLight.color.setHex(t)});var m=f.add(o.default.directionalLight,"intensity",0,2).name("Intensity");m.onChange(function(t){r.controls.enableRotate=!1,r.light.directionalLight.intensity=t}),m.onFinishChange(function(){r.controls.enableRotate=!0});var g=f.add(o.default.directionalLight,"x",-1e3,1e3).name("Position X");g.onChange(function(t){r.controls.enableRotate=!1,r.light.directionalLight.position.x=t}),g.onFinishChange(function(){r.controls.enableRotate=!0});var v=f.add(o.default.directionalLight,"y",-1e3,1e3).name("Position Y");v.onChange(function(t){r.controls.enableRotate=!1,r.light.directionalLight.position.y=t}),v.onFinishChange(function(){r.controls.enableRotate=!0});var y=f.add(o.default.directionalLight,"z",-1e3,1e3).name("Position Z");y.onChange(function(t){r.controls.enableRotate=!1,r.light.directionalLight.position.z=t}),y.onFinishChange(function(){r.controls.enableRotate=!0});var x=i.addFolder("Shadow Map");x.add(o.default.shadow,"enabled").name("Enabled").onChange(function(t){r.light.directionalLight.castShadow=t}),x.add(o.default.shadow,"helperEnabled").name("Helper Enabled").onChange(function(t){r.light.directionalLightHelper.visible=t});var b=x.add(o.default.shadow,"near",0,400).name("Near");b.onChange(function(t){r.controls.enableRotate=!1,r.light.directionalLight.shadow.camera.near=t}),b.onFinishChange(function(){r.controls.enableRotate=!0,r.light.directionalLight.shadow.map.dispose(),r.light.directionalLight.shadow.map=null,r.light.directionalLightHelper.update()});var w=x.add(o.default.shadow,"far",0,1200).name("Far");w.onChange(function(t){r.controls.enableRotate=!1,r.light.directionalLight.shadow.camera.far=t}),w.onFinishChange(function(){r.controls.enableRotate=!0,r.light.directionalLight.shadow.map.dispose(),r.light.directionalLight.shadow.map=null,r.light.directionalLightHelper.update()});var _=x.add(o.default.shadow,"top",-400,400).name("Top");_.onChange(function(t){r.controls.enableRotate=!1,r.light.directionalLight.shadow.camera.top=t}),_.onFinishChange(function(){r.controls.enableRotate=!0,r.light.directionalLight.shadow.map.dispose(),r.light.directionalLight.shadow.map=null,r.light.directionalLightHelper.update()});var M=x.add(o.default.shadow,"right",-400,400).name("Right");M.onChange(function(t){r.controls.enableRotate=!1,r.light.directionalLight.shadow.camera.right=t}),M.onFinishChange(function(){r.controls.enableRotate=!0,r.light.directionalLight.shadow.map.dispose(),r.light.directionalLight.shadow.map=null,r.light.directionalLightHelper.update()});var E=x.add(o.default.shadow,"bottom",-400,400).name("Bottom");E.onChange(function(t){r.controls.enableRotate=!1,r.light.directionalLight.shadow.camera.bottom=t}),E.onFinishChange(function(){r.controls.enableRotate=!0,r.light.directionalLight.shadow.map.dispose(),r.light.directionalLight.shadow.map=null,r.light.directionalLightHelper.update()});var T=x.add(o.default.shadow,"left",-400,400).name("Left");T.onChange(function(t){r.controls.enableRotate=!1,r.light.directionalLight.shadow.camera.left=t}),T.onFinishChange(function(){r.controls.enableRotate=!0,r.light.directionalLight.shadow.map.dispose(),r.light.directionalLight.shadow.map=null,r.light.directionalLightHelper.update()});var S=x.add(o.default.shadow,"bias",-1e-5,1).name("Bias");S.onChange(function(t){r.controls.enableRotate=!1,r.light.directionalLight.shadow.bias=t}),S.onFinishChange(function(){r.controls.enableRotate=!0,r.light.directionalLight.shadow.map.dispose(),r.light.directionalLight.shadow.map=null,r.light.directionalLightHelper.update()});var A=i.addFolder("Point Light");A.add(o.default.pointLight,"enabled").name("Enabled").onChange(function(t){r.light.pointLight.visible=t}),A.addColor(o.default.pointLight,"color").name("Color").onChange(function(t){r.light.pointLight.color.setHex(t)});var L=A.add(o.default.pointLight,"intensity",0,2).name("Intensity");L.onChange(function(t){r.controls.enableRotate=!1,r.light.pointLight.intensity=t}),L.onFinishChange(function(){r.controls.enableRotate=!0});var R=A.add(o.default.pointLight,"distance",0,1e3).name("Distance");R.onChange(function(t){r.controls.enableRotate=!1,r.light.pointLight.distance=t}),R.onFinishChange(function(){r.controls.enableRotate=!0});var C=A.add(o.default.pointLight,"x",-1e3,1e3).name("Position X");C.onChange(function(t){r.controls.enableRotate=!1,r.light.pointLight.position.x=t}),C.onFinishChange(function(){r.controls.enableRotate=!0});var P=A.add(o.default.pointLight,"y",-1e3,1e3).name("Position Y");P.onChange(function(t){r.controls.enableRotate=!1,r.light.pointLight.position.y=t}),P.onFinishChange(function(){r.controls.enableRotate=!0});var O=A.add(o.default.pointLight,"z",-1e3,1e3).name("Position Z");O.onChange(function(t){r.controls.enableRotate=!1,r.light.pointLight.position.z=t}),O.onFinishChange(function(){r.controls.enableRotate=!0});var I=i.addFolder("Hemi Light");I.add(o.default.hemiLight,"enabled").name("Enabled").onChange(function(t){r.light.hemiLight.visible=t}),I.addColor(o.default.hemiLight,"color").name("Color").onChange(function(t){r.light.hemiLight.color.setHex(t)}),I.addColor(o.default.hemiLight,"groundColor").name("ground Color").onChange(function(t){r.light.hemiLight.groundColor.setHex(t)});var N=I.add(o.default.hemiLight,"intensity",0,2).name("Intensity");N.onChange(function(t){r.controls.enableRotate=!1,r.light.hemiLight.intensity=t}),N.onFinishChange(function(){r.controls.enableRotate=!0});var D=I.add(o.default.hemiLight,"x",-1e3,1e3).name("Position X");D.onChange(function(t){r.controls.enableRotate=!1,r.light.hemiLight.position.x=t}),D.onFinishChange(function(){r.controls.enableRotate=!0});var U=I.add(o.default.hemiLight,"y",-500,1e3).name("Position Y");U.onChange(function(t){r.controls.enableRotate=!1,r.light.hemiLight.position.y=t}),U.onFinishChange(function(){r.controls.enableRotate=!0});var B=I.add(o.default.hemiLight,"z",-1e3,1e3).name("Position Z");B.onChange(function(t){r.controls.enableRotate=!1,r.light.hemiLight.position.z=t}),B.onFinishChange(function(){r.controls.enableRotate=!0})}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(t,e){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:1,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1;e.geo=new i.PlaneGeometry(t,n,r,o)}:"sphere"===t?function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:32,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:32;e.geo=new i.SphereGeometry(t,n,r)}:void 0}},{key:"place",value:function(t,e){var n,r,s=new o.default(15658734).standard,u=new i.Mesh(this.geo,s);(n=u.position).set.apply(n,c(t)),(r=u.rotation).set.apply(r,c(e)),a.default.shadow.enabled&&(u.receiveShadow=!0),this.scene.add(u)}}]),t}();e.default=u},function(t,e,n){"use strict";t.exports=function(t){var e=t.MOUSE;function n(e,n){var r=new function(e){this.object=e,this.target=new t.Vector3,this.minDistance=0,this.maxDistance=1/0,this.minZoom=0,this.maxZoom=1/0,this.minPolarAngle=0,this.maxPolarAngle=Math.PI,this.minAzimuthAngle=-1/0,this.maxAzimuthAngle=1/0,this.enableDamping=!1,this.dampingFactor=.25;var n,r,i,o,a,s,c,u,h=this,l=0,d=0,p=1,f=new t.Vector3,m=!1;this.getPolarAngle=function(){return r},this.getAzimuthalAngle=function(){return n},this.rotateLeft=function(t){d-=t},this.rotateUp=function(t){l-=t},this.panLeft=(i=new t.Vector3,function(t){var e=this.object.matrix.elements;i.set(e[0],e[1],e[2]),i.multiplyScalar(-t),f.add(i)}),this.panUp=function(){var e=new t.Vector3;return function(t){var n=this.object.matrix.elements;e.set(n[4],n[5],n[6]),e.multiplyScalar(t),f.add(e)}}(),this.pan=function(e,n,r,i){if(h.object instanceof t.PerspectiveCamera){var o=h.object.position.clone().sub(h.target).length();o*=Math.tan(h.object.fov/2*Math.PI/180),h.panLeft(2*e*o/i),h.panUp(2*n*o/i)}else h.object instanceof t.OrthographicCamera?(h.panLeft(e*(h.object.right-h.object.left)/r),h.panUp(n*(h.object.top-h.object.bottom)/i)):console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.")},this.dollyIn=function(e){h.object instanceof t.PerspectiveCamera?p/=e:h.object instanceof t.OrthographicCamera?(h.object.zoom=Math.max(this.minZoom,Math.min(this.maxZoom,this.object.zoom*e)),h.object.updateProjectionMatrix(),m=!0):console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.")},this.dollyOut=function(e){h.object instanceof t.PerspectiveCamera?p*=e:h.object instanceof t.OrthographicCamera?(h.object.zoom=Math.max(this.minZoom,Math.min(this.maxZoom,this.object.zoom/e)),h.object.updateProjectionMatrix(),m=!0):console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.")},this.update=(o=new t.Vector3,a=(new t.Quaternion).setFromUnitVectors(e.up,new t.Vector3(0,1,0)),s=a.clone().inverse(),c=new t.Vector3,u=new t.Quaternion,function(){var t=this.object.position;o.copy(t).sub(this.target),o.applyQuaternion(a),n=Math.atan2(o.x,o.z),r=Math.atan2(Math.sqrt(o.x*o.x+o.z*o.z),o.y),n+=d,r+=l,n=Math.max(this.minAzimuthAngle,Math.min(this.maxAzimuthAngle,n)),r=Math.max(this.minPolarAngle,Math.min(this.maxPolarAngle,r)),r=Math.max(1e-6,Math.min(Math.PI-1e-6,r));var e=o.length()*p;return e=Math.max(this.minDistance,Math.min(this.maxDistance,e)),this.target.add(f),o.x=e*Math.sin(r)*Math.sin(n),o.y=e*Math.cos(r),o.z=e*Math.sin(r)*Math.cos(n),o.applyQuaternion(s),t.copy(this.target).add(o),this.object.lookAt(this.target),!0===this.enableDamping?(d*=1-this.dampingFactor,l*=1-this.dampingFactor):(d=0,l=0),p=1,f.set(0,0,0),!!(m||c.distanceToSquared(this.object.position)>1e-6||8*(1-u.dot(this.object.quaternion))>1e-6)&&(c.copy(this.object.position),u.copy(this.object.quaternion),m=!1,!0)})}(e);this.domElement=void 0!==n?n:document,Object.defineProperty(this,"constraint",{get:function(){return r}}),this.getPolarAngle=function(){return r.getPolarAngle()},this.getAzimuthalAngle=function(){return r.getAzimuthalAngle()},this.enabled=!0,this.center=this.target,this.enableZoom=!0,this.zoomSpeed=1,this.enableRotate=!0,this.rotateSpeed=1,this.enablePan=!0,this.keyPanSpeed=7,this.autoRotate=!1,this.autoRotateSpeed=2,this.enableKeys=!0,this.keys={LEFT:37,UP:38,RIGHT:39,BOTTOM:40},this.mouseButtons={ORBIT:t.MOUSE.LEFT,ZOOM:t.MOUSE.MIDDLE,PAN:t.MOUSE.RIGHT};var i=this,o=new t.Vector2,a=new t.Vector2,s=new t.Vector2,c=new t.Vector2,u=new t.Vector2,h=new t.Vector2,l=new t.Vector2,d=new t.Vector2,p=new t.Vector2,f={NONE:-1,ROTATE:0,DOLLY:1,PAN:2,TOUCH_ROTATE:3,TOUCH_DOLLY:4,TOUCH_PAN:5},m=f.NONE;this.target0=this.target.clone(),this.position0=this.object.position.clone(),this.zoom0=this.object.zoom;var g={type:"change"},v={type:"start"},y={type:"end"};function x(t,e){var n=i.domElement===document?i.domElement.body:i.domElement;r.pan(t,e,n.clientWidth,n.clientHeight)}function b(){return Math.pow(.95,i.zoomSpeed)}function w(t){if(!1!==i.enabled){if(t.preventDefault(),t.button===i.mouseButtons.ORBIT){if(!1===i.enableRotate)return;m=f.ROTATE,o.set(t.clientX,t.clientY)}else if(t.button===i.mouseButtons.ZOOM){if(!1===i.enableZoom)return;m=f.DOLLY,l.set(t.clientX,t.clientY)}else if(t.button===i.mouseButtons.PAN){if(!1===i.enablePan)return;m=f.PAN,c.set(t.clientX,t.clientY)}m!==f.NONE&&(document.addEventListener("mousemove",_,!1),document.addEventListener("mouseup",M,!1),i.dispatchEvent(v))}}function _(t){if(!1!==i.enabled){t.preventDefault();var e=i.domElement===document?i.domElement.body:i.domElement;if(m===f.ROTATE){if(!1===i.enableRotate)return;a.set(t.clientX,t.clientY),s.subVectors(a,o),r.rotateLeft(2*Math.PI*s.x/e.clientWidth*i.rotateSpeed),r.rotateUp(2*Math.PI*s.y/e.clientHeight*i.rotateSpeed),o.copy(a)}else if(m===f.DOLLY){if(!1===i.enableZoom)return;d.set(t.clientX,t.clientY),p.subVectors(d,l),p.y>0?r.dollyIn(b()):p.y<0&&r.dollyOut(b()),l.copy(d)}else if(m===f.PAN){if(!1===i.enablePan)return;u.set(t.clientX,t.clientY),h.subVectors(u,c),x(h.x,h.y),c.copy(u)}m!==f.NONE&&i.update()}}function M(){!1!==i.enabled&&(document.removeEventListener("mousemove",_,!1),document.removeEventListener("mouseup",M,!1),i.dispatchEvent(y),m=f.NONE)}function E(t){if(!1!==i.enabled&&!1!==i.enableZoom&&m===f.NONE){t.preventDefault(),t.stopPropagation();var e=0;void 0!==t.wheelDelta?e=t.wheelDelta:void 0!==t.detail&&(e=-t.detail),e>0?r.dollyOut(b()):e<0&&r.dollyIn(b()),i.update(),i.dispatchEvent(v),i.dispatchEvent(y)}}function T(t){if(!1!==i.enabled&&!1!==i.enableKeys&&!1!==i.enablePan)switch(t.keyCode){case i.keys.UP:x(0,i.keyPanSpeed),i.update();break;case i.keys.BOTTOM:x(0,-i.keyPanSpeed),i.update();break;case i.keys.LEFT:x(i.keyPanSpeed,0),i.update();break;case i.keys.RIGHT:x(-i.keyPanSpeed,0),i.update()}}function S(t){if(!1!==i.enabled){switch(t.touches.length){case 1:if(!1===i.enableRotate)return;m=f.TOUCH_ROTATE,o.set(t.touches[0].pageX,t.touches[0].pageY);break;case 2:if(!1===i.enableZoom)return;m=f.TOUCH_DOLLY;var e=t.touches[0].pageX-t.touches[1].pageX,n=t.touches[0].pageY-t.touches[1].pageY,r=Math.sqrt(e*e+n*n);l.set(0,r);break;case 3:if(!1===i.enablePan)return;m=f.TOUCH_PAN,c.set(t.touches[0].pageX,t.touches[0].pageY);break;default:m=f.NONE}m!==f.NONE&&i.dispatchEvent(v)}}function A(t){if(!1!==i.enabled){t.preventDefault(),t.stopPropagation();var e=i.domElement===document?i.domElement.body:i.domElement;switch(t.touches.length){case 1:if(!1===i.enableRotate)return;if(m!==f.TOUCH_ROTATE)return;a.set(t.touches[0].pageX,t.touches[0].pageY),s.subVectors(a,o),r.rotateLeft(2*Math.PI*s.x/e.clientWidth*i.rotateSpeed),r.rotateUp(2*Math.PI*s.y/e.clientHeight*i.rotateSpeed),o.copy(a),i.update();break;case 2:if(!1===i.enableZoom)return;if(m!==f.TOUCH_DOLLY)return;var n=t.touches[0].pageX-t.touches[1].pageX,g=t.touches[0].pageY-t.touches[1].pageY,v=Math.sqrt(n*n+g*g);d.set(0,v),p.subVectors(d,l),p.y>0?r.dollyOut(b()):p.y<0&&r.dollyIn(b()),l.copy(d),i.update();break;case 3:if(!1===i.enablePan)return;if(m!==f.TOUCH_PAN)return;u.set(t.touches[0].pageX,t.touches[0].pageY),h.subVectors(u,c),x(h.x,h.y),c.copy(u),i.update();break;default:m=f.NONE}}}function L(){!1!==i.enabled&&(i.dispatchEvent(y),m=f.NONE)}function R(t){t.preventDefault()}this.update=function(){this.autoRotate&&m===f.NONE&&r.rotateLeft(2*Math.PI/60/60*i.autoRotateSpeed),!0===r.update()&&this.dispatchEvent(g)},this.reset=function(){m=f.NONE,this.target.copy(this.target0),this.object.position.copy(this.position0),this.object.zoom=this.zoom0,this.object.updateProjectionMatrix(),this.dispatchEvent(g),this.update()},this.dispose=function(){this.domElement.removeEventListener("contextmenu",R,!1),this.domElement.removeEventListener("mousedown",w,!1),this.domElement.removeEventListener("mousewheel",E,!1),this.domElement.removeEventListener("MozMousePixelScroll",E,!1),this.domElement.removeEventListener("touchstart",S,!1),this.domElement.removeEventListener("touchend",L,!1),this.domElement.removeEventListener("touchmove",A,!1),document.removeEventListener("mousemove",_,!1),document.removeEventListener("mouseup",M,!1),window.removeEventListener("keydown",T,!1)},this.domElement.addEventListener("contextmenu",R,!1),this.domElement.addEventListener("mousedown",w,!1),this.domElement.addEventListener("mousewheel",E,!1),this.domElement.addEventListener("MozMousePixelScroll",E,!1),this.domElement.addEventListener("touchstart",S,!1),this.domElement.addEventListener("touchend",L,!1),this.domElement.addEventListener("touchmove",A,!1),window.addEventListener("keydown",T,!1),this.update()}return e||(e={LEFT:0,MIDDLE:1,RIGHT:2}),n.prototype=Object.create(t.EventDispatcher.prototype),n.prototype.constructor=n,Object.defineProperties(n.prototype,{object:{get:function(){return this.constraint.object}},target:{get:function(){return this.constraint.target},set:function(t){console.warn("THREE.OrbitControls: target is now immutable. Use target.set() instead."),this.constraint.target.copy(t)}},minDistance:{get:function(){return this.constraint.minDistance},set:function(t){this.constraint.minDistance=t}},maxDistance:{get:function(){return this.constraint.maxDistance},set:function(t){this.constraint.maxDistance=t}},minZoom:{get:function(){return this.constraint.minZoom},set:function(t){this.constraint.minZoom=t}},maxZoom:{get:function(){return this.constraint.maxZoom},set:function(t){this.constraint.maxZoom=t}},minPolarAngle:{get:function(){return this.constraint.minPolarAngle},set:function(t){this.constraint.minPolarAngle=t}},maxPolarAngle:{get:function(){return this.constraint.maxPolarAngle},set:function(t){this.constraint.maxPolarAngle=t}},minAzimuthAngle:{get:function(){return this.constraint.minAzimuthAngle},set:function(t){this.constraint.minAzimuthAngle=t}},maxAzimuthAngle:{get:function(){return this.constraint.maxAzimuthAngle},set:function(t){this.constraint.maxAzimuthAngle=t}},enableDamping:{get:function(){return this.constraint.enableDamping},set:function(t){this.constraint.enableDamping=t}},dampingFactor:{get:function(){return this.constraint.dampingFactor},set:function(t){this.constraint.dampingFactor=t}},noZoom:{get:function(){return console.warn("THREE.OrbitControls: .noZoom has been deprecated. Use .enableZoom instead."),!this.enableZoom},set:function(t){console.warn("THREE.OrbitControls: .noZoom has been deprecated. Use .enableZoom instead."),this.enableZoom=!t}},noRotate:{get:function(){return console.warn("THREE.OrbitControls: .noRotate has been deprecated. Use .enableRotate instead."),!this.enableRotate},set:function(t){console.warn("THREE.OrbitControls: .noRotate has been deprecated. Use .enableRotate instead."),this.enableRotate=!t}},noPan:{get:function(){return console.warn("THREE.OrbitControls: .noPan has been deprecated. Use .enablePan instead."),!this.enablePan},set:function(t){console.warn("THREE.OrbitControls: .noPan has been deprecated. Use .enablePan instead."),this.enablePan=!t}},noKeys:{get:function(){return console.warn("THREE.OrbitControls: .noKeys has been deprecated. Use .enableKeys instead."),!this.enableKeys},set:function(t){console.warn("THREE.OrbitControls: .noKeys has been deprecated. Use .enableKeys instead."),this.enableKeys=!t}},staticMoving:{get:function(){return console.warn("THREE.OrbitControls: .staticMoving has been deprecated. Use .enableDamping instead."),!this.constraint.enableDamping},set:function(t){console.warn("THREE.OrbitControls: .staticMoving has been deprecated. Use .enableDamping instead."),this.constraint.enableDamping=!t}},dynamicDampingFactor:{get:function(){return console.warn("THREE.OrbitControls: .dynamicDampingFactor has been renamed. Use .dampingFactor instead."),this.constraint.dampingFactor},set:function(t){console.warn("THREE.OrbitControls: .dynamicDampingFactor has been renamed. Use .dampingFactor instead."),this.constraint.dampingFactor=t}}}),n}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(t,e){for(var n=0;nWebGL.
','Find out how to get it here.'].join("\n"):['Your browser does not seem to support WebGL.
','Find out how to get it here.'].join("\n")),t},addGetWebGLMessage:function(t){var e,n,r;e=void 0!==(t=t||{}).parent?t.parent:document.body,n=void 0!==t.id?t.id:"oldie",(r=this.getWebGLErrorMessage()).id=n,e.appendChild(r)}}},function(t,e,n){"use strict";var r=a(n(0)),i=a(n(22)),o=a(n(21));function a(t){return t&&t.__esModule?t:{default:t}}console.log("----- RUNNING IN DEV ENVIRONMENT! -----"),r.default.isDev=!0,function(){if(i.default.webgl){var t=document.getElementById("appContainer");new o.default(t)}else i.default.addGetWebGLMessage()}()},function(t,e,n){t.exports=n(23)}]); \ No newline at end of file diff --git a/build/public/assets/js/app.js.map b/build/public/assets/js/app.js.map deleted file mode 100644 index ad360c2..0000000 --- a/build/public/assets/js/app.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/js/data/config.js","webpack:///./node_modules/three/build/three.module.js","webpack:///./src/js/utils/helpers.js","webpack:///./src/js/app/helpers/material.js","webpack:///./node_modules/process/browser.js","webpack:///./node_modules/tween.js/src/Tween.js","webpack:///./src/js/app/managers/datGUI.js","webpack:///./src/js/utils/keyboard.js","webpack:///./src/js/app/managers/interaction.js","webpack:///./src/js/app/helpers/meshHelper.js","webpack:///./src/js/app/model/model.js","webpack:///(webpack)/buildin/global.js","webpack:///./node_modules/es6-promise/dist/es6-promise.js","webpack:///./src/js/app/model/texture.js","webpack:///./src/js/app/helpers/stats.js","webpack:///./src/js/app/helpers/geometry.js","webpack:///./src/js/utils/orbitControls.js","webpack:///./src/js/app/components/controls.js","webpack:///./src/js/app/components/light.js","webpack:///./src/js/app/components/camera.js","webpack:///./src/js/app/components/renderer.js","webpack:///./src/js/app/main.js","webpack:///./src/js/utils/detector.js","webpack:///./src/js/app.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","r","value","n","__esModule","object","property","prototype","hasOwnProperty","p","s","_tween","isDev","isShowingStats","isLoaded","isTweening","isRotating","isMouseMoving","isMouseOver","maxAnisotropy","dpr","easing","TWEEN","Easing","Quadratic","InOut","duration","model","path","scale","texture","imageFiles","image","mesh","enableHelper","wireframe","translucent","material","color","emissive","fog","near","camera","fov","far","aspect","posX","posY","posZ","controls","autoRotate","autoRotateSpeed","rotateSpeed","zoomSpeed","minDistance","maxDistance","minPolarAngle","Math","PI","maxPolarAngle","minAzimuthAngle","Infinity","maxAzimuthAngle","enableDamping","dampingFactor","enableZoom","target","x","y","z","ambientLight","enabled","directionalLight","intensity","shadow","helperEnabled","bias","mapWidth","mapHeight","top","right","bottom","left","pointLight","distance","hemiLight","groundColor","EventDispatcher","__webpack_exports__","LensFlare","undefined","Number","EPSILON","pow","isInteger","isFinite","floor","sign","Function","this","toString","match","assign","TypeError","output","index","arguments","length","source","nextKey","addEventListener","type","listener","_listeners","listeners","indexOf","push","hasEventListener","removeEventListener","listenerArray","splice","dispatchEvent","event","array","slice","min","max","vector","matrix","v1","quaternion","REVISION","MOUSE","LEFT","MIDDLE","RIGHT","CullFaceNone","CullFaceBack","CullFaceFront","CullFaceFrontBack","FrontFaceDirectionCW","FrontFaceDirectionCCW","BasicShadowMap","PCFShadowMap","PCFSoftShadowMap","FrontSide","BackSide","DoubleSide","FlatShading","SmoothShading","NoColors","FaceColors","VertexColors","NoBlending","NormalBlending","AdditiveBlending","SubtractiveBlending","MultiplyBlending","CustomBlending","AddEquation","SubtractEquation","ReverseSubtractEquation","MinEquation","MaxEquation","ZeroFactor","OneFactor","SrcColorFactor","OneMinusSrcColorFactor","SrcAlphaFactor","OneMinusSrcAlphaFactor","DstAlphaFactor","OneMinusDstAlphaFactor","DstColorFactor","OneMinusDstColorFactor","SrcAlphaSaturateFactor","NeverDepth","AlwaysDepth","LessDepth","LessEqualDepth","EqualDepth","GreaterEqualDepth","GreaterDepth","NotEqualDepth","MultiplyOperation","MixOperation","AddOperation","NoToneMapping","LinearToneMapping","ReinhardToneMapping","Uncharted2ToneMapping","CineonToneMapping","UVMapping","CubeReflectionMapping","CubeRefractionMapping","EquirectangularReflectionMapping","EquirectangularRefractionMapping","SphericalReflectionMapping","CubeUVReflectionMapping","CubeUVRefractionMapping","RepeatWrapping","ClampToEdgeWrapping","MirroredRepeatWrapping","NearestFilter","NearestMipMapNearestFilter","NearestMipMapLinearFilter","LinearFilter","LinearMipMapNearestFilter","LinearMipMapLinearFilter","UnsignedByteType","ByteType","ShortType","UnsignedShortType","IntType","UnsignedIntType","FloatType","HalfFloatType","UnsignedShort4444Type","UnsignedShort5551Type","UnsignedShort565Type","UnsignedInt248Type","AlphaFormat","RGBFormat","RGBAFormat","LuminanceFormat","LuminanceAlphaFormat","RGBEFormat","DepthFormat","DepthStencilFormat","RGB_S3TC_DXT1_Format","RGBA_S3TC_DXT1_Format","RGBA_S3TC_DXT3_Format","RGBA_S3TC_DXT5_Format","RGB_PVRTC_4BPPV1_Format","RGB_PVRTC_2BPPV1_Format","RGBA_PVRTC_4BPPV1_Format","RGBA_PVRTC_2BPPV1_Format","RGB_ETC1_Format","RGBA_ASTC_4x4_Format","RGBA_ASTC_5x4_Format","RGBA_ASTC_5x5_Format","RGBA_ASTC_6x5_Format","RGBA_ASTC_6x6_Format","RGBA_ASTC_8x5_Format","RGBA_ASTC_8x6_Format","RGBA_ASTC_8x8_Format","RGBA_ASTC_10x5_Format","RGBA_ASTC_10x6_Format","RGBA_ASTC_10x8_Format","RGBA_ASTC_10x10_Format","RGBA_ASTC_12x10_Format","RGBA_ASTC_12x12_Format","LoopOnce","LoopRepeat","LoopPingPong","InterpolateDiscrete","InterpolateLinear","InterpolateSmooth","ZeroCurvatureEnding","ZeroSlopeEnding","WrapAroundEnding","TrianglesDrawMode","TriangleStripDrawMode","TriangleFanDrawMode","LinearEncoding","sRGBEncoding","GammaEncoding","RGBEEncoding","LogLuvEncoding","RGBM7Encoding","RGBM16Encoding","RGBDEncoding","BasicDepthPacking","RGBADepthPacking","_Math","DEG2RAD","RAD2DEG","generateUUID","lut","d0","random","d1","d2","d3","toUpperCase","clamp","euclideanModulo","mapLinear","a1","a2","b1","b2","lerp","t","smoothstep","smootherstep","randInt","low","high","randFloat","randFloatSpread","range","degToRad","degrees","radToDeg","radians","isPowerOfTwo","ceilPowerOfTwo","ceil","log","LN2","floorPowerOfTwo","Vector2","Matrix4","elements","console","error","Quaternion","w","_x","_y","_z","_w","Vector3","Matrix3","defineProperties","width","set","height","isVector2","setScalar","scalar","setX","setY","setComponent","Error","getComponent","clone","constructor","copy","v","add","warn","addVectors","addScalar","a","b","addScaledVector","sub","subVectors","subScalar","multiply","multiplyScalar","divide","divideScalar","applyMatrix3","e","clampScalar","minVal","maxVal","clampLength","round","roundToZero","negate","dot","lengthSq","sqrt","manhattanLength","abs","normalize","angle","atan2","distanceTo","distanceToSquared","dx","dy","manhattanDistanceTo","setLength","alpha","lerpVectors","v2","equals","fromArray","offset","toArray","fromBufferAttribute","attribute","getX","getY","rotateAround","center","cos","sin","isMatrix4","n11","n12","n13","n14","n21","n22","n23","n24","n31","n32","n33","n34","n41","n42","n43","n44","te","identity","me","copyPosition","extractBasis","xAxis","yAxis","zAxis","setFromMatrixColumn","makeBasis","extractRotation","scaleX","scaleY","scaleZ","makeRotationFromEuler","euler","isEuler","f","order","ae","af","be","bf","ce","cf","de","df","ac","ad","bc","bd","makeRotationFromQuaternion","q","x2","y2","z2","xx","xy","xz","yy","yz","zz","wx","wy","wz","lookAt","eye","up","crossVectors","multiplyMatrices","premultiply","a11","a12","a13","a14","a21","a22","a23","a24","a31","a32","a33","a34","a41","a42","a43","a44","b11","b12","b13","b14","b21","b22","b23","b24","b31","b32","b33","b34","b41","b42","b43","b44","applyToBufferAttribute","count","getZ","applyMatrix4","setXYZ","determinant","transpose","tmp","setPosition","getInverse","throwOnDegenerate","t11","t12","t13","t14","det","msg","detInv","getMaxScaleOnAxis","scaleXSq","scaleYSq","scaleZSq","makeTranslation","makeRotationX","theta","makeRotationY","makeRotationZ","makeRotationAxis","axis","tx","ty","makeScale","makeShear","compose","position","decompose","sx","sy","sz","invSX","invSY","invSZ","setFromRotationMatrix","makePerspective","makeOrthographic","h","slerp","qa","qb","qm","slerpFlat","dst","dstOffset","src0","srcOffset0","src1","srcOffset1","x0","y0","z0","w0","x1","y1","z1","w1","dir","sqrSin","len","tDir","onChangeCallback","setFromEuler","update","c1","c2","c3","s1","s2","s3","setFromAxisAngle","halfAngle","m11","m12","m13","m21","m22","m23","m31","m32","m33","trace","setFromUnitVectors","vFrom","vTo","inverse","conjugate","multiplyQuaternions","qax","qay","qaz","qaw","qbx","qby","qbz","qbw","cosHalfTheta","sinHalfTheta","halfTheta","ratioA","ratioB","onChange","callback","isVector3","setZ","multiplyVectors","applyEuler","applyQuaternion","applyAxisAngle","qx","qy","qz","qw","ix","iy","iz","iw","project","projectionMatrix","matrixWorld","unproject","transformDirection","cross","ax","ay","az","bx","by","bz","projectOnVector","projectOnPlane","planeNormal","reflect","normal","angleTo","acos","dz","setFromSpherical","sinPhiRadius","phi","radius","setFromCylindrical","setFromMatrixPosition","setFromMatrixScale","isMatrix3","setFromMatrix4","g","getNormalMatrix","matrix4","transposeIntoArray","setUvTransform","rotation","cx","cy","rotate","translate","points","closestPoint","box","p1","p2","sphere","textureId","Texture","mapping","wrapS","wrapT","magFilter","minFilter","format","anisotropy","encoding","uuid","DEFAULT_IMAGE","mipmaps","DEFAULT_MAPPING","repeat","matrixAutoUpdate","generateMipmaps","premultiplyAlpha","flipY","unpackAlignment","version","onUpdate","Vector4","WebGLRenderTarget","options","scissor","scissorTest","viewport","depthBuffer","stencilBuffer","depthTexture","WebGLRenderTargetCube","activeCubeFace","activeMipMapLevel","DataTexture","data","Box3","Sphere","Plane","constant","Frustum","p0","p3","p4","p5","planes","create","isTexture","updateMatrix","toJSON","meta","isRootObject","textures","metadata","generator","wrap","images","url","canvas","HTMLCanvasElement","document","createElementNS","context","getContext","ImageData","putImageData","drawImage","toDataURL","getDataURL","dispose","transformUv","uv","isVector4","setW","setAxisAngleFromQuaternion","setAxisAngleFromRotationMatrix","getW","isWebGLRenderTarget","setSize","isWebGLRenderTargetCube","isDataTexture","isBox3","setFromArray","minX","minY","minZ","maxX","maxY","maxZ","setFromBufferAttribute","setFromPoints","makeEmpty","il","expandByPoint","setFromCenterAndSize","size","halfSize","setFromObject","expandByObject","isEmpty","getCenter","getSize","point","expandByVector","expandByScalar","scope","traverse","node","geometry","isGeometry","vertices","isBufferGeometry","attributes","updateMatrixWorld","containsPoint","containsBox","getParameter","intersectsBox","intersectsSphere","clampPoint","intersectsPlane","plane","intersectsTriangle","v0","f0","f1","f2","testAxis","extents","triangleNormal","satForAxes","axes","j","triangle","distanceToPoint","getBoundingSphere","intersect","union","optionalCenter","maxRadiusSq","empty","radiusSum","deltaLengthSq","getBoundingBox","setComponents","setFromNormalAndCoplanarPoint","setFromCoplanarPoints","inverseNormalLength","distanceToSphere","projectPoint","intersectLine","line","direction","delta","denominator","start","intersectsLine","startSign","endSign","end","coplanarPoint","m1","optionalNormalMatrix","normalMatrix","referencePoint","frustum","setFromMatrix","me0","me1","me2","me3","me4","me5","me6","me7","me8","me9","me10","me11","me12","me13","me14","me15","intersectsObject","boundingSphere","computeBoundingSphere","intersectsSprite","sprite","negRadius","hsl","ShaderChunk","alphamap_fragment","alphamap_pars_fragment","alphatest_fragment","aomap_fragment","aomap_pars_fragment","begin_vertex","beginnormal_vertex","bsdfs","bumpmap_pars_fragment","clipping_planes_fragment","clipping_planes_pars_fragment","clipping_planes_pars_vertex","clipping_planes_vertex","color_fragment","color_pars_fragment","color_pars_vertex","color_vertex","common","cube_uv_reflection_fragment","defaultnormal_vertex","displacementmap_pars_vertex","displacementmap_vertex","emissivemap_fragment","emissivemap_pars_fragment","encodings_fragment","encodings_pars_fragment","envmap_fragment","envmap_pars_fragment","envmap_pars_vertex","envmap_vertex","fog_vertex","fog_pars_vertex","fog_fragment","fog_pars_fragment","gradientmap_pars_fragment","lightmap_fragment","lightmap_pars_fragment","lights_lambert_vertex","lights_pars_begin","lights_pars_maps","lights_phong_fragment","lights_phong_pars_fragment","lights_physical_fragment","lights_physical_pars_fragment","lights_fragment_begin","lights_fragment_maps","lights_fragment_end","logdepthbuf_fragment","logdepthbuf_pars_fragment","logdepthbuf_pars_vertex","logdepthbuf_vertex","map_fragment","map_pars_fragment","map_particle_fragment","map_particle_pars_fragment","metalnessmap_fragment","metalnessmap_pars_fragment","morphnormal_vertex","morphtarget_pars_vertex","morphtarget_vertex","normal_fragment_begin","normal_fragment_maps","normalmap_pars_fragment","packing","premultiplied_alpha_fragment","project_vertex","dithering_fragment","dithering_pars_fragment","roughnessmap_fragment","roughnessmap_pars_fragment","shadowmap_pars_fragment","shadowmap_pars_vertex","shadowmap_vertex","shadowmask_pars_fragment","skinbase_vertex","skinning_pars_vertex","skinning_vertex","skinnormal_vertex","specularmap_fragment","specularmap_pars_fragment","tonemapping_fragment","tonemapping_pars_fragment","uv_pars_fragment","uv_pars_vertex","uv_vertex","uv2_pars_fragment","uv2_pars_vertex","uv2_vertex","worldpos_vertex","cube_frag","cube_vert","depth_frag","depth_vert","distanceRGBA_frag","distanceRGBA_vert","equirect_frag","equirect_vert","linedashed_frag","linedashed_vert","meshbasic_frag","meshbasic_vert","meshlambert_frag","meshlambert_vert","meshphong_frag","meshphong_vert","meshphysical_frag","meshphysical_vert","normal_frag","normal_vert","points_frag","points_vert","shadow_frag","shadow_vert","UniformsUtils","merge","uniforms","merged","u","uniforms_src","uniforms_dst","parameter_src","isColor","Array","isArray","ColorKeywords","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","Color","setRGB","setHex","setStyle","hex","setHSL","hue2rgb","style","handleAlpha","string","parseFloat","exec","components","parseInt","charAt","copyGammaToLinear","gammaFactor","copyLinearToGamma","safeInverse","convertGammaToLinear","convertLinearToGamma","getHex","getHexString","getHSL","hue","saturation","lightness","getStyle","offsetHSL","addColors","color1","color2","UniformsLib","diffuse","opacity","map","uvTransform","alphaMap","specularmap","specularMap","envmap","envMap","flipEnvMap","reflectivity","refractionRatio","maxMipLevel","aomap","aoMap","aoMapIntensity","lightmap","lightMap","lightMapIntensity","emissivemap","emissiveMap","bumpmap","bumpMap","bumpScale","normalmap","normalMap","normalScale","displacementmap","displacementMap","displacementScale","displacementBias","roughnessmap","roughnessMap","metalnessmap","metalnessMap","gradientmap","gradientMap","fogDensity","fogNear","fogFar","fogColor","lights","ambientLightColor","directionalLights","properties","shadowBias","shadowRadius","shadowMapSize","directionalShadowMap","directionalShadowMatrix","spotLights","coneCos","penumbraCos","decay","spotShadowMap","spotShadowMatrix","pointLights","shadowCameraNear","shadowCameraFar","pointShadowMap","pointShadowMatrix","hemisphereLights","skyColor","rectAreaLights","ShaderLib","basic","vertexShader","fragmentShader","lambert","phong","specular","shininess","standard","roughness","metalness","envMapIntensity","dashed","dashSize","totalSize","depth","cube","tCube","tFlip","equirect","tEquirect","distanceRGBA","referencePosition","nearDistance","farDistance","WebGLAttributes","gl","buffers","WeakMap","isInterleavedBufferAttribute","remove","deleteBuffer","buffer","delete","bufferType","usage","dynamic","DYNAMIC_DRAW","STATIC_DRAW","createBuffer","bindBuffer","bufferData","onUploadCallback","FLOAT","Float32Array","Float64Array","Uint16Array","UNSIGNED_SHORT","Int16Array","SHORT","Uint32Array","UNSIGNED_INT","Int32Array","INT","Int8Array","BYTE","Uint8Array","UNSIGNED_BYTE","bytesPerElement","BYTES_PER_ELEMENT","updateRange","bufferSubData","subarray","updateBuffer","Euler","_order","DefaultOrder","Layers","mask","physical","clearCoat","clearCoatRoughness","RotationOrders","asin","setFromQuaternion","setFromVector3","reorder","newOrder","toVector3","optionalResult","channel","enable","toggle","disable","test","layers","q1","object3DId","Object3D","parent","children","DefaultUp","modelViewMatrix","DefaultMatrixAutoUpdate","matrixWorldNeedsUpdate","visible","castShadow","receiveShadow","frustumCulled","renderOrder","userData","Camera","matrixWorldInverse","OrthographicCamera","zoom","view","updateProjectionMatrix","Face3","materialIndex","vertexNormals","vertexColors","isObject3D","onBeforeRender","onAfterRender","applyMatrix","setRotationFromAxisAngle","setRotationFromEuler","setRotationFromMatrix","setRotationFromQuaternion","rotateOnAxis","rotateOnWorldAxis","rotateX","rotateY","rotateZ","translateOnAxis","translateX","translateY","translateZ","localToWorld","worldToLocal","isCamera","getObjectById","id","getObjectByProperty","getObjectByName","getWorldPosition","getWorldQuaternion","getWorldScale","getWorldDirection","raycast","traverseVisible","traverseAncestors","force","geometries","materials","shapes","serialize","library","element","JSON","stringify","parameters","shape","uuids","extractFromCache","cache","values","key","recursive","parse","child","isOrthographicCamera","setViewOffset","fullWidth","fullHeight","offsetX","offsetY","clearViewOffset","zoomW","zoomH","scaleW","scaleH","obj","geometryId","Geometry","colors","faces","faceVertexUvs","morphTargets","morphNormals","skinWeights","skinIndices","lineDistances","boundingBox","elementsNeedUpdate","verticesNeedUpdate","uvsNeedUpdate","normalsNeedUpdate","colorsNeedUpdate","lineDistancesNeedUpdate","groupsNeedUpdate","BufferAttribute","itemSize","normalized","Int8BufferAttribute","Uint8BufferAttribute","Uint8ClampedBufferAttribute","Uint8ClampedArray","Int16BufferAttribute","Uint16BufferAttribute","Int32BufferAttribute","Uint32BufferAttribute","Float32BufferAttribute","Float64BufferAttribute","DirectGeometry","normals","uvs","uvs2","groups","arrayMax","face","jl","computeBoundingBox","fromBufferGeometry","indices","positions","uv2","tempNormals","tempUVs","tempUVs2","addFace","group","computeFaceNormals","cb","ab","fl","vA","vB","vC","computeVertexNormals","areaWeighted","vl","computeFlatVertexNormals","computeMorphNormals","__originalFaceNormal","__originalVertexNormals","tmpGeo","faceNormals","dstNormalsFace","dstNormalsVertex","faceNormal","materialIndexOffset","vertexOffset","vertices1","vertices2","faces1","faces2","uvs1","colors1","colors2","vertexCopy","faceCopy","faceVertexNormals","faceVertexColors","uvCopy","mergeMesh","isMesh","mergeVertices","verticesMap","unique","changes","precision","faceIndicesToRemove","idx","diff","sortFacesByMaterialIndex","_id","sort","newUvs1","newUvs2","vertex","normalsHash","colorsHash","uvsHash","hasFaceVertexUv","hasFaceNormal","hasFaceVertexNormal","hasFaceColor","hasFaceVertexColor","faceType","setBit","getUvIndex","getNormalIndex","getColorIndex","hash","k","kl","uvsCopy","morphTarget","morphNormal","srcVertexNormal","destVertexNormal","isBufferAttribute","setArray","setDynamic","copyAt","index1","index2","copyArray","copyColorsArray","copyVector2sArray","vectors","copyVector3sArray","copyVector4sArray","setXY","setXYZW","onUpload","computeGroups","fromGeometry","morphTargetsPosition","hasFaceVertexUv2","morphTargetsLength","morphTargetsNormal","morphNormalsLength","hasSkinIndices","hasSkinWeights","vertexUvs","bufferGeometryId","BufferGeometry","morphAttributes","drawRange","BoxGeometry","widthSegments","heightSegments","depthSegments","BoxBufferGeometry","numberOfVertices","groupStart","buildPlane","udir","vdir","gridX","gridY","segmentWidth","segmentHeight","widthHalf","heightHalf","depthHalf","gridX1","gridY1","vertexCounter","groupCount","addGroup","setIndex","addAttribute","PlaneGeometry","PlaneBufferGeometry","width_half","height_half","segment_width","segment_height","getIndex","getAttribute","removeAttribute","clearGroups","setDrawRange","needsUpdate","isPoints","isLine","updateFromObject","direct","__directGeometry","lineDistance","fromDirectGeometry","isNaN","pA","pB","pC","normalizeNormals","attributeArray1","attribute2","attributeArray2","toNonIndexed","geometry2","array2","morphAttribute","segCenter","segDir","startP","startEnd","materialId","Material","blending","side","flatShading","transparent","blendSrc","blendDst","blendEquation","blendSrcAlpha","blendDstAlpha","blendEquationAlpha","depthFunc","depthTest","depthWrite","clippingPlanes","clipIntersection","clipShadows","shadowSide","colorWrite","polygonOffset","polygonOffsetFactor","polygonOffsetUnits","dithering","alphaTest","premultipliedAlpha","overdraw","MeshBasicMaterial","combine","wireframeLinewidth","wireframeLinecap","wireframeLinejoin","skinning","setValues","ShaderMaterial","defines","linewidth","clipping","extensions","derivatives","fragDepth","drawBuffers","shaderTextureLOD","defaultAttributeValues","index0AttributeName","uniformsNeedUpdate","Ray","origin","Line3","Triangle","Mesh","drawMode","updateMorphTargets","absNumericalSort","CubeTexture","isMaterial","onBeforeCompile","newValue","currentValue","isRoot","emissiveIntensity","sizeAttenuation","gapSize","srcPlanes","dstPlanes","isMeshBasicMaterial","isShaderMaterial","ray","at","recast","closestPointToPoint","directionDistance","distanceSqToPoint","distanceSqToSegment","optionalPointOnRay","optionalPointOnSegment","s0","sqrDist","extDet","segExtent","a01","b0","invDet","intersectSphere","tca","radius2","thc","t0","t1","distanceToPlane","intersectPlane","distToPoint","intersectBox","tmin","tmax","tymin","tymax","tzmin","tzmax","invdirx","invdiry","invdirz","intersectTriangle","edge1","edge2","backfaceCulling","DdN","DdQxE2","DdE1xQ","QdN","distanceSq","closestPointToPointParameter","clampToLine","startEnd2","getNormal","targetLengthSq","getBarycoord","dot00","dot01","dot02","dot11","dot12","denom","invDenom","setFromPointsAndIndices","i0","i1","i2","getArea","getMidpoint","getPlane","edgeList","projectedPoint","setDrawMode","morphTargetInfluences","morphTargetDictionary","ml","keys","String","inverseMatrix","tempA","tempB","tempC","uvA","uvB","uvC","barycoord","intersectionPoint","intersectionPointWorld","uvIntersection","uv1","uv3","checkIntersection","raycaster","checkBufferGeometryIntersection","intersection","faceIndex","intersects","fvA","fvB","fvC","isMultiMaterial","faceMaterial","morphInfluences","tl","influence","targets","uvs_f","isCubeTexture","emptyTexture","emptyCubeTexture","UniformContainer","seq","arrayCacheF32","arrayCacheI32","mat4array","mat3array","flatten","nBlocks","blockSize","firstElem","allocTexUnits","renderer","allocTextureUnit","setValue1f","uniform1f","addr","setValue1i","uniform1i","setValue2fv","uniform2fv","uniform2f","setValue3fv","uniform3f","uniform3fv","setValue4fv","uniform4fv","uniform4f","setValue2fm","uniformMatrix2fv","setValue3fm","uniformMatrix3fv","setValue4fm","uniformMatrix4fv","setValueT1","unit","setTexture2D","setValueT6","setTextureCube","setValue2iv","uniform2iv","setValue3iv","uniform3iv","setValue4iv","uniform4iv","setValue1fv","uniform1fv","setValue1iv","uniform1iv","setValueV2a","setValueV3a","setValueV4a","setValueM2a","setValueM3a","setValueM4a","setValueT1a","units","setValueT6a","SingleUniform","activeInfo","setValue","getSingularSetter","PureArrayUniform","getPureArraySetter","StructuredUniform","RePathPart","addUniform","container","uniformObject","parseUniform","pathLength","lastIndex","matchEnd","idIsIndex","subscript","next","WebGLUniforms","program","getProgramParameter","ACTIVE_UNIFORMS","info","getActiveUniform","getUniformLocation","WebGLShader","shader","createShader","shaderSource","compileShader","getShaderParameter","COMPILE_STATUS","getShaderInfoLog","VERTEX_SHADER","lines","split","join","addLineNumbers","setOptional","upload","seqWithValue","programIdCount","getEncodingComponents","getTexelDecodingFunction","functionName","filterEmptyLine","replaceLightNums","replace","numDirLights","numSpotLights","numRectAreaLights","numPointLights","numHemiLights","replaceClippingPlaneNums","numClippingPlanes","numClipIntersection","parseIncludes","include","unrollLoops","snippet","unroll","WebGLProgram","code","shadowMapTypeDefine","shadowMapType","envMapTypeDefine","envMapModeDefine","envMapBlendingDefine","prefixVertex","prefixFragment","gammaFactorDefine","customExtensions","rendererExtensions","envMapCubeUV","logarithmicDepthBuffer","filter","generateExtensions","customDefines","chunks","generateDefines","createProgram","isRawShaderMaterial","supportsVertexTextures","maxBones","useFog","fogExp","useVertexTexture","doubleSided","flipSided","shadowMapEnabled","physicallyCorrectLights","toneMapping","toneMappingName","getToneMappingFunction","outputEncoding","mapEncoding","envMapEncoding","emissiveMapEncoding","depthPacking","vertexGlsl","fragmentGlsl","glVertexShader","glFragmentShader","FRAGMENT_SHADER","attachShader","bindAttribLocation","linkProgram","cachedUniforms","cachedAttributes","programLog","getProgramInfoLog","trim","vertexLog","fragmentLog","runnable","haveDiagnostics","LINK_STATUS","getError","VALIDATE_STATUS","diagnostics","prefix","deleteShader","getUniforms","getAttributes","ACTIVE_ATTRIBUTES","getActiveAttrib","getAttribLocation","fetchAttributeLocations","destroy","deleteProgram","usedTimes","WebGLPrograms","capabilities","programs","shaderIDs","MeshDepthMaterial","MeshDistanceMaterial","MeshNormalMaterial","MeshLambertMaterial","MeshPhongMaterial","MeshToonMaterial","MeshStandardMaterial","MeshPhysicalMaterial","LineBasicMaterial","LineDashedMaterial","PointsMaterial","ShadowMaterial","parameterNames","getTextureEncodingFromMap","gammaOverrideLinear","getParameters","shadows","nClipPlanes","nClipIntersection","shaderID","isSkinnedMesh","bones","skeleton","floatVertexTextures","nVertexUniforms","maxVertexUniforms","nVertexMatrices","allocateBones","getMaxPrecision","currentRenderTarget","getRenderTarget","vertexTextures","gammaOutput","gammaInput","envMapMode","isFogExp2","maxMorphTargets","maxMorphNormals","directional","spot","rectArea","hemi","shadowMap","getProgramCode","acquireProgram","pl","programInfo","releaseProgram","pop","painterSortStable","reversePainterSortStable","WebGLRenderLists","lists","scene","list","renderItems","renderItemsIndex","opaque","init","renderItem","intersectPoint","worldPosition","worldScale","matrixPosition","offsetMatrix","identityMatrix","WebGLLights","light","halfWidth","halfHeight","state","ambient","vector3","matrix42","setup","directionalLength","pointLength","spotLength","rectAreaLength","hemiLength","viewMatrix","isAmbientLight","isDirectionalLight","mapSize","isSpotLight","penumbra","isRectAreaLight","isPointLight","isHemisphereLight","WebGLRenderStates","renderStates","renderState","lightsArray","shadowsArray","spritesArray","setupLights","pushLight","pushShadow","shadowLight","pushSprite","WebGLShadowMap","_renderer","_objects","maxTextureSize","_frustum","_projScreenMatrix","_shadowMapSize","_maxShadowMapSize","_lookTarget","_lightPositionWorld","_MorphingFlag","_SkinningFlag","_NumberOfMaterialVariants","_depthMaterials","_distanceMaterials","_materialCache","0","1","2","cubeDirections","cubeUps","cube2DViewPorts","useMorphing","useSkinning","depthMaterial","distanceMaterial","getDepthMaterial","lightPositionWorld","result","materialVariants","customMaterial","customDepthMaterial","customDistanceMaterial","variantIndex","localClippingEnabled","keyA","keyB","materialsForVariant","cachedMaterial","isMeshDistanceMaterial","renderObject","shadowCamera","groupMaterial","renderBufferDirect","autoUpdate","render","faceCount","_gl","_state","BLEND","setClear","setTest","setScissorTest","vpWidth","vpHeight","pars","isSpotLightShadow","shadowMatrix","setRenderTarget","clear","vpDimensions","CanvasTexture","WebGLSpriteRenderer","vertexBuffer","elementBuffer","spritePosition","spriteRotation","spriteScale","ARRAY_BUFFER","ELEMENT_ARRAY_BUFFER","uvOffset","uvScale","fogType","fogDepth","fillStyle","fillRect","sprites","useProgram","initAttributes","enableAttribute","disableUnusedAttributes","CULL_FACE","vertexAttribPointer","activeTexture","TEXTURE0","oldFogType","sceneFogType","isFog","density","setBlending","setMask","drawElements","TRIANGLES","reset","WebGLTextures","utils","_canvas","_isWebGL2","WebGL2RenderingContext","_videoTextures","clampToMaxSize","maxSize","textureNeedsGenerateMipmaps","generateMipmap","__maxMipLevel","LOG2E","filterFallback","NEAREST","LINEAR","onTextureDispose","textureProperties","__image__webglTextureCube","deleteTexture","__webglInit","__webglTexture","deallocateTexture","isVideoTexture","memory","onRenderTargetDispose","renderTarget","renderTargetProperties","deleteFramebuffer","__webglFramebuffer","__webglDepthbuffer","deleteRenderbuffer","deallocateRenderTarget","slot","frame","updateVideoTexture","__version","complete","createTexture","bindTexture","TEXTURE_2D","pixelStorei","UNPACK_FLIP_Y_WEBGL","UNPACK_PREMULTIPLY_ALPHA_WEBGL","UNPACK_ALIGNMENT","textureNeedsPowerOfTwo","HTMLImageElement","ImageBitmap","makePowerOfTwo","isPowerOfTwoImage","glFormat","convert","glType","setTextureParameters","mipmap","isDepthTexture","internalFormat","DEPTH_COMPONENT","DEPTH_COMPONENT32F","DEPTH_COMPONENT16","DEPTH_STENCIL","texImage2D","isCompressedTexture","getCompressedTextureFormats","compressedTexImage2D","uploadTexture","textureType","extension","texParameteri","TEXTURE_WRAP_S","TEXTURE_WRAP_T","TEXTURE_MAG_FILTER","TEXTURE_MIN_FILTER","CLAMP_TO_EDGE","__currentAnisotropy","texParameterf","TEXTURE_MAX_ANISOTROPY_EXT","getMaxAnisotropy","setupFrameBufferTexture","framebuffer","attachment","textureTarget","bindFramebuffer","FRAMEBUFFER","framebufferTexture2D","setupRenderBufferStorage","renderbuffer","bindRenderbuffer","RENDERBUFFER","renderbufferStorage","framebufferRenderbuffer","DEPTH_ATTACHMENT","DEPTH_STENCIL_ATTACHMENT","RGBA4","setupDepthRenderbuffer","isCube","webglDepthTexture","setupDepthTexture","createRenderbuffer","TEXTURE_CUBE_MAP","isCompressed","cubeImage","maxCubemapSize","TEXTURE_CUBE_MAP_POSITIVE_X","setTextureCubeDynamic","setupRenderTarget","isTargetPowerOfTwo","createFramebuffer","COLOR_ATTACHMENT0","updateRenderTargetMipmap","webglTexture","WebGLUtils","REPEAT","MIRRORED_REPEAT","NEAREST_MIPMAP_NEAREST","NEAREST_MIPMAP_LINEAR","LINEAR_MIPMAP_NEAREST","LINEAR_MIPMAP_LINEAR","UNSIGNED_SHORT_4_4_4_4","UNSIGNED_SHORT_5_5_5_1","UNSIGNED_SHORT_5_6_5","HALF_FLOAT_OES","ALPHA","RGB","RGBA","LUMINANCE","LUMINANCE_ALPHA","FUNC_ADD","FUNC_SUBTRACT","FUNC_REVERSE_SUBTRACT","ZERO","ONE","SRC_COLOR","ONE_MINUS_SRC_COLOR","SRC_ALPHA","ONE_MINUS_SRC_ALPHA","DST_ALPHA","ONE_MINUS_DST_ALPHA","DST_COLOR","ONE_MINUS_DST_COLOR","SRC_ALPHA_SATURATE","COMPRESSED_RGB_S3TC_DXT1_EXT","COMPRESSED_RGBA_S3TC_DXT1_EXT","COMPRESSED_RGBA_S3TC_DXT3_EXT","COMPRESSED_RGBA_S3TC_DXT5_EXT","COMPRESSED_RGB_PVRTC_4BPPV1_IMG","COMPRESSED_RGB_PVRTC_2BPPV1_IMG","COMPRESSED_RGBA_PVRTC_4BPPV1_IMG","COMPRESSED_RGBA_PVRTC_2BPPV1_IMG","COMPRESSED_RGB_ETC1_WEBGL","MIN_EXT","MAX_EXT","UNSIGNED_INT_24_8_WEBGL","PerspectiveCamera","focus","filmGauge","filmOffset","ArrayCamera","cameras","WebVRManager","device","frameData","poseTarget","standingMatrix","standingMatrixInverse","window","VRFrameData","onVRDisplayPresentChange","tempQuaternion","tempPosition","cameraL","bounds","cameraR","currentSize","currentPixelRatio","cameraVR","isPresenting","eyeParameters","getEyeParameters","renderWidth","renderHeight","getPixelRatio","setDrawingBufferSize","userHeight","getDevice","setDevice","setPoseTarget","getCamera","depthNear","depthFar","getFrameData","stageParameters","sittingToStandingTransform","pose","poseObject","orientation","leftViewMatrix","rightViewMatrix","leftProjectionMatrix","rightProjectionMatrix","getLayers","layer","leftBounds","rightBounds","getStandingMatrix","submitFrame","WebGLRenderer","_context","_alpha","_depth","_stencil","stencil","_antialias","antialias","_premultipliedAlpha","_preserveDrawingBuffer","preserveDrawingBuffer","_powerPreference","powerPreference","currentRenderList","currentRenderState","domElement","autoClear","autoClearColor","autoClearDepth","autoClearStencil","sortObjects","toneMappingExposure","toneMappingWhitePoint","objects","programCache","renderLists","background","morphtargets","bufferRenderer","indexedBufferRenderer","spriteRenderer","_this","_isContextLost","_currentRenderTarget","_currentFramebuffer","_currentMaterialId","_currentGeometryProgram","_currentCamera","_currentArrayCamera","_currentViewport","_currentScissor","_currentScissorTest","_usedTextureUnits","_width","_height","_pixelRatio","_viewport","_scissor","_scissorTest","_clipping","globalState","numGlobalPlanes","renderingShadows","viewNormalMatrix","uniform","resetGlobalState","numPlanes","numIntersection","projectPlanes","skipTransform","nPlanes","dstArray","flatSize","i4","enableLocalClipping","beginShadows","endShadows","setState","fromCache","nGlobal","lGlobal","clippingState","_clippingEnabled","_localClippingEnabled","_vector3","getTargetPixelRatio","contextAttributes","onContextLost","onContextRestore","getShaderPrecisionFormat","rangeMin","rangeMax","message","initGLContext","getExtension","HIGH_FLOAT","MEDIUM_FLOAT","maxPrecision","maxTextures","MAX_TEXTURE_IMAGE_UNITS","maxVertexTextures","MAX_VERTEX_TEXTURE_IMAGE_UNITS","MAX_TEXTURE_SIZE","MAX_CUBE_MAP_TEXTURE_SIZE","maxAttributes","MAX_VERTEX_ATTRIBS","MAX_VERTEX_UNIFORM_VECTORS","maxVaryings","MAX_VARYING_VECTORS","maxFragmentUniforms","MAX_FRAGMENT_UNIFORM_VECTORS","floatFragmentTextures","MAX_TEXTURE_MAX_ANISOTROPY_EXT","colorBuffer","locked","currentColorMask","currentColorClear","colorMask","setLocked","lock","clearColor","currentDepthMask","currentDepthFunc","currentDepthClear","DEPTH_TEST","depthMask","setFunc","NEVER","ALWAYS","LESS","LEQUAL","EQUAL","GEQUAL","GREATER","NOTEQUAL","clearDepth","currentStencilMask","currentStencilFunc","currentStencilRef","currentStencilFuncMask","currentStencilFail","currentStencilZFail","currentStencilZPass","currentStencilClear","stencilTest","STENCIL_TEST","stencilMask","stencilFunc","stencilRef","setOp","stencilFail","stencilZFail","stencilZPass","stencilOp","clearStencil","maxVertexAttributes","newAttributes","enabledAttributes","attributeDivisors","compressedTextureFormats","currentProgram","currentBlending","currentBlendEquation","currentBlendSrc","currentBlendDst","currentBlendEquationAlpha","currentBlendSrcAlpha","currentBlendDstAlpha","currentPremultipledAlpha","currentFlipSided","currentCullFace","currentLineWidth","currentPolygonOffsetFactor","currentPolygonOffsetUnits","MAX_COMBINED_TEXTURE_IMAGE_UNITS","lineWidthAvailable","glVersion","VERSION","currentTextureSlot","currentBoundTextures","currentScissor","currentViewport","emptyTextures","blendEquationSeparate","blendFuncSeparate","blendFunc","setFlipSided","frontFace","CW","CCW","setCullFace","cullFace","BACK","FRONT","FRONT_AND_BACK","setPolygonOffset","factor","POLYGON_OFFSET_FILL","webglSlot","enableVertexAttribArray","vertexAttribDivisorANGLE","enableAttributeAndDivisor","meshPerAttribute","disableVertexAttribArray","formats","COMPRESSED_TEXTURE_FORMATS","setMaterial","frontFaceCW","setLineWidth","lineWidth","SCISSOR_TEST","webglType","boundTexture","apply","calls","triangles","autoReset","mode","instanceCount","TRIANGLE_STRIP","TRIANGLE_FAN","LINES","LINE_STRIP","LINE_LOOP","POINTS","wireframeAttributes","onGeometryDispose","buffergeometry","_bufferGeometry","geometryAttributes","getWireframeAttribute","geometryIndex","updateList","influencesList","objectInfluences","influences","planeCamera","planeMesh","boxMesh","clearAlpha","getClearColor","setClearColor","getClearAlpha","setClearAlpha","renderList","forceClear","setMode","drawArrays","renderInstances","drawArraysInstancedANGLE","maxInstancedCount","drawElementsInstancedANGLE","vr","preventDefault","onMaterialDispose","releaseMaterialProgramReference","deallocateMaterial","getContextAttributes","forceContextLoss","loseContext","forceContextRestore","restoreContext","setPixelRatio","updateStyle","setViewport","getDrawingBufferSize","pixelRatio","getCurrentViewport","setScissor","boolean","bits","COLOR_BUFFER_BIT","DEPTH_BUFFER_BIT","STENCIL_BUFFER_BIT","clearTarget","stopAnimation","renderBufferImmediate","hasPositions","hasNormals","hasUvs","hasColors","programAttributes","positionArray","isMeshPhongMaterial","isMeshStandardMaterial","isMeshNormalMaterial","normalArray","nx","ny","nz","uvArray","colorArray","setProgram","geometryProgram","updateBuffers","rangeFactor","isInstancedBufferGeometry","materialDefaultAttributeValues","programAttribute","geometryAttribute","stride","isInstancedInterleavedBuffer","isInstancedBufferAttribute","vertexAttrib2fv","vertexAttrib3fv","vertexAttrib4fv","vertexAttrib1fv","setupVertexAttributes","dataCount","rangeStart","rangeCount","drawStart","drawEnd","drawCount","isLineSegments","isLineLoop","compile","isLight","initMaterial","warned","isAnimating","onAnimationFrame","requestAnimationLoopFrame","requestAnimationFrame","animationLoop","time","renderObjects","overrideMaterial","isArrayCamera","camera2","isImmediateRenderObject","renderObjectImmediate","materialProperties","programChange","lightsHash","numSupportedMorphTargets","numSupportedMorphNormals","progUniforms","uniformsList","useCache","refreshProgram","refreshMaterial","refreshLights","p_uniforms","m_uniforms","uCamPos","cameraPosition","isMeshLambertMaterial","boneTexture","boneMatrices","boneTextureSize","refreshUniformsFog","refreshUniformsCommon","refreshUniformsLambert","isMeshToonMaterial","refreshUniformsPhong","refreshUniformsToon","isMeshPhysicalMaterial","refreshUniformsStandard","refreshUniformsPhysical","isMeshDepthMaterial","refreshUniformsDepth","refreshUniformsDistance","refreshUniformsNormal","isLineBasicMaterial","refreshUniformsLine","isLineDashedMaterial","refreshUniformsDash","isPointsMaterial","refreshUniformsPoints","isShadowMaterial","ltc_1","LTC_1","ltc_2","LTC_2","uvScaleMap","animate","projectObject","isSprite","opaqueObjects","transparentObjects","textureUnit","setTexture","readRenderTargetPixels","restore","textureFormat","IMPLEMENTATION_COLOR_READ_FORMAT","IMPLEMENTATION_COLOR_READ_TYPE","checkFramebufferStatus","FRAMEBUFFER_COMPLETE","readPixels","copyFramebufferToTexture","level","copyTexImage2D","copyTextureToTexture","srcTexture","dstTexture","pixels","texSubImage2D","FogExp2","Fog","Scene","SpriteMaterial","Sprite","LOD","levels","Skeleton","boneInverses","calculateInverses","Bone","SkinnedMesh","bindMode","bindMatrix","bindMatrixInverse","initBones","bind","normalizeSkinWeights","linecap","linejoin","Line","LineSegments","LineLoop","Points","Group","VideoTexture","video","CompressedTexture","DepthTexture","WireframeGeometry","ol","edge","edges","ParametricGeometry","func","slices","stacks","ParametricBufferGeometry","pu","pv","sliceCount","PolyhedronGeometry","detail","PolyhedronBufferGeometry","uvBuffer","subdivideFace","cols","aj","bj","rows","pushVertex","getVertexByIndex","correctUV","azimuth","subdivide","appplyRadius","centroid","azi","correctUVs","correctSeam","generateUVs","TetrahedronGeometry","TetrahedronBufferGeometry","OctahedronGeometry","OctahedronBufferGeometry","IcosahedronGeometry","IcosahedronBufferGeometry","DodecahedronGeometry","DodecahedronBufferGeometry","TubeGeometry","tubularSegments","radialSegments","closed","taper","bufferGeometry","TubeBufferGeometry","tangents","binormals","frames","computeFrenetFrames","P","generateSegment","getPointAt","N","B","generateIndices","generateBufferData","TorusKnotGeometry","tube","heightScale","TorusKnotBufferGeometry","P1","P2","T","calculatePositionOnCurve","cu","su","quOverP","cs","TorusGeometry","arc","TorusBufferGeometry","isPerspectiveCamera","setFocalLength","focalLength","vExtentSlope","getFilmHeight","atan","getFocalLength","getEffectiveFOV","getFilmWidth","skew","isSpriteMaterial","guessSizeSq","addLevel","getObjectForDistance","bone","isBone","getBoneByName","gbone","pos","rotq","scl","sw","vec","skinWeight","computeLineDistances","positionAttribute","linePrecision","precisionSq","vStart","vEnd","interSegment","interRay","step","nbVertices","threshold","params","localThreshold","localThresholdSq","testPoint","rayPointDistanceSq","distanceToRay","isGroup","readyState","HAVE_CURRENT_DATA","Earcut","holeIndices","dim","invSize","hasHoles","outerLen","outerNode","linkedList","queue","steiner","getLeftmost","compareX","eliminateHole","filterPoints","eliminateHoles","earcutLinked","clockwise","last","sum","signedArea","insertNode","removeNode","again","area","prev","ear","pass","zOrder","prevZ","nextZ","tail","numMerges","pSize","qSize","inSize","sortLinked","indexCurve","stop","isEarHashed","isEar","cureLocalIntersections","splitEarcut","pointInTriangle","minTX","minTY","maxTX","maxTY","locallyInside","isValidDiagonal","splitPolygon","hole","hx","hy","mx","my","tanMin","findHoleBridge","leftmost","px","py","intersectsPolygon","inside","middleInside","q2","Node","an","bp","ShapeUtils","contour","isClockWise","pts","triangulateShape","holes","removeDupEndPts","addContour","holeIndex","forEach","ExtrudeGeometry","ExtrudeBufferGeometry","verticesArray","addShape","extrudePts","splineTube","binormal","position2","ahole","hl","placeholder","curveSegments","steps","amount","bevelEnabled","bevelThickness","bevelSize","bevelSegments","extrudePath","uvgen","UVGenerator","WorldUVGenerator","extrudeByPath","getSpacedPoints","shapePoints","extractPoints","reverse","concat","scalePt2","pt","bs","vert","vlen","flen","getBevelVec","inPt","inPrev","inNext","v_trans_x","v_trans_y","shrink_by","v_prev_x","v_prev_y","v_next_x","v_next_y","v_prev_lensq","collinear0","v_prev_len","v_next_len","ptPrevShift_x","ptPrevShift_y","sf","v_trans_lensq","direction_eq","contourMovements","oneHoleMovements","holesMovements","verticesMovements","sidewalls","layeroffset","sl","slen1","slen2","f4","f3","addVertex","nextIndex","generateTopUV","addUV","generateSideWallUV","vector2","buildLidFaces","buildSideFaces","indexA","indexB","indexC","a_x","a_y","b_x","b_y","c_x","c_y","indexD","a_z","b_z","c_z","d_x","d_y","d_z","TextGeometry","text","TextBufferGeometry","font","isFont","generateShapes","SphereGeometry","phiStart","phiLength","thetaStart","thetaLength","SphereBufferGeometry","thetaEnd","grid","verticesRow","RingGeometry","innerRadius","outerRadius","thetaSegments","phiSegments","RingBufferGeometry","segment","radiusStep","thetaSegmentLevel","LatheGeometry","segments","LatheBufferGeometry","base","inverseSegments","n1","n2","ShapeGeometry","ShapeBufferGeometry","shapeHole","indexOffset","shapeVertices","shapeHoles","EdgesGeometry","thresholdAngle","thresholdDot","sourceVertices","face1","face2","CylinderGeometry","radiusTop","radiusBottom","openEnded","CylinderBufferGeometry","indexArray","generateCap","centerIndexStart","centerIndexEnd","cosTheta","sinTheta","slope","indexRow","generateTorso","ConeGeometry","ConeBufferGeometry","CircleGeometry","CircleBufferGeometry","Geometries","freeze","RawShaderMaterial","STANDARD","PHYSICAL","TOON","Materials","Cache","files","file","LoadingManager","onLoad","onProgress","onError","isLoading","itemsLoaded","itemsTotal","urlModifier","onStart","itemStart","itemEnd","itemError","resolveURL","setURLModifier","transform","DefaultLoadingManager","loading","FileLoader","manager","CompressedTextureLoader","_parser","DataTextureLoader","ImageLoader","CubeTextureLoader","TextureLoader","Curve","arcLengthDivisions","EllipseCurve","aX","aY","xRadius","yRadius","aStartAngle","aEndAngle","aClockwise","aRotation","ArcCurve","aRadius","CubicPoly","c0","initCatmullRom","x3","tension","initNonuniformCatmullRom","dt0","dt1","dt2","t2","calc","load","cached","setTimeout","dataUriRegexResult","mimeType","isBase64","decodeURIComponent","atob","response","responseType","toLowerCase","charCodeAt","Blob","parser","DOMParser","parseFromString","request","XMLHttpRequest","header","open","callbacks","status","withCredentials","overrideMimeType","requestHeader","setRequestHeader","send","setPath","setResponseType","setWithCredentials","setMimeType","loader","loadTexture","texDatas","loaded","mipmapCount","isCubemap","texData","crossOrigin","substr","src","setCrossOrigin","urls","isJPEG","search","getPoint","optionalTarget","getUtoTmapping","getPoints","divisions","getLength","lengths","getLengths","cacheArcLengths","current","updateArcLengths","targetArcLength","arcLengths","comparison","lengthBefore","getTangent","pt1","getTangentAt","mat","MAX_VALUE","tz","fromJSON","json","isEllipseCurve","twoPi","deltaAngle","samePoints","isArcCurve","pz","CatmullRomCurve3","curveType","CatmullRom","QuadraticBezier","QuadraticBezierP0","QuadraticBezierP1","QuadraticBezierP2","CubicBezier","CubicBezierP0","CubicBezierP1","CubicBezierP2","CubicBezierP3","CubicBezierCurve","v3","CubicBezierCurve3","LineCurve","LineCurve3","QuadraticBezierCurve","QuadraticBezierCurve3","SplineCurve","isCatmullRomCurve3","intPoint","weight","isCubicBezierCurve","isCubicBezierCurve3","isLineCurve","isLineCurve3","isQuadraticBezierCurve","isQuadraticBezierCurve3","isSplineCurve","Curves","CurvePath","curves","autoClose","Path","currentPoint","Shape","Light","HemisphereLight","LightShadow","SpotLightShadow","SpotLight","power","PointLight","DirectionalLightShadow","DirectionalLight","AmbientLight","RectAreaLight","StringKeyframeTrack","times","interpolation","KeyframeTrack","BooleanKeyframeTrack","Interpolant","parameterPositions","sampleValues","sampleSize","resultBuffer","_cachedIndex","valueSize","QuaternionLinearInterpolant","QuaternionKeyframeTrack","ColorKeyframeTrack","NumberKeyframeTrack","CubicInterpolant","_weightPrev","_offsetPrev","_weightNext","_offsetNext","LinearInterpolant","DiscreteInterpolant","curve","closePath","startPoint","endPoint","curveLengths","getCurveLengths","segmentLength","lens","cacheLengths","sums","resolution","moveTo","lineTo","quadraticCurveTo","aCPx","aCPy","bezierCurveTo","aCP1x","aCP1y","aCP2x","aCP2y","splineThru","absarc","absellipse","ellipse","firstPoint","lastPoint","getPointsHoles","holesPts","ValueTypeName","ValueBufferType","DefaultInterpolation","InterpolantFactoryMethodLinear","InterpolantFactoryMethodSmooth","evaluate","pp","validate_interval","seek","linear_scan","forward_scan","giveUpAt","afterEnd_","t1global","beforeStart_","mid","intervalChanged_","interpolate_","settings","DefaultSettings_","getSettings_","copySampleValue_","getValueSize","endingStart","endingEnd","iPrev","iNext","tPrev","tNext","halfDt","o1","o0","oP","oN","wP","wN","ppp","sP","sN","offset1","offset0","weight1","weight0","AnimationUtils","arraySlice","from","to","isTypedArray","convertArray","forceClone","ArrayBuffer","isView","DataView","getKeyframeOrder","sortedArray","nValues","srcOffset","flattenJSON","jsonKeys","valuePropertyName","TimeBufferType","setInterpolation","validate","optimize","VectorKeyframeTrack","AnimationClip","tracks","resetDuration","MaterialLoader","BufferGeometryLoader","trackType","_getTrackTypeForValueTypeName","track","getInterpolation","typeName","InterpolantFactoryMethodDiscrete","factoryMethod","createInterpolant","shift","timeOffset","timeScale","startTime","endTime","nKeys","valid","prevTime","currTime","smoothInterpolation","writeIndex","keep","offsetP","offsetN","readOffset","writeOffset","jsonTracks","frameTime","fps","clip","clipTracks","CreateFromMorphTargetSequence","morphTargetSequence","noLoop","numMorphTargets","findByName","objectOrClipArray","clipArray","animations","CreateClipsFromMorphTargetSequences","animationToMorphTargets","pattern","parts","animationMorphTargets","clips","parseAnimation","animation","addNonemptyTrack","trackName","animationKeys","propertyName","destTracks","clipName","hierarchyTracks","hierarchy","morphTargetNames","morphTargetName","animationKey","boneName","setTextures","getTexture","shading","typedArray","TYPED_ARRAYS","drawcalls","offsets","BlendingMode","textureLoader","materialLoader","Loader","Handlers","handlers","regex","onLoadStart","onLoadProgress","onLoadComplete","initMaterials","texturePath","createMaterial","fullPath","mapDiffuseRepeat","mapDiffuseOffset","mapDiffuseWrap","mapDiffuseAnisotropy","mapEmissiveRepeat","mapEmissiveOffset","mapEmissiveWrap","mapEmissiveAnisotropy","mapLightRepeat","mapLightOffset","mapLightWrap","mapLightAnisotropy","mapAORepeat","mapAOOffset","mapAOWrap","mapAOAnisotropy","mapBumpRepeat","mapBumpOffset","mapBumpWrap","mapBumpAnisotropy","mapNormalRepeat","mapNormalOffset","mapNormalWrap","mapNormalAnisotropy","mapSpecularRepeat","mapSpecularOffset","mapSpecularWrap","mapSpecularAnisotropy","mapMetalnessRepeat","mapMetalnessOffset","mapMetalnessWrap","mapMetalnessAnisotropy","mapRoughnessRepeat","mapRoughnessOffset","mapRoughnessWrap","mapRoughnessAnisotropy","mapAlphaRepeat","mapAlphaOffset","mapAlphaWrap","mapAlphaAnisotropy","LoaderUtils","decodeText","TextDecoder","decode","fromCharCode","escape","extractUrlBase","lastIndexOf","JSONLoader","ObjectLoader","setTexturePath","isBitSet","fi","zLength","colorIndex","normalIndex","uvIndex","isQuad","hasMaterial","faceA","faceB","uvLayer","nUvLayers","parseModel","influencesPerVertex","parseSkin","dstVertices","srcVertices","morphColors","parseMorphing","outputAnimations","morphAnimationClips","parseAnimations","substring","parseShape","parseGeometries","parseImages","parseTextures","parseMaterials","parseObject","geometryLoader","bufferGeometryLoader","details","geometryShapes","loadImage","parseConstant","TEXTURE_MAPPING","TEXTURE_WRAPPING","TEXTURE_FILTER","getGeometry","getMaterial","ImageBitmapLoader","createImageBitmap","fetch","ShapePath","subPaths","currentPath","Font","createPath","char","glyph","glyphs","cpx","cpy","cpx1","cpy1","cpx2","cpy2","outline","_cachedOutline","ha","FontLoader","setOptions","then","res","blob","imageBitmap","catch","toShapes","isCCW","noHoles","toShapesNoHoles","inSubpaths","tmpPath","tmpShape","isPointInsidePolygon","inPolygon","polyLen","edgeLowPt","edgeHighPt","edgeDx","edgeDy","perpEdge","solid","holesFirst","tmpPoints","tmpHoles","betterShapeHoles","newShapes","newShapeHoles","mainIdx","ambiguous","toChange","sIdx","sLen","sho","hIdx","ho","hole_unassigned","s2Idx","froms","tos","paths","chars","line_height","yMax","yMin","underlineThickness","ret","createPaths","instance","eyeSep","eyeRight","eyeLeft","AudioContext","webkitAudioContext","setContext","AudioLoader","StereoCamera","CubeCamera","cubeResolution","cameraPX","cameraNX","cameraPY","cameraNY","cameraPZ","cameraNZ","AudioListener","gain","createGain","connect","destination","Audio","getInput","autoplay","loop","playbackRate","isPlaying","hasPlaybackControl","sourceType","filters","PositionalAudio","panner","createPanner","AudioAnalyser","audio","fftSize","analyser","createAnalyser","frequencyBinCount","getOutput","PropertyMixer","binding","mixFunction","_slerp","_select","_lerp","_mixBufferRegion","cumulativeWeight","useCount","referenceCount","decodeAudioData","audioBuffer","xmin","xmax","eyeSepOnProjection","ymax","removeFilter","disconnect","getFilter","setFilter","getMasterVolume","setMasterVolume","setTargetAtTime","currentTime","positionX","setValueAtTime","positionY","positionZ","forwardX","forwardY","forwardZ","upX","upY","upZ","setOrientation","setNodeSource","audioNode","setBuffer","play","createBufferSource","onended","onEnded","pause","getFilters","setFilters","setPlaybackRate","getPlaybackRate","getLoop","setLoop","getVolume","setVolume","getRefDistance","refDistance","setRefDistance","getRolloffFactor","rolloffFactor","setRolloffFactor","getDistanceModel","distanceModel","setDistanceModel","getMaxDistance","setMaxDistance","getFrequencyData","getByteFrequencyData","getAverageFrequency","accumulate","accuIndex","currentWeight","mix","originalValueOffset","saveOriginalState","getValue","restoreOriginalState","wordChar","wordCharOrDot","directoryRe","nodeRe","objectRe","propertyRe","trackRe","supportedObjectNames","reservedRe","lineGeometry","coneGeometry","Composite","targetGroup","optionalParsedPath","parsedPath","PropertyBinding","parseTrackName","_targetGroup","_bindings","subscribe_","rootNode","findNode","nodeName","AnimationObjectGroup","nCachedObjects_","_indicesByUUID","_paths","_parsedPaths","_bindingsIndicesByPath","stats","total","inUse","bindingsPerObject","AnimationAction","mixer","localRoot","_mixer","_clip","_localRoot","nTracks","interpolants","interpolantSettings","interpolant","_interpolantSettings","_interpolants","_propertyBindings","_cacheIndex","_byClipCacheIndex","_timeScaleInterpolant","_weightInterpolant","_loopCount","_startTime","_effectiveTimeScale","_effectiveWeight","repetitions","paused","clampWhenFinished","zeroSlopeAtStart","zeroSlopeAtEnd","AnimationMixer","root","_root","_initMemoryManager","_accuIndex","Uniform","InstancedBufferGeometry","InterleavedBufferAttribute","interleavedBuffer","InterleavedBuffer","InstancedInterleavedBuffer","InstancedBufferAttribute","Raycaster","PointCloud","ascSort","intersectObject","Clock","autoStart","oldTime","elapsedTime","running","Spherical","Cylindrical","Box2","ImmediateRenderObject","VertexNormalsHelper","nNormals","objGeometry","SpotLightHelper","cone","SkeletonHelper","getBoneList","boneList","PointLightHelper","sphereSize","RectAreaLightHelper","HemisphereLightHelper","GridHelper","PolarGridHelper","radials","circles","FaceNormalsHelper","DirectionalLightHelper","lightPlane","targetLine","CameraHelper","pointMap","colorFrustum","colorCone","colorUp","colorTarget","colorCross","addLine","addPoint","BoxHelper","Box3Helper","PlaneHelper","ArrowHelper","headLength","headWidth","setDirection","AxesHelper","Face4","firstValidIndex","bindings","unbind","isAnimationObjectGroup","sanitizeNodeName","RegExp","matches","results","objectName","objectIndex","propertyIndex","lastDot","searchNodeSubtree","childNode","subTreeNode","_getValue_unavailable","_setValue_unavailable","BindingType","Direct","EntireArray","ArrayElement","HasFromToArray","Versioning","None","NeedsUpdate","MatrixWorldNeedsUpdate","GetterByBindingType","resolvedProperty","SetterByBindingTypeAndVersioning","targetObject","dest","targetArray","sourceArray","nodeProperty","versioning","bindingType","_getValue_unbound","_setValue_unbound","nObjects","nCachedObjects","indicesByUUID","parsedPaths","nBindings","knownObject","firstActiveIndex","lastCachedObject","bindingsForPath","lastCached","lastCachedIndex","firstActiveObject","firstActive","uncache","lastObject","indicesByPath","unsubscribe_","lastBindingsIndex","lastBindings","_activateAction","_deactivateAction","stopFading","stopWarping","isRunning","_isActiveAction","isScheduled","startAt","setEffectiveWeight","getEffectiveWeight","fadeIn","_scheduleFading","fadeOut","crossFadeFrom","fadeOutAction","warp","fadeInDuration","fadeOutDuration","startEndRatio","endStartRatio","crossFadeTo","fadeInAction","weightInterpolant","_takeBackControlInterpolant","setEffectiveTimeScale","getEffectiveTimeScale","setDuration","syncWith","action","halt","startTimeScale","endTimeScale","now","_lendControlInterpolant","timeScaleInterpolant","getMixer","getClip","getRoot","_update","deltaTime","timeDirection","timeRunning","_updateTimeScale","clipTime","_updateTime","_updateWeight","propertyMixers","interpolantValue","loopCount","_setEndings","handle_stop","pingPong","loopDelta","pending","atStart","atEnd","weightNow","weightThen","_bindAction","prototypeAction","rootUuid","bindingsByRoot","_bindingsByRootAndName","bindingsByName","_addInactiveBinding","clipUuid","actionsForClip","_actionsByClip","knownActions","_addInactiveAction","_lendBinding","_lendAction","_takeBackBinding","_takeBackAction","_actions","_nActiveActions","_nActiveBindings","_controlInterpolants","_nActiveControlInterpolants","actions","controlInterpolants","actionsByClip","actionByRoot","_removeInactiveAction","lastInactiveAction","cacheIndex","knownActionsForClip","lastKnownAction","byClipCacheIndex","_removeInactiveBindingsForAction","_removeInactiveBinding","prevIndex","lastActiveIndex","firstInactiveAction","firstInactiveIndex","lastActiveAction","bindingByName","propBinding","lastInactiveBinding","remove_empty_map","_","firstInactiveBinding","lastActiveBinding","_controlInterpolantsResultBuffer","__cacheIndex","lastActiveInterpolant","clipAction","optionalRoot","clipObject","existingAction","newAction","stopAllAction","nActions","uncacheClip","actionsToRemove","uncacheRoot","uncacheAction","isInterleavedBuffer","setFromCamera","coords","intersectObjects","performance","Date","getElapsedTime","getDelta","newTime","other","makeSafe","vec3","objPos","objNorm","coneLength","coneWidth","boneMatrix","matrixWorldInv","setPoint","setColor","LineStrip","LinePieces","MeshFaceMaterial","MultiMaterial","Particle","ParticleSystem","PointCloudMaterial","ParticleBasicMaterial","ParticleSystemMaterial","Vertex","DynamicBufferAttribute","Int8Attribute","Uint8Attribute","Uint8ClampedAttribute","Int16Attribute","Uint16Attribute","Int32Attribute","Uint32Attribute","Float32Attribute","Float64Attribute","ClosedSplineCurve3","SplineCurve3","Spline","AxisHelper","BoundingBoxHelper","EdgesHelper","WireframeHelper","XHRLoader","BinaryTextureLoader","construct","createPointsGeometry","createGeometry","createSpacedPointsGeometry","fromPoints","initFromArray","getControlPointsArray","reparametrizeByArcLength","setColors","isIntersectionBox","isIntersectionSphere","random16","nearestPowerOfTwo","nextPowerOfTwo","flattenToArrayOffset","multiplyVector3","multiplyVector3Array","applyToBuffer","applyToVector3Array","extractPosition","getPosition","multiplyToArray","multiplyVector4","rotateAxis","crossVector","rotateByAxis","makeFrustum","isIntersectionLine","isIntersectionPlane","barycoordFromPoint","midpoint","extractAllPoints","extrude","makeGeometry","fromAttribute","distanceToManhattan","lengthManhattan","setEulerFromRotationMatrix","setEulerFromQuaternion","getPositionFromMatrix","getScaleFromMatrix","getColumnFromMatrix","applyProjection","computeTangents","getChildByName","renderDepth","getWorldRotation","eulerOrder","useQuaternion","setLens","onlyShadow","shadowCameraFov","shadowCameraLeft","shadowCameraRight","shadowCameraTop","shadowCameraBottom","shadowCameraVisible","shadowDarkness","shadowMapWidth","shadowMapHeight","copyIndicesArray","addIndex","addDrawCall","clearDrawCalls","computeOffsets","getArrays","addShapeList","wrapAround","wrapRGB","metal","getCurrentRenderTarget","getPrecision","resetGLState","supportsFloatTextures","supportsHalfFloatTextures","supportsStandardDerivatives","supportsCompressedTextureS3TC","supportsCompressedTexturePVRTC","supportsBlendMinMax","supportsInstancedArrays","enableScissorTest","addPrePlugin","addPostPlugin","updateShadowMap","setFaceCulling","shadowMapCullFace","renderReverseSided","renderSingleSided","standing","getData","updateCubeMap","GeometryUtils","geometry1","ImageUtils","loadTextureCube","loadCompressedTexture","loadCompressedTextureCube","Projector","projectVector","unprojectVector","pickingRay","CanvasRenderer","SceneUtils","createMultiMaterialObject","detach","attach","Helpers","fn","threshhold","deferTimer","args","clearTimeout","xhr","lengthComputable","percentComplete","materialKey","THREE","_config","_classCallCheck","wire","cachedSetTimeout","cachedClearTimeout","process","defaultSetTimout","defaultClearTimeout","runTimeout","fun","currentQueue","draining","queueIndex","cleanUpNextTick","drainQueue","timeout","run","marker","runClearTimeout","Item","noop","nextTick","title","browser","env","argv","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","cwd","chdir","umask","__WEBPACK_AMD_DEFINE_RESULT__","_tweens","getAll","removeAll","tween","preserve","hrtime","getTime","Tween","_repeatDelayTime","_object","_valuesStart","_valuesEnd","_valuesStartRepeat","_duration","_repeat","_yoyo","_isPlaying","_reversed","_delayTime","_easingFunction","Linear","_interpolationFunction","Interpolation","_chainedTweens","_onStartCallback","_onStartCallbackFired","_onUpdateCallback","_onCompleteCallback","_onStopCallback","stopChainedTweens","numChainedTweens","delay","repeatDelay","yoyo","chain","onComplete","onStop","elapsed","In","Out","Cubic","Quartic","Quintic","Sinusoidal","Exponential","Circular","Elastic","Back","Bounce","Utils","Bezier","pw","bn","Bernstein","fc","Factorial","DatGUI","main","gui","dat","GUI","threeCamera","threeControls","cameraFolder","addFolder","cameraFOVGui","Config","enableRotate","onFinishChange","cameraAspectGui","addColor","cameraFogNearGui","controlsFolder","controlsAutoRotateSpeedGui","meshFolder","ambientLightFolder","directionalLightFolder","directionalLightIntensityGui","directionalLightPositionXGui","directionalLightPositionYGui","directionalLightPositionZGui","shadowFolder","directionalLightHelper","shadowNearGui","shadowFarGui","shadowTopGui","shadowRightGui","shadowBottomGui","shadowLeftGui","shadowBiasGui","pointLightFolder","pointLightIntensityGui","pointLightDistanceGui","pointLightPositionXGui","pointLightPositionYGui","pointLightPositionZGui","hemiLightFolder","hemiLightIntensityGui","hemiLightPositionXGui","hemiLightPositionYGui","hemiLightPositionZGui","ALIAS","down","space","tab","Keyboard","keyCodes","onKeyChange","onBlur","_this2","prop","keyCode","keyDesc","pressed","aliases","aliasKeys","shiftKey","ctrlKey","altKey","metaKey","Interaction","keyboard","throttle","onMouseMove","onMouseLeave","onMouseOver","eventMatches","MeshHelper","wireLine","edgesLine","Model","UV","logProgress","logError","eval","global","factory","isFunction","vertxNext","customSchedulerFn","asap","arg","flush","scheduleFlush","browserWindow","browserGlobal","BrowserMutationObserver","MutationObserver","WebKitMutationObserver","isNode","self","isWorker","importScripts","MessageChannel","useSetTimeout","globalSetTimeout","iterations","observer","onFulfillment","onRejection","PROMISE_ID","makePromise","invokeCallback","_result","subscribe","resolve$1","promise","resolve","createTextNode","observe","characterData","port1","onmessage","port2","postMessage","vertx","require","runOnLoop","runOnContext","attemptVertx","PENDING","FULFILLED","REJECTED","TRY_CATCH_ERROR","getThen","handleMaybeThenable","maybeThenable","then$$1","thenable","fulfill","reject","reason","handleOwnThenable","sealed","fulfillmentHandler","rejectionHandler","tryThen","_label","handleForeignThenable","publishRejection","_onerror","publish","_subscribers","subscribers","settled","hasCallback","succeeded","failed","tryCatch","Enumerator","Constructor","input","_instanceConstructor","_remaining","_enumerate","_eachEntry","entry","resolve$$1","_then","_settledAt","Promise$1","_willSettleAt","enumerator","Promise","resolver","needsResolver","initializePromise","needsNew","finally","all","entries","race","_setScheduler","scheduleFn","_setAsap","asapFn","_asap","polyfill","local","promiseToString","cast","_es6Promise","promiseArray","imageFile","modelOBJ","rS","bS","glS","tS","Stats","BrowserStats","glStats","threeStats","threeRenderer","rStats","CSSPath","userTimingAPI","caption","over","average","avgMs","below","raf","rstats","fractions","plugins","tick","geo","_mesh$position","_mesh$rotation","_toConsumableArray","OrbitControls","constraint","minZoom","maxZoom","quat","quatInverse","lastPosition","lastQuaternion","phiDelta","thetaDelta","panOffset","zoomChanged","getPolarAngle","getAzimuthalAngle","rotateLeft","rotateUp","panLeft","panUp","pan","deltaX","deltaY","screenWidth","screenHeight","targetDistance","dollyIn","dollyScale","dollyOut","enablePan","keyPanSpeed","enableKeys","UP","BOTTOM","mouseButtons","ORBIT","ZOOM","PAN","rotateStart","rotateEnd","rotateDelta","panStart","panEnd","panDelta","dollyStart","dollyEnd","dollyDelta","STATE","NONE","ROTATE","DOLLY","TOUCH_ROTATE","TOUCH_DOLLY","TOUCH_PAN","target0","position0","zoom0","changeEvent","startEvent","endEvent","body","clientWidth","clientHeight","getZoomScale","onMouseDown","button","clientX","clientY","onMouseUp","onMouseWheel","stopPropagation","wheelDelta","onKeyDown","touchstart","touches","pageX","pageY","touchmove","touchend","contextmenu","noZoom","noRotate","noPan","noKeys","staticMoving","dynamicDampingFactor","Controls","orbitControls","lightName","updateSize","Renderer","devicePixelRatio","appendChild","offsetWidth","offsetHeight","Main","clock","place","make","setUp","item","querySelector","display","CanvasRenderingContext2D","webgl","createElement","WebGLRenderingContext","workers","Worker","fileapi","File","FileReader","FileList","getWebGLErrorMessage","fontFamily","fontSize","fontWeight","textAlign","padding","margin","innerHTML","addGetWebGLMessage","Detector","getElementById"],"mappings":"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","file":"app.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"assets/js\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 24);\n","import TWEEN from 'tween.js';\n\n// This object contains the state of the app\nexport default {\n isDev: false,\n isShowingStats: true,\n isLoaded: false,\n isTweening: false,\n isRotating: true,\n isMouseMoving: false,\n isMouseOver: false,\n maxAnisotropy: 1,\n dpr: 1,\n easing: TWEEN.Easing.Quadratic.InOut,\n duration: 500,\n model: {\n path: './assets/models/Teapot.json',\n scale: 20\n },\n texture: {\n path: './assets/textures/',\n imageFiles: [\n {name: 'UV', image: 'UV_Grid_Sm.jpg'}\n ]\n },\n mesh: {\n enableHelper: false,\n wireframe: false,\n translucent: false,\n material: {\n color: 0xffffff,\n emissive: 0xffffff\n }\n },\n fog: {\n color: 0xffffff,\n near: 0.0008\n },\n camera: {\n fov: 40,\n near: 2,\n far: 1000,\n aspect: 1,\n posX: 0,\n posY: 30,\n posZ: 40\n },\n controls: {\n autoRotate: true,\n autoRotateSpeed: -0.5,\n rotateSpeed: 0.5,\n zoomSpeed: 0.8,\n minDistance: 200,\n maxDistance: 600,\n minPolarAngle: Math.PI / 5,\n maxPolarAngle: Math.PI / 2,\n minAzimuthAngle: -Infinity,\n maxAzimuthAngle: Infinity,\n enableDamping: true,\n dampingFactor: 0.5,\n enableZoom: true,\n target: {\n x: 0,\n y: 0,\n z: 0\n }\n },\n ambientLight: {\n enabled: false,\n color: 0x141414\n },\n directionalLight: {\n enabled: true,\n color: 0xf0f0f0,\n intensity: 0.4,\n x: -75,\n y: 280,\n z: 150\n },\n shadow: {\n enabled: true,\n helperEnabled: true,\n bias: 0,\n mapWidth: 2048,\n mapHeight: 2048,\n near: 250,\n far: 400,\n top: 100,\n right: 100,\n bottom: -100,\n left: -100\n },\n pointLight: {\n enabled: true,\n color: 0xffffff,\n intensity: 0.34,\n distance: 115,\n x: 0,\n y: 0,\n z: 0\n },\n hemiLight: {\n enabled: true,\n color: 0xc8c8c8,\n groundColor: 0xffffff,\n intensity: 0.55,\n x: 0,\n y: 0,\n z: 0\n }\n};\n","// Polyfills\n\nif ( Number.EPSILON === undefined ) {\n\n\tNumber.EPSILON = Math.pow( 2, - 52 );\n\n}\n\nif ( Number.isInteger === undefined ) {\n\n\t// Missing in IE\n\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isInteger\n\n\tNumber.isInteger = function ( value ) {\n\n\t\treturn typeof value === 'number' && isFinite( value ) && Math.floor( value ) === value;\n\n\t};\n\n}\n\n//\n\nif ( Math.sign === undefined ) {\n\n\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/sign\n\n\tMath.sign = function ( x ) {\n\n\t\treturn ( x < 0 ) ? - 1 : ( x > 0 ) ? 1 : + x;\n\n\t};\n\n}\n\nif ( 'name' in Function.prototype === false ) {\n\n\t// Missing in IE\n\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name\n\n\tObject.defineProperty( Function.prototype, 'name', {\n\n\t\tget: function () {\n\n\t\t\treturn this.toString().match( /^\\s*function\\s*([^\\(\\s]*)/ )[ 1 ];\n\n\t\t}\n\n\t} );\n\n}\n\nif ( Object.assign === undefined ) {\n\n\t// Missing in IE\n\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign\n\n\t( function () {\n\n\t\tObject.assign = function ( target ) {\n\n\t\t\tif ( target === undefined || target === null ) {\n\n\t\t\t\tthrow new TypeError( 'Cannot convert undefined or null to object' );\n\n\t\t\t}\n\n\t\t\tvar output = Object( target );\n\n\t\t\tfor ( var index = 1; index < arguments.length; index ++ ) {\n\n\t\t\t\tvar source = arguments[ index ];\n\n\t\t\t\tif ( source !== undefined && source !== null ) {\n\n\t\t\t\t\tfor ( var nextKey in source ) {\n\n\t\t\t\t\t\tif ( Object.prototype.hasOwnProperty.call( source, nextKey ) ) {\n\n\t\t\t\t\t\t\toutput[ nextKey ] = source[ nextKey ];\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn output;\n\n\t\t};\n\n\t} )();\n\n}\n\n/**\n * https://github.com/mrdoob/eventdispatcher.js/\n */\n\nfunction EventDispatcher() {}\n\nObject.assign( EventDispatcher.prototype, {\n\n\taddEventListener: function ( type, listener ) {\n\n\t\tif ( this._listeners === undefined ) this._listeners = {};\n\n\t\tvar listeners = this._listeners;\n\n\t\tif ( listeners[ type ] === undefined ) {\n\n\t\t\tlisteners[ type ] = [];\n\n\t\t}\n\n\t\tif ( listeners[ type ].indexOf( listener ) === - 1 ) {\n\n\t\t\tlisteners[ type ].push( listener );\n\n\t\t}\n\n\t},\n\n\thasEventListener: function ( type, listener ) {\n\n\t\tif ( this._listeners === undefined ) return false;\n\n\t\tvar listeners = this._listeners;\n\n\t\treturn listeners[ type ] !== undefined && listeners[ type ].indexOf( listener ) !== - 1;\n\n\t},\n\n\tremoveEventListener: function ( type, listener ) {\n\n\t\tif ( this._listeners === undefined ) return;\n\n\t\tvar listeners = this._listeners;\n\t\tvar listenerArray = listeners[ type ];\n\n\t\tif ( listenerArray !== undefined ) {\n\n\t\t\tvar index = listenerArray.indexOf( listener );\n\n\t\t\tif ( index !== - 1 ) {\n\n\t\t\t\tlistenerArray.splice( index, 1 );\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\tdispatchEvent: function ( event ) {\n\n\t\tif ( this._listeners === undefined ) return;\n\n\t\tvar listeners = this._listeners;\n\t\tvar listenerArray = listeners[ event.type ];\n\n\t\tif ( listenerArray !== undefined ) {\n\n\t\t\tevent.target = this;\n\n\t\t\tvar array = listenerArray.slice( 0 );\n\n\t\t\tfor ( var i = 0, l = array.length; i < l; i ++ ) {\n\n\t\t\t\tarray[ i ].call( this, event );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n} );\n\nvar REVISION = '92';\nvar MOUSE = { LEFT: 0, MIDDLE: 1, RIGHT: 2 };\nvar CullFaceNone = 0;\nvar CullFaceBack = 1;\nvar CullFaceFront = 2;\nvar CullFaceFrontBack = 3;\nvar FrontFaceDirectionCW = 0;\nvar FrontFaceDirectionCCW = 1;\nvar BasicShadowMap = 0;\nvar PCFShadowMap = 1;\nvar PCFSoftShadowMap = 2;\nvar FrontSide = 0;\nvar BackSide = 1;\nvar DoubleSide = 2;\nvar FlatShading = 1;\nvar SmoothShading = 2;\nvar NoColors = 0;\nvar FaceColors = 1;\nvar VertexColors = 2;\nvar NoBlending = 0;\nvar NormalBlending = 1;\nvar AdditiveBlending = 2;\nvar SubtractiveBlending = 3;\nvar MultiplyBlending = 4;\nvar CustomBlending = 5;\nvar AddEquation = 100;\nvar SubtractEquation = 101;\nvar ReverseSubtractEquation = 102;\nvar MinEquation = 103;\nvar MaxEquation = 104;\nvar ZeroFactor = 200;\nvar OneFactor = 201;\nvar SrcColorFactor = 202;\nvar OneMinusSrcColorFactor = 203;\nvar SrcAlphaFactor = 204;\nvar OneMinusSrcAlphaFactor = 205;\nvar DstAlphaFactor = 206;\nvar OneMinusDstAlphaFactor = 207;\nvar DstColorFactor = 208;\nvar OneMinusDstColorFactor = 209;\nvar SrcAlphaSaturateFactor = 210;\nvar NeverDepth = 0;\nvar AlwaysDepth = 1;\nvar LessDepth = 2;\nvar LessEqualDepth = 3;\nvar EqualDepth = 4;\nvar GreaterEqualDepth = 5;\nvar GreaterDepth = 6;\nvar NotEqualDepth = 7;\nvar MultiplyOperation = 0;\nvar MixOperation = 1;\nvar AddOperation = 2;\nvar NoToneMapping = 0;\nvar LinearToneMapping = 1;\nvar ReinhardToneMapping = 2;\nvar Uncharted2ToneMapping = 3;\nvar CineonToneMapping = 4;\nvar UVMapping = 300;\nvar CubeReflectionMapping = 301;\nvar CubeRefractionMapping = 302;\nvar EquirectangularReflectionMapping = 303;\nvar EquirectangularRefractionMapping = 304;\nvar SphericalReflectionMapping = 305;\nvar CubeUVReflectionMapping = 306;\nvar CubeUVRefractionMapping = 307;\nvar RepeatWrapping = 1000;\nvar ClampToEdgeWrapping = 1001;\nvar MirroredRepeatWrapping = 1002;\nvar NearestFilter = 1003;\nvar NearestMipMapNearestFilter = 1004;\nvar NearestMipMapLinearFilter = 1005;\nvar LinearFilter = 1006;\nvar LinearMipMapNearestFilter = 1007;\nvar LinearMipMapLinearFilter = 1008;\nvar UnsignedByteType = 1009;\nvar ByteType = 1010;\nvar ShortType = 1011;\nvar UnsignedShortType = 1012;\nvar IntType = 1013;\nvar UnsignedIntType = 1014;\nvar FloatType = 1015;\nvar HalfFloatType = 1016;\nvar UnsignedShort4444Type = 1017;\nvar UnsignedShort5551Type = 1018;\nvar UnsignedShort565Type = 1019;\nvar UnsignedInt248Type = 1020;\nvar AlphaFormat = 1021;\nvar RGBFormat = 1022;\nvar RGBAFormat = 1023;\nvar LuminanceFormat = 1024;\nvar LuminanceAlphaFormat = 1025;\nvar RGBEFormat = RGBAFormat;\nvar DepthFormat = 1026;\nvar DepthStencilFormat = 1027;\nvar RGB_S3TC_DXT1_Format = 33776;\nvar RGBA_S3TC_DXT1_Format = 33777;\nvar RGBA_S3TC_DXT3_Format = 33778;\nvar RGBA_S3TC_DXT5_Format = 33779;\nvar RGB_PVRTC_4BPPV1_Format = 35840;\nvar RGB_PVRTC_2BPPV1_Format = 35841;\nvar RGBA_PVRTC_4BPPV1_Format = 35842;\nvar RGBA_PVRTC_2BPPV1_Format = 35843;\nvar RGB_ETC1_Format = 36196;\nvar RGBA_ASTC_4x4_Format = 37808;\nvar RGBA_ASTC_5x4_Format = 37809;\nvar RGBA_ASTC_5x5_Format = 37810;\nvar RGBA_ASTC_6x5_Format = 37811;\nvar RGBA_ASTC_6x6_Format = 37812;\nvar RGBA_ASTC_8x5_Format = 37813;\nvar RGBA_ASTC_8x6_Format = 37814;\nvar RGBA_ASTC_8x8_Format = 37815;\nvar RGBA_ASTC_10x5_Format = 37816;\nvar RGBA_ASTC_10x6_Format = 37817;\nvar RGBA_ASTC_10x8_Format = 37818;\nvar RGBA_ASTC_10x10_Format = 37819;\nvar RGBA_ASTC_12x10_Format = 37820;\nvar RGBA_ASTC_12x12_Format = 37821;\nvar LoopOnce = 2200;\nvar LoopRepeat = 2201;\nvar LoopPingPong = 2202;\nvar InterpolateDiscrete = 2300;\nvar InterpolateLinear = 2301;\nvar InterpolateSmooth = 2302;\nvar ZeroCurvatureEnding = 2400;\nvar ZeroSlopeEnding = 2401;\nvar WrapAroundEnding = 2402;\nvar TrianglesDrawMode = 0;\nvar TriangleStripDrawMode = 1;\nvar TriangleFanDrawMode = 2;\nvar LinearEncoding = 3000;\nvar sRGBEncoding = 3001;\nvar GammaEncoding = 3007;\nvar RGBEEncoding = 3002;\nvar LogLuvEncoding = 3003;\nvar RGBM7Encoding = 3004;\nvar RGBM16Encoding = 3005;\nvar RGBDEncoding = 3006;\nvar BasicDepthPacking = 3200;\nvar RGBADepthPacking = 3201;\n\n/**\n * @author alteredq / http://alteredqualia.com/\n * @author mrdoob / http://mrdoob.com/\n */\n\nvar _Math = {\n\n\tDEG2RAD: Math.PI / 180,\n\tRAD2DEG: 180 / Math.PI,\n\n\tgenerateUUID: ( function () {\n\n\t\t// http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/21963136#21963136\n\n\t\tvar lut = [];\n\n\t\tfor ( var i = 0; i < 256; i ++ ) {\n\n\t\t\tlut[ i ] = ( i < 16 ? '0' : '' ) + ( i ).toString( 16 );\n\n\t\t}\n\n\t\treturn function generateUUID() {\n\n\t\t\tvar d0 = Math.random() * 0xffffffff | 0;\n\t\t\tvar d1 = Math.random() * 0xffffffff | 0;\n\t\t\tvar d2 = Math.random() * 0xffffffff | 0;\n\t\t\tvar d3 = Math.random() * 0xffffffff | 0;\n\t\t\tvar uuid = lut[ d0 & 0xff ] + lut[ d0 >> 8 & 0xff ] + lut[ d0 >> 16 & 0xff ] + lut[ d0 >> 24 & 0xff ] + '-' +\n\t\t\t\tlut[ d1 & 0xff ] + lut[ d1 >> 8 & 0xff ] + '-' + lut[ d1 >> 16 & 0x0f | 0x40 ] + lut[ d1 >> 24 & 0xff ] + '-' +\n\t\t\t\tlut[ d2 & 0x3f | 0x80 ] + lut[ d2 >> 8 & 0xff ] + '-' + lut[ d2 >> 16 & 0xff ] + lut[ d2 >> 24 & 0xff ] +\n\t\t\t\tlut[ d3 & 0xff ] + lut[ d3 >> 8 & 0xff ] + lut[ d3 >> 16 & 0xff ] + lut[ d3 >> 24 & 0xff ];\n\n\t\t\t// .toUpperCase() here flattens concatenated strings to save heap memory space.\n\t\t\treturn uuid.toUpperCase();\n\n\t\t};\n\n\t} )(),\n\n\tclamp: function ( value, min, max ) {\n\n\t\treturn Math.max( min, Math.min( max, value ) );\n\n\t},\n\n\t// compute euclidian modulo of m % n\n\t// https://en.wikipedia.org/wiki/Modulo_operation\n\n\teuclideanModulo: function ( n, m ) {\n\n\t\treturn ( ( n % m ) + m ) % m;\n\n\t},\n\n\t// Linear mapping from range to range \n\n\tmapLinear: function ( x, a1, a2, b1, b2 ) {\n\n\t\treturn b1 + ( x - a1 ) * ( b2 - b1 ) / ( a2 - a1 );\n\n\t},\n\n\t// https://en.wikipedia.org/wiki/Linear_interpolation\n\n\tlerp: function ( x, y, t ) {\n\n\t\treturn ( 1 - t ) * x + t * y;\n\n\t},\n\n\t// http://en.wikipedia.org/wiki/Smoothstep\n\n\tsmoothstep: function ( x, min, max ) {\n\n\t\tif ( x <= min ) return 0;\n\t\tif ( x >= max ) return 1;\n\n\t\tx = ( x - min ) / ( max - min );\n\n\t\treturn x * x * ( 3 - 2 * x );\n\n\t},\n\n\tsmootherstep: function ( x, min, max ) {\n\n\t\tif ( x <= min ) return 0;\n\t\tif ( x >= max ) return 1;\n\n\t\tx = ( x - min ) / ( max - min );\n\n\t\treturn x * x * x * ( x * ( x * 6 - 15 ) + 10 );\n\n\t},\n\n\t// Random integer from interval\n\n\trandInt: function ( low, high ) {\n\n\t\treturn low + Math.floor( Math.random() * ( high - low + 1 ) );\n\n\t},\n\n\t// Random float from interval\n\n\trandFloat: function ( low, high ) {\n\n\t\treturn low + Math.random() * ( high - low );\n\n\t},\n\n\t// Random float from <-range/2, range/2> interval\n\n\trandFloatSpread: function ( range ) {\n\n\t\treturn range * ( 0.5 - Math.random() );\n\n\t},\n\n\tdegToRad: function ( degrees ) {\n\n\t\treturn degrees * _Math.DEG2RAD;\n\n\t},\n\n\tradToDeg: function ( radians ) {\n\n\t\treturn radians * _Math.RAD2DEG;\n\n\t},\n\n\tisPowerOfTwo: function ( value ) {\n\n\t\treturn ( value & ( value - 1 ) ) === 0 && value !== 0;\n\n\t},\n\n\tceilPowerOfTwo: function ( value ) {\n\n\t\treturn Math.pow( 2, Math.ceil( Math.log( value ) / Math.LN2 ) );\n\n\t},\n\n\tfloorPowerOfTwo: function ( value ) {\n\n\t\treturn Math.pow( 2, Math.floor( Math.log( value ) / Math.LN2 ) );\n\n\t}\n\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author philogb / http://blog.thejit.org/\n * @author egraether / http://egraether.com/\n * @author zz85 / http://www.lab4games.net/zz85/blog\n */\n\nfunction Vector2( x, y ) {\n\n\tthis.x = x || 0;\n\tthis.y = y || 0;\n\n}\n\nObject.defineProperties( Vector2.prototype, {\n\n\t\"width\": {\n\n\t\tget: function () {\n\n\t\t\treturn this.x;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tthis.x = value;\n\n\t\t}\n\n\t},\n\n\t\"height\": {\n\n\t\tget: function () {\n\n\t\t\treturn this.y;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tthis.y = value;\n\n\t\t}\n\n\t}\n\n} );\n\nObject.assign( Vector2.prototype, {\n\n\tisVector2: true,\n\n\tset: function ( x, y ) {\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t},\n\n\tsetScalar: function ( scalar ) {\n\n\t\tthis.x = scalar;\n\t\tthis.y = scalar;\n\n\t\treturn this;\n\n\t},\n\n\tsetX: function ( x ) {\n\n\t\tthis.x = x;\n\n\t\treturn this;\n\n\t},\n\n\tsetY: function ( y ) {\n\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t},\n\n\tsetComponent: function ( index, value ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: this.x = value; break;\n\t\t\tcase 1: this.y = value; break;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tgetComponent: function ( index ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: return this.x;\n\t\t\tcase 1: return this.y;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor( this.x, this.y );\n\n\t},\n\n\tcopy: function ( v ) {\n\n\t\tthis.x = v.x;\n\t\tthis.y = v.y;\n\n\t\treturn this;\n\n\t},\n\n\tadd: function ( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' );\n\t\t\treturn this.addVectors( v, w );\n\n\t\t}\n\n\t\tthis.x += v.x;\n\t\tthis.y += v.y;\n\n\t\treturn this;\n\n\t},\n\n\taddScalar: function ( s ) {\n\n\t\tthis.x += s;\n\t\tthis.y += s;\n\n\t\treturn this;\n\n\t},\n\n\taddVectors: function ( a, b ) {\n\n\t\tthis.x = a.x + b.x;\n\t\tthis.y = a.y + b.y;\n\n\t\treturn this;\n\n\t},\n\n\taddScaledVector: function ( v, s ) {\n\n\t\tthis.x += v.x * s;\n\t\tthis.y += v.y * s;\n\n\t\treturn this;\n\n\t},\n\n\tsub: function ( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' );\n\t\t\treturn this.subVectors( v, w );\n\n\t\t}\n\n\t\tthis.x -= v.x;\n\t\tthis.y -= v.y;\n\n\t\treturn this;\n\n\t},\n\n\tsubScalar: function ( s ) {\n\n\t\tthis.x -= s;\n\t\tthis.y -= s;\n\n\t\treturn this;\n\n\t},\n\n\tsubVectors: function ( a, b ) {\n\n\t\tthis.x = a.x - b.x;\n\t\tthis.y = a.y - b.y;\n\n\t\treturn this;\n\n\t},\n\n\tmultiply: function ( v ) {\n\n\t\tthis.x *= v.x;\n\t\tthis.y *= v.y;\n\n\t\treturn this;\n\n\t},\n\n\tmultiplyScalar: function ( scalar ) {\n\n\t\tthis.x *= scalar;\n\t\tthis.y *= scalar;\n\n\t\treturn this;\n\n\t},\n\n\tdivide: function ( v ) {\n\n\t\tthis.x /= v.x;\n\t\tthis.y /= v.y;\n\n\t\treturn this;\n\n\t},\n\n\tdivideScalar: function ( scalar ) {\n\n\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t},\n\n\tapplyMatrix3: function ( m ) {\n\n\t\tvar x = this.x, y = this.y;\n\t\tvar e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 3 ] * y + e[ 6 ];\n\t\tthis.y = e[ 1 ] * x + e[ 4 ] * y + e[ 7 ];\n\n\t\treturn this;\n\n\t},\n\n\tmin: function ( v ) {\n\n\t\tthis.x = Math.min( this.x, v.x );\n\t\tthis.y = Math.min( this.y, v.y );\n\n\t\treturn this;\n\n\t},\n\n\tmax: function ( v ) {\n\n\t\tthis.x = Math.max( this.x, v.x );\n\t\tthis.y = Math.max( this.y, v.y );\n\n\t\treturn this;\n\n\t},\n\n\tclamp: function ( min, max ) {\n\n\t\t// assumes min < max, componentwise\n\n\t\tthis.x = Math.max( min.x, Math.min( max.x, this.x ) );\n\t\tthis.y = Math.max( min.y, Math.min( max.y, this.y ) );\n\n\t\treturn this;\n\n\t},\n\n\tclampScalar: function () {\n\n\t\tvar min = new Vector2();\n\t\tvar max = new Vector2();\n\n\t\treturn function clampScalar( minVal, maxVal ) {\n\n\t\t\tmin.set( minVal, minVal );\n\t\t\tmax.set( maxVal, maxVal );\n\n\t\t\treturn this.clamp( min, max );\n\n\t\t};\n\n\t}(),\n\n\tclampLength: function ( min, max ) {\n\n\t\tvar length = this.length();\n\n\t\treturn this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );\n\n\t},\n\n\tfloor: function () {\n\n\t\tthis.x = Math.floor( this.x );\n\t\tthis.y = Math.floor( this.y );\n\n\t\treturn this;\n\n\t},\n\n\tceil: function () {\n\n\t\tthis.x = Math.ceil( this.x );\n\t\tthis.y = Math.ceil( this.y );\n\n\t\treturn this;\n\n\t},\n\n\tround: function () {\n\n\t\tthis.x = Math.round( this.x );\n\t\tthis.y = Math.round( this.y );\n\n\t\treturn this;\n\n\t},\n\n\troundToZero: function () {\n\n\t\tthis.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x );\n\t\tthis.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y );\n\n\t\treturn this;\n\n\t},\n\n\tnegate: function () {\n\n\t\tthis.x = - this.x;\n\t\tthis.y = - this.y;\n\n\t\treturn this;\n\n\t},\n\n\tdot: function ( v ) {\n\n\t\treturn this.x * v.x + this.y * v.y;\n\n\t},\n\n\tlengthSq: function () {\n\n\t\treturn this.x * this.x + this.y * this.y;\n\n\t},\n\n\tlength: function () {\n\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y );\n\n\t},\n\n\tmanhattanLength: function () {\n\n\t\treturn Math.abs( this.x ) + Math.abs( this.y );\n\n\t},\n\n\tnormalize: function () {\n\n\t\treturn this.divideScalar( this.length() || 1 );\n\n\t},\n\n\tangle: function () {\n\n\t\t// computes the angle in radians with respect to the positive x-axis\n\n\t\tvar angle = Math.atan2( this.y, this.x );\n\n\t\tif ( angle < 0 ) angle += 2 * Math.PI;\n\n\t\treturn angle;\n\n\t},\n\n\tdistanceTo: function ( v ) {\n\n\t\treturn Math.sqrt( this.distanceToSquared( v ) );\n\n\t},\n\n\tdistanceToSquared: function ( v ) {\n\n\t\tvar dx = this.x - v.x, dy = this.y - v.y;\n\t\treturn dx * dx + dy * dy;\n\n\t},\n\n\tmanhattanDistanceTo: function ( v ) {\n\n\t\treturn Math.abs( this.x - v.x ) + Math.abs( this.y - v.y );\n\n\t},\n\n\tsetLength: function ( length ) {\n\n\t\treturn this.normalize().multiplyScalar( length );\n\n\t},\n\n\tlerp: function ( v, alpha ) {\n\n\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\tthis.y += ( v.y - this.y ) * alpha;\n\n\t\treturn this;\n\n\t},\n\n\tlerpVectors: function ( v1, v2, alpha ) {\n\n\t\treturn this.subVectors( v2, v1 ).multiplyScalar( alpha ).add( v1 );\n\n\t},\n\n\tequals: function ( v ) {\n\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) );\n\n\t},\n\n\tfromArray: function ( array, offset ) {\n\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tthis.x = array[ offset ];\n\t\tthis.y = array[ offset + 1 ];\n\n\t\treturn this;\n\n\t},\n\n\ttoArray: function ( array, offset ) {\n\n\t\tif ( array === undefined ) array = [];\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tarray[ offset ] = this.x;\n\t\tarray[ offset + 1 ] = this.y;\n\n\t\treturn array;\n\n\t},\n\n\tfromBufferAttribute: function ( attribute, index, offset ) {\n\n\t\tif ( offset !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector2: offset has been removed from .fromBufferAttribute().' );\n\n\t\t}\n\n\t\tthis.x = attribute.getX( index );\n\t\tthis.y = attribute.getY( index );\n\n\t\treturn this;\n\n\t},\n\n\trotateAround: function ( center, angle ) {\n\n\t\tvar c = Math.cos( angle ), s = Math.sin( angle );\n\n\t\tvar x = this.x - center.x;\n\t\tvar y = this.y - center.y;\n\n\t\tthis.x = x * c - y * s + center.x;\n\t\tthis.y = x * s + y * c + center.y;\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author supereggbert / http://www.paulbrunt.co.uk/\n * @author philogb / http://blog.thejit.org/\n * @author jordi_ros / http://plattsoft.com\n * @author D1plo1d / http://github.com/D1plo1d\n * @author alteredq / http://alteredqualia.com/\n * @author mikael emtinger / http://gomo.se/\n * @author timknip / http://www.floorplanner.com/\n * @author bhouston / http://clara.io\n * @author WestLangley / http://github.com/WestLangley\n */\n\nfunction Matrix4() {\n\n\tthis.elements = [\n\n\t\t1, 0, 0, 0,\n\t\t0, 1, 0, 0,\n\t\t0, 0, 1, 0,\n\t\t0, 0, 0, 1\n\n\t];\n\n\tif ( arguments.length > 0 ) {\n\n\t\tconsole.error( 'THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.' );\n\n\t}\n\n}\n\nObject.assign( Matrix4.prototype, {\n\n\tisMatrix4: true,\n\n\tset: function ( n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44 ) {\n\n\t\tvar te = this.elements;\n\n\t\tte[ 0 ] = n11; te[ 4 ] = n12; te[ 8 ] = n13; te[ 12 ] = n14;\n\t\tte[ 1 ] = n21; te[ 5 ] = n22; te[ 9 ] = n23; te[ 13 ] = n24;\n\t\tte[ 2 ] = n31; te[ 6 ] = n32; te[ 10 ] = n33; te[ 14 ] = n34;\n\t\tte[ 3 ] = n41; te[ 7 ] = n42; te[ 11 ] = n43; te[ 15 ] = n44;\n\n\t\treturn this;\n\n\t},\n\n\tidentity: function () {\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0, 0,\n\t\t\t0, 1, 0, 0,\n\t\t\t0, 0, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new Matrix4().fromArray( this.elements );\n\n\t},\n\n\tcopy: function ( m ) {\n\n\t\tvar te = this.elements;\n\t\tvar me = m.elements;\n\n\t\tte[ 0 ] = me[ 0 ]; te[ 1 ] = me[ 1 ]; te[ 2 ] = me[ 2 ]; te[ 3 ] = me[ 3 ];\n\t\tte[ 4 ] = me[ 4 ]; te[ 5 ] = me[ 5 ]; te[ 6 ] = me[ 6 ]; te[ 7 ] = me[ 7 ];\n\t\tte[ 8 ] = me[ 8 ]; te[ 9 ] = me[ 9 ]; te[ 10 ] = me[ 10 ]; te[ 11 ] = me[ 11 ];\n\t\tte[ 12 ] = me[ 12 ]; te[ 13 ] = me[ 13 ]; te[ 14 ] = me[ 14 ]; te[ 15 ] = me[ 15 ];\n\n\t\treturn this;\n\n\t},\n\n\tcopyPosition: function ( m ) {\n\n\t\tvar te = this.elements, me = m.elements;\n\n\t\tte[ 12 ] = me[ 12 ];\n\t\tte[ 13 ] = me[ 13 ];\n\t\tte[ 14 ] = me[ 14 ];\n\n\t\treturn this;\n\n\t},\n\n\textractBasis: function ( xAxis, yAxis, zAxis ) {\n\n\t\txAxis.setFromMatrixColumn( this, 0 );\n\t\tyAxis.setFromMatrixColumn( this, 1 );\n\t\tzAxis.setFromMatrixColumn( this, 2 );\n\n\t\treturn this;\n\n\t},\n\n\tmakeBasis: function ( xAxis, yAxis, zAxis ) {\n\n\t\tthis.set(\n\t\t\txAxis.x, yAxis.x, zAxis.x, 0,\n\t\t\txAxis.y, yAxis.y, zAxis.y, 0,\n\t\t\txAxis.z, yAxis.z, zAxis.z, 0,\n\t\t\t0, 0, 0, 1\n\t\t);\n\n\t\treturn this;\n\n\t},\n\n\textractRotation: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function extractRotation( m ) {\n\n\t\t\tvar te = this.elements;\n\t\t\tvar me = m.elements;\n\n\t\t\tvar scaleX = 1 / v1.setFromMatrixColumn( m, 0 ).length();\n\t\t\tvar scaleY = 1 / v1.setFromMatrixColumn( m, 1 ).length();\n\t\t\tvar scaleZ = 1 / v1.setFromMatrixColumn( m, 2 ).length();\n\n\t\t\tte[ 0 ] = me[ 0 ] * scaleX;\n\t\t\tte[ 1 ] = me[ 1 ] * scaleX;\n\t\t\tte[ 2 ] = me[ 2 ] * scaleX;\n\n\t\t\tte[ 4 ] = me[ 4 ] * scaleY;\n\t\t\tte[ 5 ] = me[ 5 ] * scaleY;\n\t\t\tte[ 6 ] = me[ 6 ] * scaleY;\n\n\t\t\tte[ 8 ] = me[ 8 ] * scaleZ;\n\t\t\tte[ 9 ] = me[ 9 ] * scaleZ;\n\t\t\tte[ 10 ] = me[ 10 ] * scaleZ;\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tmakeRotationFromEuler: function ( euler ) {\n\n\t\tif ( ! ( euler && euler.isEuler ) ) {\n\n\t\t\tconsole.error( 'THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.' );\n\n\t\t}\n\n\t\tvar te = this.elements;\n\n\t\tvar x = euler.x, y = euler.y, z = euler.z;\n\t\tvar a = Math.cos( x ), b = Math.sin( x );\n\t\tvar c = Math.cos( y ), d = Math.sin( y );\n\t\tvar e = Math.cos( z ), f = Math.sin( z );\n\n\t\tif ( euler.order === 'XYZ' ) {\n\n\t\t\tvar ae = a * e, af = a * f, be = b * e, bf = b * f;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = - c * f;\n\t\t\tte[ 8 ] = d;\n\n\t\t\tte[ 1 ] = af + be * d;\n\t\t\tte[ 5 ] = ae - bf * d;\n\t\t\tte[ 9 ] = - b * c;\n\n\t\t\tte[ 2 ] = bf - ae * d;\n\t\t\tte[ 6 ] = be + af * d;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'YXZ' ) {\n\n\t\t\tvar ce = c * e, cf = c * f, de = d * e, df = d * f;\n\n\t\t\tte[ 0 ] = ce + df * b;\n\t\t\tte[ 4 ] = de * b - cf;\n\t\t\tte[ 8 ] = a * d;\n\n\t\t\tte[ 1 ] = a * f;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = - b;\n\n\t\t\tte[ 2 ] = cf * b - de;\n\t\t\tte[ 6 ] = df + ce * b;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'ZXY' ) {\n\n\t\t\tvar ce = c * e, cf = c * f, de = d * e, df = d * f;\n\n\t\t\tte[ 0 ] = ce - df * b;\n\t\t\tte[ 4 ] = - a * f;\n\t\t\tte[ 8 ] = de + cf * b;\n\n\t\t\tte[ 1 ] = cf + de * b;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = df - ce * b;\n\n\t\t\tte[ 2 ] = - a * d;\n\t\t\tte[ 6 ] = b;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'ZYX' ) {\n\n\t\t\tvar ae = a * e, af = a * f, be = b * e, bf = b * f;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = be * d - af;\n\t\t\tte[ 8 ] = ae * d + bf;\n\n\t\t\tte[ 1 ] = c * f;\n\t\t\tte[ 5 ] = bf * d + ae;\n\t\t\tte[ 9 ] = af * d - be;\n\n\t\t\tte[ 2 ] = - d;\n\t\t\tte[ 6 ] = b * c;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'YZX' ) {\n\n\t\t\tvar ac = a * c, ad = a * d, bc = b * c, bd = b * d;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = bd - ac * f;\n\t\t\tte[ 8 ] = bc * f + ad;\n\n\t\t\tte[ 1 ] = f;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = - b * e;\n\n\t\t\tte[ 2 ] = - d * e;\n\t\t\tte[ 6 ] = ad * f + bc;\n\t\t\tte[ 10 ] = ac - bd * f;\n\n\t\t} else if ( euler.order === 'XZY' ) {\n\n\t\t\tvar ac = a * c, ad = a * d, bc = b * c, bd = b * d;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = - f;\n\t\t\tte[ 8 ] = d * e;\n\n\t\t\tte[ 1 ] = ac * f + bd;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = ad * f - bc;\n\n\t\t\tte[ 2 ] = bc * f - ad;\n\t\t\tte[ 6 ] = b * e;\n\t\t\tte[ 10 ] = bd * f + ac;\n\n\t\t}\n\n\t\t// last column\n\t\tte[ 3 ] = 0;\n\t\tte[ 7 ] = 0;\n\t\tte[ 11 ] = 0;\n\n\t\t// bottom row\n\t\tte[ 12 ] = 0;\n\t\tte[ 13 ] = 0;\n\t\tte[ 14 ] = 0;\n\t\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t},\n\n\tmakeRotationFromQuaternion: function ( q ) {\n\n\t\tvar te = this.elements;\n\n\t\tvar x = q._x, y = q._y, z = q._z, w = q._w;\n\t\tvar x2 = x + x, y2 = y + y, z2 = z + z;\n\t\tvar xx = x * x2, xy = x * y2, xz = x * z2;\n\t\tvar yy = y * y2, yz = y * z2, zz = z * z2;\n\t\tvar wx = w * x2, wy = w * y2, wz = w * z2;\n\n\t\tte[ 0 ] = 1 - ( yy + zz );\n\t\tte[ 4 ] = xy - wz;\n\t\tte[ 8 ] = xz + wy;\n\n\t\tte[ 1 ] = xy + wz;\n\t\tte[ 5 ] = 1 - ( xx + zz );\n\t\tte[ 9 ] = yz - wx;\n\n\t\tte[ 2 ] = xz - wy;\n\t\tte[ 6 ] = yz + wx;\n\t\tte[ 10 ] = 1 - ( xx + yy );\n\n\t\t// last column\n\t\tte[ 3 ] = 0;\n\t\tte[ 7 ] = 0;\n\t\tte[ 11 ] = 0;\n\n\t\t// bottom row\n\t\tte[ 12 ] = 0;\n\t\tte[ 13 ] = 0;\n\t\tte[ 14 ] = 0;\n\t\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t},\n\n\tlookAt: function () {\n\n\t\tvar x = new Vector3();\n\t\tvar y = new Vector3();\n\t\tvar z = new Vector3();\n\n\t\treturn function lookAt( eye, target, up ) {\n\n\t\t\tvar te = this.elements;\n\n\t\t\tz.subVectors( eye, target );\n\n\t\t\tif ( z.lengthSq() === 0 ) {\n\n\t\t\t\t// eye and target are in the same position\n\n\t\t\t\tz.z = 1;\n\n\t\t\t}\n\n\t\t\tz.normalize();\n\t\t\tx.crossVectors( up, z );\n\n\t\t\tif ( x.lengthSq() === 0 ) {\n\n\t\t\t\t// up and z are parallel\n\n\t\t\t\tif ( Math.abs( up.z ) === 1 ) {\n\n\t\t\t\t\tz.x += 0.0001;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tz.z += 0.0001;\n\n\t\t\t\t}\n\n\t\t\t\tz.normalize();\n\t\t\t\tx.crossVectors( up, z );\n\n\t\t\t}\n\n\t\t\tx.normalize();\n\t\t\ty.crossVectors( z, x );\n\n\t\t\tte[ 0 ] = x.x; te[ 4 ] = y.x; te[ 8 ] = z.x;\n\t\t\tte[ 1 ] = x.y; te[ 5 ] = y.y; te[ 9 ] = z.y;\n\t\t\tte[ 2 ] = x.z; te[ 6 ] = y.z; te[ 10 ] = z.z;\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tmultiply: function ( m, n ) {\n\n\t\tif ( n !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead.' );\n\t\t\treturn this.multiplyMatrices( m, n );\n\n\t\t}\n\n\t\treturn this.multiplyMatrices( this, m );\n\n\t},\n\n\tpremultiply: function ( m ) {\n\n\t\treturn this.multiplyMatrices( m, this );\n\n\t},\n\n\tmultiplyMatrices: function ( a, b ) {\n\n\t\tvar ae = a.elements;\n\t\tvar be = b.elements;\n\t\tvar te = this.elements;\n\n\t\tvar a11 = ae[ 0 ], a12 = ae[ 4 ], a13 = ae[ 8 ], a14 = ae[ 12 ];\n\t\tvar a21 = ae[ 1 ], a22 = ae[ 5 ], a23 = ae[ 9 ], a24 = ae[ 13 ];\n\t\tvar a31 = ae[ 2 ], a32 = ae[ 6 ], a33 = ae[ 10 ], a34 = ae[ 14 ];\n\t\tvar a41 = ae[ 3 ], a42 = ae[ 7 ], a43 = ae[ 11 ], a44 = ae[ 15 ];\n\n\t\tvar b11 = be[ 0 ], b12 = be[ 4 ], b13 = be[ 8 ], b14 = be[ 12 ];\n\t\tvar b21 = be[ 1 ], b22 = be[ 5 ], b23 = be[ 9 ], b24 = be[ 13 ];\n\t\tvar b31 = be[ 2 ], b32 = be[ 6 ], b33 = be[ 10 ], b34 = be[ 14 ];\n\t\tvar b41 = be[ 3 ], b42 = be[ 7 ], b43 = be[ 11 ], b44 = be[ 15 ];\n\n\t\tte[ 0 ] = a11 * b11 + a12 * b21 + a13 * b31 + a14 * b41;\n\t\tte[ 4 ] = a11 * b12 + a12 * b22 + a13 * b32 + a14 * b42;\n\t\tte[ 8 ] = a11 * b13 + a12 * b23 + a13 * b33 + a14 * b43;\n\t\tte[ 12 ] = a11 * b14 + a12 * b24 + a13 * b34 + a14 * b44;\n\n\t\tte[ 1 ] = a21 * b11 + a22 * b21 + a23 * b31 + a24 * b41;\n\t\tte[ 5 ] = a21 * b12 + a22 * b22 + a23 * b32 + a24 * b42;\n\t\tte[ 9 ] = a21 * b13 + a22 * b23 + a23 * b33 + a24 * b43;\n\t\tte[ 13 ] = a21 * b14 + a22 * b24 + a23 * b34 + a24 * b44;\n\n\t\tte[ 2 ] = a31 * b11 + a32 * b21 + a33 * b31 + a34 * b41;\n\t\tte[ 6 ] = a31 * b12 + a32 * b22 + a33 * b32 + a34 * b42;\n\t\tte[ 10 ] = a31 * b13 + a32 * b23 + a33 * b33 + a34 * b43;\n\t\tte[ 14 ] = a31 * b14 + a32 * b24 + a33 * b34 + a34 * b44;\n\n\t\tte[ 3 ] = a41 * b11 + a42 * b21 + a43 * b31 + a44 * b41;\n\t\tte[ 7 ] = a41 * b12 + a42 * b22 + a43 * b32 + a44 * b42;\n\t\tte[ 11 ] = a41 * b13 + a42 * b23 + a43 * b33 + a44 * b43;\n\t\tte[ 15 ] = a41 * b14 + a42 * b24 + a43 * b34 + a44 * b44;\n\n\t\treturn this;\n\n\t},\n\n\tmultiplyScalar: function ( s ) {\n\n\t\tvar te = this.elements;\n\n\t\tte[ 0 ] *= s; te[ 4 ] *= s; te[ 8 ] *= s; te[ 12 ] *= s;\n\t\tte[ 1 ] *= s; te[ 5 ] *= s; te[ 9 ] *= s; te[ 13 ] *= s;\n\t\tte[ 2 ] *= s; te[ 6 ] *= s; te[ 10 ] *= s; te[ 14 ] *= s;\n\t\tte[ 3 ] *= s; te[ 7 ] *= s; te[ 11 ] *= s; te[ 15 ] *= s;\n\n\t\treturn this;\n\n\t},\n\n\tapplyToBufferAttribute: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function applyToBufferAttribute( attribute ) {\n\n\t\t\tfor ( var i = 0, l = attribute.count; i < l; i ++ ) {\n\n\t\t\t\tv1.x = attribute.getX( i );\n\t\t\t\tv1.y = attribute.getY( i );\n\t\t\t\tv1.z = attribute.getZ( i );\n\n\t\t\t\tv1.applyMatrix4( this );\n\n\t\t\t\tattribute.setXYZ( i, v1.x, v1.y, v1.z );\n\n\t\t\t}\n\n\t\t\treturn attribute;\n\n\t\t};\n\n\t}(),\n\n\tdeterminant: function () {\n\n\t\tvar te = this.elements;\n\n\t\tvar n11 = te[ 0 ], n12 = te[ 4 ], n13 = te[ 8 ], n14 = te[ 12 ];\n\t\tvar n21 = te[ 1 ], n22 = te[ 5 ], n23 = te[ 9 ], n24 = te[ 13 ];\n\t\tvar n31 = te[ 2 ], n32 = te[ 6 ], n33 = te[ 10 ], n34 = te[ 14 ];\n\t\tvar n41 = te[ 3 ], n42 = te[ 7 ], n43 = te[ 11 ], n44 = te[ 15 ];\n\n\t\t//TODO: make this more efficient\n\t\t//( based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm )\n\n\t\treturn (\n\t\t\tn41 * (\n\t\t\t\t+ n14 * n23 * n32\n\t\t\t\t - n13 * n24 * n32\n\t\t\t\t - n14 * n22 * n33\n\t\t\t\t + n12 * n24 * n33\n\t\t\t\t + n13 * n22 * n34\n\t\t\t\t - n12 * n23 * n34\n\t\t\t) +\n\t\t\tn42 * (\n\t\t\t\t+ n11 * n23 * n34\n\t\t\t\t - n11 * n24 * n33\n\t\t\t\t + n14 * n21 * n33\n\t\t\t\t - n13 * n21 * n34\n\t\t\t\t + n13 * n24 * n31\n\t\t\t\t - n14 * n23 * n31\n\t\t\t) +\n\t\t\tn43 * (\n\t\t\t\t+ n11 * n24 * n32\n\t\t\t\t - n11 * n22 * n34\n\t\t\t\t - n14 * n21 * n32\n\t\t\t\t + n12 * n21 * n34\n\t\t\t\t + n14 * n22 * n31\n\t\t\t\t - n12 * n24 * n31\n\t\t\t) +\n\t\t\tn44 * (\n\t\t\t\t- n13 * n22 * n31\n\t\t\t\t - n11 * n23 * n32\n\t\t\t\t + n11 * n22 * n33\n\t\t\t\t + n13 * n21 * n32\n\t\t\t\t - n12 * n21 * n33\n\t\t\t\t + n12 * n23 * n31\n\t\t\t)\n\n\t\t);\n\n\t},\n\n\ttranspose: function () {\n\n\t\tvar te = this.elements;\n\t\tvar tmp;\n\n\t\ttmp = te[ 1 ]; te[ 1 ] = te[ 4 ]; te[ 4 ] = tmp;\n\t\ttmp = te[ 2 ]; te[ 2 ] = te[ 8 ]; te[ 8 ] = tmp;\n\t\ttmp = te[ 6 ]; te[ 6 ] = te[ 9 ]; te[ 9 ] = tmp;\n\n\t\ttmp = te[ 3 ]; te[ 3 ] = te[ 12 ]; te[ 12 ] = tmp;\n\t\ttmp = te[ 7 ]; te[ 7 ] = te[ 13 ]; te[ 13 ] = tmp;\n\t\ttmp = te[ 11 ]; te[ 11 ] = te[ 14 ]; te[ 14 ] = tmp;\n\n\t\treturn this;\n\n\t},\n\n\tsetPosition: function ( v ) {\n\n\t\tvar te = this.elements;\n\n\t\tte[ 12 ] = v.x;\n\t\tte[ 13 ] = v.y;\n\t\tte[ 14 ] = v.z;\n\n\t\treturn this;\n\n\t},\n\n\tgetInverse: function ( m, throwOnDegenerate ) {\n\n\t\t// based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm\n\t\tvar te = this.elements,\n\t\t\tme = m.elements,\n\n\t\t\tn11 = me[ 0 ], n21 = me[ 1 ], n31 = me[ 2 ], n41 = me[ 3 ],\n\t\t\tn12 = me[ 4 ], n22 = me[ 5 ], n32 = me[ 6 ], n42 = me[ 7 ],\n\t\t\tn13 = me[ 8 ], n23 = me[ 9 ], n33 = me[ 10 ], n43 = me[ 11 ],\n\t\t\tn14 = me[ 12 ], n24 = me[ 13 ], n34 = me[ 14 ], n44 = me[ 15 ],\n\n\t\t\tt11 = n23 * n34 * n42 - n24 * n33 * n42 + n24 * n32 * n43 - n22 * n34 * n43 - n23 * n32 * n44 + n22 * n33 * n44,\n\t\t\tt12 = n14 * n33 * n42 - n13 * n34 * n42 - n14 * n32 * n43 + n12 * n34 * n43 + n13 * n32 * n44 - n12 * n33 * n44,\n\t\t\tt13 = n13 * n24 * n42 - n14 * n23 * n42 + n14 * n22 * n43 - n12 * n24 * n43 - n13 * n22 * n44 + n12 * n23 * n44,\n\t\t\tt14 = n14 * n23 * n32 - n13 * n24 * n32 - n14 * n22 * n33 + n12 * n24 * n33 + n13 * n22 * n34 - n12 * n23 * n34;\n\n\t\tvar det = n11 * t11 + n21 * t12 + n31 * t13 + n41 * t14;\n\n\t\tif ( det === 0 ) {\n\n\t\t\tvar msg = \"THREE.Matrix4: .getInverse() can't invert matrix, determinant is 0\";\n\n\t\t\tif ( throwOnDegenerate === true ) {\n\n\t\t\t\tthrow new Error( msg );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( msg );\n\n\t\t\t}\n\n\t\t\treturn this.identity();\n\n\t\t}\n\n\t\tvar detInv = 1 / det;\n\n\t\tte[ 0 ] = t11 * detInv;\n\t\tte[ 1 ] = ( n24 * n33 * n41 - n23 * n34 * n41 - n24 * n31 * n43 + n21 * n34 * n43 + n23 * n31 * n44 - n21 * n33 * n44 ) * detInv;\n\t\tte[ 2 ] = ( n22 * n34 * n41 - n24 * n32 * n41 + n24 * n31 * n42 - n21 * n34 * n42 - n22 * n31 * n44 + n21 * n32 * n44 ) * detInv;\n\t\tte[ 3 ] = ( n23 * n32 * n41 - n22 * n33 * n41 - n23 * n31 * n42 + n21 * n33 * n42 + n22 * n31 * n43 - n21 * n32 * n43 ) * detInv;\n\n\t\tte[ 4 ] = t12 * detInv;\n\t\tte[ 5 ] = ( n13 * n34 * n41 - n14 * n33 * n41 + n14 * n31 * n43 - n11 * n34 * n43 - n13 * n31 * n44 + n11 * n33 * n44 ) * detInv;\n\t\tte[ 6 ] = ( n14 * n32 * n41 - n12 * n34 * n41 - n14 * n31 * n42 + n11 * n34 * n42 + n12 * n31 * n44 - n11 * n32 * n44 ) * detInv;\n\t\tte[ 7 ] = ( n12 * n33 * n41 - n13 * n32 * n41 + n13 * n31 * n42 - n11 * n33 * n42 - n12 * n31 * n43 + n11 * n32 * n43 ) * detInv;\n\n\t\tte[ 8 ] = t13 * detInv;\n\t\tte[ 9 ] = ( n14 * n23 * n41 - n13 * n24 * n41 - n14 * n21 * n43 + n11 * n24 * n43 + n13 * n21 * n44 - n11 * n23 * n44 ) * detInv;\n\t\tte[ 10 ] = ( n12 * n24 * n41 - n14 * n22 * n41 + n14 * n21 * n42 - n11 * n24 * n42 - n12 * n21 * n44 + n11 * n22 * n44 ) * detInv;\n\t\tte[ 11 ] = ( n13 * n22 * n41 - n12 * n23 * n41 - n13 * n21 * n42 + n11 * n23 * n42 + n12 * n21 * n43 - n11 * n22 * n43 ) * detInv;\n\n\t\tte[ 12 ] = t14 * detInv;\n\t\tte[ 13 ] = ( n13 * n24 * n31 - n14 * n23 * n31 + n14 * n21 * n33 - n11 * n24 * n33 - n13 * n21 * n34 + n11 * n23 * n34 ) * detInv;\n\t\tte[ 14 ] = ( n14 * n22 * n31 - n12 * n24 * n31 - n14 * n21 * n32 + n11 * n24 * n32 + n12 * n21 * n34 - n11 * n22 * n34 ) * detInv;\n\t\tte[ 15 ] = ( n12 * n23 * n31 - n13 * n22 * n31 + n13 * n21 * n32 - n11 * n23 * n32 - n12 * n21 * n33 + n11 * n22 * n33 ) * detInv;\n\n\t\treturn this;\n\n\t},\n\n\tscale: function ( v ) {\n\n\t\tvar te = this.elements;\n\t\tvar x = v.x, y = v.y, z = v.z;\n\n\t\tte[ 0 ] *= x; te[ 4 ] *= y; te[ 8 ] *= z;\n\t\tte[ 1 ] *= x; te[ 5 ] *= y; te[ 9 ] *= z;\n\t\tte[ 2 ] *= x; te[ 6 ] *= y; te[ 10 ] *= z;\n\t\tte[ 3 ] *= x; te[ 7 ] *= y; te[ 11 ] *= z;\n\n\t\treturn this;\n\n\t},\n\n\tgetMaxScaleOnAxis: function () {\n\n\t\tvar te = this.elements;\n\n\t\tvar scaleXSq = te[ 0 ] * te[ 0 ] + te[ 1 ] * te[ 1 ] + te[ 2 ] * te[ 2 ];\n\t\tvar scaleYSq = te[ 4 ] * te[ 4 ] + te[ 5 ] * te[ 5 ] + te[ 6 ] * te[ 6 ];\n\t\tvar scaleZSq = te[ 8 ] * te[ 8 ] + te[ 9 ] * te[ 9 ] + te[ 10 ] * te[ 10 ];\n\n\t\treturn Math.sqrt( Math.max( scaleXSq, scaleYSq, scaleZSq ) );\n\n\t},\n\n\tmakeTranslation: function ( x, y, z ) {\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0, x,\n\t\t\t0, 1, 0, y,\n\t\t\t0, 0, 1, z,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t},\n\n\tmakeRotationX: function ( theta ) {\n\n\t\tvar c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0, 0,\n\t\t\t0, c, - s, 0,\n\t\t\t0, s, c, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t},\n\n\tmakeRotationY: function ( theta ) {\n\n\t\tvar c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\tthis.set(\n\n\t\t\t c, 0, s, 0,\n\t\t\t 0, 1, 0, 0,\n\t\t\t- s, 0, c, 0,\n\t\t\t 0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t},\n\n\tmakeRotationZ: function ( theta ) {\n\n\t\tvar c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\tthis.set(\n\n\t\t\tc, - s, 0, 0,\n\t\t\ts, c, 0, 0,\n\t\t\t0, 0, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t},\n\n\tmakeRotationAxis: function ( axis, angle ) {\n\n\t\t// Based on http://www.gamedev.net/reference/articles/article1199.asp\n\n\t\tvar c = Math.cos( angle );\n\t\tvar s = Math.sin( angle );\n\t\tvar t = 1 - c;\n\t\tvar x = axis.x, y = axis.y, z = axis.z;\n\t\tvar tx = t * x, ty = t * y;\n\n\t\tthis.set(\n\n\t\t\ttx * x + c, tx * y - s * z, tx * z + s * y, 0,\n\t\t\ttx * y + s * z, ty * y + c, ty * z - s * x, 0,\n\t\t\ttx * z - s * y, ty * z + s * x, t * z * z + c, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\t return this;\n\n\t},\n\n\tmakeScale: function ( x, y, z ) {\n\n\t\tthis.set(\n\n\t\t\tx, 0, 0, 0,\n\t\t\t0, y, 0, 0,\n\t\t\t0, 0, z, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t},\n\n\tmakeShear: function ( x, y, z ) {\n\n\t\tthis.set(\n\n\t\t\t1, y, z, 0,\n\t\t\tx, 1, z, 0,\n\t\t\tx, y, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t},\n\n\tcompose: function ( position, quaternion, scale ) {\n\n\t\tthis.makeRotationFromQuaternion( quaternion );\n\t\tthis.scale( scale );\n\t\tthis.setPosition( position );\n\n\t\treturn this;\n\n\t},\n\n\tdecompose: function () {\n\n\t\tvar vector = new Vector3();\n\t\tvar matrix = new Matrix4();\n\n\t\treturn function decompose( position, quaternion, scale ) {\n\n\t\t\tvar te = this.elements;\n\n\t\t\tvar sx = vector.set( te[ 0 ], te[ 1 ], te[ 2 ] ).length();\n\t\t\tvar sy = vector.set( te[ 4 ], te[ 5 ], te[ 6 ] ).length();\n\t\t\tvar sz = vector.set( te[ 8 ], te[ 9 ], te[ 10 ] ).length();\n\n\t\t\t// if determine is negative, we need to invert one scale\n\t\t\tvar det = this.determinant();\n\t\t\tif ( det < 0 ) sx = - sx;\n\n\t\t\tposition.x = te[ 12 ];\n\t\t\tposition.y = te[ 13 ];\n\t\t\tposition.z = te[ 14 ];\n\n\t\t\t// scale the rotation part\n\t\t\tmatrix.copy( this );\n\n\t\t\tvar invSX = 1 / sx;\n\t\t\tvar invSY = 1 / sy;\n\t\t\tvar invSZ = 1 / sz;\n\n\t\t\tmatrix.elements[ 0 ] *= invSX;\n\t\t\tmatrix.elements[ 1 ] *= invSX;\n\t\t\tmatrix.elements[ 2 ] *= invSX;\n\n\t\t\tmatrix.elements[ 4 ] *= invSY;\n\t\t\tmatrix.elements[ 5 ] *= invSY;\n\t\t\tmatrix.elements[ 6 ] *= invSY;\n\n\t\t\tmatrix.elements[ 8 ] *= invSZ;\n\t\t\tmatrix.elements[ 9 ] *= invSZ;\n\t\t\tmatrix.elements[ 10 ] *= invSZ;\n\n\t\t\tquaternion.setFromRotationMatrix( matrix );\n\n\t\t\tscale.x = sx;\n\t\t\tscale.y = sy;\n\t\t\tscale.z = sz;\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tmakePerspective: function ( left, right, top, bottom, near, far ) {\n\n\t\tif ( far === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.' );\n\n\t\t}\n\n\t\tvar te = this.elements;\n\t\tvar x = 2 * near / ( right - left );\n\t\tvar y = 2 * near / ( top - bottom );\n\n\t\tvar a = ( right + left ) / ( right - left );\n\t\tvar b = ( top + bottom ) / ( top - bottom );\n\t\tvar c = - ( far + near ) / ( far - near );\n\t\tvar d = - 2 * far * near / ( far - near );\n\n\t\tte[ 0 ] = x;\tte[ 4 ] = 0;\tte[ 8 ] = a;\tte[ 12 ] = 0;\n\t\tte[ 1 ] = 0;\tte[ 5 ] = y;\tte[ 9 ] = b;\tte[ 13 ] = 0;\n\t\tte[ 2 ] = 0;\tte[ 6 ] = 0;\tte[ 10 ] = c;\tte[ 14 ] = d;\n\t\tte[ 3 ] = 0;\tte[ 7 ] = 0;\tte[ 11 ] = - 1;\tte[ 15 ] = 0;\n\n\t\treturn this;\n\n\t},\n\n\tmakeOrthographic: function ( left, right, top, bottom, near, far ) {\n\n\t\tvar te = this.elements;\n\t\tvar w = 1.0 / ( right - left );\n\t\tvar h = 1.0 / ( top - bottom );\n\t\tvar p = 1.0 / ( far - near );\n\n\t\tvar x = ( right + left ) * w;\n\t\tvar y = ( top + bottom ) * h;\n\t\tvar z = ( far + near ) * p;\n\n\t\tte[ 0 ] = 2 * w;\tte[ 4 ] = 0;\tte[ 8 ] = 0;\tte[ 12 ] = - x;\n\t\tte[ 1 ] = 0;\tte[ 5 ] = 2 * h;\tte[ 9 ] = 0;\tte[ 13 ] = - y;\n\t\tte[ 2 ] = 0;\tte[ 6 ] = 0;\tte[ 10 ] = - 2 * p;\tte[ 14 ] = - z;\n\t\tte[ 3 ] = 0;\tte[ 7 ] = 0;\tte[ 11 ] = 0;\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t},\n\n\tequals: function ( matrix ) {\n\n\t\tvar te = this.elements;\n\t\tvar me = matrix.elements;\n\n\t\tfor ( var i = 0; i < 16; i ++ ) {\n\n\t\t\tif ( te[ i ] !== me[ i ] ) return false;\n\n\t\t}\n\n\t\treturn true;\n\n\t},\n\n\tfromArray: function ( array, offset ) {\n\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tfor ( var i = 0; i < 16; i ++ ) {\n\n\t\t\tthis.elements[ i ] = array[ i + offset ];\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\ttoArray: function ( array, offset ) {\n\n\t\tif ( array === undefined ) array = [];\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tvar te = this.elements;\n\n\t\tarray[ offset ] = te[ 0 ];\n\t\tarray[ offset + 1 ] = te[ 1 ];\n\t\tarray[ offset + 2 ] = te[ 2 ];\n\t\tarray[ offset + 3 ] = te[ 3 ];\n\n\t\tarray[ offset + 4 ] = te[ 4 ];\n\t\tarray[ offset + 5 ] = te[ 5 ];\n\t\tarray[ offset + 6 ] = te[ 6 ];\n\t\tarray[ offset + 7 ] = te[ 7 ];\n\n\t\tarray[ offset + 8 ] = te[ 8 ];\n\t\tarray[ offset + 9 ] = te[ 9 ];\n\t\tarray[ offset + 10 ] = te[ 10 ];\n\t\tarray[ offset + 11 ] = te[ 11 ];\n\n\t\tarray[ offset + 12 ] = te[ 12 ];\n\t\tarray[ offset + 13 ] = te[ 13 ];\n\t\tarray[ offset + 14 ] = te[ 14 ];\n\t\tarray[ offset + 15 ] = te[ 15 ];\n\n\t\treturn array;\n\n\t}\n\n} );\n\n/**\n * @author mikael emtinger / http://gomo.se/\n * @author alteredq / http://alteredqualia.com/\n * @author WestLangley / http://github.com/WestLangley\n * @author bhouston / http://clara.io\n */\n\nfunction Quaternion( x, y, z, w ) {\n\n\tthis._x = x || 0;\n\tthis._y = y || 0;\n\tthis._z = z || 0;\n\tthis._w = ( w !== undefined ) ? w : 1;\n\n}\n\nObject.assign( Quaternion, {\n\n\tslerp: function ( qa, qb, qm, t ) {\n\n\t\treturn qm.copy( qa ).slerp( qb, t );\n\n\t},\n\n\tslerpFlat: function ( dst, dstOffset, src0, srcOffset0, src1, srcOffset1, t ) {\n\n\t\t// fuzz-free, array-based Quaternion SLERP operation\n\n\t\tvar x0 = src0[ srcOffset0 + 0 ],\n\t\t\ty0 = src0[ srcOffset0 + 1 ],\n\t\t\tz0 = src0[ srcOffset0 + 2 ],\n\t\t\tw0 = src0[ srcOffset0 + 3 ],\n\n\t\t\tx1 = src1[ srcOffset1 + 0 ],\n\t\t\ty1 = src1[ srcOffset1 + 1 ],\n\t\t\tz1 = src1[ srcOffset1 + 2 ],\n\t\t\tw1 = src1[ srcOffset1 + 3 ];\n\n\t\tif ( w0 !== w1 || x0 !== x1 || y0 !== y1 || z0 !== z1 ) {\n\n\t\t\tvar s = 1 - t,\n\n\t\t\t\tcos = x0 * x1 + y0 * y1 + z0 * z1 + w0 * w1,\n\n\t\t\t\tdir = ( cos >= 0 ? 1 : - 1 ),\n\t\t\t\tsqrSin = 1 - cos * cos;\n\n\t\t\t// Skip the Slerp for tiny steps to avoid numeric problems:\n\t\t\tif ( sqrSin > Number.EPSILON ) {\n\n\t\t\t\tvar sin = Math.sqrt( sqrSin ),\n\t\t\t\t\tlen = Math.atan2( sin, cos * dir );\n\n\t\t\t\ts = Math.sin( s * len ) / sin;\n\t\t\t\tt = Math.sin( t * len ) / sin;\n\n\t\t\t}\n\n\t\t\tvar tDir = t * dir;\n\n\t\t\tx0 = x0 * s + x1 * tDir;\n\t\t\ty0 = y0 * s + y1 * tDir;\n\t\t\tz0 = z0 * s + z1 * tDir;\n\t\t\tw0 = w0 * s + w1 * tDir;\n\n\t\t\t// Normalize in case we just did a lerp:\n\t\t\tif ( s === 1 - t ) {\n\n\t\t\t\tvar f = 1 / Math.sqrt( x0 * x0 + y0 * y0 + z0 * z0 + w0 * w0 );\n\n\t\t\t\tx0 *= f;\n\t\t\t\ty0 *= f;\n\t\t\t\tz0 *= f;\n\t\t\t\tw0 *= f;\n\n\t\t\t}\n\n\t\t}\n\n\t\tdst[ dstOffset ] = x0;\n\t\tdst[ dstOffset + 1 ] = y0;\n\t\tdst[ dstOffset + 2 ] = z0;\n\t\tdst[ dstOffset + 3 ] = w0;\n\n\t}\n\n} );\n\nObject.defineProperties( Quaternion.prototype, {\n\n\tx: {\n\n\t\tget: function () {\n\n\t\t\treturn this._x;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tthis._x = value;\n\t\t\tthis.onChangeCallback();\n\n\t\t}\n\n\t},\n\n\ty: {\n\n\t\tget: function () {\n\n\t\t\treturn this._y;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tthis._y = value;\n\t\t\tthis.onChangeCallback();\n\n\t\t}\n\n\t},\n\n\tz: {\n\n\t\tget: function () {\n\n\t\t\treturn this._z;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tthis._z = value;\n\t\t\tthis.onChangeCallback();\n\n\t\t}\n\n\t},\n\n\tw: {\n\n\t\tget: function () {\n\n\t\t\treturn this._w;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tthis._w = value;\n\t\t\tthis.onChangeCallback();\n\n\t\t}\n\n\t}\n\n} );\n\nObject.assign( Quaternion.prototype, {\n\n\tset: function ( x, y, z, w ) {\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._w = w;\n\n\t\tthis.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor( this._x, this._y, this._z, this._w );\n\n\t},\n\n\tcopy: function ( quaternion ) {\n\n\t\tthis._x = quaternion.x;\n\t\tthis._y = quaternion.y;\n\t\tthis._z = quaternion.z;\n\t\tthis._w = quaternion.w;\n\n\t\tthis.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tsetFromEuler: function ( euler, update ) {\n\n\t\tif ( ! ( euler && euler.isEuler ) ) {\n\n\t\t\tthrow new Error( 'THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.' );\n\n\t\t}\n\n\t\tvar x = euler._x, y = euler._y, z = euler._z, order = euler.order;\n\n\t\t// http://www.mathworks.com/matlabcentral/fileexchange/\n\t\t// \t20696-function-to-convert-between-dcm-euler-angles-quaternions-and-euler-vectors/\n\t\t//\tcontent/SpinCalc.m\n\n\t\tvar cos = Math.cos;\n\t\tvar sin = Math.sin;\n\n\t\tvar c1 = cos( x / 2 );\n\t\tvar c2 = cos( y / 2 );\n\t\tvar c3 = cos( z / 2 );\n\n\t\tvar s1 = sin( x / 2 );\n\t\tvar s2 = sin( y / 2 );\n\t\tvar s3 = sin( z / 2 );\n\n\t\tif ( order === 'XYZ' ) {\n\n\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\n\t\t} else if ( order === 'YXZ' ) {\n\n\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\n\t\t} else if ( order === 'ZXY' ) {\n\n\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\n\t\t} else if ( order === 'ZYX' ) {\n\n\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\n\t\t} else if ( order === 'YZX' ) {\n\n\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\n\t\t} else if ( order === 'XZY' ) {\n\n\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\n\t\t}\n\n\t\tif ( update !== false ) this.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tsetFromAxisAngle: function ( axis, angle ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/angleToQuaternion/index.htm\n\n\t\t// assumes axis is normalized\n\n\t\tvar halfAngle = angle / 2, s = Math.sin( halfAngle );\n\n\t\tthis._x = axis.x * s;\n\t\tthis._y = axis.y * s;\n\t\tthis._z = axis.z * s;\n\t\tthis._w = Math.cos( halfAngle );\n\n\t\tthis.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tsetFromRotationMatrix: function ( m ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToQuaternion/index.htm\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tvar te = m.elements,\n\n\t\t\tm11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ],\n\t\t\tm21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ],\n\t\t\tm31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ],\n\n\t\t\ttrace = m11 + m22 + m33,\n\t\t\ts;\n\n\t\tif ( trace > 0 ) {\n\n\t\t\ts = 0.5 / Math.sqrt( trace + 1.0 );\n\n\t\t\tthis._w = 0.25 / s;\n\t\t\tthis._x = ( m32 - m23 ) * s;\n\t\t\tthis._y = ( m13 - m31 ) * s;\n\t\t\tthis._z = ( m21 - m12 ) * s;\n\n\t\t} else if ( m11 > m22 && m11 > m33 ) {\n\n\t\t\ts = 2.0 * Math.sqrt( 1.0 + m11 - m22 - m33 );\n\n\t\t\tthis._w = ( m32 - m23 ) / s;\n\t\t\tthis._x = 0.25 * s;\n\t\t\tthis._y = ( m12 + m21 ) / s;\n\t\t\tthis._z = ( m13 + m31 ) / s;\n\n\t\t} else if ( m22 > m33 ) {\n\n\t\t\ts = 2.0 * Math.sqrt( 1.0 + m22 - m11 - m33 );\n\n\t\t\tthis._w = ( m13 - m31 ) / s;\n\t\t\tthis._x = ( m12 + m21 ) / s;\n\t\t\tthis._y = 0.25 * s;\n\t\t\tthis._z = ( m23 + m32 ) / s;\n\n\t\t} else {\n\n\t\t\ts = 2.0 * Math.sqrt( 1.0 + m33 - m11 - m22 );\n\n\t\t\tthis._w = ( m21 - m12 ) / s;\n\t\t\tthis._x = ( m13 + m31 ) / s;\n\t\t\tthis._y = ( m23 + m32 ) / s;\n\t\t\tthis._z = 0.25 * s;\n\n\t\t}\n\n\t\tthis.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tsetFromUnitVectors: function () {\n\n\t\t// assumes direction vectors vFrom and vTo are normalized\n\n\t\tvar v1 = new Vector3();\n\t\tvar r;\n\n\t\tvar EPS = 0.000001;\n\n\t\treturn function setFromUnitVectors( vFrom, vTo ) {\n\n\t\t\tif ( v1 === undefined ) v1 = new Vector3();\n\n\t\t\tr = vFrom.dot( vTo ) + 1;\n\n\t\t\tif ( r < EPS ) {\n\n\t\t\t\tr = 0;\n\n\t\t\t\tif ( Math.abs( vFrom.x ) > Math.abs( vFrom.z ) ) {\n\n\t\t\t\t\tv1.set( - vFrom.y, vFrom.x, 0 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tv1.set( 0, - vFrom.z, vFrom.y );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tv1.crossVectors( vFrom, vTo );\n\n\t\t\t}\n\n\t\t\tthis._x = v1.x;\n\t\t\tthis._y = v1.y;\n\t\t\tthis._z = v1.z;\n\t\t\tthis._w = r;\n\n\t\t\treturn this.normalize();\n\n\t\t};\n\n\t}(),\n\n\tinverse: function () {\n\n\t\t// quaternion is assumed to have unit length\n\n\t\treturn this.conjugate();\n\n\t},\n\n\tconjugate: function () {\n\n\t\tthis._x *= - 1;\n\t\tthis._y *= - 1;\n\t\tthis._z *= - 1;\n\n\t\tthis.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tdot: function ( v ) {\n\n\t\treturn this._x * v._x + this._y * v._y + this._z * v._z + this._w * v._w;\n\n\t},\n\n\tlengthSq: function () {\n\n\t\treturn this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w;\n\n\t},\n\n\tlength: function () {\n\n\t\treturn Math.sqrt( this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w );\n\n\t},\n\n\tnormalize: function () {\n\n\t\tvar l = this.length();\n\n\t\tif ( l === 0 ) {\n\n\t\t\tthis._x = 0;\n\t\t\tthis._y = 0;\n\t\t\tthis._z = 0;\n\t\t\tthis._w = 1;\n\n\t\t} else {\n\n\t\t\tl = 1 / l;\n\n\t\t\tthis._x = this._x * l;\n\t\t\tthis._y = this._y * l;\n\t\t\tthis._z = this._z * l;\n\t\t\tthis._w = this._w * l;\n\n\t\t}\n\n\t\tthis.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tmultiply: function ( q, p ) {\n\n\t\tif ( p !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead.' );\n\t\t\treturn this.multiplyQuaternions( q, p );\n\n\t\t}\n\n\t\treturn this.multiplyQuaternions( this, q );\n\n\t},\n\n\tpremultiply: function ( q ) {\n\n\t\treturn this.multiplyQuaternions( q, this );\n\n\t},\n\n\tmultiplyQuaternions: function ( a, b ) {\n\n\t\t// from http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/code/index.htm\n\n\t\tvar qax = a._x, qay = a._y, qaz = a._z, qaw = a._w;\n\t\tvar qbx = b._x, qby = b._y, qbz = b._z, qbw = b._w;\n\n\t\tthis._x = qax * qbw + qaw * qbx + qay * qbz - qaz * qby;\n\t\tthis._y = qay * qbw + qaw * qby + qaz * qbx - qax * qbz;\n\t\tthis._z = qaz * qbw + qaw * qbz + qax * qby - qay * qbx;\n\t\tthis._w = qaw * qbw - qax * qbx - qay * qby - qaz * qbz;\n\n\t\tthis.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tslerp: function ( qb, t ) {\n\n\t\tif ( t === 0 ) return this;\n\t\tif ( t === 1 ) return this.copy( qb );\n\n\t\tvar x = this._x, y = this._y, z = this._z, w = this._w;\n\n\t\t// http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/slerp/\n\n\t\tvar cosHalfTheta = w * qb._w + x * qb._x + y * qb._y + z * qb._z;\n\n\t\tif ( cosHalfTheta < 0 ) {\n\n\t\t\tthis._w = - qb._w;\n\t\t\tthis._x = - qb._x;\n\t\t\tthis._y = - qb._y;\n\t\t\tthis._z = - qb._z;\n\n\t\t\tcosHalfTheta = - cosHalfTheta;\n\n\t\t} else {\n\n\t\t\tthis.copy( qb );\n\n\t\t}\n\n\t\tif ( cosHalfTheta >= 1.0 ) {\n\n\t\t\tthis._w = w;\n\t\t\tthis._x = x;\n\t\t\tthis._y = y;\n\t\t\tthis._z = z;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tvar sinHalfTheta = Math.sqrt( 1.0 - cosHalfTheta * cosHalfTheta );\n\n\t\tif ( Math.abs( sinHalfTheta ) < 0.001 ) {\n\n\t\t\tthis._w = 0.5 * ( w + this._w );\n\t\t\tthis._x = 0.5 * ( x + this._x );\n\t\t\tthis._y = 0.5 * ( y + this._y );\n\t\t\tthis._z = 0.5 * ( z + this._z );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tvar halfTheta = Math.atan2( sinHalfTheta, cosHalfTheta );\n\t\tvar ratioA = Math.sin( ( 1 - t ) * halfTheta ) / sinHalfTheta,\n\t\t\tratioB = Math.sin( t * halfTheta ) / sinHalfTheta;\n\n\t\tthis._w = ( w * ratioA + this._w * ratioB );\n\t\tthis._x = ( x * ratioA + this._x * ratioB );\n\t\tthis._y = ( y * ratioA + this._y * ratioB );\n\t\tthis._z = ( z * ratioA + this._z * ratioB );\n\n\t\tthis.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tequals: function ( quaternion ) {\n\n\t\treturn ( quaternion._x === this._x ) && ( quaternion._y === this._y ) && ( quaternion._z === this._z ) && ( quaternion._w === this._w );\n\n\t},\n\n\tfromArray: function ( array, offset ) {\n\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tthis._x = array[ offset ];\n\t\tthis._y = array[ offset + 1 ];\n\t\tthis._z = array[ offset + 2 ];\n\t\tthis._w = array[ offset + 3 ];\n\n\t\tthis.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\ttoArray: function ( array, offset ) {\n\n\t\tif ( array === undefined ) array = [];\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tarray[ offset ] = this._x;\n\t\tarray[ offset + 1 ] = this._y;\n\t\tarray[ offset + 2 ] = this._z;\n\t\tarray[ offset + 3 ] = this._w;\n\n\t\treturn array;\n\n\t},\n\n\tonChange: function ( callback ) {\n\n\t\tthis.onChangeCallback = callback;\n\n\t\treturn this;\n\n\t},\n\n\tonChangeCallback: function () {}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author kile / http://kile.stravaganza.org/\n * @author philogb / http://blog.thejit.org/\n * @author mikael emtinger / http://gomo.se/\n * @author egraether / http://egraether.com/\n * @author WestLangley / http://github.com/WestLangley\n */\n\nfunction Vector3( x, y, z ) {\n\n\tthis.x = x || 0;\n\tthis.y = y || 0;\n\tthis.z = z || 0;\n\n}\n\nObject.assign( Vector3.prototype, {\n\n\tisVector3: true,\n\n\tset: function ( x, y, z ) {\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\n\t\treturn this;\n\n\t},\n\n\tsetScalar: function ( scalar ) {\n\n\t\tthis.x = scalar;\n\t\tthis.y = scalar;\n\t\tthis.z = scalar;\n\n\t\treturn this;\n\n\t},\n\n\tsetX: function ( x ) {\n\n\t\tthis.x = x;\n\n\t\treturn this;\n\n\t},\n\n\tsetY: function ( y ) {\n\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t},\n\n\tsetZ: function ( z ) {\n\n\t\tthis.z = z;\n\n\t\treturn this;\n\n\t},\n\n\tsetComponent: function ( index, value ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: this.x = value; break;\n\t\t\tcase 1: this.y = value; break;\n\t\t\tcase 2: this.z = value; break;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tgetComponent: function ( index ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: return this.x;\n\t\t\tcase 1: return this.y;\n\t\t\tcase 2: return this.z;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor( this.x, this.y, this.z );\n\n\t},\n\n\tcopy: function ( v ) {\n\n\t\tthis.x = v.x;\n\t\tthis.y = v.y;\n\t\tthis.z = v.z;\n\n\t\treturn this;\n\n\t},\n\n\tadd: function ( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' );\n\t\t\treturn this.addVectors( v, w );\n\n\t\t}\n\n\t\tthis.x += v.x;\n\t\tthis.y += v.y;\n\t\tthis.z += v.z;\n\n\t\treturn this;\n\n\t},\n\n\taddScalar: function ( s ) {\n\n\t\tthis.x += s;\n\t\tthis.y += s;\n\t\tthis.z += s;\n\n\t\treturn this;\n\n\t},\n\n\taddVectors: function ( a, b ) {\n\n\t\tthis.x = a.x + b.x;\n\t\tthis.y = a.y + b.y;\n\t\tthis.z = a.z + b.z;\n\n\t\treturn this;\n\n\t},\n\n\taddScaledVector: function ( v, s ) {\n\n\t\tthis.x += v.x * s;\n\t\tthis.y += v.y * s;\n\t\tthis.z += v.z * s;\n\n\t\treturn this;\n\n\t},\n\n\tsub: function ( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' );\n\t\t\treturn this.subVectors( v, w );\n\n\t\t}\n\n\t\tthis.x -= v.x;\n\t\tthis.y -= v.y;\n\t\tthis.z -= v.z;\n\n\t\treturn this;\n\n\t},\n\n\tsubScalar: function ( s ) {\n\n\t\tthis.x -= s;\n\t\tthis.y -= s;\n\t\tthis.z -= s;\n\n\t\treturn this;\n\n\t},\n\n\tsubVectors: function ( a, b ) {\n\n\t\tthis.x = a.x - b.x;\n\t\tthis.y = a.y - b.y;\n\t\tthis.z = a.z - b.z;\n\n\t\treturn this;\n\n\t},\n\n\tmultiply: function ( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead.' );\n\t\t\treturn this.multiplyVectors( v, w );\n\n\t\t}\n\n\t\tthis.x *= v.x;\n\t\tthis.y *= v.y;\n\t\tthis.z *= v.z;\n\n\t\treturn this;\n\n\t},\n\n\tmultiplyScalar: function ( scalar ) {\n\n\t\tthis.x *= scalar;\n\t\tthis.y *= scalar;\n\t\tthis.z *= scalar;\n\n\t\treturn this;\n\n\t},\n\n\tmultiplyVectors: function ( a, b ) {\n\n\t\tthis.x = a.x * b.x;\n\t\tthis.y = a.y * b.y;\n\t\tthis.z = a.z * b.z;\n\n\t\treturn this;\n\n\t},\n\n\tapplyEuler: function () {\n\n\t\tvar quaternion = new Quaternion();\n\n\t\treturn function applyEuler( euler ) {\n\n\t\t\tif ( ! ( euler && euler.isEuler ) ) {\n\n\t\t\t\tconsole.error( 'THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.' );\n\n\t\t\t}\n\n\t\t\treturn this.applyQuaternion( quaternion.setFromEuler( euler ) );\n\n\t\t};\n\n\t}(),\n\n\tapplyAxisAngle: function () {\n\n\t\tvar quaternion = new Quaternion();\n\n\t\treturn function applyAxisAngle( axis, angle ) {\n\n\t\t\treturn this.applyQuaternion( quaternion.setFromAxisAngle( axis, angle ) );\n\n\t\t};\n\n\t}(),\n\n\tapplyMatrix3: function ( m ) {\n\n\t\tvar x = this.x, y = this.y, z = this.z;\n\t\tvar e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 3 ] * y + e[ 6 ] * z;\n\t\tthis.y = e[ 1 ] * x + e[ 4 ] * y + e[ 7 ] * z;\n\t\tthis.z = e[ 2 ] * x + e[ 5 ] * y + e[ 8 ] * z;\n\n\t\treturn this;\n\n\t},\n\n\tapplyMatrix4: function ( m ) {\n\n\t\tvar x = this.x, y = this.y, z = this.z;\n\t\tvar e = m.elements;\n\n\t\tvar w = 1 / ( e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] );\n\n\t\tthis.x = ( e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] ) * w;\n\t\tthis.y = ( e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] ) * w;\n\t\tthis.z = ( e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] ) * w;\n\n\t\treturn this;\n\n\t},\n\n\tapplyQuaternion: function ( q ) {\n\n\t\tvar x = this.x, y = this.y, z = this.z;\n\t\tvar qx = q.x, qy = q.y, qz = q.z, qw = q.w;\n\n\t\t// calculate quat * vector\n\n\t\tvar ix = qw * x + qy * z - qz * y;\n\t\tvar iy = qw * y + qz * x - qx * z;\n\t\tvar iz = qw * z + qx * y - qy * x;\n\t\tvar iw = - qx * x - qy * y - qz * z;\n\n\t\t// calculate result * inverse quat\n\n\t\tthis.x = ix * qw + iw * - qx + iy * - qz - iz * - qy;\n\t\tthis.y = iy * qw + iw * - qy + iz * - qx - ix * - qz;\n\t\tthis.z = iz * qw + iw * - qz + ix * - qy - iy * - qx;\n\n\t\treturn this;\n\n\t},\n\n\tproject: function () {\n\n\t\tvar matrix = new Matrix4();\n\n\t\treturn function project( camera ) {\n\n\t\t\tmatrix.multiplyMatrices( camera.projectionMatrix, matrix.getInverse( camera.matrixWorld ) );\n\t\t\treturn this.applyMatrix4( matrix );\n\n\t\t};\n\n\t}(),\n\n\tunproject: function () {\n\n\t\tvar matrix = new Matrix4();\n\n\t\treturn function unproject( camera ) {\n\n\t\t\tmatrix.multiplyMatrices( camera.matrixWorld, matrix.getInverse( camera.projectionMatrix ) );\n\t\t\treturn this.applyMatrix4( matrix );\n\n\t\t};\n\n\t}(),\n\n\ttransformDirection: function ( m ) {\n\n\t\t// input: THREE.Matrix4 affine matrix\n\t\t// vector interpreted as a direction\n\n\t\tvar x = this.x, y = this.y, z = this.z;\n\t\tvar e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z;\n\t\tthis.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z;\n\t\tthis.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z;\n\n\t\treturn this.normalize();\n\n\t},\n\n\tdivide: function ( v ) {\n\n\t\tthis.x /= v.x;\n\t\tthis.y /= v.y;\n\t\tthis.z /= v.z;\n\n\t\treturn this;\n\n\t},\n\n\tdivideScalar: function ( scalar ) {\n\n\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t},\n\n\tmin: function ( v ) {\n\n\t\tthis.x = Math.min( this.x, v.x );\n\t\tthis.y = Math.min( this.y, v.y );\n\t\tthis.z = Math.min( this.z, v.z );\n\n\t\treturn this;\n\n\t},\n\n\tmax: function ( v ) {\n\n\t\tthis.x = Math.max( this.x, v.x );\n\t\tthis.y = Math.max( this.y, v.y );\n\t\tthis.z = Math.max( this.z, v.z );\n\n\t\treturn this;\n\n\t},\n\n\tclamp: function ( min, max ) {\n\n\t\t// assumes min < max, componentwise\n\n\t\tthis.x = Math.max( min.x, Math.min( max.x, this.x ) );\n\t\tthis.y = Math.max( min.y, Math.min( max.y, this.y ) );\n\t\tthis.z = Math.max( min.z, Math.min( max.z, this.z ) );\n\n\t\treturn this;\n\n\t},\n\n\tclampScalar: function () {\n\n\t\tvar min = new Vector3();\n\t\tvar max = new Vector3();\n\n\t\treturn function clampScalar( minVal, maxVal ) {\n\n\t\t\tmin.set( minVal, minVal, minVal );\n\t\t\tmax.set( maxVal, maxVal, maxVal );\n\n\t\t\treturn this.clamp( min, max );\n\n\t\t};\n\n\t}(),\n\n\tclampLength: function ( min, max ) {\n\n\t\tvar length = this.length();\n\n\t\treturn this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );\n\n\t},\n\n\tfloor: function () {\n\n\t\tthis.x = Math.floor( this.x );\n\t\tthis.y = Math.floor( this.y );\n\t\tthis.z = Math.floor( this.z );\n\n\t\treturn this;\n\n\t},\n\n\tceil: function () {\n\n\t\tthis.x = Math.ceil( this.x );\n\t\tthis.y = Math.ceil( this.y );\n\t\tthis.z = Math.ceil( this.z );\n\n\t\treturn this;\n\n\t},\n\n\tround: function () {\n\n\t\tthis.x = Math.round( this.x );\n\t\tthis.y = Math.round( this.y );\n\t\tthis.z = Math.round( this.z );\n\n\t\treturn this;\n\n\t},\n\n\troundToZero: function () {\n\n\t\tthis.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x );\n\t\tthis.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y );\n\t\tthis.z = ( this.z < 0 ) ? Math.ceil( this.z ) : Math.floor( this.z );\n\n\t\treturn this;\n\n\t},\n\n\tnegate: function () {\n\n\t\tthis.x = - this.x;\n\t\tthis.y = - this.y;\n\t\tthis.z = - this.z;\n\n\t\treturn this;\n\n\t},\n\n\tdot: function ( v ) {\n\n\t\treturn this.x * v.x + this.y * v.y + this.z * v.z;\n\n\t},\n\n\t// TODO lengthSquared?\n\n\tlengthSq: function () {\n\n\t\treturn this.x * this.x + this.y * this.y + this.z * this.z;\n\n\t},\n\n\tlength: function () {\n\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z );\n\n\t},\n\n\tmanhattanLength: function () {\n\n\t\treturn Math.abs( this.x ) + Math.abs( this.y ) + Math.abs( this.z );\n\n\t},\n\n\tnormalize: function () {\n\n\t\treturn this.divideScalar( this.length() || 1 );\n\n\t},\n\n\tsetLength: function ( length ) {\n\n\t\treturn this.normalize().multiplyScalar( length );\n\n\t},\n\n\tlerp: function ( v, alpha ) {\n\n\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\tthis.y += ( v.y - this.y ) * alpha;\n\t\tthis.z += ( v.z - this.z ) * alpha;\n\n\t\treturn this;\n\n\t},\n\n\tlerpVectors: function ( v1, v2, alpha ) {\n\n\t\treturn this.subVectors( v2, v1 ).multiplyScalar( alpha ).add( v1 );\n\n\t},\n\n\tcross: function ( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead.' );\n\t\t\treturn this.crossVectors( v, w );\n\n\t\t}\n\n\t\treturn this.crossVectors( this, v );\n\n\t},\n\n\tcrossVectors: function ( a, b ) {\n\n\t\tvar ax = a.x, ay = a.y, az = a.z;\n\t\tvar bx = b.x, by = b.y, bz = b.z;\n\n\t\tthis.x = ay * bz - az * by;\n\t\tthis.y = az * bx - ax * bz;\n\t\tthis.z = ax * by - ay * bx;\n\n\t\treturn this;\n\n\t},\n\n\tprojectOnVector: function ( vector ) {\n\n\t\tvar scalar = vector.dot( this ) / vector.lengthSq();\n\n\t\treturn this.copy( vector ).multiplyScalar( scalar );\n\n\t},\n\n\tprojectOnPlane: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function projectOnPlane( planeNormal ) {\n\n\t\t\tv1.copy( this ).projectOnVector( planeNormal );\n\n\t\t\treturn this.sub( v1 );\n\n\t\t};\n\n\t}(),\n\n\treflect: function () {\n\n\t\t// reflect incident vector off plane orthogonal to normal\n\t\t// normal is assumed to have unit length\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function reflect( normal ) {\n\n\t\t\treturn this.sub( v1.copy( normal ).multiplyScalar( 2 * this.dot( normal ) ) );\n\n\t\t};\n\n\t}(),\n\n\tangleTo: function ( v ) {\n\n\t\tvar theta = this.dot( v ) / ( Math.sqrt( this.lengthSq() * v.lengthSq() ) );\n\n\t\t// clamp, to handle numerical problems\n\n\t\treturn Math.acos( _Math.clamp( theta, - 1, 1 ) );\n\n\t},\n\n\tdistanceTo: function ( v ) {\n\n\t\treturn Math.sqrt( this.distanceToSquared( v ) );\n\n\t},\n\n\tdistanceToSquared: function ( v ) {\n\n\t\tvar dx = this.x - v.x, dy = this.y - v.y, dz = this.z - v.z;\n\n\t\treturn dx * dx + dy * dy + dz * dz;\n\n\t},\n\n\tmanhattanDistanceTo: function ( v ) {\n\n\t\treturn Math.abs( this.x - v.x ) + Math.abs( this.y - v.y ) + Math.abs( this.z - v.z );\n\n\t},\n\n\tsetFromSpherical: function ( s ) {\n\n\t\tvar sinPhiRadius = Math.sin( s.phi ) * s.radius;\n\n\t\tthis.x = sinPhiRadius * Math.sin( s.theta );\n\t\tthis.y = Math.cos( s.phi ) * s.radius;\n\t\tthis.z = sinPhiRadius * Math.cos( s.theta );\n\n\t\treturn this;\n\n\t},\n\n\tsetFromCylindrical: function ( c ) {\n\n\t\tthis.x = c.radius * Math.sin( c.theta );\n\t\tthis.y = c.y;\n\t\tthis.z = c.radius * Math.cos( c.theta );\n\n\t\treturn this;\n\n\t},\n\n\tsetFromMatrixPosition: function ( m ) {\n\n\t\tvar e = m.elements;\n\n\t\tthis.x = e[ 12 ];\n\t\tthis.y = e[ 13 ];\n\t\tthis.z = e[ 14 ];\n\n\t\treturn this;\n\n\t},\n\n\tsetFromMatrixScale: function ( m ) {\n\n\t\tvar sx = this.setFromMatrixColumn( m, 0 ).length();\n\t\tvar sy = this.setFromMatrixColumn( m, 1 ).length();\n\t\tvar sz = this.setFromMatrixColumn( m, 2 ).length();\n\n\t\tthis.x = sx;\n\t\tthis.y = sy;\n\t\tthis.z = sz;\n\n\t\treturn this;\n\n\t},\n\n\tsetFromMatrixColumn: function ( m, index ) {\n\n\t\treturn this.fromArray( m.elements, index * 4 );\n\n\t},\n\n\tequals: function ( v ) {\n\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) );\n\n\t},\n\n\tfromArray: function ( array, offset ) {\n\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tthis.x = array[ offset ];\n\t\tthis.y = array[ offset + 1 ];\n\t\tthis.z = array[ offset + 2 ];\n\n\t\treturn this;\n\n\t},\n\n\ttoArray: function ( array, offset ) {\n\n\t\tif ( array === undefined ) array = [];\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tarray[ offset ] = this.x;\n\t\tarray[ offset + 1 ] = this.y;\n\t\tarray[ offset + 2 ] = this.z;\n\n\t\treturn array;\n\n\t},\n\n\tfromBufferAttribute: function ( attribute, index, offset ) {\n\n\t\tif ( offset !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: offset has been removed from .fromBufferAttribute().' );\n\n\t\t}\n\n\t\tthis.x = attribute.getX( index );\n\t\tthis.y = attribute.getY( index );\n\t\tthis.z = attribute.getZ( index );\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author alteredq / http://alteredqualia.com/\n * @author WestLangley / http://github.com/WestLangley\n * @author bhouston / http://clara.io\n * @author tschw\n */\n\nfunction Matrix3() {\n\n\tthis.elements = [\n\n\t\t1, 0, 0,\n\t\t0, 1, 0,\n\t\t0, 0, 1\n\n\t];\n\n\tif ( arguments.length > 0 ) {\n\n\t\tconsole.error( 'THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.' );\n\n\t}\n\n}\n\nObject.assign( Matrix3.prototype, {\n\n\tisMatrix3: true,\n\n\tset: function ( n11, n12, n13, n21, n22, n23, n31, n32, n33 ) {\n\n\t\tvar te = this.elements;\n\n\t\tte[ 0 ] = n11; te[ 1 ] = n21; te[ 2 ] = n31;\n\t\tte[ 3 ] = n12; te[ 4 ] = n22; te[ 5 ] = n32;\n\t\tte[ 6 ] = n13; te[ 7 ] = n23; te[ 8 ] = n33;\n\n\t\treturn this;\n\n\t},\n\n\tidentity: function () {\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0,\n\t\t\t0, 1, 0,\n\t\t\t0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().fromArray( this.elements );\n\n\t},\n\n\tcopy: function ( m ) {\n\n\t\tvar te = this.elements;\n\t\tvar me = m.elements;\n\n\t\tte[ 0 ] = me[ 0 ]; te[ 1 ] = me[ 1 ]; te[ 2 ] = me[ 2 ];\n\t\tte[ 3 ] = me[ 3 ]; te[ 4 ] = me[ 4 ]; te[ 5 ] = me[ 5 ];\n\t\tte[ 6 ] = me[ 6 ]; te[ 7 ] = me[ 7 ]; te[ 8 ] = me[ 8 ];\n\n\t\treturn this;\n\n\t},\n\n\tsetFromMatrix4: function ( m ) {\n\n\t\tvar me = m.elements;\n\n\t\tthis.set(\n\n\t\t\tme[ 0 ], me[ 4 ], me[ 8 ],\n\t\t\tme[ 1 ], me[ 5 ], me[ 9 ],\n\t\t\tme[ 2 ], me[ 6 ], me[ 10 ]\n\n\t\t);\n\n\t\treturn this;\n\n\t},\n\n\tapplyToBufferAttribute: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function applyToBufferAttribute( attribute ) {\n\n\t\t\tfor ( var i = 0, l = attribute.count; i < l; i ++ ) {\n\n\t\t\t\tv1.x = attribute.getX( i );\n\t\t\t\tv1.y = attribute.getY( i );\n\t\t\t\tv1.z = attribute.getZ( i );\n\n\t\t\t\tv1.applyMatrix3( this );\n\n\t\t\t\tattribute.setXYZ( i, v1.x, v1.y, v1.z );\n\n\t\t\t}\n\n\t\t\treturn attribute;\n\n\t\t};\n\n\t}(),\n\n\tmultiply: function ( m ) {\n\n\t\treturn this.multiplyMatrices( this, m );\n\n\t},\n\n\tpremultiply: function ( m ) {\n\n\t\treturn this.multiplyMatrices( m, this );\n\n\t},\n\n\tmultiplyMatrices: function ( a, b ) {\n\n\t\tvar ae = a.elements;\n\t\tvar be = b.elements;\n\t\tvar te = this.elements;\n\n\t\tvar a11 = ae[ 0 ], a12 = ae[ 3 ], a13 = ae[ 6 ];\n\t\tvar a21 = ae[ 1 ], a22 = ae[ 4 ], a23 = ae[ 7 ];\n\t\tvar a31 = ae[ 2 ], a32 = ae[ 5 ], a33 = ae[ 8 ];\n\n\t\tvar b11 = be[ 0 ], b12 = be[ 3 ], b13 = be[ 6 ];\n\t\tvar b21 = be[ 1 ], b22 = be[ 4 ], b23 = be[ 7 ];\n\t\tvar b31 = be[ 2 ], b32 = be[ 5 ], b33 = be[ 8 ];\n\n\t\tte[ 0 ] = a11 * b11 + a12 * b21 + a13 * b31;\n\t\tte[ 3 ] = a11 * b12 + a12 * b22 + a13 * b32;\n\t\tte[ 6 ] = a11 * b13 + a12 * b23 + a13 * b33;\n\n\t\tte[ 1 ] = a21 * b11 + a22 * b21 + a23 * b31;\n\t\tte[ 4 ] = a21 * b12 + a22 * b22 + a23 * b32;\n\t\tte[ 7 ] = a21 * b13 + a22 * b23 + a23 * b33;\n\n\t\tte[ 2 ] = a31 * b11 + a32 * b21 + a33 * b31;\n\t\tte[ 5 ] = a31 * b12 + a32 * b22 + a33 * b32;\n\t\tte[ 8 ] = a31 * b13 + a32 * b23 + a33 * b33;\n\n\t\treturn this;\n\n\t},\n\n\tmultiplyScalar: function ( s ) {\n\n\t\tvar te = this.elements;\n\n\t\tte[ 0 ] *= s; te[ 3 ] *= s; te[ 6 ] *= s;\n\t\tte[ 1 ] *= s; te[ 4 ] *= s; te[ 7 ] *= s;\n\t\tte[ 2 ] *= s; te[ 5 ] *= s; te[ 8 ] *= s;\n\n\t\treturn this;\n\n\t},\n\n\tdeterminant: function () {\n\n\t\tvar te = this.elements;\n\n\t\tvar a = te[ 0 ], b = te[ 1 ], c = te[ 2 ],\n\t\t\td = te[ 3 ], e = te[ 4 ], f = te[ 5 ],\n\t\t\tg = te[ 6 ], h = te[ 7 ], i = te[ 8 ];\n\n\t\treturn a * e * i - a * f * h - b * d * i + b * f * g + c * d * h - c * e * g;\n\n\t},\n\n\tgetInverse: function ( matrix, throwOnDegenerate ) {\n\n\t\tif ( matrix && matrix.isMatrix4 ) {\n\n\t\t\tconsole.error( \"THREE.Matrix3: .getInverse() no longer takes a Matrix4 argument.\" );\n\n\t\t}\n\n\t\tvar me = matrix.elements,\n\t\t\tte = this.elements,\n\n\t\t\tn11 = me[ 0 ], n21 = me[ 1 ], n31 = me[ 2 ],\n\t\t\tn12 = me[ 3 ], n22 = me[ 4 ], n32 = me[ 5 ],\n\t\t\tn13 = me[ 6 ], n23 = me[ 7 ], n33 = me[ 8 ],\n\n\t\t\tt11 = n33 * n22 - n32 * n23,\n\t\t\tt12 = n32 * n13 - n33 * n12,\n\t\t\tt13 = n23 * n12 - n22 * n13,\n\n\t\t\tdet = n11 * t11 + n21 * t12 + n31 * t13;\n\n\t\tif ( det === 0 ) {\n\n\t\t\tvar msg = \"THREE.Matrix3: .getInverse() can't invert matrix, determinant is 0\";\n\n\t\t\tif ( throwOnDegenerate === true ) {\n\n\t\t\t\tthrow new Error( msg );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( msg );\n\n\t\t\t}\n\n\t\t\treturn this.identity();\n\n\t\t}\n\n\t\tvar detInv = 1 / det;\n\n\t\tte[ 0 ] = t11 * detInv;\n\t\tte[ 1 ] = ( n31 * n23 - n33 * n21 ) * detInv;\n\t\tte[ 2 ] = ( n32 * n21 - n31 * n22 ) * detInv;\n\n\t\tte[ 3 ] = t12 * detInv;\n\t\tte[ 4 ] = ( n33 * n11 - n31 * n13 ) * detInv;\n\t\tte[ 5 ] = ( n31 * n12 - n32 * n11 ) * detInv;\n\n\t\tte[ 6 ] = t13 * detInv;\n\t\tte[ 7 ] = ( n21 * n13 - n23 * n11 ) * detInv;\n\t\tte[ 8 ] = ( n22 * n11 - n21 * n12 ) * detInv;\n\n\t\treturn this;\n\n\t},\n\n\ttranspose: function () {\n\n\t\tvar tmp, m = this.elements;\n\n\t\ttmp = m[ 1 ]; m[ 1 ] = m[ 3 ]; m[ 3 ] = tmp;\n\t\ttmp = m[ 2 ]; m[ 2 ] = m[ 6 ]; m[ 6 ] = tmp;\n\t\ttmp = m[ 5 ]; m[ 5 ] = m[ 7 ]; m[ 7 ] = tmp;\n\n\t\treturn this;\n\n\t},\n\n\tgetNormalMatrix: function ( matrix4 ) {\n\n\t\treturn this.setFromMatrix4( matrix4 ).getInverse( this ).transpose();\n\n\t},\n\n\ttransposeIntoArray: function ( r ) {\n\n\t\tvar m = this.elements;\n\n\t\tr[ 0 ] = m[ 0 ];\n\t\tr[ 1 ] = m[ 3 ];\n\t\tr[ 2 ] = m[ 6 ];\n\t\tr[ 3 ] = m[ 1 ];\n\t\tr[ 4 ] = m[ 4 ];\n\t\tr[ 5 ] = m[ 7 ];\n\t\tr[ 6 ] = m[ 2 ];\n\t\tr[ 7 ] = m[ 5 ];\n\t\tr[ 8 ] = m[ 8 ];\n\n\t\treturn this;\n\n\t},\n\n\tsetUvTransform: function ( tx, ty, sx, sy, rotation, cx, cy ) {\n\n\t\tvar c = Math.cos( rotation );\n\t\tvar s = Math.sin( rotation );\n\n\t\tthis.set(\n\t\t\tsx * c, sx * s, - sx * ( c * cx + s * cy ) + cx + tx,\n\t\t\t- sy * s, sy * c, - sy * ( - s * cx + c * cy ) + cy + ty,\n\t\t\t0, 0, 1\n\t\t);\n\n\t},\n\n\tscale: function ( sx, sy ) {\n\n\t\tvar te = this.elements;\n\n\t\tte[ 0 ] *= sx; te[ 3 ] *= sx; te[ 6 ] *= sx;\n\t\tte[ 1 ] *= sy; te[ 4 ] *= sy; te[ 7 ] *= sy;\n\n\t\treturn this;\n\n\t},\n\n\trotate: function ( theta ) {\n\n\t\tvar c = Math.cos( theta );\n\t\tvar s = Math.sin( theta );\n\n\t\tvar te = this.elements;\n\n\t\tvar a11 = te[ 0 ], a12 = te[ 3 ], a13 = te[ 6 ];\n\t\tvar a21 = te[ 1 ], a22 = te[ 4 ], a23 = te[ 7 ];\n\n\t\tte[ 0 ] = c * a11 + s * a21;\n\t\tte[ 3 ] = c * a12 + s * a22;\n\t\tte[ 6 ] = c * a13 + s * a23;\n\n\t\tte[ 1 ] = - s * a11 + c * a21;\n\t\tte[ 4 ] = - s * a12 + c * a22;\n\t\tte[ 7 ] = - s * a13 + c * a23;\n\n\t\treturn this;\n\n\t},\n\n\ttranslate: function ( tx, ty ) {\n\n\t\tvar te = this.elements;\n\n\t\tte[ 0 ] += tx * te[ 2 ]; te[ 3 ] += tx * te[ 5 ]; te[ 6 ] += tx * te[ 8 ];\n\t\tte[ 1 ] += ty * te[ 2 ]; te[ 4 ] += ty * te[ 5 ]; te[ 7 ] += ty * te[ 8 ];\n\n\t\treturn this;\n\n\t},\n\n\tequals: function ( matrix ) {\n\n\t\tvar te = this.elements;\n\t\tvar me = matrix.elements;\n\n\t\tfor ( var i = 0; i < 9; i ++ ) {\n\n\t\t\tif ( te[ i ] !== me[ i ] ) return false;\n\n\t\t}\n\n\t\treturn true;\n\n\t},\n\n\tfromArray: function ( array, offset ) {\n\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tfor ( var i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.elements[ i ] = array[ i + offset ];\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\ttoArray: function ( array, offset ) {\n\n\t\tif ( array === undefined ) array = [];\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tvar te = this.elements;\n\n\t\tarray[ offset ] = te[ 0 ];\n\t\tarray[ offset + 1 ] = te[ 1 ];\n\t\tarray[ offset + 2 ] = te[ 2 ];\n\n\t\tarray[ offset + 3 ] = te[ 3 ];\n\t\tarray[ offset + 4 ] = te[ 4 ];\n\t\tarray[ offset + 5 ] = te[ 5 ];\n\n\t\tarray[ offset + 6 ] = te[ 6 ];\n\t\tarray[ offset + 7 ] = te[ 7 ];\n\t\tarray[ offset + 8 ] = te[ 8 ];\n\n\t\treturn array;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n * @author szimek / https://github.com/szimek/\n */\n\nvar textureId = 0;\n\nfunction Texture( image, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ) {\n\n\tObject.defineProperty( this, 'id', { value: textureId ++ } );\n\n\tthis.uuid = _Math.generateUUID();\n\n\tthis.name = '';\n\n\tthis.image = image !== undefined ? image : Texture.DEFAULT_IMAGE;\n\tthis.mipmaps = [];\n\n\tthis.mapping = mapping !== undefined ? mapping : Texture.DEFAULT_MAPPING;\n\n\tthis.wrapS = wrapS !== undefined ? wrapS : ClampToEdgeWrapping;\n\tthis.wrapT = wrapT !== undefined ? wrapT : ClampToEdgeWrapping;\n\n\tthis.magFilter = magFilter !== undefined ? magFilter : LinearFilter;\n\tthis.minFilter = minFilter !== undefined ? minFilter : LinearMipMapLinearFilter;\n\n\tthis.anisotropy = anisotropy !== undefined ? anisotropy : 1;\n\n\tthis.format = format !== undefined ? format : RGBAFormat;\n\tthis.type = type !== undefined ? type : UnsignedByteType;\n\n\tthis.offset = new Vector2( 0, 0 );\n\tthis.repeat = new Vector2( 1, 1 );\n\tthis.center = new Vector2( 0, 0 );\n\tthis.rotation = 0;\n\n\tthis.matrixAutoUpdate = true;\n\tthis.matrix = new Matrix3();\n\n\tthis.generateMipmaps = true;\n\tthis.premultiplyAlpha = false;\n\tthis.flipY = true;\n\tthis.unpackAlignment = 4;\t// valid values: 1, 2, 4, 8 (see http://www.khronos.org/opengles/sdk/docs/man/xhtml/glPixelStorei.xml)\n\n\t// Values of encoding !== THREE.LinearEncoding only supported on map, envMap and emissiveMap.\n\t//\n\t// Also changing the encoding after already used by a Material will not automatically make the Material\n\t// update. You need to explicitly call Material.needsUpdate to trigger it to recompile.\n\tthis.encoding = encoding !== undefined ? encoding : LinearEncoding;\n\n\tthis.version = 0;\n\tthis.onUpdate = null;\n\n}\n\nTexture.DEFAULT_IMAGE = undefined;\nTexture.DEFAULT_MAPPING = UVMapping;\n\nTexture.prototype = Object.assign( Object.create( EventDispatcher.prototype ), {\n\n\tconstructor: Texture,\n\n\tisTexture: true,\n\n\tupdateMatrix: function () {\n\n\t\tthis.matrix.setUvTransform( this.offset.x, this.offset.y, this.repeat.x, this.repeat.y, this.rotation, this.center.x, this.center.y );\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tthis.name = source.name;\n\n\t\tthis.image = source.image;\n\t\tthis.mipmaps = source.mipmaps.slice( 0 );\n\n\t\tthis.mapping = source.mapping;\n\n\t\tthis.wrapS = source.wrapS;\n\t\tthis.wrapT = source.wrapT;\n\n\t\tthis.magFilter = source.magFilter;\n\t\tthis.minFilter = source.minFilter;\n\n\t\tthis.anisotropy = source.anisotropy;\n\n\t\tthis.format = source.format;\n\t\tthis.type = source.type;\n\n\t\tthis.offset.copy( source.offset );\n\t\tthis.repeat.copy( source.repeat );\n\t\tthis.center.copy( source.center );\n\t\tthis.rotation = source.rotation;\n\n\t\tthis.matrixAutoUpdate = source.matrixAutoUpdate;\n\t\tthis.matrix.copy( source.matrix );\n\n\t\tthis.generateMipmaps = source.generateMipmaps;\n\t\tthis.premultiplyAlpha = source.premultiplyAlpha;\n\t\tthis.flipY = source.flipY;\n\t\tthis.unpackAlignment = source.unpackAlignment;\n\t\tthis.encoding = source.encoding;\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\tvar isRootObject = ( meta === undefined || typeof meta === 'string' );\n\n\t\tif ( ! isRootObject && meta.textures[ this.uuid ] !== undefined ) {\n\n\t\t\treturn meta.textures[ this.uuid ];\n\n\t\t}\n\n\t\tfunction getDataURL( image ) {\n\n\t\t\tvar canvas;\n\n\t\t\tif ( image instanceof HTMLCanvasElement ) {\n\n\t\t\t\tcanvas = image;\n\n\t\t\t} else {\n\n\t\t\t\tcanvas = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' );\n\t\t\t\tcanvas.width = image.width;\n\t\t\t\tcanvas.height = image.height;\n\n\t\t\t\tvar context = canvas.getContext( '2d' );\n\n\t\t\t\tif ( image instanceof ImageData ) {\n\n\t\t\t\t\tcontext.putImageData( image, 0, 0 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tcontext.drawImage( image, 0, 0, image.width, image.height );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( canvas.width > 2048 || canvas.height > 2048 ) {\n\n\t\t\t\treturn canvas.toDataURL( 'image/jpeg', 0.6 );\n\n\t\t\t} else {\n\n\t\t\t\treturn canvas.toDataURL( 'image/png' );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar output = {\n\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Texture',\n\t\t\t\tgenerator: 'Texture.toJSON'\n\t\t\t},\n\n\t\t\tuuid: this.uuid,\n\t\t\tname: this.name,\n\n\t\t\tmapping: this.mapping,\n\n\t\t\trepeat: [ this.repeat.x, this.repeat.y ],\n\t\t\toffset: [ this.offset.x, this.offset.y ],\n\t\t\tcenter: [ this.center.x, this.center.y ],\n\t\t\trotation: this.rotation,\n\n\t\t\twrap: [ this.wrapS, this.wrapT ],\n\n\t\t\tformat: this.format,\n\t\t\tminFilter: this.minFilter,\n\t\t\tmagFilter: this.magFilter,\n\t\t\tanisotropy: this.anisotropy,\n\n\t\t\tflipY: this.flipY\n\n\t\t};\n\n\t\tif ( this.image !== undefined ) {\n\n\t\t\t// TODO: Move to THREE.Image\n\n\t\t\tvar image = this.image;\n\n\t\t\tif ( image.uuid === undefined ) {\n\n\t\t\t\timage.uuid = _Math.generateUUID(); // UGH\n\n\t\t\t}\n\n\t\t\tif ( ! isRootObject && meta.images[ image.uuid ] === undefined ) {\n\n\t\t\t\tmeta.images[ image.uuid ] = {\n\t\t\t\t\tuuid: image.uuid,\n\t\t\t\t\turl: getDataURL( image )\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\toutput.image = image.uuid;\n\n\t\t}\n\n\t\tif ( ! isRootObject ) {\n\n\t\t\tmeta.textures[ this.uuid ] = output;\n\n\t\t}\n\n\t\treturn output;\n\n\t},\n\n\tdispose: function () {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t},\n\n\ttransformUv: function ( uv ) {\n\n\t\tif ( this.mapping !== UVMapping ) return;\n\n\t\tuv.applyMatrix3( this.matrix );\n\n\t\tif ( uv.x < 0 || uv.x > 1 ) {\n\n\t\t\tswitch ( this.wrapS ) {\n\n\t\t\t\tcase RepeatWrapping:\n\n\t\t\t\t\tuv.x = uv.x - Math.floor( uv.x );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase ClampToEdgeWrapping:\n\n\t\t\t\t\tuv.x = uv.x < 0 ? 0 : 1;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase MirroredRepeatWrapping:\n\n\t\t\t\t\tif ( Math.abs( Math.floor( uv.x ) % 2 ) === 1 ) {\n\n\t\t\t\t\t\tuv.x = Math.ceil( uv.x ) - uv.x;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tuv.x = uv.x - Math.floor( uv.x );\n\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( uv.y < 0 || uv.y > 1 ) {\n\n\t\t\tswitch ( this.wrapT ) {\n\n\t\t\t\tcase RepeatWrapping:\n\n\t\t\t\t\tuv.y = uv.y - Math.floor( uv.y );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase ClampToEdgeWrapping:\n\n\t\t\t\t\tuv.y = uv.y < 0 ? 0 : 1;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase MirroredRepeatWrapping:\n\n\t\t\t\t\tif ( Math.abs( Math.floor( uv.y ) % 2 ) === 1 ) {\n\n\t\t\t\t\t\tuv.y = Math.ceil( uv.y ) - uv.y;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tuv.y = uv.y - Math.floor( uv.y );\n\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.flipY ) {\n\n\t\t\tuv.y = 1 - uv.y;\n\n\t\t}\n\n\t}\n\n} );\n\nObject.defineProperty( Texture.prototype, \"needsUpdate\", {\n\n\tset: function ( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n} );\n\n/**\n * @author supereggbert / http://www.paulbrunt.co.uk/\n * @author philogb / http://blog.thejit.org/\n * @author mikael emtinger / http://gomo.se/\n * @author egraether / http://egraether.com/\n * @author WestLangley / http://github.com/WestLangley\n */\n\nfunction Vector4( x, y, z, w ) {\n\n\tthis.x = x || 0;\n\tthis.y = y || 0;\n\tthis.z = z || 0;\n\tthis.w = ( w !== undefined ) ? w : 1;\n\n}\n\nObject.assign( Vector4.prototype, {\n\n\tisVector4: true,\n\n\tset: function ( x, y, z, w ) {\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\t\tthis.w = w;\n\n\t\treturn this;\n\n\t},\n\n\tsetScalar: function ( scalar ) {\n\n\t\tthis.x = scalar;\n\t\tthis.y = scalar;\n\t\tthis.z = scalar;\n\t\tthis.w = scalar;\n\n\t\treturn this;\n\n\t},\n\n\tsetX: function ( x ) {\n\n\t\tthis.x = x;\n\n\t\treturn this;\n\n\t},\n\n\tsetY: function ( y ) {\n\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t},\n\n\tsetZ: function ( z ) {\n\n\t\tthis.z = z;\n\n\t\treturn this;\n\n\t},\n\n\tsetW: function ( w ) {\n\n\t\tthis.w = w;\n\n\t\treturn this;\n\n\t},\n\n\tsetComponent: function ( index, value ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: this.x = value; break;\n\t\t\tcase 1: this.y = value; break;\n\t\t\tcase 2: this.z = value; break;\n\t\t\tcase 3: this.w = value; break;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tgetComponent: function ( index ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: return this.x;\n\t\t\tcase 1: return this.y;\n\t\t\tcase 2: return this.z;\n\t\t\tcase 3: return this.w;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor( this.x, this.y, this.z, this.w );\n\n\t},\n\n\tcopy: function ( v ) {\n\n\t\tthis.x = v.x;\n\t\tthis.y = v.y;\n\t\tthis.z = v.z;\n\t\tthis.w = ( v.w !== undefined ) ? v.w : 1;\n\n\t\treturn this;\n\n\t},\n\n\tadd: function ( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' );\n\t\t\treturn this.addVectors( v, w );\n\n\t\t}\n\n\t\tthis.x += v.x;\n\t\tthis.y += v.y;\n\t\tthis.z += v.z;\n\t\tthis.w += v.w;\n\n\t\treturn this;\n\n\t},\n\n\taddScalar: function ( s ) {\n\n\t\tthis.x += s;\n\t\tthis.y += s;\n\t\tthis.z += s;\n\t\tthis.w += s;\n\n\t\treturn this;\n\n\t},\n\n\taddVectors: function ( a, b ) {\n\n\t\tthis.x = a.x + b.x;\n\t\tthis.y = a.y + b.y;\n\t\tthis.z = a.z + b.z;\n\t\tthis.w = a.w + b.w;\n\n\t\treturn this;\n\n\t},\n\n\taddScaledVector: function ( v, s ) {\n\n\t\tthis.x += v.x * s;\n\t\tthis.y += v.y * s;\n\t\tthis.z += v.z * s;\n\t\tthis.w += v.w * s;\n\n\t\treturn this;\n\n\t},\n\n\tsub: function ( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' );\n\t\t\treturn this.subVectors( v, w );\n\n\t\t}\n\n\t\tthis.x -= v.x;\n\t\tthis.y -= v.y;\n\t\tthis.z -= v.z;\n\t\tthis.w -= v.w;\n\n\t\treturn this;\n\n\t},\n\n\tsubScalar: function ( s ) {\n\n\t\tthis.x -= s;\n\t\tthis.y -= s;\n\t\tthis.z -= s;\n\t\tthis.w -= s;\n\n\t\treturn this;\n\n\t},\n\n\tsubVectors: function ( a, b ) {\n\n\t\tthis.x = a.x - b.x;\n\t\tthis.y = a.y - b.y;\n\t\tthis.z = a.z - b.z;\n\t\tthis.w = a.w - b.w;\n\n\t\treturn this;\n\n\t},\n\n\tmultiplyScalar: function ( scalar ) {\n\n\t\tthis.x *= scalar;\n\t\tthis.y *= scalar;\n\t\tthis.z *= scalar;\n\t\tthis.w *= scalar;\n\n\t\treturn this;\n\n\t},\n\n\tapplyMatrix4: function ( m ) {\n\n\t\tvar x = this.x, y = this.y, z = this.z, w = this.w;\n\t\tvar e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] * w;\n\t\tthis.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] * w;\n\t\tthis.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] * w;\n\t\tthis.w = e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] * w;\n\n\t\treturn this;\n\n\t},\n\n\tdivideScalar: function ( scalar ) {\n\n\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t},\n\n\tsetAxisAngleFromQuaternion: function ( q ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToAngle/index.htm\n\n\t\t// q is assumed to be normalized\n\n\t\tthis.w = 2 * Math.acos( q.w );\n\n\t\tvar s = Math.sqrt( 1 - q.w * q.w );\n\n\t\tif ( s < 0.0001 ) {\n\n\t\t\tthis.x = 1;\n\t\t\tthis.y = 0;\n\t\t\tthis.z = 0;\n\n\t\t} else {\n\n\t\t\tthis.x = q.x / s;\n\t\t\tthis.y = q.y / s;\n\t\t\tthis.z = q.z / s;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tsetAxisAngleFromRotationMatrix: function ( m ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToAngle/index.htm\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tvar angle, x, y, z,\t\t// variables for result\n\t\t\tepsilon = 0.01,\t\t// margin to allow for rounding errors\n\t\t\tepsilon2 = 0.1,\t\t// margin to distinguish between 0 and 180 degrees\n\n\t\t\tte = m.elements,\n\n\t\t\tm11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ],\n\t\t\tm21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ],\n\t\t\tm31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ];\n\n\t\tif ( ( Math.abs( m12 - m21 ) < epsilon ) &&\n\t\t ( Math.abs( m13 - m31 ) < epsilon ) &&\n\t\t ( Math.abs( m23 - m32 ) < epsilon ) ) {\n\n\t\t\t// singularity found\n\t\t\t// first check for identity matrix which must have +1 for all terms\n\t\t\t// in leading diagonal and zero in other terms\n\n\t\t\tif ( ( Math.abs( m12 + m21 ) < epsilon2 ) &&\n\t\t\t ( Math.abs( m13 + m31 ) < epsilon2 ) &&\n\t\t\t ( Math.abs( m23 + m32 ) < epsilon2 ) &&\n\t\t\t ( Math.abs( m11 + m22 + m33 - 3 ) < epsilon2 ) ) {\n\n\t\t\t\t// this singularity is identity matrix so angle = 0\n\n\t\t\t\tthis.set( 1, 0, 0, 0 );\n\n\t\t\t\treturn this; // zero angle, arbitrary axis\n\n\t\t\t}\n\n\t\t\t// otherwise this singularity is angle = 180\n\n\t\t\tangle = Math.PI;\n\n\t\t\tvar xx = ( m11 + 1 ) / 2;\n\t\t\tvar yy = ( m22 + 1 ) / 2;\n\t\t\tvar zz = ( m33 + 1 ) / 2;\n\t\t\tvar xy = ( m12 + m21 ) / 4;\n\t\t\tvar xz = ( m13 + m31 ) / 4;\n\t\t\tvar yz = ( m23 + m32 ) / 4;\n\n\t\t\tif ( ( xx > yy ) && ( xx > zz ) ) {\n\n\t\t\t\t// m11 is the largest diagonal term\n\n\t\t\t\tif ( xx < epsilon ) {\n\n\t\t\t\t\tx = 0;\n\t\t\t\t\ty = 0.707106781;\n\t\t\t\t\tz = 0.707106781;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tx = Math.sqrt( xx );\n\t\t\t\t\ty = xy / x;\n\t\t\t\t\tz = xz / x;\n\n\t\t\t\t}\n\n\t\t\t} else if ( yy > zz ) {\n\n\t\t\t\t// m22 is the largest diagonal term\n\n\t\t\t\tif ( yy < epsilon ) {\n\n\t\t\t\t\tx = 0.707106781;\n\t\t\t\t\ty = 0;\n\t\t\t\t\tz = 0.707106781;\n\n\t\t\t\t} else {\n\n\t\t\t\t\ty = Math.sqrt( yy );\n\t\t\t\t\tx = xy / y;\n\t\t\t\t\tz = yz / y;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// m33 is the largest diagonal term so base result on this\n\n\t\t\t\tif ( zz < epsilon ) {\n\n\t\t\t\t\tx = 0.707106781;\n\t\t\t\t\ty = 0.707106781;\n\t\t\t\t\tz = 0;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tz = Math.sqrt( zz );\n\t\t\t\t\tx = xz / z;\n\t\t\t\t\ty = yz / z;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.set( x, y, z, angle );\n\n\t\t\treturn this; // return 180 deg rotation\n\n\t\t}\n\n\t\t// as we have reached here there are no singularities so we can handle normally\n\n\t\tvar s = Math.sqrt( ( m32 - m23 ) * ( m32 - m23 ) +\n\t\t ( m13 - m31 ) * ( m13 - m31 ) +\n\t\t ( m21 - m12 ) * ( m21 - m12 ) ); // used to normalize\n\n\t\tif ( Math.abs( s ) < 0.001 ) s = 1;\n\n\t\t// prevent divide by zero, should not happen if matrix is orthogonal and should be\n\t\t// caught by singularity test above, but I've left it in just in case\n\n\t\tthis.x = ( m32 - m23 ) / s;\n\t\tthis.y = ( m13 - m31 ) / s;\n\t\tthis.z = ( m21 - m12 ) / s;\n\t\tthis.w = Math.acos( ( m11 + m22 + m33 - 1 ) / 2 );\n\n\t\treturn this;\n\n\t},\n\n\tmin: function ( v ) {\n\n\t\tthis.x = Math.min( this.x, v.x );\n\t\tthis.y = Math.min( this.y, v.y );\n\t\tthis.z = Math.min( this.z, v.z );\n\t\tthis.w = Math.min( this.w, v.w );\n\n\t\treturn this;\n\n\t},\n\n\tmax: function ( v ) {\n\n\t\tthis.x = Math.max( this.x, v.x );\n\t\tthis.y = Math.max( this.y, v.y );\n\t\tthis.z = Math.max( this.z, v.z );\n\t\tthis.w = Math.max( this.w, v.w );\n\n\t\treturn this;\n\n\t},\n\n\tclamp: function ( min, max ) {\n\n\t\t// assumes min < max, componentwise\n\n\t\tthis.x = Math.max( min.x, Math.min( max.x, this.x ) );\n\t\tthis.y = Math.max( min.y, Math.min( max.y, this.y ) );\n\t\tthis.z = Math.max( min.z, Math.min( max.z, this.z ) );\n\t\tthis.w = Math.max( min.w, Math.min( max.w, this.w ) );\n\n\t\treturn this;\n\n\t},\n\n\tclampScalar: function () {\n\n\t\tvar min, max;\n\n\t\treturn function clampScalar( minVal, maxVal ) {\n\n\t\t\tif ( min === undefined ) {\n\n\t\t\t\tmin = new Vector4();\n\t\t\t\tmax = new Vector4();\n\n\t\t\t}\n\n\t\t\tmin.set( minVal, minVal, minVal, minVal );\n\t\t\tmax.set( maxVal, maxVal, maxVal, maxVal );\n\n\t\t\treturn this.clamp( min, max );\n\n\t\t};\n\n\t}(),\n\n\tclampLength: function ( min, max ) {\n\n\t\tvar length = this.length();\n\n\t\treturn this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );\n\n\t},\n\n\tfloor: function () {\n\n\t\tthis.x = Math.floor( this.x );\n\t\tthis.y = Math.floor( this.y );\n\t\tthis.z = Math.floor( this.z );\n\t\tthis.w = Math.floor( this.w );\n\n\t\treturn this;\n\n\t},\n\n\tceil: function () {\n\n\t\tthis.x = Math.ceil( this.x );\n\t\tthis.y = Math.ceil( this.y );\n\t\tthis.z = Math.ceil( this.z );\n\t\tthis.w = Math.ceil( this.w );\n\n\t\treturn this;\n\n\t},\n\n\tround: function () {\n\n\t\tthis.x = Math.round( this.x );\n\t\tthis.y = Math.round( this.y );\n\t\tthis.z = Math.round( this.z );\n\t\tthis.w = Math.round( this.w );\n\n\t\treturn this;\n\n\t},\n\n\troundToZero: function () {\n\n\t\tthis.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x );\n\t\tthis.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y );\n\t\tthis.z = ( this.z < 0 ) ? Math.ceil( this.z ) : Math.floor( this.z );\n\t\tthis.w = ( this.w < 0 ) ? Math.ceil( this.w ) : Math.floor( this.w );\n\n\t\treturn this;\n\n\t},\n\n\tnegate: function () {\n\n\t\tthis.x = - this.x;\n\t\tthis.y = - this.y;\n\t\tthis.z = - this.z;\n\t\tthis.w = - this.w;\n\n\t\treturn this;\n\n\t},\n\n\tdot: function ( v ) {\n\n\t\treturn this.x * v.x + this.y * v.y + this.z * v.z + this.w * v.w;\n\n\t},\n\n\tlengthSq: function () {\n\n\t\treturn this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w;\n\n\t},\n\n\tlength: function () {\n\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w );\n\n\t},\n\n\tmanhattanLength: function () {\n\n\t\treturn Math.abs( this.x ) + Math.abs( this.y ) + Math.abs( this.z ) + Math.abs( this.w );\n\n\t},\n\n\tnormalize: function () {\n\n\t\treturn this.divideScalar( this.length() || 1 );\n\n\t},\n\n\tsetLength: function ( length ) {\n\n\t\treturn this.normalize().multiplyScalar( length );\n\n\t},\n\n\tlerp: function ( v, alpha ) {\n\n\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\tthis.y += ( v.y - this.y ) * alpha;\n\t\tthis.z += ( v.z - this.z ) * alpha;\n\t\tthis.w += ( v.w - this.w ) * alpha;\n\n\t\treturn this;\n\n\t},\n\n\tlerpVectors: function ( v1, v2, alpha ) {\n\n\t\treturn this.subVectors( v2, v1 ).multiplyScalar( alpha ).add( v1 );\n\n\t},\n\n\tequals: function ( v ) {\n\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) && ( v.w === this.w ) );\n\n\t},\n\n\tfromArray: function ( array, offset ) {\n\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tthis.x = array[ offset ];\n\t\tthis.y = array[ offset + 1 ];\n\t\tthis.z = array[ offset + 2 ];\n\t\tthis.w = array[ offset + 3 ];\n\n\t\treturn this;\n\n\t},\n\n\ttoArray: function ( array, offset ) {\n\n\t\tif ( array === undefined ) array = [];\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tarray[ offset ] = this.x;\n\t\tarray[ offset + 1 ] = this.y;\n\t\tarray[ offset + 2 ] = this.z;\n\t\tarray[ offset + 3 ] = this.w;\n\n\t\treturn array;\n\n\t},\n\n\tfromBufferAttribute: function ( attribute, index, offset ) {\n\n\t\tif ( offset !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector4: offset has been removed from .fromBufferAttribute().' );\n\n\t\t}\n\n\t\tthis.x = attribute.getX( index );\n\t\tthis.y = attribute.getY( index );\n\t\tthis.z = attribute.getZ( index );\n\t\tthis.w = attribute.getW( index );\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author szimek / https://github.com/szimek/\n * @author alteredq / http://alteredqualia.com/\n * @author Marius Kintel / https://github.com/kintel\n */\n\n/*\n In options, we can specify:\n * Texture parameters for an auto-generated target texture\n * depthBuffer/stencilBuffer: Booleans to indicate if we should generate these buffers\n*/\nfunction WebGLRenderTarget( width, height, options ) {\n\n\tthis.width = width;\n\tthis.height = height;\n\n\tthis.scissor = new Vector4( 0, 0, width, height );\n\tthis.scissorTest = false;\n\n\tthis.viewport = new Vector4( 0, 0, width, height );\n\n\toptions = options || {};\n\n\tif ( options.minFilter === undefined ) options.minFilter = LinearFilter;\n\n\tthis.texture = new Texture( undefined, undefined, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.encoding );\n\n\tthis.depthBuffer = options.depthBuffer !== undefined ? options.depthBuffer : true;\n\tthis.stencilBuffer = options.stencilBuffer !== undefined ? options.stencilBuffer : true;\n\tthis.depthTexture = options.depthTexture !== undefined ? options.depthTexture : null;\n\n}\n\nWebGLRenderTarget.prototype = Object.assign( Object.create( EventDispatcher.prototype ), {\n\n\tconstructor: WebGLRenderTarget,\n\n\tisWebGLRenderTarget: true,\n\n\tsetSize: function ( width, height ) {\n\n\t\tif ( this.width !== width || this.height !== height ) {\n\n\t\t\tthis.width = width;\n\t\t\tthis.height = height;\n\n\t\t\tthis.dispose();\n\n\t\t}\n\n\t\tthis.viewport.set( 0, 0, width, height );\n\t\tthis.scissor.set( 0, 0, width, height );\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tthis.width = source.width;\n\t\tthis.height = source.height;\n\n\t\tthis.viewport.copy( source.viewport );\n\n\t\tthis.texture = source.texture.clone();\n\n\t\tthis.depthBuffer = source.depthBuffer;\n\t\tthis.stencilBuffer = source.stencilBuffer;\n\t\tthis.depthTexture = source.depthTexture;\n\n\t\treturn this;\n\n\t},\n\n\tdispose: function () {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n} );\n\n/**\n * @author alteredq / http://alteredqualia.com\n */\n\nfunction WebGLRenderTargetCube( width, height, options ) {\n\n\tWebGLRenderTarget.call( this, width, height, options );\n\n\tthis.activeCubeFace = 0; // PX 0, NX 1, PY 2, NY 3, PZ 4, NZ 5\n\tthis.activeMipMapLevel = 0;\n\n}\n\nWebGLRenderTargetCube.prototype = Object.create( WebGLRenderTarget.prototype );\nWebGLRenderTargetCube.prototype.constructor = WebGLRenderTargetCube;\n\nWebGLRenderTargetCube.prototype.isWebGLRenderTargetCube = true;\n\n/**\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction DataTexture( data, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, encoding ) {\n\n\tTexture.call( this, null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding );\n\n\tthis.image = { data: data, width: width, height: height };\n\n\tthis.magFilter = magFilter !== undefined ? magFilter : NearestFilter;\n\tthis.minFilter = minFilter !== undefined ? minFilter : NearestFilter;\n\n\tthis.generateMipmaps = false;\n\tthis.flipY = false;\n\tthis.unpackAlignment = 1;\n\n}\n\nDataTexture.prototype = Object.create( Texture.prototype );\nDataTexture.prototype.constructor = DataTexture;\n\nDataTexture.prototype.isDataTexture = true;\n\n/**\n * @author bhouston / http://clara.io\n * @author WestLangley / http://github.com/WestLangley\n */\n\nfunction Box3( min, max ) {\n\n\tthis.min = ( min !== undefined ) ? min : new Vector3( + Infinity, + Infinity, + Infinity );\n\tthis.max = ( max !== undefined ) ? max : new Vector3( - Infinity, - Infinity, - Infinity );\n\n}\n\nObject.assign( Box3.prototype, {\n\n\tisBox3: true,\n\n\tset: function ( min, max ) {\n\n\t\tthis.min.copy( min );\n\t\tthis.max.copy( max );\n\n\t\treturn this;\n\n\t},\n\n\tsetFromArray: function ( array ) {\n\n\t\tvar minX = + Infinity;\n\t\tvar minY = + Infinity;\n\t\tvar minZ = + Infinity;\n\n\t\tvar maxX = - Infinity;\n\t\tvar maxY = - Infinity;\n\t\tvar maxZ = - Infinity;\n\n\t\tfor ( var i = 0, l = array.length; i < l; i += 3 ) {\n\n\t\t\tvar x = array[ i ];\n\t\t\tvar y = array[ i + 1 ];\n\t\t\tvar z = array[ i + 2 ];\n\n\t\t\tif ( x < minX ) minX = x;\n\t\t\tif ( y < minY ) minY = y;\n\t\t\tif ( z < minZ ) minZ = z;\n\n\t\t\tif ( x > maxX ) maxX = x;\n\t\t\tif ( y > maxY ) maxY = y;\n\t\t\tif ( z > maxZ ) maxZ = z;\n\n\t\t}\n\n\t\tthis.min.set( minX, minY, minZ );\n\t\tthis.max.set( maxX, maxY, maxZ );\n\n\t\treturn this;\n\n\t},\n\n\tsetFromBufferAttribute: function ( attribute ) {\n\n\t\tvar minX = + Infinity;\n\t\tvar minY = + Infinity;\n\t\tvar minZ = + Infinity;\n\n\t\tvar maxX = - Infinity;\n\t\tvar maxY = - Infinity;\n\t\tvar maxZ = - Infinity;\n\n\t\tfor ( var i = 0, l = attribute.count; i < l; i ++ ) {\n\n\t\t\tvar x = attribute.getX( i );\n\t\t\tvar y = attribute.getY( i );\n\t\t\tvar z = attribute.getZ( i );\n\n\t\t\tif ( x < minX ) minX = x;\n\t\t\tif ( y < minY ) minY = y;\n\t\t\tif ( z < minZ ) minZ = z;\n\n\t\t\tif ( x > maxX ) maxX = x;\n\t\t\tif ( y > maxY ) maxY = y;\n\t\t\tif ( z > maxZ ) maxZ = z;\n\n\t\t}\n\n\t\tthis.min.set( minX, minY, minZ );\n\t\tthis.max.set( maxX, maxY, maxZ );\n\n\t\treturn this;\n\n\t},\n\n\tsetFromPoints: function ( points ) {\n\n\t\tthis.makeEmpty();\n\n\t\tfor ( var i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\tthis.expandByPoint( points[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tsetFromCenterAndSize: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function setFromCenterAndSize( center, size ) {\n\n\t\t\tvar halfSize = v1.copy( size ).multiplyScalar( 0.5 );\n\n\t\t\tthis.min.copy( center ).sub( halfSize );\n\t\t\tthis.max.copy( center ).add( halfSize );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tsetFromObject: function ( object ) {\n\n\t\tthis.makeEmpty();\n\n\t\treturn this.expandByObject( object );\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( box ) {\n\n\t\tthis.min.copy( box.min );\n\t\tthis.max.copy( box.max );\n\n\t\treturn this;\n\n\t},\n\n\tmakeEmpty: function () {\n\n\t\tthis.min.x = this.min.y = this.min.z = + Infinity;\n\t\tthis.max.x = this.max.y = this.max.z = - Infinity;\n\n\t\treturn this;\n\n\t},\n\n\tisEmpty: function () {\n\n\t\t// this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes\n\n\t\treturn ( this.max.x < this.min.x ) || ( this.max.y < this.min.y ) || ( this.max.z < this.min.z );\n\n\t},\n\n\tgetCenter: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box3: .getCenter() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn this.isEmpty() ? target.set( 0, 0, 0 ) : target.addVectors( this.min, this.max ).multiplyScalar( 0.5 );\n\n\t},\n\n\tgetSize: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box3: .getSize() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn this.isEmpty() ? target.set( 0, 0, 0 ) : target.subVectors( this.max, this.min );\n\n\t},\n\n\texpandByPoint: function ( point ) {\n\n\t\tthis.min.min( point );\n\t\tthis.max.max( point );\n\n\t\treturn this;\n\n\t},\n\n\texpandByVector: function ( vector ) {\n\n\t\tthis.min.sub( vector );\n\t\tthis.max.add( vector );\n\n\t\treturn this;\n\n\t},\n\n\texpandByScalar: function ( scalar ) {\n\n\t\tthis.min.addScalar( - scalar );\n\t\tthis.max.addScalar( scalar );\n\n\t\treturn this;\n\n\t},\n\n\texpandByObject: function () {\n\n\t\t// Computes the world-axis-aligned bounding box of an object (including its children),\n\t\t// accounting for both the object's, and children's, world transforms\n\n\t\tvar scope, i, l;\n\n\t\tvar v1 = new Vector3();\n\n\t\tfunction traverse( node ) {\n\n\t\t\tvar geometry = node.geometry;\n\n\t\t\tif ( geometry !== undefined ) {\n\n\t\t\t\tif ( geometry.isGeometry ) {\n\n\t\t\t\t\tvar vertices = geometry.vertices;\n\n\t\t\t\t\tfor ( i = 0, l = vertices.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tv1.copy( vertices[ i ] );\n\t\t\t\t\t\tv1.applyMatrix4( node.matrixWorld );\n\n\t\t\t\t\t\tscope.expandByPoint( v1 );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( geometry.isBufferGeometry ) {\n\n\t\t\t\t\tvar attribute = geometry.attributes.position;\n\n\t\t\t\t\tif ( attribute !== undefined ) {\n\n\t\t\t\t\t\tfor ( i = 0, l = attribute.count; i < l; i ++ ) {\n\n\t\t\t\t\t\t\tv1.fromBufferAttribute( attribute, i ).applyMatrix4( node.matrixWorld );\n\n\t\t\t\t\t\t\tscope.expandByPoint( v1 );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn function expandByObject( object ) {\n\n\t\t\tscope = this;\n\n\t\t\tobject.updateMatrixWorld( true );\n\n\t\t\tobject.traverse( traverse );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tcontainsPoint: function ( point ) {\n\n\t\treturn point.x < this.min.x || point.x > this.max.x ||\n\t\t\tpoint.y < this.min.y || point.y > this.max.y ||\n\t\t\tpoint.z < this.min.z || point.z > this.max.z ? false : true;\n\n\t},\n\n\tcontainsBox: function ( box ) {\n\n\t\treturn this.min.x <= box.min.x && box.max.x <= this.max.x &&\n\t\t\tthis.min.y <= box.min.y && box.max.y <= this.max.y &&\n\t\t\tthis.min.z <= box.min.z && box.max.z <= this.max.z;\n\n\t},\n\n\tgetParameter: function ( point, target ) {\n\n\t\t// This can potentially have a divide by zero if the box\n\t\t// has a size dimension of 0.\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box3: .getParameter() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.set(\n\t\t\t( point.x - this.min.x ) / ( this.max.x - this.min.x ),\n\t\t\t( point.y - this.min.y ) / ( this.max.y - this.min.y ),\n\t\t\t( point.z - this.min.z ) / ( this.max.z - this.min.z )\n\t\t);\n\n\t},\n\n\tintersectsBox: function ( box ) {\n\n\t\t// using 6 splitting planes to rule out intersections.\n\t\treturn box.max.x < this.min.x || box.min.x > this.max.x ||\n\t\t\tbox.max.y < this.min.y || box.min.y > this.max.y ||\n\t\t\tbox.max.z < this.min.z || box.min.z > this.max.z ? false : true;\n\n\t},\n\n\tintersectsSphere: ( function () {\n\n\t\tvar closestPoint = new Vector3();\n\n\t\treturn function intersectsSphere( sphere ) {\n\n\t\t\t// Find the point on the AABB closest to the sphere center.\n\t\t\tthis.clampPoint( sphere.center, closestPoint );\n\n\t\t\t// If that point is inside the sphere, the AABB and sphere intersect.\n\t\t\treturn closestPoint.distanceToSquared( sphere.center ) <= ( sphere.radius * sphere.radius );\n\n\t\t};\n\n\t} )(),\n\n\tintersectsPlane: function ( plane ) {\n\n\t\t// We compute the minimum and maximum dot product values. If those values\n\t\t// are on the same side (back or front) of the plane, then there is no intersection.\n\n\t\tvar min, max;\n\n\t\tif ( plane.normal.x > 0 ) {\n\n\t\t\tmin = plane.normal.x * this.min.x;\n\t\t\tmax = plane.normal.x * this.max.x;\n\n\t\t} else {\n\n\t\t\tmin = plane.normal.x * this.max.x;\n\t\t\tmax = plane.normal.x * this.min.x;\n\n\t\t}\n\n\t\tif ( plane.normal.y > 0 ) {\n\n\t\t\tmin += plane.normal.y * this.min.y;\n\t\t\tmax += plane.normal.y * this.max.y;\n\n\t\t} else {\n\n\t\t\tmin += plane.normal.y * this.max.y;\n\t\t\tmax += plane.normal.y * this.min.y;\n\n\t\t}\n\n\t\tif ( plane.normal.z > 0 ) {\n\n\t\t\tmin += plane.normal.z * this.min.z;\n\t\t\tmax += plane.normal.z * this.max.z;\n\n\t\t} else {\n\n\t\t\tmin += plane.normal.z * this.max.z;\n\t\t\tmax += plane.normal.z * this.min.z;\n\n\t\t}\n\n\t\treturn ( min <= plane.constant && max >= plane.constant );\n\n\t},\n\n\tintersectsTriangle: ( function () {\n\n\t\t// triangle centered vertices\n\t\tvar v0 = new Vector3();\n\t\tvar v1 = new Vector3();\n\t\tvar v2 = new Vector3();\n\n\t\t// triangle edge vectors\n\t\tvar f0 = new Vector3();\n\t\tvar f1 = new Vector3();\n\t\tvar f2 = new Vector3();\n\n\t\tvar testAxis = new Vector3();\n\n\t\tvar center = new Vector3();\n\t\tvar extents = new Vector3();\n\n\t\tvar triangleNormal = new Vector3();\n\n\t\tfunction satForAxes( axes ) {\n\n\t\t\tvar i, j;\n\n\t\t\tfor ( i = 0, j = axes.length - 3; i <= j; i += 3 ) {\n\n\t\t\t\ttestAxis.fromArray( axes, i );\n\t\t\t\t// project the aabb onto the seperating axis\n\t\t\t\tvar r = extents.x * Math.abs( testAxis.x ) + extents.y * Math.abs( testAxis.y ) + extents.z * Math.abs( testAxis.z );\n\t\t\t\t// project all 3 vertices of the triangle onto the seperating axis\n\t\t\t\tvar p0 = v0.dot( testAxis );\n\t\t\t\tvar p1 = v1.dot( testAxis );\n\t\t\t\tvar p2 = v2.dot( testAxis );\n\t\t\t\t// actual test, basically see if either of the most extreme of the triangle points intersects r\n\t\t\t\tif ( Math.max( - Math.max( p0, p1, p2 ), Math.min( p0, p1, p2 ) ) > r ) {\n\n\t\t\t\t\t// points of the projected triangle are outside the projected half-length of the aabb\n\t\t\t\t\t// the axis is seperating and we can exit\n\t\t\t\t\treturn false;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\treturn function intersectsTriangle( triangle ) {\n\n\t\t\tif ( this.isEmpty() ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t\t// compute box center and extents\n\t\t\tthis.getCenter( center );\n\t\t\textents.subVectors( this.max, center );\n\n\t\t\t// translate triangle to aabb origin\n\t\t\tv0.subVectors( triangle.a, center );\n\t\t\tv1.subVectors( triangle.b, center );\n\t\t\tv2.subVectors( triangle.c, center );\n\n\t\t\t// compute edge vectors for triangle\n\t\t\tf0.subVectors( v1, v0 );\n\t\t\tf1.subVectors( v2, v1 );\n\t\t\tf2.subVectors( v0, v2 );\n\n\t\t\t// test against axes that are given by cross product combinations of the edges of the triangle and the edges of the aabb\n\t\t\t// make an axis testing of each of the 3 sides of the aabb against each of the 3 sides of the triangle = 9 axis of separation\n\t\t\t// axis_ij = u_i x f_j (u0, u1, u2 = face normals of aabb = x,y,z axes vectors since aabb is axis aligned)\n\t\t\tvar axes = [\n\t\t\t\t0, - f0.z, f0.y, 0, - f1.z, f1.y, 0, - f2.z, f2.y,\n\t\t\t\tf0.z, 0, - f0.x, f1.z, 0, - f1.x, f2.z, 0, - f2.x,\n\t\t\t\t- f0.y, f0.x, 0, - f1.y, f1.x, 0, - f2.y, f2.x, 0\n\t\t\t];\n\t\t\tif ( ! satForAxes( axes ) ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t\t// test 3 face normals from the aabb\n\t\t\taxes = [ 1, 0, 0, 0, 1, 0, 0, 0, 1 ];\n\t\t\tif ( ! satForAxes( axes ) ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t\t// finally testing the face normal of the triangle\n\t\t\t// use already existing triangle edge vectors here\n\t\t\ttriangleNormal.crossVectors( f0, f1 );\n\t\t\taxes = [ triangleNormal.x, triangleNormal.y, triangleNormal.z ];\n\t\t\treturn satForAxes( axes );\n\n\t\t};\n\n\t} )(),\n\n\tclampPoint: function ( point, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box3: .clampPoint() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.copy( point ).clamp( this.min, this.max );\n\n\t},\n\n\tdistanceToPoint: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function distanceToPoint( point ) {\n\n\t\t\tvar clampedPoint = v1.copy( point ).clamp( this.min, this.max );\n\t\t\treturn clampedPoint.sub( point ).length();\n\n\t\t};\n\n\t}(),\n\n\tgetBoundingSphere: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function getBoundingSphere( target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Box3: .getBoundingSphere() target is now required' );\n\t\t\t\ttarget = new Sphere();\n\n\t\t\t}\n\n\t\t\tthis.getCenter( target.center );\n\n\t\t\ttarget.radius = this.getSize( v1 ).length() * 0.5;\n\n\t\t\treturn target;\n\n\t\t};\n\n\t}(),\n\n\tintersect: function ( box ) {\n\n\t\tthis.min.max( box.min );\n\t\tthis.max.min( box.max );\n\n\t\t// ensure that if there is no overlap, the result is fully empty, not slightly empty with non-inf/+inf values that will cause subsequence intersects to erroneously return valid values.\n\t\tif ( this.isEmpty() ) this.makeEmpty();\n\n\t\treturn this;\n\n\t},\n\n\tunion: function ( box ) {\n\n\t\tthis.min.min( box.min );\n\t\tthis.max.max( box.max );\n\n\t\treturn this;\n\n\t},\n\n\tapplyMatrix4: function () {\n\n\t\tvar points = [\n\t\t\tnew Vector3(),\n\t\t\tnew Vector3(),\n\t\t\tnew Vector3(),\n\t\t\tnew Vector3(),\n\t\t\tnew Vector3(),\n\t\t\tnew Vector3(),\n\t\t\tnew Vector3(),\n\t\t\tnew Vector3()\n\t\t];\n\n\t\treturn function applyMatrix4( matrix ) {\n\n\t\t\t// transform of empty box is an empty box.\n\t\t\tif ( this.isEmpty() ) return this;\n\n\t\t\t// NOTE: I am using a binary pattern to specify all 2^3 combinations below\n\t\t\tpoints[ 0 ].set( this.min.x, this.min.y, this.min.z ).applyMatrix4( matrix ); // 000\n\t\t\tpoints[ 1 ].set( this.min.x, this.min.y, this.max.z ).applyMatrix4( matrix ); // 001\n\t\t\tpoints[ 2 ].set( this.min.x, this.max.y, this.min.z ).applyMatrix4( matrix ); // 010\n\t\t\tpoints[ 3 ].set( this.min.x, this.max.y, this.max.z ).applyMatrix4( matrix ); // 011\n\t\t\tpoints[ 4 ].set( this.max.x, this.min.y, this.min.z ).applyMatrix4( matrix ); // 100\n\t\t\tpoints[ 5 ].set( this.max.x, this.min.y, this.max.z ).applyMatrix4( matrix ); // 101\n\t\t\tpoints[ 6 ].set( this.max.x, this.max.y, this.min.z ).applyMatrix4( matrix ); // 110\n\t\t\tpoints[ 7 ].set( this.max.x, this.max.y, this.max.z ).applyMatrix4( matrix );\t// 111\n\n\t\t\tthis.setFromPoints( points );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\ttranslate: function ( offset ) {\n\n\t\tthis.min.add( offset );\n\t\tthis.max.add( offset );\n\n\t\treturn this;\n\n\t},\n\n\tequals: function ( box ) {\n\n\t\treturn box.min.equals( this.min ) && box.max.equals( this.max );\n\n\t}\n\n} );\n\n/**\n * @author bhouston / http://clara.io\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction Sphere( center, radius ) {\n\n\tthis.center = ( center !== undefined ) ? center : new Vector3();\n\tthis.radius = ( radius !== undefined ) ? radius : 0;\n\n}\n\nObject.assign( Sphere.prototype, {\n\n\tset: function ( center, radius ) {\n\n\t\tthis.center.copy( center );\n\t\tthis.radius = radius;\n\n\t\treturn this;\n\n\t},\n\n\tsetFromPoints: function () {\n\n\t\tvar box = new Box3();\n\n\t\treturn function setFromPoints( points, optionalCenter ) {\n\n\t\t\tvar center = this.center;\n\n\t\t\tif ( optionalCenter !== undefined ) {\n\n\t\t\t\tcenter.copy( optionalCenter );\n\n\t\t\t} else {\n\n\t\t\t\tbox.setFromPoints( points ).getCenter( center );\n\n\t\t\t}\n\n\t\t\tvar maxRadiusSq = 0;\n\n\t\t\tfor ( var i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( points[ i ] ) );\n\n\t\t\t}\n\n\t\t\tthis.radius = Math.sqrt( maxRadiusSq );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( sphere ) {\n\n\t\tthis.center.copy( sphere.center );\n\t\tthis.radius = sphere.radius;\n\n\t\treturn this;\n\n\t},\n\n\tempty: function () {\n\n\t\treturn ( this.radius <= 0 );\n\n\t},\n\n\tcontainsPoint: function ( point ) {\n\n\t\treturn ( point.distanceToSquared( this.center ) <= ( this.radius * this.radius ) );\n\n\t},\n\n\tdistanceToPoint: function ( point ) {\n\n\t\treturn ( point.distanceTo( this.center ) - this.radius );\n\n\t},\n\n\tintersectsSphere: function ( sphere ) {\n\n\t\tvar radiusSum = this.radius + sphere.radius;\n\n\t\treturn sphere.center.distanceToSquared( this.center ) <= ( radiusSum * radiusSum );\n\n\t},\n\n\tintersectsBox: function ( box ) {\n\n\t\treturn box.intersectsSphere( this );\n\n\t},\n\n\tintersectsPlane: function ( plane ) {\n\n\t\treturn Math.abs( plane.distanceToPoint( this.center ) ) <= this.radius;\n\n\t},\n\n\tclampPoint: function ( point, target ) {\n\n\t\tvar deltaLengthSq = this.center.distanceToSquared( point );\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Sphere: .clampPoint() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\ttarget.copy( point );\n\n\t\tif ( deltaLengthSq > ( this.radius * this.radius ) ) {\n\n\t\t\ttarget.sub( this.center ).normalize();\n\t\t\ttarget.multiplyScalar( this.radius ).add( this.center );\n\n\t\t}\n\n\t\treturn target;\n\n\t},\n\n\tgetBoundingBox: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Sphere: .getBoundingBox() target is now required' );\n\t\t\ttarget = new Box3();\n\n\t\t}\n\n\t\ttarget.set( this.center, this.center );\n\t\ttarget.expandByScalar( this.radius );\n\n\t\treturn target;\n\n\t},\n\n\tapplyMatrix4: function ( matrix ) {\n\n\t\tthis.center.applyMatrix4( matrix );\n\t\tthis.radius = this.radius * matrix.getMaxScaleOnAxis();\n\n\t\treturn this;\n\n\t},\n\n\ttranslate: function ( offset ) {\n\n\t\tthis.center.add( offset );\n\n\t\treturn this;\n\n\t},\n\n\tequals: function ( sphere ) {\n\n\t\treturn sphere.center.equals( this.center ) && ( sphere.radius === this.radius );\n\n\t}\n\n} );\n\n/**\n * @author bhouston / http://clara.io\n */\n\nfunction Plane( normal, constant ) {\n\n\t// normal is assumed to be normalized\n\n\tthis.normal = ( normal !== undefined ) ? normal : new Vector3( 1, 0, 0 );\n\tthis.constant = ( constant !== undefined ) ? constant : 0;\n\n}\n\nObject.assign( Plane.prototype, {\n\n\tset: function ( normal, constant ) {\n\n\t\tthis.normal.copy( normal );\n\t\tthis.constant = constant;\n\n\t\treturn this;\n\n\t},\n\n\tsetComponents: function ( x, y, z, w ) {\n\n\t\tthis.normal.set( x, y, z );\n\t\tthis.constant = w;\n\n\t\treturn this;\n\n\t},\n\n\tsetFromNormalAndCoplanarPoint: function ( normal, point ) {\n\n\t\tthis.normal.copy( normal );\n\t\tthis.constant = - point.dot( this.normal );\n\n\t\treturn this;\n\n\t},\n\n\tsetFromCoplanarPoints: function () {\n\n\t\tvar v1 = new Vector3();\n\t\tvar v2 = new Vector3();\n\n\t\treturn function setFromCoplanarPoints( a, b, c ) {\n\n\t\t\tvar normal = v1.subVectors( c, b ).cross( v2.subVectors( a, b ) ).normalize();\n\n\t\t\t// Q: should an error be thrown if normal is zero (e.g. degenerate plane)?\n\n\t\t\tthis.setFromNormalAndCoplanarPoint( normal, a );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( plane ) {\n\n\t\tthis.normal.copy( plane.normal );\n\t\tthis.constant = plane.constant;\n\n\t\treturn this;\n\n\t},\n\n\tnormalize: function () {\n\n\t\t// Note: will lead to a divide by zero if the plane is invalid.\n\n\t\tvar inverseNormalLength = 1.0 / this.normal.length();\n\t\tthis.normal.multiplyScalar( inverseNormalLength );\n\t\tthis.constant *= inverseNormalLength;\n\n\t\treturn this;\n\n\t},\n\n\tnegate: function () {\n\n\t\tthis.constant *= - 1;\n\t\tthis.normal.negate();\n\n\t\treturn this;\n\n\t},\n\n\tdistanceToPoint: function ( point ) {\n\n\t\treturn this.normal.dot( point ) + this.constant;\n\n\t},\n\n\tdistanceToSphere: function ( sphere ) {\n\n\t\treturn this.distanceToPoint( sphere.center ) - sphere.radius;\n\n\t},\n\n\tprojectPoint: function ( point, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Plane: .projectPoint() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.copy( this.normal ).multiplyScalar( - this.distanceToPoint( point ) ).add( point );\n\n\t},\n\n\tintersectLine: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function intersectLine( line, target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Plane: .intersectLine() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\tvar direction = line.delta( v1 );\n\n\t\t\tvar denominator = this.normal.dot( direction );\n\n\t\t\tif ( denominator === 0 ) {\n\n\t\t\t\t// line is coplanar, return origin\n\t\t\t\tif ( this.distanceToPoint( line.start ) === 0 ) {\n\n\t\t\t\t\treturn target.copy( line.start );\n\n\t\t\t\t}\n\n\t\t\t\t// Unsure if this is the correct method to handle this case.\n\t\t\t\treturn undefined;\n\n\t\t\t}\n\n\t\t\tvar t = - ( line.start.dot( this.normal ) + this.constant ) / denominator;\n\n\t\t\tif ( t < 0 || t > 1 ) {\n\n\t\t\t\treturn undefined;\n\n\t\t\t}\n\n\t\t\treturn target.copy( direction ).multiplyScalar( t ).add( line.start );\n\n\t\t};\n\n\t}(),\n\n\tintersectsLine: function ( line ) {\n\n\t\t// Note: this tests if a line intersects the plane, not whether it (or its end-points) are coplanar with it.\n\n\t\tvar startSign = this.distanceToPoint( line.start );\n\t\tvar endSign = this.distanceToPoint( line.end );\n\n\t\treturn ( startSign < 0 && endSign > 0 ) || ( endSign < 0 && startSign > 0 );\n\n\t},\n\n\tintersectsBox: function ( box ) {\n\n\t\treturn box.intersectsPlane( this );\n\n\t},\n\n\tintersectsSphere: function ( sphere ) {\n\n\t\treturn sphere.intersectsPlane( this );\n\n\t},\n\n\tcoplanarPoint: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Plane: .coplanarPoint() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.copy( this.normal ).multiplyScalar( - this.constant );\n\n\t},\n\n\tapplyMatrix4: function () {\n\n\t\tvar v1 = new Vector3();\n\t\tvar m1 = new Matrix3();\n\n\t\treturn function applyMatrix4( matrix, optionalNormalMatrix ) {\n\n\t\t\tvar normalMatrix = optionalNormalMatrix || m1.getNormalMatrix( matrix );\n\n\t\t\tvar referencePoint = this.coplanarPoint( v1 ).applyMatrix4( matrix );\n\n\t\t\tvar normal = this.normal.applyMatrix3( normalMatrix ).normalize();\n\n\t\t\tthis.constant = - referencePoint.dot( normal );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\ttranslate: function ( offset ) {\n\n\t\tthis.constant -= offset.dot( this.normal );\n\n\t\treturn this;\n\n\t},\n\n\tequals: function ( plane ) {\n\n\t\treturn plane.normal.equals( this.normal ) && ( plane.constant === this.constant );\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n * @author bhouston / http://clara.io\n */\n\nfunction Frustum( p0, p1, p2, p3, p4, p5 ) {\n\n\tthis.planes = [\n\n\t\t( p0 !== undefined ) ? p0 : new Plane(),\n\t\t( p1 !== undefined ) ? p1 : new Plane(),\n\t\t( p2 !== undefined ) ? p2 : new Plane(),\n\t\t( p3 !== undefined ) ? p3 : new Plane(),\n\t\t( p4 !== undefined ) ? p4 : new Plane(),\n\t\t( p5 !== undefined ) ? p5 : new Plane()\n\n\t];\n\n}\n\nObject.assign( Frustum.prototype, {\n\n\tset: function ( p0, p1, p2, p3, p4, p5 ) {\n\n\t\tvar planes = this.planes;\n\n\t\tplanes[ 0 ].copy( p0 );\n\t\tplanes[ 1 ].copy( p1 );\n\t\tplanes[ 2 ].copy( p2 );\n\t\tplanes[ 3 ].copy( p3 );\n\t\tplanes[ 4 ].copy( p4 );\n\t\tplanes[ 5 ].copy( p5 );\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( frustum ) {\n\n\t\tvar planes = this.planes;\n\n\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\tplanes[ i ].copy( frustum.planes[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tsetFromMatrix: function ( m ) {\n\n\t\tvar planes = this.planes;\n\t\tvar me = m.elements;\n\t\tvar me0 = me[ 0 ], me1 = me[ 1 ], me2 = me[ 2 ], me3 = me[ 3 ];\n\t\tvar me4 = me[ 4 ], me5 = me[ 5 ], me6 = me[ 6 ], me7 = me[ 7 ];\n\t\tvar me8 = me[ 8 ], me9 = me[ 9 ], me10 = me[ 10 ], me11 = me[ 11 ];\n\t\tvar me12 = me[ 12 ], me13 = me[ 13 ], me14 = me[ 14 ], me15 = me[ 15 ];\n\n\t\tplanes[ 0 ].setComponents( me3 - me0, me7 - me4, me11 - me8, me15 - me12 ).normalize();\n\t\tplanes[ 1 ].setComponents( me3 + me0, me7 + me4, me11 + me8, me15 + me12 ).normalize();\n\t\tplanes[ 2 ].setComponents( me3 + me1, me7 + me5, me11 + me9, me15 + me13 ).normalize();\n\t\tplanes[ 3 ].setComponents( me3 - me1, me7 - me5, me11 - me9, me15 - me13 ).normalize();\n\t\tplanes[ 4 ].setComponents( me3 - me2, me7 - me6, me11 - me10, me15 - me14 ).normalize();\n\t\tplanes[ 5 ].setComponents( me3 + me2, me7 + me6, me11 + me10, me15 + me14 ).normalize();\n\n\t\treturn this;\n\n\t},\n\n\tintersectsObject: function () {\n\n\t\tvar sphere = new Sphere();\n\n\t\treturn function intersectsObject( object ) {\n\n\t\t\tvar geometry = object.geometry;\n\n\t\t\tif ( geometry.boundingSphere === null )\n\t\t\t\tgeometry.computeBoundingSphere();\n\n\t\t\tsphere.copy( geometry.boundingSphere )\n\t\t\t\t.applyMatrix4( object.matrixWorld );\n\n\t\t\treturn this.intersectsSphere( sphere );\n\n\t\t};\n\n\t}(),\n\n\tintersectsSprite: function () {\n\n\t\tvar sphere = new Sphere();\n\n\t\treturn function intersectsSprite( sprite ) {\n\n\t\t\tsphere.center.set( 0, 0, 0 );\n\t\t\tsphere.radius = 0.7071067811865476;\n\t\t\tsphere.applyMatrix4( sprite.matrixWorld );\n\n\t\t\treturn this.intersectsSphere( sphere );\n\n\t\t};\n\n\t}(),\n\n\tintersectsSphere: function ( sphere ) {\n\n\t\tvar planes = this.planes;\n\t\tvar center = sphere.center;\n\t\tvar negRadius = - sphere.radius;\n\n\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\tvar distance = planes[ i ].distanceToPoint( center );\n\n\t\t\tif ( distance < negRadius ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t},\n\n\tintersectsBox: function () {\n\n\t\tvar p1 = new Vector3(),\n\t\t\tp2 = new Vector3();\n\n\t\treturn function intersectsBox( box ) {\n\n\t\t\tvar planes = this.planes;\n\n\t\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\t\tvar plane = planes[ i ];\n\n\t\t\t\tp1.x = plane.normal.x > 0 ? box.min.x : box.max.x;\n\t\t\t\tp2.x = plane.normal.x > 0 ? box.max.x : box.min.x;\n\t\t\t\tp1.y = plane.normal.y > 0 ? box.min.y : box.max.y;\n\t\t\t\tp2.y = plane.normal.y > 0 ? box.max.y : box.min.y;\n\t\t\t\tp1.z = plane.normal.z > 0 ? box.min.z : box.max.z;\n\t\t\t\tp2.z = plane.normal.z > 0 ? box.max.z : box.min.z;\n\n\t\t\t\tvar d1 = plane.distanceToPoint( p1 );\n\t\t\t\tvar d2 = plane.distanceToPoint( p2 );\n\n\t\t\t\t// if both outside plane, no intersection\n\n\t\t\t\tif ( d1 < 0 && d2 < 0 ) {\n\n\t\t\t\t\treturn false;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn true;\n\n\t\t};\n\n\t}(),\n\n\tcontainsPoint: function ( point ) {\n\n\t\tvar planes = this.planes;\n\n\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\tif ( planes[ i ].distanceToPoint( point ) < 0 ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n} );\n\nvar alphamap_fragment = \"#ifdef USE_ALPHAMAP\\n\\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\\n#endif\\n\";\n\nvar alphamap_pars_fragment = \"#ifdef USE_ALPHAMAP\\n\\tuniform sampler2D alphaMap;\\n#endif\\n\";\n\nvar alphatest_fragment = \"#ifdef ALPHATEST\\n\\tif ( diffuseColor.a < ALPHATEST ) discard;\\n#endif\\n\";\n\nvar aomap_fragment = \"#ifdef USE_AOMAP\\n\\tfloat ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\\n\\treflectedLight.indirectDiffuse *= ambientOcclusion;\\n\\t#if defined( USE_ENVMAP ) && defined( PHYSICAL )\\n\\t\\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\\n\\t\\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.specularRoughness );\\n\\t#endif\\n#endif\\n\";\n\nvar aomap_pars_fragment = \"#ifdef USE_AOMAP\\n\\tuniform sampler2D aoMap;\\n\\tuniform float aoMapIntensity;\\n#endif\";\n\nvar begin_vertex = \"\\nvec3 transformed = vec3( position );\\n\";\n\nvar beginnormal_vertex = \"\\nvec3 objectNormal = vec3( normal );\\n\";\n\nvar bsdfs = \"float punctualLightIntensityToIrradianceFactor( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\\n\\tif( decayExponent > 0.0 ) {\\n#if defined ( PHYSICALLY_CORRECT_LIGHTS )\\n\\t\\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\\n\\t\\tfloat maxDistanceCutoffFactor = pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\\n\\t\\treturn distanceFalloff * maxDistanceCutoffFactor;\\n#else\\n\\t\\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\\n#endif\\n\\t}\\n\\treturn 1.0;\\n}\\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\\n\\treturn RECIPROCAL_PI * diffuseColor;\\n}\\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\\n\\tfloat fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\\n\\treturn ( 1.0 - specularColor ) * fresnel + specularColor;\\n}\\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\\n\\tfloat a2 = pow2( alpha );\\n\\tfloat gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\\n\\tfloat gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\\n\\treturn 1.0 / ( gl * gv );\\n}\\nfloat G_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\\n\\tfloat a2 = pow2( alpha );\\n\\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\\n\\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\\n\\treturn 0.5 / max( gv + gl, EPSILON );\\n}\\nfloat D_GGX( const in float alpha, const in float dotNH ) {\\n\\tfloat a2 = pow2( alpha );\\n\\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\\n\\treturn RECIPROCAL_PI * a2 / pow2( denom );\\n}\\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float roughness ) {\\n\\tfloat alpha = pow2( roughness );\\n\\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\\n\\tfloat dotNL = saturate( dot( geometry.normal, incidentLight.direction ) );\\n\\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\\n\\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\\n\\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\\n\\tvec3 F = F_Schlick( specularColor, dotLH );\\n\\tfloat G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\\n\\tfloat D = D_GGX( alpha, dotNH );\\n\\treturn F * ( G * D );\\n}\\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\\n\\tconst float LUT_SIZE = 64.0;\\n\\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\\n\\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\\n\\tfloat dotNV = saturate( dot( N, V ) );\\n\\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\\n\\tuv = uv * LUT_SCALE + LUT_BIAS;\\n\\treturn uv;\\n}\\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\\n\\tfloat l = length( f );\\n\\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\\n}\\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\\n\\tfloat x = dot( v1, v2 );\\n\\tfloat y = abs( x );\\n\\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\\n\\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\\n\\tfloat v = a / b;\\n\\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\\n\\treturn cross( v1, v2 ) * theta_sintheta;\\n}\\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\\n\\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\\n\\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\\n\\tvec3 lightNormal = cross( v1, v2 );\\n\\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\\n\\tvec3 T1, T2;\\n\\tT1 = normalize( V - N * dot( V, N ) );\\n\\tT2 = - cross( N, T1 );\\n\\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\\n\\tvec3 coords[ 4 ];\\n\\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\\n\\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\\n\\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\\n\\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\\n\\tcoords[ 0 ] = normalize( coords[ 0 ] );\\n\\tcoords[ 1 ] = normalize( coords[ 1 ] );\\n\\tcoords[ 2 ] = normalize( coords[ 2 ] );\\n\\tcoords[ 3 ] = normalize( coords[ 3 ] );\\n\\tvec3 vectorFormFactor = vec3( 0.0 );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\\n\\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\\n\\treturn vec3( result );\\n}\\nvec3 BRDF_Specular_GGX_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness ) {\\n\\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\\n\\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\\n\\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\\n\\tvec4 r = roughness * c0 + c1;\\n\\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\\n\\tvec2 AB = vec2( -1.04, 1.04 ) * a004 + r.zw;\\n\\treturn specularColor * AB.x + AB.y;\\n}\\nfloat G_BlinnPhong_Implicit( ) {\\n\\treturn 0.25;\\n}\\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\\n\\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\\n}\\nvec3 BRDF_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\\n\\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\\n\\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\\n\\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\\n\\tvec3 F = F_Schlick( specularColor, dotLH );\\n\\tfloat G = G_BlinnPhong_Implicit( );\\n\\tfloat D = D_BlinnPhong( shininess, dotNH );\\n\\treturn F * ( G * D );\\n}\\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\\n\\treturn ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\\n}\\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\\n\\treturn sqrt( 2.0 / ( blinnExponent + 2.0 ) );\\n}\\n\";\n\nvar bumpmap_pars_fragment = \"#ifdef USE_BUMPMAP\\n\\tuniform sampler2D bumpMap;\\n\\tuniform float bumpScale;\\n\\tvec2 dHdxy_fwd() {\\n\\t\\tvec2 dSTdx = dFdx( vUv );\\n\\t\\tvec2 dSTdy = dFdy( vUv );\\n\\t\\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\\n\\t\\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\\n\\t\\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\\n\\t\\treturn vec2( dBx, dBy );\\n\\t}\\n\\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\\n\\t\\tvec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\\n\\t\\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\\n\\t\\tvec3 vN = surf_norm;\\n\\t\\tvec3 R1 = cross( vSigmaY, vN );\\n\\t\\tvec3 R2 = cross( vN, vSigmaX );\\n\\t\\tfloat fDet = dot( vSigmaX, R1 );\\n\\t\\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\\n\\t\\treturn normalize( abs( fDet ) * surf_norm - vGrad );\\n\\t}\\n#endif\\n\";\n\nvar clipping_planes_fragment = \"#if NUM_CLIPPING_PLANES > 0\\n\\tvec4 plane;\\n\\t#pragma unroll_loop\\n\\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\\n\\t\\tplane = clippingPlanes[ i ];\\n\\t\\tif ( dot( vViewPosition, plane.xyz ) > plane.w ) discard;\\n\\t}\\n\\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\\n\\t\\tbool clipped = true;\\n\\t\\t#pragma unroll_loop\\n\\t\\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\\n\\t\\t\\tplane = clippingPlanes[ i ];\\n\\t\\t\\tclipped = ( dot( vViewPosition, plane.xyz ) > plane.w ) && clipped;\\n\\t\\t}\\n\\t\\tif ( clipped ) discard;\\n\\t#endif\\n#endif\\n\";\n\nvar clipping_planes_pars_fragment = \"#if NUM_CLIPPING_PLANES > 0\\n\\t#if ! defined( PHYSICAL ) && ! defined( PHONG )\\n\\t\\tvarying vec3 vViewPosition;\\n\\t#endif\\n\\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\\n#endif\\n\";\n\nvar clipping_planes_pars_vertex = \"#if NUM_CLIPPING_PLANES > 0 && ! defined( PHYSICAL ) && ! defined( PHONG )\\n\\tvarying vec3 vViewPosition;\\n#endif\\n\";\n\nvar clipping_planes_vertex = \"#if NUM_CLIPPING_PLANES > 0 && ! defined( PHYSICAL ) && ! defined( PHONG )\\n\\tvViewPosition = - mvPosition.xyz;\\n#endif\\n\";\n\nvar color_fragment = \"#ifdef USE_COLOR\\n\\tdiffuseColor.rgb *= vColor;\\n#endif\";\n\nvar color_pars_fragment = \"#ifdef USE_COLOR\\n\\tvarying vec3 vColor;\\n#endif\\n\";\n\nvar color_pars_vertex = \"#ifdef USE_COLOR\\n\\tvarying vec3 vColor;\\n#endif\";\n\nvar color_vertex = \"#ifdef USE_COLOR\\n\\tvColor.xyz = color.xyz;\\n#endif\";\n\nvar common = \"#define PI 3.14159265359\\n#define PI2 6.28318530718\\n#define PI_HALF 1.5707963267949\\n#define RECIPROCAL_PI 0.31830988618\\n#define RECIPROCAL_PI2 0.15915494\\n#define LOG2 1.442695\\n#define EPSILON 1e-6\\n#define saturate(a) clamp( a, 0.0, 1.0 )\\n#define whiteCompliment(a) ( 1.0 - saturate( a ) )\\nfloat pow2( const in float x ) { return x*x; }\\nfloat pow3( const in float x ) { return x*x*x; }\\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\\nhighp float rand( const in vec2 uv ) {\\n\\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\\n\\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\\n\\treturn fract(sin(sn) * c);\\n}\\nstruct IncidentLight {\\n\\tvec3 color;\\n\\tvec3 direction;\\n\\tbool visible;\\n};\\nstruct ReflectedLight {\\n\\tvec3 directDiffuse;\\n\\tvec3 directSpecular;\\n\\tvec3 indirectDiffuse;\\n\\tvec3 indirectSpecular;\\n};\\nstruct GeometricContext {\\n\\tvec3 position;\\n\\tvec3 normal;\\n\\tvec3 viewDir;\\n};\\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\\n\\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\\n}\\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\\n\\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\\n}\\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\\n\\tfloat distance = dot( planeNormal, point - pointOnPlane );\\n\\treturn - distance * planeNormal + point;\\n}\\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\\n\\treturn sign( dot( point - pointOnPlane, planeNormal ) );\\n}\\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\\n\\treturn lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\\n}\\nmat3 transposeMat3( const in mat3 m ) {\\n\\tmat3 tmp;\\n\\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\\n\\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\\n\\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\\n\\treturn tmp;\\n}\\nfloat linearToRelativeLuminance( const in vec3 color ) {\\n\\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\\n\\treturn dot( weights, color.rgb );\\n}\\n\";\n\nvar cube_uv_reflection_fragment = \"#ifdef ENVMAP_TYPE_CUBE_UV\\n#define cubeUV_textureSize (1024.0)\\nint getFaceFromDirection(vec3 direction) {\\n\\tvec3 absDirection = abs(direction);\\n\\tint face = -1;\\n\\tif( absDirection.x > absDirection.z ) {\\n\\t\\tif(absDirection.x > absDirection.y )\\n\\t\\t\\tface = direction.x > 0.0 ? 0 : 3;\\n\\t\\telse\\n\\t\\t\\tface = direction.y > 0.0 ? 1 : 4;\\n\\t}\\n\\telse {\\n\\t\\tif(absDirection.z > absDirection.y )\\n\\t\\t\\tface = direction.z > 0.0 ? 2 : 5;\\n\\t\\telse\\n\\t\\t\\tface = direction.y > 0.0 ? 1 : 4;\\n\\t}\\n\\treturn face;\\n}\\n#define cubeUV_maxLods1 (log2(cubeUV_textureSize*0.25) - 1.0)\\n#define cubeUV_rangeClamp (exp2((6.0 - 1.0) * 2.0))\\nvec2 MipLevelInfo( vec3 vec, float roughnessLevel, float roughness ) {\\n\\tfloat scale = exp2(cubeUV_maxLods1 - roughnessLevel);\\n\\tfloat dxRoughness = dFdx(roughness);\\n\\tfloat dyRoughness = dFdy(roughness);\\n\\tvec3 dx = dFdx( vec * scale * dxRoughness );\\n\\tvec3 dy = dFdy( vec * scale * dyRoughness );\\n\\tfloat d = max( dot( dx, dx ), dot( dy, dy ) );\\n\\td = clamp(d, 1.0, cubeUV_rangeClamp);\\n\\tfloat mipLevel = 0.5 * log2(d);\\n\\treturn vec2(floor(mipLevel), fract(mipLevel));\\n}\\n#define cubeUV_maxLods2 (log2(cubeUV_textureSize*0.25) - 2.0)\\n#define cubeUV_rcpTextureSize (1.0 / cubeUV_textureSize)\\nvec2 getCubeUV(vec3 direction, float roughnessLevel, float mipLevel) {\\n\\tmipLevel = roughnessLevel > cubeUV_maxLods2 - 3.0 ? 0.0 : mipLevel;\\n\\tfloat a = 16.0 * cubeUV_rcpTextureSize;\\n\\tvec2 exp2_packed = exp2( vec2( roughnessLevel, mipLevel ) );\\n\\tvec2 rcp_exp2_packed = vec2( 1.0 ) / exp2_packed;\\n\\tfloat powScale = exp2_packed.x * exp2_packed.y;\\n\\tfloat scale = rcp_exp2_packed.x * rcp_exp2_packed.y * 0.25;\\n\\tfloat mipOffset = 0.75*(1.0 - rcp_exp2_packed.y) * rcp_exp2_packed.x;\\n\\tbool bRes = mipLevel == 0.0;\\n\\tscale = bRes && (scale < a) ? a : scale;\\n\\tvec3 r;\\n\\tvec2 offset;\\n\\tint face = getFaceFromDirection(direction);\\n\\tfloat rcpPowScale = 1.0 / powScale;\\n\\tif( face == 0) {\\n\\t\\tr = vec3(direction.x, -direction.z, direction.y);\\n\\t\\toffset = vec2(0.0+mipOffset,0.75 * rcpPowScale);\\n\\t\\toffset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\\n\\t}\\n\\telse if( face == 1) {\\n\\t\\tr = vec3(direction.y, direction.x, direction.z);\\n\\t\\toffset = vec2(scale+mipOffset, 0.75 * rcpPowScale);\\n\\t\\toffset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\\n\\t}\\n\\telse if( face == 2) {\\n\\t\\tr = vec3(direction.z, direction.x, direction.y);\\n\\t\\toffset = vec2(2.0*scale+mipOffset, 0.75 * rcpPowScale);\\n\\t\\toffset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\\n\\t}\\n\\telse if( face == 3) {\\n\\t\\tr = vec3(direction.x, direction.z, direction.y);\\n\\t\\toffset = vec2(0.0+mipOffset,0.5 * rcpPowScale);\\n\\t\\toffset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\\n\\t}\\n\\telse if( face == 4) {\\n\\t\\tr = vec3(direction.y, direction.x, -direction.z);\\n\\t\\toffset = vec2(scale+mipOffset, 0.5 * rcpPowScale);\\n\\t\\toffset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\\n\\t}\\n\\telse {\\n\\t\\tr = vec3(direction.z, -direction.x, direction.y);\\n\\t\\toffset = vec2(2.0*scale+mipOffset, 0.5 * rcpPowScale);\\n\\t\\toffset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\\n\\t}\\n\\tr = normalize(r);\\n\\tfloat texelOffset = 0.5 * cubeUV_rcpTextureSize;\\n\\tvec2 s = ( r.yz / abs( r.x ) + vec2( 1.0 ) ) * 0.5;\\n\\tvec2 base = offset + vec2( texelOffset );\\n\\treturn base + s * ( scale - 2.0 * texelOffset );\\n}\\n#define cubeUV_maxLods3 (log2(cubeUV_textureSize*0.25) - 3.0)\\nvec4 textureCubeUV(vec3 reflectedDirection, float roughness ) {\\n\\tfloat roughnessVal = roughness* cubeUV_maxLods3;\\n\\tfloat r1 = floor(roughnessVal);\\n\\tfloat r2 = r1 + 1.0;\\n\\tfloat t = fract(roughnessVal);\\n\\tvec2 mipInfo = MipLevelInfo(reflectedDirection, r1, roughness);\\n\\tfloat s = mipInfo.y;\\n\\tfloat level0 = mipInfo.x;\\n\\tfloat level1 = level0 + 1.0;\\n\\tlevel1 = level1 > 5.0 ? 5.0 : level1;\\n\\tlevel0 += min( floor( s + 0.5 ), 5.0 );\\n\\tvec2 uv_10 = getCubeUV(reflectedDirection, r1, level0);\\n\\tvec4 color10 = envMapTexelToLinear(texture2D(envMap, uv_10));\\n\\tvec2 uv_20 = getCubeUV(reflectedDirection, r2, level0);\\n\\tvec4 color20 = envMapTexelToLinear(texture2D(envMap, uv_20));\\n\\tvec4 result = mix(color10, color20, t);\\n\\treturn vec4(result.rgb, 1.0);\\n}\\n#endif\\n\";\n\nvar defaultnormal_vertex = \"vec3 transformedNormal = normalMatrix * objectNormal;\\n#ifdef FLIP_SIDED\\n\\ttransformedNormal = - transformedNormal;\\n#endif\\n\";\n\nvar displacementmap_pars_vertex = \"#ifdef USE_DISPLACEMENTMAP\\n\\tuniform sampler2D displacementMap;\\n\\tuniform float displacementScale;\\n\\tuniform float displacementBias;\\n#endif\\n\";\n\nvar displacementmap_vertex = \"#ifdef USE_DISPLACEMENTMAP\\n\\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, uv ).x * displacementScale + displacementBias );\\n#endif\\n\";\n\nvar emissivemap_fragment = \"#ifdef USE_EMISSIVEMAP\\n\\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\\n\\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\\n\\ttotalEmissiveRadiance *= emissiveColor.rgb;\\n#endif\\n\";\n\nvar emissivemap_pars_fragment = \"#ifdef USE_EMISSIVEMAP\\n\\tuniform sampler2D emissiveMap;\\n#endif\\n\";\n\nvar encodings_fragment = \" gl_FragColor = linearToOutputTexel( gl_FragColor );\\n\";\n\nvar encodings_pars_fragment = \"\\nvec4 LinearToLinear( in vec4 value ) {\\n\\treturn value;\\n}\\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\\n\\treturn vec4( pow( value.xyz, vec3( gammaFactor ) ), value.w );\\n}\\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\\n\\treturn vec4( pow( value.xyz, vec3( 1.0 / gammaFactor ) ), value.w );\\n}\\nvec4 sRGBToLinear( in vec4 value ) {\\n\\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.w );\\n}\\nvec4 LinearTosRGB( in vec4 value ) {\\n\\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.w );\\n}\\nvec4 RGBEToLinear( in vec4 value ) {\\n\\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\\n}\\nvec4 LinearToRGBE( in vec4 value ) {\\n\\tfloat maxComponent = max( max( value.r, value.g ), value.b );\\n\\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\\n\\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\\n}\\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\\n\\treturn vec4( value.xyz * value.w * maxRange, 1.0 );\\n}\\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\\n\\tfloat maxRGB = max( value.x, max( value.g, value.b ) );\\n\\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\\n\\tM = ceil( M * 255.0 ) / 255.0;\\n\\treturn vec4( value.rgb / ( M * maxRange ), M );\\n}\\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\\n\\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\\n}\\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\\n\\tfloat maxRGB = max( value.x, max( value.g, value.b ) );\\n\\tfloat D = max( maxRange / maxRGB, 1.0 );\\n\\tD = min( floor( D ) / 255.0, 1.0 );\\n\\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\\n}\\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\\nvec4 LinearToLogLuv( in vec4 value ) {\\n\\tvec3 Xp_Y_XYZp = value.rgb * cLogLuvM;\\n\\tXp_Y_XYZp = max(Xp_Y_XYZp, vec3(1e-6, 1e-6, 1e-6));\\n\\tvec4 vResult;\\n\\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\\n\\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\\n\\tvResult.w = fract(Le);\\n\\tvResult.z = (Le - (floor(vResult.w*255.0))/255.0)/255.0;\\n\\treturn vResult;\\n}\\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\\nvec4 LogLuvToLinear( in vec4 value ) {\\n\\tfloat Le = value.z * 255.0 + value.w;\\n\\tvec3 Xp_Y_XYZp;\\n\\tXp_Y_XYZp.y = exp2((Le - 127.0) / 2.0);\\n\\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\\n\\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\\n\\tvec3 vRGB = Xp_Y_XYZp.rgb * cLogLuvInverseM;\\n\\treturn vec4( max(vRGB, 0.0), 1.0 );\\n}\\n\";\n\nvar envmap_fragment = \"#ifdef USE_ENVMAP\\n\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\\n\\t\\tvec3 cameraToVertex = normalize( vWorldPosition - cameraPosition );\\n\\t\\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\\n\\t\\t#ifdef ENVMAP_MODE_REFLECTION\\n\\t\\t\\tvec3 reflectVec = reflect( cameraToVertex, worldNormal );\\n\\t\\t#else\\n\\t\\t\\tvec3 reflectVec = refract( cameraToVertex, worldNormal, refractionRatio );\\n\\t\\t#endif\\n\\t#else\\n\\t\\tvec3 reflectVec = vReflect;\\n\\t#endif\\n\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\\n\\t#elif defined( ENVMAP_TYPE_EQUIREC )\\n\\t\\tvec2 sampleUV;\\n\\t\\treflectVec = normalize( reflectVec );\\n\\t\\tsampleUV.y = asin( clamp( reflectVec.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\\n\\t\\tsampleUV.x = atan( reflectVec.z, reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\\n\\t\\tvec4 envColor = texture2D( envMap, sampleUV );\\n\\t#elif defined( ENVMAP_TYPE_SPHERE )\\n\\t\\treflectVec = normalize( reflectVec );\\n\\t\\tvec3 reflectView = normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0, 0.0, 1.0 ) );\\n\\t\\tvec4 envColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5 );\\n\\t#else\\n\\t\\tvec4 envColor = vec4( 0.0 );\\n\\t#endif\\n\\tenvColor = envMapTexelToLinear( envColor );\\n\\t#ifdef ENVMAP_BLENDING_MULTIPLY\\n\\t\\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\\n\\t#elif defined( ENVMAP_BLENDING_MIX )\\n\\t\\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\\n\\t#elif defined( ENVMAP_BLENDING_ADD )\\n\\t\\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\\n\\t#endif\\n#endif\\n\";\n\nvar envmap_pars_fragment = \"#if defined( USE_ENVMAP ) || defined( PHYSICAL )\\n\\tuniform float reflectivity;\\n\\tuniform float envMapIntensity;\\n#endif\\n#ifdef USE_ENVMAP\\n\\t#if ! defined( PHYSICAL ) && ( defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) )\\n\\t\\tvarying vec3 vWorldPosition;\\n\\t#endif\\n\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\tuniform samplerCube envMap;\\n\\t#else\\n\\t\\tuniform sampler2D envMap;\\n\\t#endif\\n\\tuniform float flipEnvMap;\\n\\tuniform int maxMipLevel;\\n\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( PHYSICAL )\\n\\t\\tuniform float refractionRatio;\\n\\t#else\\n\\t\\tvarying vec3 vReflect;\\n\\t#endif\\n#endif\\n\";\n\nvar envmap_pars_vertex = \"#ifdef USE_ENVMAP\\n\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\\n\\t\\tvarying vec3 vWorldPosition;\\n\\t#else\\n\\t\\tvarying vec3 vReflect;\\n\\t\\tuniform float refractionRatio;\\n\\t#endif\\n#endif\\n\";\n\nvar envmap_vertex = \"#ifdef USE_ENVMAP\\n\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\\n\\t\\tvWorldPosition = worldPosition.xyz;\\n\\t#else\\n\\t\\tvec3 cameraToVertex = normalize( worldPosition.xyz - cameraPosition );\\n\\t\\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\\n\\t\\t#ifdef ENVMAP_MODE_REFLECTION\\n\\t\\t\\tvReflect = reflect( cameraToVertex, worldNormal );\\n\\t\\t#else\\n\\t\\t\\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\\n\\t\\t#endif\\n\\t#endif\\n#endif\\n\";\n\nvar fog_vertex = \"\\n#ifdef USE_FOG\\nfogDepth = -mvPosition.z;\\n#endif\";\n\nvar fog_pars_vertex = \"#ifdef USE_FOG\\n varying float fogDepth;\\n#endif\\n\";\n\nvar fog_fragment = \"#ifdef USE_FOG\\n\\t#ifdef FOG_EXP2\\n\\t\\tfloat fogFactor = whiteCompliment( exp2( - fogDensity * fogDensity * fogDepth * fogDepth * LOG2 ) );\\n\\t#else\\n\\t\\tfloat fogFactor = smoothstep( fogNear, fogFar, fogDepth );\\n\\t#endif\\n\\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\\n#endif\\n\";\n\nvar fog_pars_fragment = \"#ifdef USE_FOG\\n\\tuniform vec3 fogColor;\\n\\tvarying float fogDepth;\\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\\n\";\n\nvar gradientmap_pars_fragment = \"#ifdef TOON\\n\\tuniform sampler2D gradientMap;\\n\\tvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\\n\\t\\tfloat dotNL = dot( normal, lightDirection );\\n\\t\\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\\n\\t\\t#ifdef USE_GRADIENTMAP\\n\\t\\t\\treturn texture2D( gradientMap, coord ).rgb;\\n\\t\\t#else\\n\\t\\t\\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\\n\\t\\t#endif\\n\\t}\\n#endif\\n\";\n\nvar lightmap_fragment = \"#ifdef USE_LIGHTMAP\\n\\treflectedLight.indirectDiffuse += PI * texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\\n#endif\\n\";\n\nvar lightmap_pars_fragment = \"#ifdef USE_LIGHTMAP\\n\\tuniform sampler2D lightMap;\\n\\tuniform float lightMapIntensity;\\n#endif\";\n\nvar lights_lambert_vertex = \"vec3 diffuse = vec3( 1.0 );\\nGeometricContext geometry;\\ngeometry.position = mvPosition.xyz;\\ngeometry.normal = normalize( transformedNormal );\\ngeometry.viewDir = normalize( -mvPosition.xyz );\\nGeometricContext backGeometry;\\nbackGeometry.position = geometry.position;\\nbackGeometry.normal = -geometry.normal;\\nbackGeometry.viewDir = geometry.viewDir;\\nvLightFront = vec3( 0.0 );\\n#ifdef DOUBLE_SIDED\\n\\tvLightBack = vec3( 0.0 );\\n#endif\\nIncidentLight directLight;\\nfloat dotNL;\\nvec3 directLightColor_Diffuse;\\n#if NUM_POINT_LIGHTS > 0\\n\\t#pragma unroll_loop\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\\n\\t\\tgetPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );\\n\\t\\tdotNL = dot( geometry.normal, directLight.direction );\\n\\t\\tdirectLightColor_Diffuse = PI * directLight.color;\\n\\t\\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\\n\\t\\t#endif\\n\\t}\\n#endif\\n#if NUM_SPOT_LIGHTS > 0\\n\\t#pragma unroll_loop\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\\n\\t\\tgetSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );\\n\\t\\tdotNL = dot( geometry.normal, directLight.direction );\\n\\t\\tdirectLightColor_Diffuse = PI * directLight.color;\\n\\t\\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\\n\\t\\t#endif\\n\\t}\\n#endif\\n#if NUM_DIR_LIGHTS > 0\\n\\t#pragma unroll_loop\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\\n\\t\\tgetDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );\\n\\t\\tdotNL = dot( geometry.normal, directLight.direction );\\n\\t\\tdirectLightColor_Diffuse = PI * directLight.color;\\n\\t\\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\\n\\t\\t#endif\\n\\t}\\n#endif\\n#if NUM_HEMI_LIGHTS > 0\\n\\t#pragma unroll_loop\\n\\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\\n\\t\\tvLightFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvLightBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\\n\\t\\t#endif\\n\\t}\\n#endif\\n\";\n\nvar lights_pars_begin = \"uniform vec3 ambientLightColor;\\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\\n\\tvec3 irradiance = ambientLightColor;\\n\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\tirradiance *= PI;\\n\\t#endif\\n\\treturn irradiance;\\n}\\n#if NUM_DIR_LIGHTS > 0\\n\\tstruct DirectionalLight {\\n\\t\\tvec3 direction;\\n\\t\\tvec3 color;\\n\\t\\tint shadow;\\n\\t\\tfloat shadowBias;\\n\\t\\tfloat shadowRadius;\\n\\t\\tvec2 shadowMapSize;\\n\\t};\\n\\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\\n\\tvoid getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\\n\\t\\tdirectLight.color = directionalLight.color;\\n\\t\\tdirectLight.direction = directionalLight.direction;\\n\\t\\tdirectLight.visible = true;\\n\\t}\\n#endif\\n#if NUM_POINT_LIGHTS > 0\\n\\tstruct PointLight {\\n\\t\\tvec3 position;\\n\\t\\tvec3 color;\\n\\t\\tfloat distance;\\n\\t\\tfloat decay;\\n\\t\\tint shadow;\\n\\t\\tfloat shadowBias;\\n\\t\\tfloat shadowRadius;\\n\\t\\tvec2 shadowMapSize;\\n\\t\\tfloat shadowCameraNear;\\n\\t\\tfloat shadowCameraFar;\\n\\t};\\n\\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\\n\\tvoid getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\\n\\t\\tvec3 lVector = pointLight.position - geometry.position;\\n\\t\\tdirectLight.direction = normalize( lVector );\\n\\t\\tfloat lightDistance = length( lVector );\\n\\t\\tdirectLight.color = pointLight.color;\\n\\t\\tdirectLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\\n\\t\\tdirectLight.visible = ( directLight.color != vec3( 0.0 ) );\\n\\t}\\n#endif\\n#if NUM_SPOT_LIGHTS > 0\\n\\tstruct SpotLight {\\n\\t\\tvec3 position;\\n\\t\\tvec3 direction;\\n\\t\\tvec3 color;\\n\\t\\tfloat distance;\\n\\t\\tfloat decay;\\n\\t\\tfloat coneCos;\\n\\t\\tfloat penumbraCos;\\n\\t\\tint shadow;\\n\\t\\tfloat shadowBias;\\n\\t\\tfloat shadowRadius;\\n\\t\\tvec2 shadowMapSize;\\n\\t};\\n\\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\\n\\tvoid getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {\\n\\t\\tvec3 lVector = spotLight.position - geometry.position;\\n\\t\\tdirectLight.direction = normalize( lVector );\\n\\t\\tfloat lightDistance = length( lVector );\\n\\t\\tfloat angleCos = dot( directLight.direction, spotLight.direction );\\n\\t\\tif ( angleCos > spotLight.coneCos ) {\\n\\t\\t\\tfloat spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\\n\\t\\t\\tdirectLight.color = spotLight.color;\\n\\t\\t\\tdirectLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\\n\\t\\t\\tdirectLight.visible = true;\\n\\t\\t} else {\\n\\t\\t\\tdirectLight.color = vec3( 0.0 );\\n\\t\\t\\tdirectLight.visible = false;\\n\\t\\t}\\n\\t}\\n#endif\\n#if NUM_RECT_AREA_LIGHTS > 0\\n\\tstruct RectAreaLight {\\n\\t\\tvec3 color;\\n\\t\\tvec3 position;\\n\\t\\tvec3 halfWidth;\\n\\t\\tvec3 halfHeight;\\n\\t};\\n\\tuniform sampler2D ltc_1;\\tuniform sampler2D ltc_2;\\n\\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\\n#endif\\n#if NUM_HEMI_LIGHTS > 0\\n\\tstruct HemisphereLight {\\n\\t\\tvec3 direction;\\n\\t\\tvec3 skyColor;\\n\\t\\tvec3 groundColor;\\n\\t};\\n\\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\\n\\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in GeometricContext geometry ) {\\n\\t\\tfloat dotNL = dot( geometry.normal, hemiLight.direction );\\n\\t\\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\\n\\t\\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\\n\\t\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\t\\tirradiance *= PI;\\n\\t\\t#endif\\n\\t\\treturn irradiance;\\n\\t}\\n#endif\\n\";\n\nvar lights_pars_maps = \"#if defined( USE_ENVMAP ) && defined( PHYSICAL )\\n\\tvec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\\n\\t\\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\\n\\t\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\t\\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\\n\\t\\t\\t#ifdef TEXTURE_LOD_EXT\\n\\t\\t\\t\\tvec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\\n\\t\\t\\t#else\\n\\t\\t\\t\\tvec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\\n\\t\\t\\t#endif\\n\\t\\t\\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\\n\\t\\t#elif defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\t\\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\\n\\t\\t\\tvec4 envMapColor = textureCubeUV( queryVec, 1.0 );\\n\\t\\t#else\\n\\t\\t\\tvec4 envMapColor = vec4( 0.0 );\\n\\t\\t#endif\\n\\t\\treturn PI * envMapColor.rgb * envMapIntensity;\\n\\t}\\n\\tfloat getSpecularMIPLevel( const in float blinnShininessExponent, const in int maxMIPLevel ) {\\n\\t\\tfloat maxMIPLevelScalar = float( maxMIPLevel );\\n\\t\\tfloat desiredMIPLevel = maxMIPLevelScalar + 0.79248 - 0.5 * log2( pow2( blinnShininessExponent ) + 1.0 );\\n\\t\\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\\n\\t}\\n\\tvec3 getLightProbeIndirectRadiance( const in GeometricContext geometry, const in float blinnShininessExponent, const in int maxMIPLevel ) {\\n\\t\\t#ifdef ENVMAP_MODE_REFLECTION\\n\\t\\t\\tvec3 reflectVec = reflect( -geometry.viewDir, geometry.normal );\\n\\t\\t#else\\n\\t\\t\\tvec3 reflectVec = refract( -geometry.viewDir, geometry.normal, refractionRatio );\\n\\t\\t#endif\\n\\t\\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\\n\\t\\tfloat specularMIPLevel = getSpecularMIPLevel( blinnShininessExponent, maxMIPLevel );\\n\\t\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\t\\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\\n\\t\\t\\t#ifdef TEXTURE_LOD_EXT\\n\\t\\t\\t\\tvec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\\n\\t\\t\\t#else\\n\\t\\t\\t\\tvec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\\n\\t\\t\\t#endif\\n\\t\\t\\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\\n\\t\\t#elif defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\t\\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\\n\\t\\t\\tvec4 envMapColor = textureCubeUV(queryReflectVec, BlinnExponentToGGXRoughness(blinnShininessExponent));\\n\\t\\t#elif defined( ENVMAP_TYPE_EQUIREC )\\n\\t\\t\\tvec2 sampleUV;\\n\\t\\t\\tsampleUV.y = asin( clamp( reflectVec.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\\n\\t\\t\\tsampleUV.x = atan( reflectVec.z, reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\\n\\t\\t\\t#ifdef TEXTURE_LOD_EXT\\n\\t\\t\\t\\tvec4 envMapColor = texture2DLodEXT( envMap, sampleUV, specularMIPLevel );\\n\\t\\t\\t#else\\n\\t\\t\\t\\tvec4 envMapColor = texture2D( envMap, sampleUV, specularMIPLevel );\\n\\t\\t\\t#endif\\n\\t\\t\\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\\n\\t\\t#elif defined( ENVMAP_TYPE_SPHERE )\\n\\t\\t\\tvec3 reflectView = normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0,0.0,1.0 ) );\\n\\t\\t\\t#ifdef TEXTURE_LOD_EXT\\n\\t\\t\\t\\tvec4 envMapColor = texture2DLodEXT( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\\n\\t\\t\\t#else\\n\\t\\t\\t\\tvec4 envMapColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\\n\\t\\t\\t#endif\\n\\t\\t\\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\\n\\t\\t#endif\\n\\t\\treturn envMapColor.rgb * envMapIntensity;\\n\\t}\\n#endif\\n\";\n\nvar lights_phong_fragment = \"BlinnPhongMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb;\\nmaterial.specularColor = specular;\\nmaterial.specularShininess = shininess;\\nmaterial.specularStrength = specularStrength;\\n\";\n\nvar lights_phong_pars_fragment = \"varying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\nstruct BlinnPhongMaterial {\\n\\tvec3\\tdiffuseColor;\\n\\tvec3\\tspecularColor;\\n\\tfloat\\tspecularShininess;\\n\\tfloat\\tspecularStrength;\\n};\\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\\n\\t#ifdef TOON\\n\\t\\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\\n\\t#else\\n\\t\\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\\n\\t\\tvec3 irradiance = dotNL * directLight.color;\\n\\t#endif\\n\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\tirradiance *= PI;\\n\\t#endif\\n\\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n\\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\\n}\\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_BlinnPhong\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_BlinnPhong\\n#define Material_LightProbeLOD( material )\\t(0)\\n\";\n\nvar lights_physical_fragment = \"PhysicalMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\\nmaterial.specularRoughness = clamp( roughnessFactor, 0.04, 1.0 );\\n#ifdef STANDARD\\n\\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\\n#else\\n\\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\\n\\tmaterial.clearCoat = saturate( clearCoat );\\tmaterial.clearCoatRoughness = clamp( clearCoatRoughness, 0.04, 1.0 );\\n#endif\\n\";\n\nvar lights_physical_pars_fragment = \"struct PhysicalMaterial {\\n\\tvec3\\tdiffuseColor;\\n\\tfloat\\tspecularRoughness;\\n\\tvec3\\tspecularColor;\\n\\t#ifndef STANDARD\\n\\t\\tfloat clearCoat;\\n\\t\\tfloat clearCoatRoughness;\\n\\t#endif\\n};\\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\\nfloat clearCoatDHRApprox( const in float roughness, const in float dotNL ) {\\n\\treturn DEFAULT_SPECULAR_COEFFICIENT + ( 1.0 - DEFAULT_SPECULAR_COEFFICIENT ) * ( pow( 1.0 - dotNL, 5.0 ) * pow( 1.0 - roughness, 2.0 ) );\\n}\\n#if NUM_RECT_AREA_LIGHTS > 0\\n\\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\t\\tvec3 normal = geometry.normal;\\n\\t\\tvec3 viewDir = geometry.viewDir;\\n\\t\\tvec3 position = geometry.position;\\n\\t\\tvec3 lightPos = rectAreaLight.position;\\n\\t\\tvec3 halfWidth = rectAreaLight.halfWidth;\\n\\t\\tvec3 halfHeight = rectAreaLight.halfHeight;\\n\\t\\tvec3 lightColor = rectAreaLight.color;\\n\\t\\tfloat roughness = material.specularRoughness;\\n\\t\\tvec3 rectCoords[ 4 ];\\n\\t\\trectCoords[ 0 ] = lightPos - halfWidth - halfHeight;\\t\\trectCoords[ 1 ] = lightPos + halfWidth - halfHeight;\\n\\t\\trectCoords[ 2 ] = lightPos + halfWidth + halfHeight;\\n\\t\\trectCoords[ 3 ] = lightPos - halfWidth + halfHeight;\\n\\t\\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\\n\\t\\tvec4 t1 = texture2D( ltc_1, uv );\\n\\t\\tvec4 t2 = texture2D( ltc_2, uv );\\n\\t\\tmat3 mInv = mat3(\\n\\t\\t\\tvec3( t1.x, 0, t1.y ),\\n\\t\\t\\tvec3( 0, 1, 0 ),\\n\\t\\t\\tvec3( t1.z, 0, t1.w )\\n\\t\\t);\\n\\t\\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\\n\\t\\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\\n\\t\\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\\n\\t}\\n#endif\\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\\n\\tvec3 irradiance = dotNL * directLight.color;\\n\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\tirradiance *= PI;\\n\\t#endif\\n\\t#ifndef STANDARD\\n\\t\\tfloat clearCoatDHR = material.clearCoat * clearCoatDHRApprox( material.clearCoatRoughness, dotNL );\\n\\t#else\\n\\t\\tfloat clearCoatDHR = 0.0;\\n\\t#endif\\n\\treflectedLight.directSpecular += ( 1.0 - clearCoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry, material.specularColor, material.specularRoughness );\\n\\treflectedLight.directDiffuse += ( 1.0 - clearCoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n\\t#ifndef STANDARD\\n\\t\\treflectedLight.directSpecular += irradiance * material.clearCoat * BRDF_Specular_GGX( directLight, geometry, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearCoatRoughness );\\n\\t#endif\\n}\\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 clearCoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\t#ifndef STANDARD\\n\\t\\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\\n\\t\\tfloat dotNL = dotNV;\\n\\t\\tfloat clearCoatDHR = material.clearCoat * clearCoatDHRApprox( material.clearCoatRoughness, dotNL );\\n\\t#else\\n\\t\\tfloat clearCoatDHR = 0.0;\\n\\t#endif\\n\\treflectedLight.indirectSpecular += ( 1.0 - clearCoatDHR ) * radiance * BRDF_Specular_GGX_Environment( geometry, material.specularColor, material.specularRoughness );\\n\\t#ifndef STANDARD\\n\\t\\treflectedLight.indirectSpecular += clearCoatRadiance * material.clearCoat * BRDF_Specular_GGX_Environment( geometry, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearCoatRoughness );\\n\\t#endif\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_Physical\\n#define RE_Direct_RectArea\\t\\tRE_Direct_RectArea_Physical\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_Physical\\n#define RE_IndirectSpecular\\t\\tRE_IndirectSpecular_Physical\\n#define Material_BlinnShininessExponent( material ) GGXRoughnessToBlinnExponent( material.specularRoughness )\\n#define Material_ClearCoat_BlinnShininessExponent( material ) GGXRoughnessToBlinnExponent( material.clearCoatRoughness )\\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\\n\\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\\n}\\n\";\n\nvar lights_fragment_begin = \"\\nGeometricContext geometry;\\ngeometry.position = - vViewPosition;\\ngeometry.normal = normal;\\ngeometry.viewDir = normalize( vViewPosition );\\nIncidentLight directLight;\\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\\n\\tPointLight pointLight;\\n\\t#pragma unroll_loop\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\\n\\t\\tpointLight = pointLights[ i ];\\n\\t\\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\\n\\t\\t#ifdef USE_SHADOWMAP\\n\\t\\tdirectLight.color *= all( bvec2( pointLight.shadow, directLight.visible ) ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometry, material, reflectedLight );\\n\\t}\\n#endif\\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\\n\\tSpotLight spotLight;\\n\\t#pragma unroll_loop\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\\n\\t\\tspotLight = spotLights[ i ];\\n\\t\\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\\n\\t\\t#ifdef USE_SHADOWMAP\\n\\t\\tdirectLight.color *= all( bvec2( spotLight.shadow, directLight.visible ) ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometry, material, reflectedLight );\\n\\t}\\n#endif\\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\\n\\tDirectionalLight directionalLight;\\n\\t#pragma unroll_loop\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\\n\\t\\tdirectionalLight = directionalLights[ i ];\\n\\t\\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\\n\\t\\t#ifdef USE_SHADOWMAP\\n\\t\\tdirectLight.color *= all( bvec2( directionalLight.shadow, directLight.visible ) ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometry, material, reflectedLight );\\n\\t}\\n#endif\\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\\n\\tRectAreaLight rectAreaLight;\\n\\t#pragma unroll_loop\\n\\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\\n\\t\\trectAreaLight = rectAreaLights[ i ];\\n\\t\\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\\n\\t}\\n#endif\\n#if defined( RE_IndirectDiffuse )\\n\\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\\n\\t#if ( NUM_HEMI_LIGHTS > 0 )\\n\\t\\t#pragma unroll_loop\\n\\t\\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\\n\\t\\t\\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\\n\\t\\t}\\n\\t#endif\\n#endif\\n#if defined( RE_IndirectSpecular )\\n\\tvec3 radiance = vec3( 0.0 );\\n\\tvec3 clearCoatRadiance = vec3( 0.0 );\\n#endif\\n\";\n\nvar lights_fragment_maps = \"#if defined( RE_IndirectDiffuse )\\n\\t#ifdef USE_LIGHTMAP\\n\\t\\tvec3 lightMapIrradiance = texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\\n\\t\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\t\\tlightMapIrradiance *= PI;\\n\\t\\t#endif\\n\\t\\tirradiance += lightMapIrradiance;\\n\\t#endif\\n\\t#if defined( USE_ENVMAP ) && defined( PHYSICAL ) && defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\tirradiance += getLightProbeIndirectIrradiance( geometry, maxMipLevel );\\n\\t#endif\\n#endif\\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\\n\\tradiance += getLightProbeIndirectRadiance( geometry, Material_BlinnShininessExponent( material ), maxMipLevel );\\n\\t#ifndef STANDARD\\n\\t\\tclearCoatRadiance += getLightProbeIndirectRadiance( geometry, Material_ClearCoat_BlinnShininessExponent( material ), maxMipLevel );\\n\\t#endif\\n#endif\\n\";\n\nvar lights_fragment_end = \"#if defined( RE_IndirectDiffuse )\\n\\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\\n#endif\\n#if defined( RE_IndirectSpecular )\\n\\tRE_IndirectSpecular( radiance, clearCoatRadiance, geometry, material, reflectedLight );\\n#endif\\n\";\n\nvar logdepthbuf_fragment = \"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\\n\\tgl_FragDepthEXT = log2( vFragDepth ) * logDepthBufFC * 0.5;\\n#endif\";\n\nvar logdepthbuf_pars_fragment = \"#ifdef USE_LOGDEPTHBUF\\n\\tuniform float logDepthBufFC;\\n\\t#ifdef USE_LOGDEPTHBUF_EXT\\n\\t\\tvarying float vFragDepth;\\n\\t#endif\\n#endif\\n\";\n\nvar logdepthbuf_pars_vertex = \"#ifdef USE_LOGDEPTHBUF\\n\\t#ifdef USE_LOGDEPTHBUF_EXT\\n\\t\\tvarying float vFragDepth;\\n\\t#endif\\n\\tuniform float logDepthBufFC;\\n#endif\";\n\nvar logdepthbuf_vertex = \"#ifdef USE_LOGDEPTHBUF\\n\\t#ifdef USE_LOGDEPTHBUF_EXT\\n\\t\\tvFragDepth = 1.0 + gl_Position.w;\\n\\t#else\\n\\t\\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\\n\\t\\tgl_Position.z *= gl_Position.w;\\n\\t#endif\\n#endif\\n\";\n\nvar map_fragment = \"#ifdef USE_MAP\\n\\tvec4 texelColor = texture2D( map, vUv );\\n\\ttexelColor = mapTexelToLinear( texelColor );\\n\\tdiffuseColor *= texelColor;\\n#endif\\n\";\n\nvar map_pars_fragment = \"#ifdef USE_MAP\\n\\tuniform sampler2D map;\\n#endif\\n\";\n\nvar map_particle_fragment = \"#ifdef USE_MAP\\n\\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\\n\\tvec4 mapTexel = texture2D( map, uv );\\n\\tdiffuseColor *= mapTexelToLinear( mapTexel );\\n#endif\\n\";\n\nvar map_particle_pars_fragment = \"#ifdef USE_MAP\\n\\tuniform mat3 uvTransform;\\n\\tuniform sampler2D map;\\n#endif\\n\";\n\nvar metalnessmap_fragment = \"float metalnessFactor = metalness;\\n#ifdef USE_METALNESSMAP\\n\\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\\n\\tmetalnessFactor *= texelMetalness.b;\\n#endif\\n\";\n\nvar metalnessmap_pars_fragment = \"#ifdef USE_METALNESSMAP\\n\\tuniform sampler2D metalnessMap;\\n#endif\";\n\nvar morphnormal_vertex = \"#ifdef USE_MORPHNORMALS\\n\\tobjectNormal += ( morphNormal0 - normal ) * morphTargetInfluences[ 0 ];\\n\\tobjectNormal += ( morphNormal1 - normal ) * morphTargetInfluences[ 1 ];\\n\\tobjectNormal += ( morphNormal2 - normal ) * morphTargetInfluences[ 2 ];\\n\\tobjectNormal += ( morphNormal3 - normal ) * morphTargetInfluences[ 3 ];\\n#endif\\n\";\n\nvar morphtarget_pars_vertex = \"#ifdef USE_MORPHTARGETS\\n\\t#ifndef USE_MORPHNORMALS\\n\\tuniform float morphTargetInfluences[ 8 ];\\n\\t#else\\n\\tuniform float morphTargetInfluences[ 4 ];\\n\\t#endif\\n#endif\";\n\nvar morphtarget_vertex = \"#ifdef USE_MORPHTARGETS\\n\\ttransformed += ( morphTarget0 - position ) * morphTargetInfluences[ 0 ];\\n\\ttransformed += ( morphTarget1 - position ) * morphTargetInfluences[ 1 ];\\n\\ttransformed += ( morphTarget2 - position ) * morphTargetInfluences[ 2 ];\\n\\ttransformed += ( morphTarget3 - position ) * morphTargetInfluences[ 3 ];\\n\\t#ifndef USE_MORPHNORMALS\\n\\ttransformed += ( morphTarget4 - position ) * morphTargetInfluences[ 4 ];\\n\\ttransformed += ( morphTarget5 - position ) * morphTargetInfluences[ 5 ];\\n\\ttransformed += ( morphTarget6 - position ) * morphTargetInfluences[ 6 ];\\n\\ttransformed += ( morphTarget7 - position ) * morphTargetInfluences[ 7 ];\\n\\t#endif\\n#endif\\n\";\n\nvar normal_fragment_begin = \"#ifdef FLAT_SHADED\\n\\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\\n\\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\\n\\tvec3 normal = normalize( cross( fdx, fdy ) );\\n#else\\n\\tvec3 normal = normalize( vNormal );\\n\\t#ifdef DOUBLE_SIDED\\n\\t\\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\\n\\t#endif\\n#endif\\n\";\n\nvar normal_fragment_maps = \"#ifdef USE_NORMALMAP\\n\\tnormal = perturbNormal2Arb( -vViewPosition, normal );\\n#elif defined( USE_BUMPMAP )\\n\\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\\n#endif\\n\";\n\nvar normalmap_pars_fragment = \"#ifdef USE_NORMALMAP\\n\\tuniform sampler2D normalMap;\\n\\tuniform vec2 normalScale;\\n\\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm ) {\\n\\t\\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\\n\\t\\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\\n\\t\\tvec2 st0 = dFdx( vUv.st );\\n\\t\\tvec2 st1 = dFdy( vUv.st );\\n\\t\\tfloat scale = sign( st1.t * st0.s - st0.t * st1.s );\\t\\tscale *= float( gl_FrontFacing ) * 2.0 - 1.0;\\n\\t\\tvec3 S = normalize( ( q0 * st1.t - q1 * st0.t ) * scale );\\n\\t\\tvec3 T = normalize( ( - q0 * st1.s + q1 * st0.s ) * scale );\\n\\t\\tvec3 N = normalize( surf_norm );\\n\\t\\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\\n\\t\\tmapN.xy = normalScale * mapN.xy;\\n\\t\\tmat3 tsn = mat3( S, T, N );\\n\\t\\treturn normalize( tsn * mapN );\\n\\t}\\n#endif\\n\";\n\nvar packing = \"vec3 packNormalToRGB( const in vec3 normal ) {\\n\\treturn normalize( normal ) * 0.5 + 0.5;\\n}\\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\\n\\treturn 2.0 * rgb.xyz - 1.0;\\n}\\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\\nconst float ShiftRight8 = 1. / 256.;\\nvec4 packDepthToRGBA( const in float v ) {\\n\\tvec4 r = vec4( fract( v * PackFactors ), v );\\n\\tr.yzw -= r.xyz * ShiftRight8;\\treturn r * PackUpscale;\\n}\\nfloat unpackRGBAToDepth( const in vec4 v ) {\\n\\treturn dot( v, UnpackFactors );\\n}\\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\\n\\treturn ( viewZ + near ) / ( near - far );\\n}\\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\\n\\treturn linearClipZ * ( near - far ) - near;\\n}\\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\\n\\treturn (( near + viewZ ) * far ) / (( far - near ) * viewZ );\\n}\\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\\n\\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\\n}\\n\";\n\nvar premultiplied_alpha_fragment = \"#ifdef PREMULTIPLIED_ALPHA\\n\\tgl_FragColor.rgb *= gl_FragColor.a;\\n#endif\\n\";\n\nvar project_vertex = \"vec4 mvPosition = modelViewMatrix * vec4( transformed, 1.0 );\\ngl_Position = projectionMatrix * mvPosition;\\n\";\n\nvar dithering_fragment = \"#if defined( DITHERING )\\n gl_FragColor.rgb = dithering( gl_FragColor.rgb );\\n#endif\\n\";\n\nvar dithering_pars_fragment = \"#if defined( DITHERING )\\n\\tvec3 dithering( vec3 color ) {\\n\\t\\tfloat grid_position = rand( gl_FragCoord.xy );\\n\\t\\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\\n\\t\\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\\n\\t\\treturn color + dither_shift_RGB;\\n\\t}\\n#endif\\n\";\n\nvar roughnessmap_fragment = \"float roughnessFactor = roughness;\\n#ifdef USE_ROUGHNESSMAP\\n\\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\\n\\troughnessFactor *= texelRoughness.g;\\n#endif\\n\";\n\nvar roughnessmap_pars_fragment = \"#ifdef USE_ROUGHNESSMAP\\n\\tuniform sampler2D roughnessMap;\\n#endif\";\n\nvar shadowmap_pars_fragment = \"#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHTS > 0\\n\\t\\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHTS ];\\n\\t\\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHTS > 0\\n\\t\\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHTS ];\\n\\t\\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHTS ];\\n\\t#endif\\n\\t#if NUM_POINT_LIGHTS > 0\\n\\t\\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHTS ];\\n\\t\\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHTS ];\\n\\t#endif\\n\\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\\n\\t\\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\\n\\t}\\n\\tfloat texture2DShadowLerp( sampler2D depths, vec2 size, vec2 uv, float compare ) {\\n\\t\\tconst vec2 offset = vec2( 0.0, 1.0 );\\n\\t\\tvec2 texelSize = vec2( 1.0 ) / size;\\n\\t\\tvec2 centroidUV = floor( uv * size + 0.5 ) / size;\\n\\t\\tfloat lb = texture2DCompare( depths, centroidUV + texelSize * offset.xx, compare );\\n\\t\\tfloat lt = texture2DCompare( depths, centroidUV + texelSize * offset.xy, compare );\\n\\t\\tfloat rb = texture2DCompare( depths, centroidUV + texelSize * offset.yx, compare );\\n\\t\\tfloat rt = texture2DCompare( depths, centroidUV + texelSize * offset.yy, compare );\\n\\t\\tvec2 f = fract( uv * size + 0.5 );\\n\\t\\tfloat a = mix( lb, lt, f.y );\\n\\t\\tfloat b = mix( rb, rt, f.y );\\n\\t\\tfloat c = mix( a, b, f.x );\\n\\t\\treturn c;\\n\\t}\\n\\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\\n\\t\\tfloat shadow = 1.0;\\n\\t\\tshadowCoord.xyz /= shadowCoord.w;\\n\\t\\tshadowCoord.z += shadowBias;\\n\\t\\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\\n\\t\\tbool inFrustum = all( inFrustumVec );\\n\\t\\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\\n\\t\\tbool frustumTest = all( frustumTestVec );\\n\\t\\tif ( frustumTest ) {\\n\\t\\t#if defined( SHADOWMAP_TYPE_PCF )\\n\\t\\t\\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\\n\\t\\t\\tfloat dx0 = - texelSize.x * shadowRadius;\\n\\t\\t\\tfloat dy0 = - texelSize.y * shadowRadius;\\n\\t\\t\\tfloat dx1 = + texelSize.x * shadowRadius;\\n\\t\\t\\tfloat dy1 = + texelSize.y * shadowRadius;\\n\\t\\t\\tshadow = (\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\\n\\t\\t\\t) * ( 1.0 / 9.0 );\\n\\t\\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\\n\\t\\t\\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\\n\\t\\t\\tfloat dx0 = - texelSize.x * shadowRadius;\\n\\t\\t\\tfloat dy0 = - texelSize.y * shadowRadius;\\n\\t\\t\\tfloat dx1 = + texelSize.x * shadowRadius;\\n\\t\\t\\tfloat dy1 = + texelSize.y * shadowRadius;\\n\\t\\t\\tshadow = (\\n\\t\\t\\t\\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy, shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\\n\\t\\t\\t) * ( 1.0 / 9.0 );\\n\\t\\t#else\\n\\t\\t\\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\\n\\t\\t#endif\\n\\t\\t}\\n\\t\\treturn shadow;\\n\\t}\\n\\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\\n\\t\\tvec3 absV = abs( v );\\n\\t\\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\\n\\t\\tabsV *= scaleToCube;\\n\\t\\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\\n\\t\\tvec2 planar = v.xy;\\n\\t\\tfloat almostATexel = 1.5 * texelSizeY;\\n\\t\\tfloat almostOne = 1.0 - almostATexel;\\n\\t\\tif ( absV.z >= almostOne ) {\\n\\t\\t\\tif ( v.z > 0.0 )\\n\\t\\t\\t\\tplanar.x = 4.0 - v.x;\\n\\t\\t} else if ( absV.x >= almostOne ) {\\n\\t\\t\\tfloat signX = sign( v.x );\\n\\t\\t\\tplanar.x = v.z * signX + 2.0 * signX;\\n\\t\\t} else if ( absV.y >= almostOne ) {\\n\\t\\t\\tfloat signY = sign( v.y );\\n\\t\\t\\tplanar.x = v.x + 2.0 * signY + 2.0;\\n\\t\\t\\tplanar.y = v.z * signY - 2.0;\\n\\t\\t}\\n\\t\\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\\n\\t}\\n\\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\\n\\t\\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\\n\\t\\tvec3 lightToPosition = shadowCoord.xyz;\\n\\t\\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\\t\\tdp += shadowBias;\\n\\t\\tvec3 bd3D = normalize( lightToPosition );\\n\\t\\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT )\\n\\t\\t\\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\\n\\t\\t\\treturn (\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\\n\\t\\t\\t) * ( 1.0 / 9.0 );\\n\\t\\t#else\\n\\t\\t\\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\\n\\t\\t#endif\\n\\t}\\n#endif\\n\";\n\nvar shadowmap_pars_vertex = \"#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHTS > 0\\n\\t\\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHTS ];\\n\\t\\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHTS > 0\\n\\t\\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHTS ];\\n\\t\\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHTS ];\\n\\t#endif\\n\\t#if NUM_POINT_LIGHTS > 0\\n\\t\\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHTS ];\\n\\t\\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHTS ];\\n\\t#endif\\n#endif\\n\";\n\nvar shadowmap_vertex = \"#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHTS > 0\\n\\t#pragma unroll_loop\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\\n\\t\\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * worldPosition;\\n\\t}\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHTS > 0\\n\\t#pragma unroll_loop\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\\n\\t\\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * worldPosition;\\n\\t}\\n\\t#endif\\n\\t#if NUM_POINT_LIGHTS > 0\\n\\t#pragma unroll_loop\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\\n\\t\\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * worldPosition;\\n\\t}\\n\\t#endif\\n#endif\\n\";\n\nvar shadowmask_pars_fragment = \"float getShadowMask() {\\n\\tfloat shadow = 1.0;\\n\\t#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHTS > 0\\n\\tDirectionalLight directionalLight;\\n\\t#pragma unroll_loop\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\\n\\t\\tdirectionalLight = directionalLights[ i ];\\n\\t\\tshadow *= bool( directionalLight.shadow ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\\n\\t}\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHTS > 0\\n\\tSpotLight spotLight;\\n\\t#pragma unroll_loop\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\\n\\t\\tspotLight = spotLights[ i ];\\n\\t\\tshadow *= bool( spotLight.shadow ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\\n\\t}\\n\\t#endif\\n\\t#if NUM_POINT_LIGHTS > 0\\n\\tPointLight pointLight;\\n\\t#pragma unroll_loop\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\\n\\t\\tpointLight = pointLights[ i ];\\n\\t\\tshadow *= bool( pointLight.shadow ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\\n\\t}\\n\\t#endif\\n\\t#endif\\n\\treturn shadow;\\n}\\n\";\n\nvar skinbase_vertex = \"#ifdef USE_SKINNING\\n\\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\\n\\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\\n\\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\\n\\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\\n#endif\";\n\nvar skinning_pars_vertex = \"#ifdef USE_SKINNING\\n\\tuniform mat4 bindMatrix;\\n\\tuniform mat4 bindMatrixInverse;\\n\\t#ifdef BONE_TEXTURE\\n\\t\\tuniform sampler2D boneTexture;\\n\\t\\tuniform int boneTextureSize;\\n\\t\\tmat4 getBoneMatrix( const in float i ) {\\n\\t\\t\\tfloat j = i * 4.0;\\n\\t\\t\\tfloat x = mod( j, float( boneTextureSize ) );\\n\\t\\t\\tfloat y = floor( j / float( boneTextureSize ) );\\n\\t\\t\\tfloat dx = 1.0 / float( boneTextureSize );\\n\\t\\t\\tfloat dy = 1.0 / float( boneTextureSize );\\n\\t\\t\\ty = dy * ( y + 0.5 );\\n\\t\\t\\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\\n\\t\\t\\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\\n\\t\\t\\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\\n\\t\\t\\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\\n\\t\\t\\tmat4 bone = mat4( v1, v2, v3, v4 );\\n\\t\\t\\treturn bone;\\n\\t\\t}\\n\\t#else\\n\\t\\tuniform mat4 boneMatrices[ MAX_BONES ];\\n\\t\\tmat4 getBoneMatrix( const in float i ) {\\n\\t\\t\\tmat4 bone = boneMatrices[ int(i) ];\\n\\t\\t\\treturn bone;\\n\\t\\t}\\n\\t#endif\\n#endif\\n\";\n\nvar skinning_vertex = \"#ifdef USE_SKINNING\\n\\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\\n\\tvec4 skinned = vec4( 0.0 );\\n\\tskinned += boneMatX * skinVertex * skinWeight.x;\\n\\tskinned += boneMatY * skinVertex * skinWeight.y;\\n\\tskinned += boneMatZ * skinVertex * skinWeight.z;\\n\\tskinned += boneMatW * skinVertex * skinWeight.w;\\n\\ttransformed = ( bindMatrixInverse * skinned ).xyz;\\n#endif\\n\";\n\nvar skinnormal_vertex = \"#ifdef USE_SKINNING\\n\\tmat4 skinMatrix = mat4( 0.0 );\\n\\tskinMatrix += skinWeight.x * boneMatX;\\n\\tskinMatrix += skinWeight.y * boneMatY;\\n\\tskinMatrix += skinWeight.z * boneMatZ;\\n\\tskinMatrix += skinWeight.w * boneMatW;\\n\\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\\n\\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\\n#endif\\n\";\n\nvar specularmap_fragment = \"float specularStrength;\\n#ifdef USE_SPECULARMAP\\n\\tvec4 texelSpecular = texture2D( specularMap, vUv );\\n\\tspecularStrength = texelSpecular.r;\\n#else\\n\\tspecularStrength = 1.0;\\n#endif\";\n\nvar specularmap_pars_fragment = \"#ifdef USE_SPECULARMAP\\n\\tuniform sampler2D specularMap;\\n#endif\";\n\nvar tonemapping_fragment = \"#if defined( TONE_MAPPING )\\n gl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\\n#endif\\n\";\n\nvar tonemapping_pars_fragment = \"#ifndef saturate\\n\\t#define saturate(a) clamp( a, 0.0, 1.0 )\\n#endif\\nuniform float toneMappingExposure;\\nuniform float toneMappingWhitePoint;\\nvec3 LinearToneMapping( vec3 color ) {\\n\\treturn toneMappingExposure * color;\\n}\\nvec3 ReinhardToneMapping( vec3 color ) {\\n\\tcolor *= toneMappingExposure;\\n\\treturn saturate( color / ( vec3( 1.0 ) + color ) );\\n}\\n#define Uncharted2Helper( x ) max( ( ( x * ( 0.15 * x + 0.10 * 0.50 ) + 0.20 * 0.02 ) / ( x * ( 0.15 * x + 0.50 ) + 0.20 * 0.30 ) ) - 0.02 / 0.30, vec3( 0.0 ) )\\nvec3 Uncharted2ToneMapping( vec3 color ) {\\n\\tcolor *= toneMappingExposure;\\n\\treturn saturate( Uncharted2Helper( color ) / Uncharted2Helper( vec3( toneMappingWhitePoint ) ) );\\n}\\nvec3 OptimizedCineonToneMapping( vec3 color ) {\\n\\tcolor *= toneMappingExposure;\\n\\tcolor = max( vec3( 0.0 ), color - 0.004 );\\n\\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\\n}\\n\";\n\nvar uv_pars_fragment = \"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\\n\\tvarying vec2 vUv;\\n#endif\";\n\nvar uv_pars_vertex = \"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\\n\\tvarying vec2 vUv;\\n\\tuniform mat3 uvTransform;\\n#endif\\n\";\n\nvar uv_vertex = \"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\\n\\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\\n#endif\";\n\nvar uv2_pars_fragment = \"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\n\\tvarying vec2 vUv2;\\n#endif\";\n\nvar uv2_pars_vertex = \"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\n\\tattribute vec2 uv2;\\n\\tvarying vec2 vUv2;\\n#endif\";\n\nvar uv2_vertex = \"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\n\\tvUv2 = uv2;\\n#endif\";\n\nvar worldpos_vertex = \"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )\\n\\tvec4 worldPosition = modelMatrix * vec4( transformed, 1.0 );\\n#endif\\n\";\n\nvar cube_frag = \"uniform samplerCube tCube;\\nuniform float tFlip;\\nuniform float opacity;\\nvarying vec3 vWorldPosition;\\nvoid main() {\\n\\tgl_FragColor = textureCube( tCube, vec3( tFlip * vWorldPosition.x, vWorldPosition.yz ) );\\n\\tgl_FragColor.a *= opacity;\\n}\\n\";\n\nvar cube_vert = \"varying vec3 vWorldPosition;\\n#include \\nvoid main() {\\n\\tvWorldPosition = transformDirection( position, modelMatrix );\\n\\t#include \\n\\t#include \\n\\tgl_Position.z = gl_Position.w;\\n}\\n\";\n\nvar depth_frag = \"#if DEPTH_PACKING == 3200\\n\\tuniform float opacity;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvec4 diffuseColor = vec4( 1.0 );\\n\\t#if DEPTH_PACKING == 3200\\n\\t\\tdiffuseColor.a = opacity;\\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#if DEPTH_PACKING == 3200\\n\\t\\tgl_FragColor = vec4( vec3( 1.0 - gl_FragCoord.z ), opacity );\\n\\t#elif DEPTH_PACKING == 3201\\n\\t\\tgl_FragColor = packDepthToRGBA( gl_FragCoord.z );\\n\\t#endif\\n}\\n\";\n\nvar depth_vert = \"#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#ifdef USE_DISPLACEMENTMAP\\n\\t\\t#include \\n\\t\\t#include \\n\\t\\t#include \\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\\n\";\n\nvar distanceRGBA_frag = \"#define DISTANCE\\nuniform vec3 referencePosition;\\nuniform float nearDistance;\\nuniform float farDistance;\\nvarying vec3 vWorldPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main () {\\n\\t#include \\n\\tvec4 diffuseColor = vec4( 1.0 );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\tfloat dist = length( vWorldPosition - referencePosition );\\n\\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\\n\\tdist = saturate( dist );\\n\\tgl_FragColor = packDepthToRGBA( dist );\\n}\\n\";\n\nvar distanceRGBA_vert = \"#define DISTANCE\\nvarying vec3 vWorldPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#ifdef USE_DISPLACEMENTMAP\\n\\t\\t#include \\n\\t\\t#include \\n\\t\\t#include \\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvWorldPosition = worldPosition.xyz;\\n}\\n\";\n\nvar equirect_frag = \"uniform sampler2D tEquirect;\\nvarying vec3 vWorldPosition;\\n#include \\nvoid main() {\\n\\tvec3 direction = normalize( vWorldPosition );\\n\\tvec2 sampleUV;\\n\\tsampleUV.y = asin( clamp( direction.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\\n\\tsampleUV.x = atan( direction.z, direction.x ) * RECIPROCAL_PI2 + 0.5;\\n\\tgl_FragColor = texture2D( tEquirect, sampleUV );\\n}\\n\";\n\nvar equirect_vert = \"varying vec3 vWorldPosition;\\n#include \\nvoid main() {\\n\\tvWorldPosition = transformDirection( position, modelMatrix );\\n\\t#include \\n\\t#include \\n}\\n\";\n\nvar linedashed_frag = \"uniform vec3 diffuse;\\nuniform float opacity;\\nuniform float dashSize;\\nuniform float totalSize;\\nvarying float vLineDistance;\\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\\n\\t\\tdiscard;\\n\\t}\\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\t#include \\n\\toutgoingLight = diffuseColor.rgb;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\\n\";\n\nvar linedashed_vert = \"uniform float scale;\\nattribute float lineDistance;\\nvarying float vLineDistance;\\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvLineDistance = scale * lineDistance;\\n\\tvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\\n\\tgl_Position = projectionMatrix * mvPosition;\\n\\t#include \\n\\t#include \\n\\t#include \\n}\\n\";\n\nvar meshbasic_frag = \"uniform vec3 diffuse;\\nuniform float opacity;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\t#ifdef USE_LIGHTMAP\\n\\t\\treflectedLight.indirectDiffuse += texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\\n\\t#else\\n\\t\\treflectedLight.indirectDiffuse += vec3( 1.0 );\\n\\t#endif\\n\\t#include \\n\\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\\n\\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\\n\\t#include \\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\\n\";\n\nvar meshbasic_vert = \"#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#ifdef USE_ENVMAP\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\\n\";\n\nvar meshlambert_frag = \"uniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float opacity;\\nvarying vec3 vLightFront;\\n#ifdef DOUBLE_SIDED\\n\\tvarying vec3 vLightBack;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\treflectedLight.indirectDiffuse = getAmbientLightIrradiance( ambientLightColor );\\n\\t#include \\n\\treflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\\n\\t#ifdef DOUBLE_SIDED\\n\\t\\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\\n\\t#else\\n\\t\\treflectedLight.directDiffuse = vLightFront;\\n\\t#endif\\n\\treflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\\n\\t#include \\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\\n\\t#include \\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\\n\";\n\nvar meshlambert_vert = \"#define LAMBERT\\nvarying vec3 vLightFront;\\n#ifdef DOUBLE_SIDED\\n\\tvarying vec3 vLightBack;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\\n\";\n\nvar meshphong_frag = \"#define PHONG\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform vec3 specular;\\nuniform float shininess;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\\n\\t#include \\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\\n\";\n\nvar meshphong_vert = \"#define PHONG\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n#ifndef FLAT_SHADED\\n\\tvNormal = normalize( transformedNormal );\\n#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\\n\";\n\nvar meshphysical_frag = \"#define PHYSICAL\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float roughness;\\nuniform float metalness;\\nuniform float opacity;\\n#ifndef STANDARD\\n\\tuniform float clearCoat;\\n\\tuniform float clearCoatRoughness;\\n#endif\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\\n\";\n\nvar meshphysical_vert = \"#define PHYSICAL\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n#ifndef FLAT_SHADED\\n\\tvNormal = normalize( transformedNormal );\\n#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include \\n\\t#include \\n\\t#include \\n}\\n\";\n\nvar normal_frag = \"#define NORMAL\\nuniform float opacity;\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )\\n\\tvarying vec3 vViewPosition;\\n#endif\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\\n}\\n\";\n\nvar normal_vert = \"#define NORMAL\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )\\n\\tvarying vec3 vViewPosition;\\n#endif\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n#ifndef FLAT_SHADED\\n\\tvNormal = normalize( transformedNormal );\\n#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )\\n\\tvViewPosition = - mvPosition.xyz;\\n#endif\\n}\\n\";\n\nvar points_frag = \"uniform vec3 diffuse;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\toutgoingLight = diffuseColor.rgb;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\\n\";\n\nvar points_vert = \"uniform float size;\\nuniform float scale;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#ifdef USE_SIZEATTENUATION\\n\\t\\tgl_PointSize = size * ( scale / - mvPosition.z );\\n\\t#else\\n\\t\\tgl_PointSize = size;\\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\\n\";\n\nvar shadow_frag = \"uniform vec3 color;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\\n\\t#include \\n}\\n\";\n\nvar shadow_vert = \"#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\\n\";\n\nvar ShaderChunk = {\n\talphamap_fragment: alphamap_fragment,\n\talphamap_pars_fragment: alphamap_pars_fragment,\n\talphatest_fragment: alphatest_fragment,\n\taomap_fragment: aomap_fragment,\n\taomap_pars_fragment: aomap_pars_fragment,\n\tbegin_vertex: begin_vertex,\n\tbeginnormal_vertex: beginnormal_vertex,\n\tbsdfs: bsdfs,\n\tbumpmap_pars_fragment: bumpmap_pars_fragment,\n\tclipping_planes_fragment: clipping_planes_fragment,\n\tclipping_planes_pars_fragment: clipping_planes_pars_fragment,\n\tclipping_planes_pars_vertex: clipping_planes_pars_vertex,\n\tclipping_planes_vertex: clipping_planes_vertex,\n\tcolor_fragment: color_fragment,\n\tcolor_pars_fragment: color_pars_fragment,\n\tcolor_pars_vertex: color_pars_vertex,\n\tcolor_vertex: color_vertex,\n\tcommon: common,\n\tcube_uv_reflection_fragment: cube_uv_reflection_fragment,\n\tdefaultnormal_vertex: defaultnormal_vertex,\n\tdisplacementmap_pars_vertex: displacementmap_pars_vertex,\n\tdisplacementmap_vertex: displacementmap_vertex,\n\temissivemap_fragment: emissivemap_fragment,\n\temissivemap_pars_fragment: emissivemap_pars_fragment,\n\tencodings_fragment: encodings_fragment,\n\tencodings_pars_fragment: encodings_pars_fragment,\n\tenvmap_fragment: envmap_fragment,\n\tenvmap_pars_fragment: envmap_pars_fragment,\n\tenvmap_pars_vertex: envmap_pars_vertex,\n\tenvmap_vertex: envmap_vertex,\n\tfog_vertex: fog_vertex,\n\tfog_pars_vertex: fog_pars_vertex,\n\tfog_fragment: fog_fragment,\n\tfog_pars_fragment: fog_pars_fragment,\n\tgradientmap_pars_fragment: gradientmap_pars_fragment,\n\tlightmap_fragment: lightmap_fragment,\n\tlightmap_pars_fragment: lightmap_pars_fragment,\n\tlights_lambert_vertex: lights_lambert_vertex,\n\tlights_pars_begin: lights_pars_begin,\n\tlights_pars_maps: lights_pars_maps,\n\tlights_phong_fragment: lights_phong_fragment,\n\tlights_phong_pars_fragment: lights_phong_pars_fragment,\n\tlights_physical_fragment: lights_physical_fragment,\n\tlights_physical_pars_fragment: lights_physical_pars_fragment,\n\tlights_fragment_begin: lights_fragment_begin,\n\tlights_fragment_maps: lights_fragment_maps,\n\tlights_fragment_end: lights_fragment_end,\n\tlogdepthbuf_fragment: logdepthbuf_fragment,\n\tlogdepthbuf_pars_fragment: logdepthbuf_pars_fragment,\n\tlogdepthbuf_pars_vertex: logdepthbuf_pars_vertex,\n\tlogdepthbuf_vertex: logdepthbuf_vertex,\n\tmap_fragment: map_fragment,\n\tmap_pars_fragment: map_pars_fragment,\n\tmap_particle_fragment: map_particle_fragment,\n\tmap_particle_pars_fragment: map_particle_pars_fragment,\n\tmetalnessmap_fragment: metalnessmap_fragment,\n\tmetalnessmap_pars_fragment: metalnessmap_pars_fragment,\n\tmorphnormal_vertex: morphnormal_vertex,\n\tmorphtarget_pars_vertex: morphtarget_pars_vertex,\n\tmorphtarget_vertex: morphtarget_vertex,\n\tnormal_fragment_begin: normal_fragment_begin,\n\tnormal_fragment_maps: normal_fragment_maps,\n\tnormalmap_pars_fragment: normalmap_pars_fragment,\n\tpacking: packing,\n\tpremultiplied_alpha_fragment: premultiplied_alpha_fragment,\n\tproject_vertex: project_vertex,\n\tdithering_fragment: dithering_fragment,\n\tdithering_pars_fragment: dithering_pars_fragment,\n\troughnessmap_fragment: roughnessmap_fragment,\n\troughnessmap_pars_fragment: roughnessmap_pars_fragment,\n\tshadowmap_pars_fragment: shadowmap_pars_fragment,\n\tshadowmap_pars_vertex: shadowmap_pars_vertex,\n\tshadowmap_vertex: shadowmap_vertex,\n\tshadowmask_pars_fragment: shadowmask_pars_fragment,\n\tskinbase_vertex: skinbase_vertex,\n\tskinning_pars_vertex: skinning_pars_vertex,\n\tskinning_vertex: skinning_vertex,\n\tskinnormal_vertex: skinnormal_vertex,\n\tspecularmap_fragment: specularmap_fragment,\n\tspecularmap_pars_fragment: specularmap_pars_fragment,\n\ttonemapping_fragment: tonemapping_fragment,\n\ttonemapping_pars_fragment: tonemapping_pars_fragment,\n\tuv_pars_fragment: uv_pars_fragment,\n\tuv_pars_vertex: uv_pars_vertex,\n\tuv_vertex: uv_vertex,\n\tuv2_pars_fragment: uv2_pars_fragment,\n\tuv2_pars_vertex: uv2_pars_vertex,\n\tuv2_vertex: uv2_vertex,\n\tworldpos_vertex: worldpos_vertex,\n\n\tcube_frag: cube_frag,\n\tcube_vert: cube_vert,\n\tdepth_frag: depth_frag,\n\tdepth_vert: depth_vert,\n\tdistanceRGBA_frag: distanceRGBA_frag,\n\tdistanceRGBA_vert: distanceRGBA_vert,\n\tequirect_frag: equirect_frag,\n\tequirect_vert: equirect_vert,\n\tlinedashed_frag: linedashed_frag,\n\tlinedashed_vert: linedashed_vert,\n\tmeshbasic_frag: meshbasic_frag,\n\tmeshbasic_vert: meshbasic_vert,\n\tmeshlambert_frag: meshlambert_frag,\n\tmeshlambert_vert: meshlambert_vert,\n\tmeshphong_frag: meshphong_frag,\n\tmeshphong_vert: meshphong_vert,\n\tmeshphysical_frag: meshphysical_frag,\n\tmeshphysical_vert: meshphysical_vert,\n\tnormal_frag: normal_frag,\n\tnormal_vert: normal_vert,\n\tpoints_frag: points_frag,\n\tpoints_vert: points_vert,\n\tshadow_frag: shadow_frag,\n\tshadow_vert: shadow_vert\n};\n\n/**\n * Uniform Utilities\n */\n\nvar UniformsUtils = {\n\n\tmerge: function ( uniforms ) {\n\n\t\tvar merged = {};\n\n\t\tfor ( var u = 0; u < uniforms.length; u ++ ) {\n\n\t\t\tvar tmp = this.clone( uniforms[ u ] );\n\n\t\t\tfor ( var p in tmp ) {\n\n\t\t\t\tmerged[ p ] = tmp[ p ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn merged;\n\n\t},\n\n\tclone: function ( uniforms_src ) {\n\n\t\tvar uniforms_dst = {};\n\n\t\tfor ( var u in uniforms_src ) {\n\n\t\t\tuniforms_dst[ u ] = {};\n\n\t\t\tfor ( var p in uniforms_src[ u ] ) {\n\n\t\t\t\tvar parameter_src = uniforms_src[ u ][ p ];\n\n\t\t\t\tif ( parameter_src && ( parameter_src.isColor ||\n\t\t\t\t\tparameter_src.isMatrix3 || parameter_src.isMatrix4 ||\n\t\t\t\t\tparameter_src.isVector2 || parameter_src.isVector3 || parameter_src.isVector4 ||\n\t\t\t\t\tparameter_src.isTexture ) ) {\n\n\t\t\t\t\tuniforms_dst[ u ][ p ] = parameter_src.clone();\n\n\t\t\t\t} else if ( Array.isArray( parameter_src ) ) {\n\n\t\t\t\t\tuniforms_dst[ u ][ p ] = parameter_src.slice();\n\n\t\t\t\t} else {\n\n\t\t\t\t\tuniforms_dst[ u ][ p ] = parameter_src;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn uniforms_dst;\n\n\t}\n\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nvar ColorKeywords = { 'aliceblue': 0xF0F8FF, 'antiquewhite': 0xFAEBD7, 'aqua': 0x00FFFF, 'aquamarine': 0x7FFFD4, 'azure': 0xF0FFFF,\n\t'beige': 0xF5F5DC, 'bisque': 0xFFE4C4, 'black': 0x000000, 'blanchedalmond': 0xFFEBCD, 'blue': 0x0000FF, 'blueviolet': 0x8A2BE2,\n\t'brown': 0xA52A2A, 'burlywood': 0xDEB887, 'cadetblue': 0x5F9EA0, 'chartreuse': 0x7FFF00, 'chocolate': 0xD2691E, 'coral': 0xFF7F50,\n\t'cornflowerblue': 0x6495ED, 'cornsilk': 0xFFF8DC, 'crimson': 0xDC143C, 'cyan': 0x00FFFF, 'darkblue': 0x00008B, 'darkcyan': 0x008B8B,\n\t'darkgoldenrod': 0xB8860B, 'darkgray': 0xA9A9A9, 'darkgreen': 0x006400, 'darkgrey': 0xA9A9A9, 'darkkhaki': 0xBDB76B, 'darkmagenta': 0x8B008B,\n\t'darkolivegreen': 0x556B2F, 'darkorange': 0xFF8C00, 'darkorchid': 0x9932CC, 'darkred': 0x8B0000, 'darksalmon': 0xE9967A, 'darkseagreen': 0x8FBC8F,\n\t'darkslateblue': 0x483D8B, 'darkslategray': 0x2F4F4F, 'darkslategrey': 0x2F4F4F, 'darkturquoise': 0x00CED1, 'darkviolet': 0x9400D3,\n\t'deeppink': 0xFF1493, 'deepskyblue': 0x00BFFF, 'dimgray': 0x696969, 'dimgrey': 0x696969, 'dodgerblue': 0x1E90FF, 'firebrick': 0xB22222,\n\t'floralwhite': 0xFFFAF0, 'forestgreen': 0x228B22, 'fuchsia': 0xFF00FF, 'gainsboro': 0xDCDCDC, 'ghostwhite': 0xF8F8FF, 'gold': 0xFFD700,\n\t'goldenrod': 0xDAA520, 'gray': 0x808080, 'green': 0x008000, 'greenyellow': 0xADFF2F, 'grey': 0x808080, 'honeydew': 0xF0FFF0, 'hotpink': 0xFF69B4,\n\t'indianred': 0xCD5C5C, 'indigo': 0x4B0082, 'ivory': 0xFFFFF0, 'khaki': 0xF0E68C, 'lavender': 0xE6E6FA, 'lavenderblush': 0xFFF0F5, 'lawngreen': 0x7CFC00,\n\t'lemonchiffon': 0xFFFACD, 'lightblue': 0xADD8E6, 'lightcoral': 0xF08080, 'lightcyan': 0xE0FFFF, 'lightgoldenrodyellow': 0xFAFAD2, 'lightgray': 0xD3D3D3,\n\t'lightgreen': 0x90EE90, 'lightgrey': 0xD3D3D3, 'lightpink': 0xFFB6C1, 'lightsalmon': 0xFFA07A, 'lightseagreen': 0x20B2AA, 'lightskyblue': 0x87CEFA,\n\t'lightslategray': 0x778899, 'lightslategrey': 0x778899, 'lightsteelblue': 0xB0C4DE, 'lightyellow': 0xFFFFE0, 'lime': 0x00FF00, 'limegreen': 0x32CD32,\n\t'linen': 0xFAF0E6, 'magenta': 0xFF00FF, 'maroon': 0x800000, 'mediumaquamarine': 0x66CDAA, 'mediumblue': 0x0000CD, 'mediumorchid': 0xBA55D3,\n\t'mediumpurple': 0x9370DB, 'mediumseagreen': 0x3CB371, 'mediumslateblue': 0x7B68EE, 'mediumspringgreen': 0x00FA9A, 'mediumturquoise': 0x48D1CC,\n\t'mediumvioletred': 0xC71585, 'midnightblue': 0x191970, 'mintcream': 0xF5FFFA, 'mistyrose': 0xFFE4E1, 'moccasin': 0xFFE4B5, 'navajowhite': 0xFFDEAD,\n\t'navy': 0x000080, 'oldlace': 0xFDF5E6, 'olive': 0x808000, 'olivedrab': 0x6B8E23, 'orange': 0xFFA500, 'orangered': 0xFF4500, 'orchid': 0xDA70D6,\n\t'palegoldenrod': 0xEEE8AA, 'palegreen': 0x98FB98, 'paleturquoise': 0xAFEEEE, 'palevioletred': 0xDB7093, 'papayawhip': 0xFFEFD5, 'peachpuff': 0xFFDAB9,\n\t'peru': 0xCD853F, 'pink': 0xFFC0CB, 'plum': 0xDDA0DD, 'powderblue': 0xB0E0E6, 'purple': 0x800080, 'rebeccapurple': 0x663399, 'red': 0xFF0000, 'rosybrown': 0xBC8F8F,\n\t'royalblue': 0x4169E1, 'saddlebrown': 0x8B4513, 'salmon': 0xFA8072, 'sandybrown': 0xF4A460, 'seagreen': 0x2E8B57, 'seashell': 0xFFF5EE,\n\t'sienna': 0xA0522D, 'silver': 0xC0C0C0, 'skyblue': 0x87CEEB, 'slateblue': 0x6A5ACD, 'slategray': 0x708090, 'slategrey': 0x708090, 'snow': 0xFFFAFA,\n\t'springgreen': 0x00FF7F, 'steelblue': 0x4682B4, 'tan': 0xD2B48C, 'teal': 0x008080, 'thistle': 0xD8BFD8, 'tomato': 0xFF6347, 'turquoise': 0x40E0D0,\n\t'violet': 0xEE82EE, 'wheat': 0xF5DEB3, 'white': 0xFFFFFF, 'whitesmoke': 0xF5F5F5, 'yellow': 0xFFFF00, 'yellowgreen': 0x9ACD32 };\n\nfunction Color( r, g, b ) {\n\n\tif ( g === undefined && b === undefined ) {\n\n\t\t// r is THREE.Color, hex or string\n\t\treturn this.set( r );\n\n\t}\n\n\treturn this.setRGB( r, g, b );\n\n}\n\nObject.assign( Color.prototype, {\n\n\tisColor: true,\n\n\tr: 1, g: 1, b: 1,\n\n\tset: function ( value ) {\n\n\t\tif ( value && value.isColor ) {\n\n\t\t\tthis.copy( value );\n\n\t\t} else if ( typeof value === 'number' ) {\n\n\t\t\tthis.setHex( value );\n\n\t\t} else if ( typeof value === 'string' ) {\n\n\t\t\tthis.setStyle( value );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tsetScalar: function ( scalar ) {\n\n\t\tthis.r = scalar;\n\t\tthis.g = scalar;\n\t\tthis.b = scalar;\n\n\t\treturn this;\n\n\t},\n\n\tsetHex: function ( hex ) {\n\n\t\thex = Math.floor( hex );\n\n\t\tthis.r = ( hex >> 16 & 255 ) / 255;\n\t\tthis.g = ( hex >> 8 & 255 ) / 255;\n\t\tthis.b = ( hex & 255 ) / 255;\n\n\t\treturn this;\n\n\t},\n\n\tsetRGB: function ( r, g, b ) {\n\n\t\tthis.r = r;\n\t\tthis.g = g;\n\t\tthis.b = b;\n\n\t\treturn this;\n\n\t},\n\n\tsetHSL: function () {\n\n\t\tfunction hue2rgb( p, q, t ) {\n\n\t\t\tif ( t < 0 ) t += 1;\n\t\t\tif ( t > 1 ) t -= 1;\n\t\t\tif ( t < 1 / 6 ) return p + ( q - p ) * 6 * t;\n\t\t\tif ( t < 1 / 2 ) return q;\n\t\t\tif ( t < 2 / 3 ) return p + ( q - p ) * 6 * ( 2 / 3 - t );\n\t\t\treturn p;\n\n\t\t}\n\n\t\treturn function setHSL( h, s, l ) {\n\n\t\t\t// h,s,l ranges are in 0.0 - 1.0\n\t\t\th = _Math.euclideanModulo( h, 1 );\n\t\t\ts = _Math.clamp( s, 0, 1 );\n\t\t\tl = _Math.clamp( l, 0, 1 );\n\n\t\t\tif ( s === 0 ) {\n\n\t\t\t\tthis.r = this.g = this.b = l;\n\n\t\t\t} else {\n\n\t\t\t\tvar p = l <= 0.5 ? l * ( 1 + s ) : l + s - ( l * s );\n\t\t\t\tvar q = ( 2 * l ) - p;\n\n\t\t\t\tthis.r = hue2rgb( q, p, h + 1 / 3 );\n\t\t\t\tthis.g = hue2rgb( q, p, h );\n\t\t\t\tthis.b = hue2rgb( q, p, h - 1 / 3 );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tsetStyle: function ( style ) {\n\n\t\tfunction handleAlpha( string ) {\n\n\t\t\tif ( string === undefined ) return;\n\n\t\t\tif ( parseFloat( string ) < 1 ) {\n\n\t\t\t\tconsole.warn( 'THREE.Color: Alpha component of ' + style + ' will be ignored.' );\n\n\t\t\t}\n\n\t\t}\n\n\n\t\tvar m;\n\n\t\tif ( m = /^((?:rgb|hsl)a?)\\(\\s*([^\\)]*)\\)/.exec( style ) ) {\n\n\t\t\t// rgb / hsl\n\n\t\t\tvar color;\n\t\t\tvar name = m[ 1 ];\n\t\t\tvar components = m[ 2 ];\n\n\t\t\tswitch ( name ) {\n\n\t\t\t\tcase 'rgb':\n\t\t\t\tcase 'rgba':\n\n\t\t\t\t\tif ( color = /^(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(,\\s*([0-9]*\\.?[0-9]+)\\s*)?$/.exec( components ) ) {\n\n\t\t\t\t\t\t// rgb(255,0,0) rgba(255,0,0,0.5)\n\t\t\t\t\t\tthis.r = Math.min( 255, parseInt( color[ 1 ], 10 ) ) / 255;\n\t\t\t\t\t\tthis.g = Math.min( 255, parseInt( color[ 2 ], 10 ) ) / 255;\n\t\t\t\t\t\tthis.b = Math.min( 255, parseInt( color[ 3 ], 10 ) ) / 255;\n\n\t\t\t\t\t\thandleAlpha( color[ 5 ] );\n\n\t\t\t\t\t\treturn this;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( color = /^(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(,\\s*([0-9]*\\.?[0-9]+)\\s*)?$/.exec( components ) ) {\n\n\t\t\t\t\t\t// rgb(100%,0%,0%) rgba(100%,0%,0%,0.5)\n\t\t\t\t\t\tthis.r = Math.min( 100, parseInt( color[ 1 ], 10 ) ) / 100;\n\t\t\t\t\t\tthis.g = Math.min( 100, parseInt( color[ 2 ], 10 ) ) / 100;\n\t\t\t\t\t\tthis.b = Math.min( 100, parseInt( color[ 3 ], 10 ) ) / 100;\n\n\t\t\t\t\t\thandleAlpha( color[ 5 ] );\n\n\t\t\t\t\t\treturn this;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'hsl':\n\t\t\t\tcase 'hsla':\n\n\t\t\t\t\tif ( color = /^([0-9]*\\.?[0-9]+)\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(,\\s*([0-9]*\\.?[0-9]+)\\s*)?$/.exec( components ) ) {\n\n\t\t\t\t\t\t// hsl(120,50%,50%) hsla(120,50%,50%,0.5)\n\t\t\t\t\t\tvar h = parseFloat( color[ 1 ] ) / 360;\n\t\t\t\t\t\tvar s = parseInt( color[ 2 ], 10 ) / 100;\n\t\t\t\t\t\tvar l = parseInt( color[ 3 ], 10 ) / 100;\n\n\t\t\t\t\t\thandleAlpha( color[ 5 ] );\n\n\t\t\t\t\t\treturn this.setHSL( h, s, l );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t} else if ( m = /^\\#([A-Fa-f0-9]+)$/.exec( style ) ) {\n\n\t\t\t// hex color\n\n\t\t\tvar hex = m[ 1 ];\n\t\t\tvar size = hex.length;\n\n\t\t\tif ( size === 3 ) {\n\n\t\t\t\t// #ff0\n\t\t\t\tthis.r = parseInt( hex.charAt( 0 ) + hex.charAt( 0 ), 16 ) / 255;\n\t\t\t\tthis.g = parseInt( hex.charAt( 1 ) + hex.charAt( 1 ), 16 ) / 255;\n\t\t\t\tthis.b = parseInt( hex.charAt( 2 ) + hex.charAt( 2 ), 16 ) / 255;\n\n\t\t\t\treturn this;\n\n\t\t\t} else if ( size === 6 ) {\n\n\t\t\t\t// #ff0000\n\t\t\t\tthis.r = parseInt( hex.charAt( 0 ) + hex.charAt( 1 ), 16 ) / 255;\n\t\t\t\tthis.g = parseInt( hex.charAt( 2 ) + hex.charAt( 3 ), 16 ) / 255;\n\t\t\t\tthis.b = parseInt( hex.charAt( 4 ) + hex.charAt( 5 ), 16 ) / 255;\n\n\t\t\t\treturn this;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( style && style.length > 0 ) {\n\n\t\t\t// color keywords\n\t\t\tvar hex = ColorKeywords[ style ];\n\n\t\t\tif ( hex !== undefined ) {\n\n\t\t\t\t// red\n\t\t\t\tthis.setHex( hex );\n\n\t\t\t} else {\n\n\t\t\t\t// unknown color\n\t\t\t\tconsole.warn( 'THREE.Color: Unknown color ' + style );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor( this.r, this.g, this.b );\n\n\t},\n\n\tcopy: function ( color ) {\n\n\t\tthis.r = color.r;\n\t\tthis.g = color.g;\n\t\tthis.b = color.b;\n\n\t\treturn this;\n\n\t},\n\n\tcopyGammaToLinear: function ( color, gammaFactor ) {\n\n\t\tif ( gammaFactor === undefined ) gammaFactor = 2.0;\n\n\t\tthis.r = Math.pow( color.r, gammaFactor );\n\t\tthis.g = Math.pow( color.g, gammaFactor );\n\t\tthis.b = Math.pow( color.b, gammaFactor );\n\n\t\treturn this;\n\n\t},\n\n\tcopyLinearToGamma: function ( color, gammaFactor ) {\n\n\t\tif ( gammaFactor === undefined ) gammaFactor = 2.0;\n\n\t\tvar safeInverse = ( gammaFactor > 0 ) ? ( 1.0 / gammaFactor ) : 1.0;\n\n\t\tthis.r = Math.pow( color.r, safeInverse );\n\t\tthis.g = Math.pow( color.g, safeInverse );\n\t\tthis.b = Math.pow( color.b, safeInverse );\n\n\t\treturn this;\n\n\t},\n\n\tconvertGammaToLinear: function () {\n\n\t\tvar r = this.r, g = this.g, b = this.b;\n\n\t\tthis.r = r * r;\n\t\tthis.g = g * g;\n\t\tthis.b = b * b;\n\n\t\treturn this;\n\n\t},\n\n\tconvertLinearToGamma: function () {\n\n\t\tthis.r = Math.sqrt( this.r );\n\t\tthis.g = Math.sqrt( this.g );\n\t\tthis.b = Math.sqrt( this.b );\n\n\t\treturn this;\n\n\t},\n\n\tgetHex: function () {\n\n\t\treturn ( this.r * 255 ) << 16 ^ ( this.g * 255 ) << 8 ^ ( this.b * 255 ) << 0;\n\n\t},\n\n\tgetHexString: function () {\n\n\t\treturn ( '000000' + this.getHex().toString( 16 ) ).slice( - 6 );\n\n\t},\n\n\tgetHSL: function ( target ) {\n\n\t\t// h,s,l ranges are in 0.0 - 1.0\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Color: .getHSL() target is now required' );\n\t\t\ttarget = { h: 0, s: 0, l: 0 };\n\n\t\t}\n\n\t\tvar r = this.r, g = this.g, b = this.b;\n\n\t\tvar max = Math.max( r, g, b );\n\t\tvar min = Math.min( r, g, b );\n\n\t\tvar hue, saturation;\n\t\tvar lightness = ( min + max ) / 2.0;\n\n\t\tif ( min === max ) {\n\n\t\t\thue = 0;\n\t\t\tsaturation = 0;\n\n\t\t} else {\n\n\t\t\tvar delta = max - min;\n\n\t\t\tsaturation = lightness <= 0.5 ? delta / ( max + min ) : delta / ( 2 - max - min );\n\n\t\t\tswitch ( max ) {\n\n\t\t\t\tcase r: hue = ( g - b ) / delta + ( g < b ? 6 : 0 ); break;\n\t\t\t\tcase g: hue = ( b - r ) / delta + 2; break;\n\t\t\t\tcase b: hue = ( r - g ) / delta + 4; break;\n\n\t\t\t}\n\n\t\t\thue /= 6;\n\n\t\t}\n\n\t\ttarget.h = hue;\n\t\ttarget.s = saturation;\n\t\ttarget.l = lightness;\n\n\t\treturn target;\n\n\t},\n\n\tgetStyle: function () {\n\n\t\treturn 'rgb(' + ( ( this.r * 255 ) | 0 ) + ',' + ( ( this.g * 255 ) | 0 ) + ',' + ( ( this.b * 255 ) | 0 ) + ')';\n\n\t},\n\n\toffsetHSL: function () {\n\n\t\tvar hsl = {};\n\n\t\treturn function ( h, s, l ) {\n\n\t\t\tthis.getHSL( hsl );\n\n\t\t\thsl.h += h; hsl.s += s; hsl.l += l;\n\n\t\t\tthis.setHSL( hsl.h, hsl.s, hsl.l );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tadd: function ( color ) {\n\n\t\tthis.r += color.r;\n\t\tthis.g += color.g;\n\t\tthis.b += color.b;\n\n\t\treturn this;\n\n\t},\n\n\taddColors: function ( color1, color2 ) {\n\n\t\tthis.r = color1.r + color2.r;\n\t\tthis.g = color1.g + color2.g;\n\t\tthis.b = color1.b + color2.b;\n\n\t\treturn this;\n\n\t},\n\n\taddScalar: function ( s ) {\n\n\t\tthis.r += s;\n\t\tthis.g += s;\n\t\tthis.b += s;\n\n\t\treturn this;\n\n\t},\n\n\tsub: function ( color ) {\n\n\t\tthis.r = Math.max( 0, this.r - color.r );\n\t\tthis.g = Math.max( 0, this.g - color.g );\n\t\tthis.b = Math.max( 0, this.b - color.b );\n\n\t\treturn this;\n\n\t},\n\n\tmultiply: function ( color ) {\n\n\t\tthis.r *= color.r;\n\t\tthis.g *= color.g;\n\t\tthis.b *= color.b;\n\n\t\treturn this;\n\n\t},\n\n\tmultiplyScalar: function ( s ) {\n\n\t\tthis.r *= s;\n\t\tthis.g *= s;\n\t\tthis.b *= s;\n\n\t\treturn this;\n\n\t},\n\n\tlerp: function ( color, alpha ) {\n\n\t\tthis.r += ( color.r - this.r ) * alpha;\n\t\tthis.g += ( color.g - this.g ) * alpha;\n\t\tthis.b += ( color.b - this.b ) * alpha;\n\n\t\treturn this;\n\n\t},\n\n\tequals: function ( c ) {\n\n\t\treturn ( c.r === this.r ) && ( c.g === this.g ) && ( c.b === this.b );\n\n\t},\n\n\tfromArray: function ( array, offset ) {\n\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tthis.r = array[ offset ];\n\t\tthis.g = array[ offset + 1 ];\n\t\tthis.b = array[ offset + 2 ];\n\n\t\treturn this;\n\n\t},\n\n\ttoArray: function ( array, offset ) {\n\n\t\tif ( array === undefined ) array = [];\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tarray[ offset ] = this.r;\n\t\tarray[ offset + 1 ] = this.g;\n\t\tarray[ offset + 2 ] = this.b;\n\n\t\treturn array;\n\n\t},\n\n\ttoJSON: function () {\n\n\t\treturn this.getHex();\n\n\t}\n\n} );\n\n/**\n * Uniforms library for shared webgl shaders\n */\n\nvar UniformsLib = {\n\n\tcommon: {\n\n\t\tdiffuse: { value: new Color( 0xeeeeee ) },\n\t\topacity: { value: 1.0 },\n\n\t\tmap: { value: null },\n\t\tuvTransform: { value: new Matrix3() },\n\n\t\talphaMap: { value: null },\n\n\t},\n\n\tspecularmap: {\n\n\t\tspecularMap: { value: null },\n\n\t},\n\n\tenvmap: {\n\n\t\tenvMap: { value: null },\n\t\tflipEnvMap: { value: - 1 },\n\t\treflectivity: { value: 1.0 },\n\t\trefractionRatio: { value: 0.98 },\n\t\tmaxMipLevel: { value: 0 }\n\n\t},\n\n\taomap: {\n\n\t\taoMap: { value: null },\n\t\taoMapIntensity: { value: 1 }\n\n\t},\n\n\tlightmap: {\n\n\t\tlightMap: { value: null },\n\t\tlightMapIntensity: { value: 1 }\n\n\t},\n\n\temissivemap: {\n\n\t\temissiveMap: { value: null }\n\n\t},\n\n\tbumpmap: {\n\n\t\tbumpMap: { value: null },\n\t\tbumpScale: { value: 1 }\n\n\t},\n\n\tnormalmap: {\n\n\t\tnormalMap: { value: null },\n\t\tnormalScale: { value: new Vector2( 1, 1 ) }\n\n\t},\n\n\tdisplacementmap: {\n\n\t\tdisplacementMap: { value: null },\n\t\tdisplacementScale: { value: 1 },\n\t\tdisplacementBias: { value: 0 }\n\n\t},\n\n\troughnessmap: {\n\n\t\troughnessMap: { value: null }\n\n\t},\n\n\tmetalnessmap: {\n\n\t\tmetalnessMap: { value: null }\n\n\t},\n\n\tgradientmap: {\n\n\t\tgradientMap: { value: null }\n\n\t},\n\n\tfog: {\n\n\t\tfogDensity: { value: 0.00025 },\n\t\tfogNear: { value: 1 },\n\t\tfogFar: { value: 2000 },\n\t\tfogColor: { value: new Color( 0xffffff ) }\n\n\t},\n\n\tlights: {\n\n\t\tambientLightColor: { value: [] },\n\n\t\tdirectionalLights: { value: [], properties: {\n\t\t\tdirection: {},\n\t\t\tcolor: {},\n\n\t\t\tshadow: {},\n\t\t\tshadowBias: {},\n\t\t\tshadowRadius: {},\n\t\t\tshadowMapSize: {}\n\t\t} },\n\n\t\tdirectionalShadowMap: { value: [] },\n\t\tdirectionalShadowMatrix: { value: [] },\n\n\t\tspotLights: { value: [], properties: {\n\t\t\tcolor: {},\n\t\t\tposition: {},\n\t\t\tdirection: {},\n\t\t\tdistance: {},\n\t\t\tconeCos: {},\n\t\t\tpenumbraCos: {},\n\t\t\tdecay: {},\n\n\t\t\tshadow: {},\n\t\t\tshadowBias: {},\n\t\t\tshadowRadius: {},\n\t\t\tshadowMapSize: {}\n\t\t} },\n\n\t\tspotShadowMap: { value: [] },\n\t\tspotShadowMatrix: { value: [] },\n\n\t\tpointLights: { value: [], properties: {\n\t\t\tcolor: {},\n\t\t\tposition: {},\n\t\t\tdecay: {},\n\t\t\tdistance: {},\n\n\t\t\tshadow: {},\n\t\t\tshadowBias: {},\n\t\t\tshadowRadius: {},\n\t\t\tshadowMapSize: {},\n\t\t\tshadowCameraNear: {},\n\t\t\tshadowCameraFar: {}\n\t\t} },\n\n\t\tpointShadowMap: { value: [] },\n\t\tpointShadowMatrix: { value: [] },\n\n\t\themisphereLights: { value: [], properties: {\n\t\t\tdirection: {},\n\t\t\tskyColor: {},\n\t\t\tgroundColor: {}\n\t\t} },\n\n\t\t// TODO (abelnation): RectAreaLight BRDF data needs to be moved from example to main src\n\t\trectAreaLights: { value: [], properties: {\n\t\t\tcolor: {},\n\t\t\tposition: {},\n\t\t\twidth: {},\n\t\t\theight: {}\n\t\t} }\n\n\t},\n\n\tpoints: {\n\n\t\tdiffuse: { value: new Color( 0xeeeeee ) },\n\t\topacity: { value: 1.0 },\n\t\tsize: { value: 1.0 },\n\t\tscale: { value: 1.0 },\n\t\tmap: { value: null },\n\t\tuvTransform: { value: new Matrix3() }\n\n\t}\n\n};\n\n/**\n * @author alteredq / http://alteredqualia.com/\n * @author mrdoob / http://mrdoob.com/\n * @author mikael emtinger / http://gomo.se/\n */\n\nvar ShaderLib = {\n\n\tbasic: {\n\n\t\tuniforms: UniformsUtils.merge( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.specularmap,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.fog\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshbasic_vert,\n\t\tfragmentShader: ShaderChunk.meshbasic_frag\n\n\t},\n\n\tlambert: {\n\n\t\tuniforms: UniformsUtils.merge( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.specularmap,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: new Color( 0x000000 ) }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshlambert_vert,\n\t\tfragmentShader: ShaderChunk.meshlambert_frag\n\n\t},\n\n\tphong: {\n\n\t\tuniforms: UniformsUtils.merge( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.specularmap,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.gradientmap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: new Color( 0x000000 ) },\n\t\t\t\tspecular: { value: new Color( 0x111111 ) },\n\t\t\t\tshininess: { value: 30 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshphong_vert,\n\t\tfragmentShader: ShaderChunk.meshphong_frag\n\n\t},\n\n\tstandard: {\n\n\t\tuniforms: UniformsUtils.merge( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.roughnessmap,\n\t\t\tUniformsLib.metalnessmap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: new Color( 0x000000 ) },\n\t\t\t\troughness: { value: 0.5 },\n\t\t\t\tmetalness: { value: 0.5 },\n\t\t\t\tenvMapIntensity: { value: 1 } // temporary\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshphysical_vert,\n\t\tfragmentShader: ShaderChunk.meshphysical_frag\n\n\t},\n\n\tpoints: {\n\n\t\tuniforms: UniformsUtils.merge( [\n\t\t\tUniformsLib.points,\n\t\t\tUniformsLib.fog\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.points_vert,\n\t\tfragmentShader: ShaderChunk.points_frag\n\n\t},\n\n\tdashed: {\n\n\t\tuniforms: UniformsUtils.merge( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.fog,\n\t\t\t{\n\t\t\t\tscale: { value: 1 },\n\t\t\t\tdashSize: { value: 1 },\n\t\t\t\ttotalSize: { value: 2 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.linedashed_vert,\n\t\tfragmentShader: ShaderChunk.linedashed_frag\n\n\t},\n\n\tdepth: {\n\n\t\tuniforms: UniformsUtils.merge( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.displacementmap\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.depth_vert,\n\t\tfragmentShader: ShaderChunk.depth_frag\n\n\t},\n\n\tnormal: {\n\n\t\tuniforms: UniformsUtils.merge( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\t{\n\t\t\t\topacity: { value: 1.0 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.normal_vert,\n\t\tfragmentShader: ShaderChunk.normal_frag\n\n\t},\n\n\t/* -------------------------------------------------------------------------\n\t//\tCube map shader\n\t ------------------------------------------------------------------------- */\n\n\tcube: {\n\n\t\tuniforms: {\n\t\t\ttCube: { value: null },\n\t\t\ttFlip: { value: - 1 },\n\t\t\topacity: { value: 1.0 }\n\t\t},\n\n\t\tvertexShader: ShaderChunk.cube_vert,\n\t\tfragmentShader: ShaderChunk.cube_frag\n\n\t},\n\n\tequirect: {\n\n\t\tuniforms: {\n\t\t\ttEquirect: { value: null },\n\t\t},\n\n\t\tvertexShader: ShaderChunk.equirect_vert,\n\t\tfragmentShader: ShaderChunk.equirect_frag\n\n\t},\n\n\tdistanceRGBA: {\n\n\t\tuniforms: UniformsUtils.merge( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.displacementmap,\n\t\t\t{\n\t\t\t\treferencePosition: { value: new Vector3() },\n\t\t\t\tnearDistance: { value: 1 },\n\t\t\t\tfarDistance: { value: 1000 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.distanceRGBA_vert,\n\t\tfragmentShader: ShaderChunk.distanceRGBA_frag\n\n\t},\n\n\tshadow: {\n\n\t\tuniforms: UniformsUtils.merge( [\n\t\t\tUniformsLib.lights,\n\t\t\tUniformsLib.fog,\n\t\t\t{\n\t\t\t\tcolor: { value: new Color( 0x00000 ) },\n\t\t\t\topacity: { value: 1.0 }\n\t\t\t},\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.shadow_vert,\n\t\tfragmentShader: ShaderChunk.shadow_frag\n\n\t}\n\n};\n\nShaderLib.physical = {\n\n\tuniforms: UniformsUtils.merge( [\n\t\tShaderLib.standard.uniforms,\n\t\t{\n\t\t\tclearCoat: { value: 0 },\n\t\t\tclearCoatRoughness: { value: 0 }\n\t\t}\n\t] ),\n\n\tvertexShader: ShaderChunk.meshphysical_vert,\n\tfragmentShader: ShaderChunk.meshphysical_frag\n\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebGLAttributes( gl ) {\n\n\tvar buffers = new WeakMap();\n\n\tfunction createBuffer( attribute, bufferType ) {\n\n\t\tvar array = attribute.array;\n\t\tvar usage = attribute.dynamic ? gl.DYNAMIC_DRAW : gl.STATIC_DRAW;\n\n\t\tvar buffer = gl.createBuffer();\n\n\t\tgl.bindBuffer( bufferType, buffer );\n\t\tgl.bufferData( bufferType, array, usage );\n\n\t\tattribute.onUploadCallback();\n\n\t\tvar type = gl.FLOAT;\n\n\t\tif ( array instanceof Float32Array ) {\n\n\t\t\ttype = gl.FLOAT;\n\n\t\t} else if ( array instanceof Float64Array ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLAttributes: Unsupported data buffer format: Float64Array.' );\n\n\t\t} else if ( array instanceof Uint16Array ) {\n\n\t\t\ttype = gl.UNSIGNED_SHORT;\n\n\t\t} else if ( array instanceof Int16Array ) {\n\n\t\t\ttype = gl.SHORT;\n\n\t\t} else if ( array instanceof Uint32Array ) {\n\n\t\t\ttype = gl.UNSIGNED_INT;\n\n\t\t} else if ( array instanceof Int32Array ) {\n\n\t\t\ttype = gl.INT;\n\n\t\t} else if ( array instanceof Int8Array ) {\n\n\t\t\ttype = gl.BYTE;\n\n\t\t} else if ( array instanceof Uint8Array ) {\n\n\t\t\ttype = gl.UNSIGNED_BYTE;\n\n\t\t}\n\n\t\treturn {\n\t\t\tbuffer: buffer,\n\t\t\ttype: type,\n\t\t\tbytesPerElement: array.BYTES_PER_ELEMENT,\n\t\t\tversion: attribute.version\n\t\t};\n\n\t}\n\n\tfunction updateBuffer( buffer, attribute, bufferType ) {\n\n\t\tvar array = attribute.array;\n\t\tvar updateRange = attribute.updateRange;\n\n\t\tgl.bindBuffer( bufferType, buffer );\n\n\t\tif ( attribute.dynamic === false ) {\n\n\t\t\tgl.bufferData( bufferType, array, gl.STATIC_DRAW );\n\n\t\t} else if ( updateRange.count === - 1 ) {\n\n\t\t\t// Not using update ranges\n\n\t\t\tgl.bufferSubData( bufferType, 0, array );\n\n\t\t} else if ( updateRange.count === 0 ) {\n\n\t\t\tconsole.error( 'THREE.WebGLObjects.updateBuffer: dynamic THREE.BufferAttribute marked as needsUpdate but updateRange.count is 0, ensure you are using set methods or updating manually.' );\n\n\t\t} else {\n\n\t\t\tgl.bufferSubData( bufferType, updateRange.offset * array.BYTES_PER_ELEMENT,\n\t\t\t\tarray.subarray( updateRange.offset, updateRange.offset + updateRange.count ) );\n\n\t\t\tupdateRange.count = - 1; // reset range\n\n\t\t}\n\n\t}\n\n\t//\n\n\tfunction get( attribute ) {\n\n\t\tif ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;\n\n\t\treturn buffers.get( attribute );\n\n\t}\n\n\tfunction remove( attribute ) {\n\n\t\tif ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;\n\n\t\tvar data = buffers.get( attribute );\n\n\t\tif ( data ) {\n\n\t\t\tgl.deleteBuffer( data.buffer );\n\n\t\t\tbuffers.delete( attribute );\n\n\t\t}\n\n\t}\n\n\tfunction update( attribute, bufferType ) {\n\n\t\tif ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;\n\n\t\tvar data = buffers.get( attribute );\n\n\t\tif ( data === undefined ) {\n\n\t\t\tbuffers.set( attribute, createBuffer( attribute, bufferType ) );\n\n\t\t} else if ( data.version < attribute.version ) {\n\n\t\t\tupdateBuffer( data.buffer, attribute, bufferType );\n\n\t\t\tdata.version = attribute.version;\n\n\t\t}\n\n\t}\n\n\treturn {\n\n\t\tget: get,\n\t\tremove: remove,\n\t\tupdate: update\n\n\t};\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author WestLangley / http://github.com/WestLangley\n * @author bhouston / http://clara.io\n */\n\nfunction Euler( x, y, z, order ) {\n\n\tthis._x = x || 0;\n\tthis._y = y || 0;\n\tthis._z = z || 0;\n\tthis._order = order || Euler.DefaultOrder;\n\n}\n\nEuler.RotationOrders = [ 'XYZ', 'YZX', 'ZXY', 'XZY', 'YXZ', 'ZYX' ];\n\nEuler.DefaultOrder = 'XYZ';\n\nObject.defineProperties( Euler.prototype, {\n\n\tx: {\n\n\t\tget: function () {\n\n\t\t\treturn this._x;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tthis._x = value;\n\t\t\tthis.onChangeCallback();\n\n\t\t}\n\n\t},\n\n\ty: {\n\n\t\tget: function () {\n\n\t\t\treturn this._y;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tthis._y = value;\n\t\t\tthis.onChangeCallback();\n\n\t\t}\n\n\t},\n\n\tz: {\n\n\t\tget: function () {\n\n\t\t\treturn this._z;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tthis._z = value;\n\t\t\tthis.onChangeCallback();\n\n\t\t}\n\n\t},\n\n\torder: {\n\n\t\tget: function () {\n\n\t\t\treturn this._order;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tthis._order = value;\n\t\t\tthis.onChangeCallback();\n\n\t\t}\n\n\t}\n\n} );\n\nObject.assign( Euler.prototype, {\n\n\tisEuler: true,\n\n\tset: function ( x, y, z, order ) {\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._order = order || this._order;\n\n\t\tthis.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor( this._x, this._y, this._z, this._order );\n\n\t},\n\n\tcopy: function ( euler ) {\n\n\t\tthis._x = euler._x;\n\t\tthis._y = euler._y;\n\t\tthis._z = euler._z;\n\t\tthis._order = euler._order;\n\n\t\tthis.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tsetFromRotationMatrix: function ( m, order, update ) {\n\n\t\tvar clamp = _Math.clamp;\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tvar te = m.elements;\n\t\tvar m11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ];\n\t\tvar m21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ];\n\t\tvar m31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ];\n\n\t\torder = order || this._order;\n\n\t\tif ( order === 'XYZ' ) {\n\n\t\t\tthis._y = Math.asin( clamp( m13, - 1, 1 ) );\n\n\t\t\tif ( Math.abs( m13 ) < 0.99999 ) {\n\n\t\t\t\tthis._x = Math.atan2( - m23, m33 );\n\t\t\t\tthis._z = Math.atan2( - m12, m11 );\n\n\t\t\t} else {\n\n\t\t\t\tthis._x = Math.atan2( m32, m22 );\n\t\t\t\tthis._z = 0;\n\n\t\t\t}\n\n\t\t} else if ( order === 'YXZ' ) {\n\n\t\t\tthis._x = Math.asin( - clamp( m23, - 1, 1 ) );\n\n\t\t\tif ( Math.abs( m23 ) < 0.99999 ) {\n\n\t\t\t\tthis._y = Math.atan2( m13, m33 );\n\t\t\t\tthis._z = Math.atan2( m21, m22 );\n\n\t\t\t} else {\n\n\t\t\t\tthis._y = Math.atan2( - m31, m11 );\n\t\t\t\tthis._z = 0;\n\n\t\t\t}\n\n\t\t} else if ( order === 'ZXY' ) {\n\n\t\t\tthis._x = Math.asin( clamp( m32, - 1, 1 ) );\n\n\t\t\tif ( Math.abs( m32 ) < 0.99999 ) {\n\n\t\t\t\tthis._y = Math.atan2( - m31, m33 );\n\t\t\t\tthis._z = Math.atan2( - m12, m22 );\n\n\t\t\t} else {\n\n\t\t\t\tthis._y = 0;\n\t\t\t\tthis._z = Math.atan2( m21, m11 );\n\n\t\t\t}\n\n\t\t} else if ( order === 'ZYX' ) {\n\n\t\t\tthis._y = Math.asin( - clamp( m31, - 1, 1 ) );\n\n\t\t\tif ( Math.abs( m31 ) < 0.99999 ) {\n\n\t\t\t\tthis._x = Math.atan2( m32, m33 );\n\t\t\t\tthis._z = Math.atan2( m21, m11 );\n\n\t\t\t} else {\n\n\t\t\t\tthis._x = 0;\n\t\t\t\tthis._z = Math.atan2( - m12, m22 );\n\n\t\t\t}\n\n\t\t} else if ( order === 'YZX' ) {\n\n\t\t\tthis._z = Math.asin( clamp( m21, - 1, 1 ) );\n\n\t\t\tif ( Math.abs( m21 ) < 0.99999 ) {\n\n\t\t\t\tthis._x = Math.atan2( - m23, m22 );\n\t\t\t\tthis._y = Math.atan2( - m31, m11 );\n\n\t\t\t} else {\n\n\t\t\t\tthis._x = 0;\n\t\t\t\tthis._y = Math.atan2( m13, m33 );\n\n\t\t\t}\n\n\t\t} else if ( order === 'XZY' ) {\n\n\t\t\tthis._z = Math.asin( - clamp( m12, - 1, 1 ) );\n\n\t\t\tif ( Math.abs( m12 ) < 0.99999 ) {\n\n\t\t\t\tthis._x = Math.atan2( m32, m22 );\n\t\t\t\tthis._y = Math.atan2( m13, m11 );\n\n\t\t\t} else {\n\n\t\t\t\tthis._x = Math.atan2( - m23, m33 );\n\t\t\t\tthis._y = 0;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.Euler: .setFromRotationMatrix() given unsupported order: ' + order );\n\n\t\t}\n\n\t\tthis._order = order;\n\n\t\tif ( update !== false ) this.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\tsetFromQuaternion: function () {\n\n\t\tvar matrix = new Matrix4();\n\n\t\treturn function setFromQuaternion( q, order, update ) {\n\n\t\t\tmatrix.makeRotationFromQuaternion( q );\n\n\t\t\treturn this.setFromRotationMatrix( matrix, order, update );\n\n\t\t};\n\n\t}(),\n\n\tsetFromVector3: function ( v, order ) {\n\n\t\treturn this.set( v.x, v.y, v.z, order || this._order );\n\n\t},\n\n\treorder: function () {\n\n\t\t// WARNING: this discards revolution information -bhouston\n\n\t\tvar q = new Quaternion();\n\n\t\treturn function reorder( newOrder ) {\n\n\t\t\tq.setFromEuler( this );\n\n\t\t\treturn this.setFromQuaternion( q, newOrder );\n\n\t\t};\n\n\t}(),\n\n\tequals: function ( euler ) {\n\n\t\treturn ( euler._x === this._x ) && ( euler._y === this._y ) && ( euler._z === this._z ) && ( euler._order === this._order );\n\n\t},\n\n\tfromArray: function ( array ) {\n\n\t\tthis._x = array[ 0 ];\n\t\tthis._y = array[ 1 ];\n\t\tthis._z = array[ 2 ];\n\t\tif ( array[ 3 ] !== undefined ) this._order = array[ 3 ];\n\n\t\tthis.onChangeCallback();\n\n\t\treturn this;\n\n\t},\n\n\ttoArray: function ( array, offset ) {\n\n\t\tif ( array === undefined ) array = [];\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tarray[ offset ] = this._x;\n\t\tarray[ offset + 1 ] = this._y;\n\t\tarray[ offset + 2 ] = this._z;\n\t\tarray[ offset + 3 ] = this._order;\n\n\t\treturn array;\n\n\t},\n\n\ttoVector3: function ( optionalResult ) {\n\n\t\tif ( optionalResult ) {\n\n\t\t\treturn optionalResult.set( this._x, this._y, this._z );\n\n\t\t} else {\n\n\t\t\treturn new Vector3( this._x, this._y, this._z );\n\n\t\t}\n\n\t},\n\n\tonChange: function ( callback ) {\n\n\t\tthis.onChangeCallback = callback;\n\n\t\treturn this;\n\n\t},\n\n\tonChangeCallback: function () {}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction Layers() {\n\n\tthis.mask = 1 | 0;\n\n}\n\nObject.assign( Layers.prototype, {\n\n\tset: function ( channel ) {\n\n\t\tthis.mask = 1 << channel | 0;\n\n\t},\n\n\tenable: function ( channel ) {\n\n\t\tthis.mask |= 1 << channel | 0;\n\n\t},\n\n\ttoggle: function ( channel ) {\n\n\t\tthis.mask ^= 1 << channel | 0;\n\n\t},\n\n\tdisable: function ( channel ) {\n\n\t\tthis.mask &= ~ ( 1 << channel | 0 );\n\n\t},\n\n\ttest: function ( layers ) {\n\n\t\treturn ( this.mask & layers.mask ) !== 0;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author mikael emtinger / http://gomo.se/\n * @author alteredq / http://alteredqualia.com/\n * @author WestLangley / http://github.com/WestLangley\n * @author elephantatwork / www.elephantatwork.ch\n */\n\nvar object3DId = 0;\n\nfunction Object3D() {\n\n\tObject.defineProperty( this, 'id', { value: object3DId ++ } );\n\n\tthis.uuid = _Math.generateUUID();\n\n\tthis.name = '';\n\tthis.type = 'Object3D';\n\n\tthis.parent = null;\n\tthis.children = [];\n\n\tthis.up = Object3D.DefaultUp.clone();\n\n\tvar position = new Vector3();\n\tvar rotation = new Euler();\n\tvar quaternion = new Quaternion();\n\tvar scale = new Vector3( 1, 1, 1 );\n\n\tfunction onRotationChange() {\n\n\t\tquaternion.setFromEuler( rotation, false );\n\n\t}\n\n\tfunction onQuaternionChange() {\n\n\t\trotation.setFromQuaternion( quaternion, undefined, false );\n\n\t}\n\n\trotation.onChange( onRotationChange );\n\tquaternion.onChange( onQuaternionChange );\n\n\tObject.defineProperties( this, {\n\t\tposition: {\n\t\t\tenumerable: true,\n\t\t\tvalue: position\n\t\t},\n\t\trotation: {\n\t\t\tenumerable: true,\n\t\t\tvalue: rotation\n\t\t},\n\t\tquaternion: {\n\t\t\tenumerable: true,\n\t\t\tvalue: quaternion\n\t\t},\n\t\tscale: {\n\t\t\tenumerable: true,\n\t\t\tvalue: scale\n\t\t},\n\t\tmodelViewMatrix: {\n\t\t\tvalue: new Matrix4()\n\t\t},\n\t\tnormalMatrix: {\n\t\t\tvalue: new Matrix3()\n\t\t}\n\t} );\n\n\tthis.matrix = new Matrix4();\n\tthis.matrixWorld = new Matrix4();\n\n\tthis.matrixAutoUpdate = Object3D.DefaultMatrixAutoUpdate;\n\tthis.matrixWorldNeedsUpdate = false;\n\n\tthis.layers = new Layers();\n\tthis.visible = true;\n\n\tthis.castShadow = false;\n\tthis.receiveShadow = false;\n\n\tthis.frustumCulled = true;\n\tthis.renderOrder = 0;\n\n\tthis.userData = {};\n\n}\n\nObject3D.DefaultUp = new Vector3( 0, 1, 0 );\nObject3D.DefaultMatrixAutoUpdate = true;\n\nObject3D.prototype = Object.assign( Object.create( EventDispatcher.prototype ), {\n\n\tconstructor: Object3D,\n\n\tisObject3D: true,\n\n\tonBeforeRender: function () {},\n\tonAfterRender: function () {},\n\n\tapplyMatrix: function ( matrix ) {\n\n\t\tthis.matrix.multiplyMatrices( matrix, this.matrix );\n\n\t\tthis.matrix.decompose( this.position, this.quaternion, this.scale );\n\n\t},\n\n\tapplyQuaternion: function ( q ) {\n\n\t\tthis.quaternion.premultiply( q );\n\n\t\treturn this;\n\n\t},\n\n\tsetRotationFromAxisAngle: function ( axis, angle ) {\n\n\t\t// assumes axis is normalized\n\n\t\tthis.quaternion.setFromAxisAngle( axis, angle );\n\n\t},\n\n\tsetRotationFromEuler: function ( euler ) {\n\n\t\tthis.quaternion.setFromEuler( euler, true );\n\n\t},\n\n\tsetRotationFromMatrix: function ( m ) {\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tthis.quaternion.setFromRotationMatrix( m );\n\n\t},\n\n\tsetRotationFromQuaternion: function ( q ) {\n\n\t\t// assumes q is normalized\n\n\t\tthis.quaternion.copy( q );\n\n\t},\n\n\trotateOnAxis: function () {\n\n\t\t// rotate object on axis in object space\n\t\t// axis is assumed to be normalized\n\n\t\tvar q1 = new Quaternion();\n\n\t\treturn function rotateOnAxis( axis, angle ) {\n\n\t\t\tq1.setFromAxisAngle( axis, angle );\n\n\t\t\tthis.quaternion.multiply( q1 );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\trotateOnWorldAxis: function () {\n\n\t\t// rotate object on axis in world space\n\t\t// axis is assumed to be normalized\n\t\t// method assumes no rotated parent\n\n\t\tvar q1 = new Quaternion();\n\n\t\treturn function rotateOnWorldAxis( axis, angle ) {\n\n\t\t\tq1.setFromAxisAngle( axis, angle );\n\n\t\t\tthis.quaternion.premultiply( q1 );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\trotateX: function () {\n\n\t\tvar v1 = new Vector3( 1, 0, 0 );\n\n\t\treturn function rotateX( angle ) {\n\n\t\t\treturn this.rotateOnAxis( v1, angle );\n\n\t\t};\n\n\t}(),\n\n\trotateY: function () {\n\n\t\tvar v1 = new Vector3( 0, 1, 0 );\n\n\t\treturn function rotateY( angle ) {\n\n\t\t\treturn this.rotateOnAxis( v1, angle );\n\n\t\t};\n\n\t}(),\n\n\trotateZ: function () {\n\n\t\tvar v1 = new Vector3( 0, 0, 1 );\n\n\t\treturn function rotateZ( angle ) {\n\n\t\t\treturn this.rotateOnAxis( v1, angle );\n\n\t\t};\n\n\t}(),\n\n\ttranslateOnAxis: function () {\n\n\t\t// translate object by distance along axis in object space\n\t\t// axis is assumed to be normalized\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function translateOnAxis( axis, distance ) {\n\n\t\t\tv1.copy( axis ).applyQuaternion( this.quaternion );\n\n\t\t\tthis.position.add( v1.multiplyScalar( distance ) );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\ttranslateX: function () {\n\n\t\tvar v1 = new Vector3( 1, 0, 0 );\n\n\t\treturn function translateX( distance ) {\n\n\t\t\treturn this.translateOnAxis( v1, distance );\n\n\t\t};\n\n\t}(),\n\n\ttranslateY: function () {\n\n\t\tvar v1 = new Vector3( 0, 1, 0 );\n\n\t\treturn function translateY( distance ) {\n\n\t\t\treturn this.translateOnAxis( v1, distance );\n\n\t\t};\n\n\t}(),\n\n\ttranslateZ: function () {\n\n\t\tvar v1 = new Vector3( 0, 0, 1 );\n\n\t\treturn function translateZ( distance ) {\n\n\t\t\treturn this.translateOnAxis( v1, distance );\n\n\t\t};\n\n\t}(),\n\n\tlocalToWorld: function ( vector ) {\n\n\t\treturn vector.applyMatrix4( this.matrixWorld );\n\n\t},\n\n\tworldToLocal: function () {\n\n\t\tvar m1 = new Matrix4();\n\n\t\treturn function worldToLocal( vector ) {\n\n\t\t\treturn vector.applyMatrix4( m1.getInverse( this.matrixWorld ) );\n\n\t\t};\n\n\t}(),\n\n\tlookAt: function () {\n\n\t\t// This method does not support objects with rotated and/or translated parent(s)\n\n\t\tvar m1 = new Matrix4();\n\t\tvar vector = new Vector3();\n\n\t\treturn function lookAt( x, y, z ) {\n\n\t\t\tif ( x.isVector3 ) {\n\n\t\t\t\tvector.copy( x );\n\n\t\t\t} else {\n\n\t\t\t\tvector.set( x, y, z );\n\n\t\t\t}\n\n\t\t\tif ( this.isCamera ) {\n\n\t\t\t\tm1.lookAt( this.position, vector, this.up );\n\n\t\t\t} else {\n\n\t\t\t\tm1.lookAt( vector, this.position, this.up );\n\n\t\t\t}\n\n\t\t\tthis.quaternion.setFromRotationMatrix( m1 );\n\n\t\t};\n\n\t}(),\n\n\tadd: function ( object ) {\n\n\t\tif ( arguments.length > 1 ) {\n\n\t\t\tfor ( var i = 0; i < arguments.length; i ++ ) {\n\n\t\t\t\tthis.add( arguments[ i ] );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tif ( object === this ) {\n\n\t\t\tconsole.error( \"THREE.Object3D.add: object can't be added as a child of itself.\", object );\n\t\t\treturn this;\n\n\t\t}\n\n\t\tif ( ( object && object.isObject3D ) ) {\n\n\t\t\tif ( object.parent !== null ) {\n\n\t\t\t\tobject.parent.remove( object );\n\n\t\t\t}\n\n\t\t\tobject.parent = this;\n\t\t\tobject.dispatchEvent( { type: 'added' } );\n\n\t\t\tthis.children.push( object );\n\n\t\t} else {\n\n\t\t\tconsole.error( \"THREE.Object3D.add: object not an instance of THREE.Object3D.\", object );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tremove: function ( object ) {\n\n\t\tif ( arguments.length > 1 ) {\n\n\t\t\tfor ( var i = 0; i < arguments.length; i ++ ) {\n\n\t\t\t\tthis.remove( arguments[ i ] );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tvar index = this.children.indexOf( object );\n\n\t\tif ( index !== - 1 ) {\n\n\t\t\tobject.parent = null;\n\n\t\t\tobject.dispatchEvent( { type: 'removed' } );\n\n\t\t\tthis.children.splice( index, 1 );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tgetObjectById: function ( id ) {\n\n\t\treturn this.getObjectByProperty( 'id', id );\n\n\t},\n\n\tgetObjectByName: function ( name ) {\n\n\t\treturn this.getObjectByProperty( 'name', name );\n\n\t},\n\n\tgetObjectByProperty: function ( name, value ) {\n\n\t\tif ( this[ name ] === value ) return this;\n\n\t\tfor ( var i = 0, l = this.children.length; i < l; i ++ ) {\n\n\t\t\tvar child = this.children[ i ];\n\t\t\tvar object = child.getObjectByProperty( name, value );\n\n\t\t\tif ( object !== undefined ) {\n\n\t\t\t\treturn object;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn undefined;\n\n\t},\n\n\tgetWorldPosition: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .getWorldPosition() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\tthis.updateMatrixWorld( true );\n\n\t\treturn target.setFromMatrixPosition( this.matrixWorld );\n\n\t},\n\n\tgetWorldQuaternion: function () {\n\n\t\tvar position = new Vector3();\n\t\tvar scale = new Vector3();\n\n\t\treturn function getWorldQuaternion( target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Object3D: .getWorldQuaternion() target is now required' );\n\t\t\t\ttarget = new Quaternion();\n\n\t\t\t}\n\n\t\t\tthis.updateMatrixWorld( true );\n\n\t\t\tthis.matrixWorld.decompose( position, target, scale );\n\n\t\t\treturn target;\n\n\t\t};\n\n\t}(),\n\n\tgetWorldScale: function () {\n\n\t\tvar position = new Vector3();\n\t\tvar quaternion = new Quaternion();\n\n\t\treturn function getWorldScale( target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Object3D: .getWorldScale() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\tthis.updateMatrixWorld( true );\n\n\t\t\tthis.matrixWorld.decompose( position, quaternion, target );\n\n\t\t\treturn target;\n\n\t\t};\n\n\t}(),\n\n\tgetWorldDirection: function () {\n\n\t\tvar quaternion = new Quaternion();\n\n\t\treturn function getWorldDirection( target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Object3D: .getWorldDirection() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\tthis.getWorldQuaternion( quaternion );\n\n\t\t\treturn target.set( 0, 0, 1 ).applyQuaternion( quaternion );\n\n\t\t};\n\n\t}(),\n\n\traycast: function () {},\n\n\ttraverse: function ( callback ) {\n\n\t\tcallback( this );\n\n\t\tvar children = this.children;\n\n\t\tfor ( var i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tchildren[ i ].traverse( callback );\n\n\t\t}\n\n\t},\n\n\ttraverseVisible: function ( callback ) {\n\n\t\tif ( this.visible === false ) return;\n\n\t\tcallback( this );\n\n\t\tvar children = this.children;\n\n\t\tfor ( var i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tchildren[ i ].traverseVisible( callback );\n\n\t\t}\n\n\t},\n\n\ttraverseAncestors: function ( callback ) {\n\n\t\tvar parent = this.parent;\n\n\t\tif ( parent !== null ) {\n\n\t\t\tcallback( parent );\n\n\t\t\tparent.traverseAncestors( callback );\n\n\t\t}\n\n\t},\n\n\tupdateMatrix: function () {\n\n\t\tthis.matrix.compose( this.position, this.quaternion, this.scale );\n\n\t\tthis.matrixWorldNeedsUpdate = true;\n\n\t},\n\n\tupdateMatrixWorld: function ( force ) {\n\n\t\tif ( this.matrixAutoUpdate ) this.updateMatrix();\n\n\t\tif ( this.matrixWorldNeedsUpdate || force ) {\n\n\t\t\tif ( this.parent === null ) {\n\n\t\t\t\tthis.matrixWorld.copy( this.matrix );\n\n\t\t\t} else {\n\n\t\t\t\tthis.matrixWorld.multiplyMatrices( this.parent.matrixWorld, this.matrix );\n\n\t\t\t}\n\n\t\t\tthis.matrixWorldNeedsUpdate = false;\n\n\t\t\tforce = true;\n\n\t\t}\n\n\t\t// update children\n\n\t\tvar children = this.children;\n\n\t\tfor ( var i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tchildren[ i ].updateMatrixWorld( force );\n\n\t\t}\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\t// meta is a string when called from JSON.stringify\n\t\tvar isRootObject = ( meta === undefined || typeof meta === 'string' );\n\n\t\tvar output = {};\n\n\t\t// meta is a hash used to collect geometries, materials.\n\t\t// not providing it implies that this is the root object\n\t\t// being serialized.\n\t\tif ( isRootObject ) {\n\n\t\t\t// initialize meta obj\n\t\t\tmeta = {\n\t\t\t\tgeometries: {},\n\t\t\t\tmaterials: {},\n\t\t\t\ttextures: {},\n\t\t\t\timages: {},\n\t\t\t\tshapes: {}\n\t\t\t};\n\n\t\t\toutput.metadata = {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Object',\n\t\t\t\tgenerator: 'Object3D.toJSON'\n\t\t\t};\n\n\t\t}\n\n\t\t// standard Object3D serialization\n\n\t\tvar object = {};\n\n\t\tobject.uuid = this.uuid;\n\t\tobject.type = this.type;\n\n\t\tif ( this.name !== '' ) object.name = this.name;\n\t\tif ( this.castShadow === true ) object.castShadow = true;\n\t\tif ( this.receiveShadow === true ) object.receiveShadow = true;\n\t\tif ( this.visible === false ) object.visible = false;\n\t\tif ( this.frustumCulled === false ) object.frustumCulled = false;\n\t\tif ( this.renderOrder !== 0 ) object.renderOrder = this.renderOrder;\n\t\tif ( JSON.stringify( this.userData ) !== '{}' ) object.userData = this.userData;\n\n\t\tobject.matrix = this.matrix.toArray();\n\n\t\tif ( this.matrixAutoUpdate === false ) object.matrixAutoUpdate = false;\n\n\t\t//\n\n\t\tfunction serialize( library, element ) {\n\n\t\t\tif ( library[ element.uuid ] === undefined ) {\n\n\t\t\t\tlibrary[ element.uuid ] = element.toJSON( meta );\n\n\t\t\t}\n\n\t\t\treturn element.uuid;\n\n\t\t}\n\n\t\tif ( this.geometry !== undefined ) {\n\n\t\t\tobject.geometry = serialize( meta.geometries, this.geometry );\n\n\t\t\tvar parameters = this.geometry.parameters;\n\n\t\t\tif ( parameters !== undefined && parameters.shapes !== undefined ) {\n\n\t\t\t\tvar shapes = parameters.shapes;\n\n\t\t\t\tif ( Array.isArray( shapes ) ) {\n\n\t\t\t\t\tfor ( var i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tvar shape = shapes[ i ];\n\n\t\t\t\t\t\tserialize( meta.shapes, shape );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tserialize( meta.shapes, shapes );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.material !== undefined ) {\n\n\t\t\tif ( Array.isArray( this.material ) ) {\n\n\t\t\t\tvar uuids = [];\n\n\t\t\t\tfor ( var i = 0, l = this.material.length; i < l; i ++ ) {\n\n\t\t\t\t\tuuids.push( serialize( meta.materials, this.material[ i ] ) );\n\n\t\t\t\t}\n\n\t\t\t\tobject.material = uuids;\n\n\t\t\t} else {\n\n\t\t\t\tobject.material = serialize( meta.materials, this.material );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tif ( this.children.length > 0 ) {\n\n\t\t\tobject.children = [];\n\n\t\t\tfor ( var i = 0; i < this.children.length; i ++ ) {\n\n\t\t\t\tobject.children.push( this.children[ i ].toJSON( meta ).object );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( isRootObject ) {\n\n\t\t\tvar geometries = extractFromCache( meta.geometries );\n\t\t\tvar materials = extractFromCache( meta.materials );\n\t\t\tvar textures = extractFromCache( meta.textures );\n\t\t\tvar images = extractFromCache( meta.images );\n\t\t\tvar shapes = extractFromCache( meta.shapes );\n\n\t\t\tif ( geometries.length > 0 ) output.geometries = geometries;\n\t\t\tif ( materials.length > 0 ) output.materials = materials;\n\t\t\tif ( textures.length > 0 ) output.textures = textures;\n\t\t\tif ( images.length > 0 ) output.images = images;\n\t\t\tif ( shapes.length > 0 ) output.shapes = shapes;\n\n\t\t}\n\n\t\toutput.object = object;\n\n\t\treturn output;\n\n\t\t// extract data from the cache hash\n\t\t// remove metadata on each item\n\t\t// and return as array\n\t\tfunction extractFromCache( cache ) {\n\n\t\t\tvar values = [];\n\t\t\tfor ( var key in cache ) {\n\n\t\t\t\tvar data = cache[ key ];\n\t\t\t\tdelete data.metadata;\n\t\t\t\tvalues.push( data );\n\n\t\t\t}\n\t\t\treturn values;\n\n\t\t}\n\n\t},\n\n\tclone: function ( recursive ) {\n\n\t\treturn new this.constructor().copy( this, recursive );\n\n\t},\n\n\tcopy: function ( source, recursive ) {\n\n\t\tif ( recursive === undefined ) recursive = true;\n\n\t\tthis.name = source.name;\n\n\t\tthis.up.copy( source.up );\n\n\t\tthis.position.copy( source.position );\n\t\tthis.quaternion.copy( source.quaternion );\n\t\tthis.scale.copy( source.scale );\n\n\t\tthis.matrix.copy( source.matrix );\n\t\tthis.matrixWorld.copy( source.matrixWorld );\n\n\t\tthis.matrixAutoUpdate = source.matrixAutoUpdate;\n\t\tthis.matrixWorldNeedsUpdate = source.matrixWorldNeedsUpdate;\n\n\t\tthis.layers.mask = source.layers.mask;\n\t\tthis.visible = source.visible;\n\n\t\tthis.castShadow = source.castShadow;\n\t\tthis.receiveShadow = source.receiveShadow;\n\n\t\tthis.frustumCulled = source.frustumCulled;\n\t\tthis.renderOrder = source.renderOrder;\n\n\t\tthis.userData = JSON.parse( JSON.stringify( source.userData ) );\n\n\t\tif ( recursive === true ) {\n\n\t\t\tfor ( var i = 0; i < source.children.length; i ++ ) {\n\n\t\t\t\tvar child = source.children[ i ];\n\t\t\t\tthis.add( child.clone() );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author mikael emtinger / http://gomo.se/\n * @author WestLangley / http://github.com/WestLangley\n*/\n\nfunction Camera() {\n\n\tObject3D.call( this );\n\n\tthis.type = 'Camera';\n\n\tthis.matrixWorldInverse = new Matrix4();\n\tthis.projectionMatrix = new Matrix4();\n\n}\n\nCamera.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Camera,\n\n\tisCamera: true,\n\n\tcopy: function ( source, recursive ) {\n\n\t\tObject3D.prototype.copy.call( this, source, recursive );\n\n\t\tthis.matrixWorldInverse.copy( source.matrixWorldInverse );\n\t\tthis.projectionMatrix.copy( source.projectionMatrix );\n\n\t\treturn this;\n\n\t},\n\n\tgetWorldDirection: function () {\n\n\t\tvar quaternion = new Quaternion();\n\n\t\treturn function getWorldDirection( target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Camera: .getWorldDirection() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\tthis.getWorldQuaternion( quaternion );\n\n\t\t\treturn target.set( 0, 0, - 1 ).applyQuaternion( quaternion );\n\n\t\t};\n\n\t}(),\n\n\tupdateMatrixWorld: function ( force ) {\n\n\t\tObject3D.prototype.updateMatrixWorld.call( this, force );\n\n\t\tthis.matrixWorldInverse.getInverse( this.matrixWorld );\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n} );\n\n/**\n * @author alteredq / http://alteredqualia.com/\n * @author arose / http://github.com/arose\n */\n\nfunction OrthographicCamera( left, right, top, bottom, near, far ) {\n\n\tCamera.call( this );\n\n\tthis.type = 'OrthographicCamera';\n\n\tthis.zoom = 1;\n\tthis.view = null;\n\n\tthis.left = left;\n\tthis.right = right;\n\tthis.top = top;\n\tthis.bottom = bottom;\n\n\tthis.near = ( near !== undefined ) ? near : 0.1;\n\tthis.far = ( far !== undefined ) ? far : 2000;\n\n\tthis.updateProjectionMatrix();\n\n}\n\nOrthographicCamera.prototype = Object.assign( Object.create( Camera.prototype ), {\n\n\tconstructor: OrthographicCamera,\n\n\tisOrthographicCamera: true,\n\n\tcopy: function ( source, recursive ) {\n\n\t\tCamera.prototype.copy.call( this, source, recursive );\n\n\t\tthis.left = source.left;\n\t\tthis.right = source.right;\n\t\tthis.top = source.top;\n\t\tthis.bottom = source.bottom;\n\t\tthis.near = source.near;\n\t\tthis.far = source.far;\n\n\t\tthis.zoom = source.zoom;\n\t\tthis.view = source.view === null ? null : Object.assign( {}, source.view );\n\n\t\treturn this;\n\n\t},\n\n\tsetViewOffset: function ( fullWidth, fullHeight, x, y, width, height ) {\n\n\t\tif ( this.view === null ) {\n\n\t\t\tthis.view = {\n\t\t\t\tenabled: true,\n\t\t\t\tfullWidth: 1,\n\t\t\t\tfullHeight: 1,\n\t\t\t\toffsetX: 0,\n\t\t\t\toffsetY: 0,\n\t\t\t\twidth: 1,\n\t\t\t\theight: 1\n\t\t\t};\n\n\t\t}\n\n\t\tthis.view.enabled = true;\n\t\tthis.view.fullWidth = fullWidth;\n\t\tthis.view.fullHeight = fullHeight;\n\t\tthis.view.offsetX = x;\n\t\tthis.view.offsetY = y;\n\t\tthis.view.width = width;\n\t\tthis.view.height = height;\n\n\t\tthis.updateProjectionMatrix();\n\n\t},\n\n\tclearViewOffset: function () {\n\n\t\tif ( this.view !== null ) {\n\n\t\t\tthis.view.enabled = false;\n\n\t\t}\n\n\t\tthis.updateProjectionMatrix();\n\n\t},\n\n\tupdateProjectionMatrix: function () {\n\n\t\tvar dx = ( this.right - this.left ) / ( 2 * this.zoom );\n\t\tvar dy = ( this.top - this.bottom ) / ( 2 * this.zoom );\n\t\tvar cx = ( this.right + this.left ) / 2;\n\t\tvar cy = ( this.top + this.bottom ) / 2;\n\n\t\tvar left = cx - dx;\n\t\tvar right = cx + dx;\n\t\tvar top = cy + dy;\n\t\tvar bottom = cy - dy;\n\n\t\tif ( this.view !== null && this.view.enabled ) {\n\n\t\t\tvar zoomW = this.zoom / ( this.view.width / this.view.fullWidth );\n\t\t\tvar zoomH = this.zoom / ( this.view.height / this.view.fullHeight );\n\t\t\tvar scaleW = ( this.right - this.left ) / this.view.width;\n\t\t\tvar scaleH = ( this.top - this.bottom ) / this.view.height;\n\n\t\t\tleft += scaleW * ( this.view.offsetX / zoomW );\n\t\t\tright = left + scaleW * ( this.view.width / zoomW );\n\t\t\ttop -= scaleH * ( this.view.offsetY / zoomH );\n\t\t\tbottom = top - scaleH * ( this.view.height / zoomH );\n\n\t\t}\n\n\t\tthis.projectionMatrix.makeOrthographic( left, right, top, bottom, this.near, this.far );\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\tvar data = Object3D.prototype.toJSON.call( this, meta );\n\n\t\tdata.object.zoom = this.zoom;\n\t\tdata.object.left = this.left;\n\t\tdata.object.right = this.right;\n\t\tdata.object.top = this.top;\n\t\tdata.object.bottom = this.bottom;\n\t\tdata.object.near = this.near;\n\t\tdata.object.far = this.far;\n\n\t\tif ( this.view !== null ) data.object.view = Object.assign( {}, this.view );\n\n\t\treturn data;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction Face3( a, b, c, normal, color, materialIndex ) {\n\n\tthis.a = a;\n\tthis.b = b;\n\tthis.c = c;\n\n\tthis.normal = ( normal && normal.isVector3 ) ? normal : new Vector3();\n\tthis.vertexNormals = Array.isArray( normal ) ? normal : [];\n\n\tthis.color = ( color && color.isColor ) ? color : new Color();\n\tthis.vertexColors = Array.isArray( color ) ? color : [];\n\n\tthis.materialIndex = materialIndex !== undefined ? materialIndex : 0;\n\n}\n\nObject.assign( Face3.prototype, {\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tthis.a = source.a;\n\t\tthis.b = source.b;\n\t\tthis.c = source.c;\n\n\t\tthis.normal.copy( source.normal );\n\t\tthis.color.copy( source.color );\n\n\t\tthis.materialIndex = source.materialIndex;\n\n\t\tfor ( var i = 0, il = source.vertexNormals.length; i < il; i ++ ) {\n\n\t\t\tthis.vertexNormals[ i ] = source.vertexNormals[ i ].clone();\n\n\t\t}\n\n\t\tfor ( var i = 0, il = source.vertexColors.length; i < il; i ++ ) {\n\n\t\t\tthis.vertexColors[ i ] = source.vertexColors[ i ].clone();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author kile / http://kile.stravaganza.org/\n * @author alteredq / http://alteredqualia.com/\n * @author mikael emtinger / http://gomo.se/\n * @author zz85 / http://www.lab4games.net/zz85/blog\n * @author bhouston / http://clara.io\n */\n\nvar geometryId = 0; // Geometry uses even numbers as Id\n\nfunction Geometry() {\n\n\tObject.defineProperty( this, 'id', { value: geometryId += 2 } );\n\n\tthis.uuid = _Math.generateUUID();\n\n\tthis.name = '';\n\tthis.type = 'Geometry';\n\n\tthis.vertices = [];\n\tthis.colors = [];\n\tthis.faces = [];\n\tthis.faceVertexUvs = [[]];\n\n\tthis.morphTargets = [];\n\tthis.morphNormals = [];\n\n\tthis.skinWeights = [];\n\tthis.skinIndices = [];\n\n\tthis.lineDistances = [];\n\n\tthis.boundingBox = null;\n\tthis.boundingSphere = null;\n\n\t// update flags\n\n\tthis.elementsNeedUpdate = false;\n\tthis.verticesNeedUpdate = false;\n\tthis.uvsNeedUpdate = false;\n\tthis.normalsNeedUpdate = false;\n\tthis.colorsNeedUpdate = false;\n\tthis.lineDistancesNeedUpdate = false;\n\tthis.groupsNeedUpdate = false;\n\n}\n\nGeometry.prototype = Object.assign( Object.create( EventDispatcher.prototype ), {\n\n\tconstructor: Geometry,\n\n\tisGeometry: true,\n\n\tapplyMatrix: function ( matrix ) {\n\n\t\tvar normalMatrix = new Matrix3().getNormalMatrix( matrix );\n\n\t\tfor ( var i = 0, il = this.vertices.length; i < il; i ++ ) {\n\n\t\t\tvar vertex = this.vertices[ i ];\n\t\t\tvertex.applyMatrix4( matrix );\n\n\t\t}\n\n\t\tfor ( var i = 0, il = this.faces.length; i < il; i ++ ) {\n\n\t\t\tvar face = this.faces[ i ];\n\t\t\tface.normal.applyMatrix3( normalMatrix ).normalize();\n\n\t\t\tfor ( var j = 0, jl = face.vertexNormals.length; j < jl; j ++ ) {\n\n\t\t\t\tface.vertexNormals[ j ].applyMatrix3( normalMatrix ).normalize();\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.boundingBox !== null ) {\n\n\t\t\tthis.computeBoundingBox();\n\n\t\t}\n\n\t\tif ( this.boundingSphere !== null ) {\n\n\t\t\tthis.computeBoundingSphere();\n\n\t\t}\n\n\t\tthis.verticesNeedUpdate = true;\n\t\tthis.normalsNeedUpdate = true;\n\n\t\treturn this;\n\n\t},\n\n\trotateX: function () {\n\n\t\t// rotate geometry around world x-axis\n\n\t\tvar m1 = new Matrix4();\n\n\t\treturn function rotateX( angle ) {\n\n\t\t\tm1.makeRotationX( angle );\n\n\t\t\tthis.applyMatrix( m1 );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\trotateY: function () {\n\n\t\t// rotate geometry around world y-axis\n\n\t\tvar m1 = new Matrix4();\n\n\t\treturn function rotateY( angle ) {\n\n\t\t\tm1.makeRotationY( angle );\n\n\t\t\tthis.applyMatrix( m1 );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\trotateZ: function () {\n\n\t\t// rotate geometry around world z-axis\n\n\t\tvar m1 = new Matrix4();\n\n\t\treturn function rotateZ( angle ) {\n\n\t\t\tm1.makeRotationZ( angle );\n\n\t\t\tthis.applyMatrix( m1 );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\ttranslate: function () {\n\n\t\t// translate geometry\n\n\t\tvar m1 = new Matrix4();\n\n\t\treturn function translate( x, y, z ) {\n\n\t\t\tm1.makeTranslation( x, y, z );\n\n\t\t\tthis.applyMatrix( m1 );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tscale: function () {\n\n\t\t// scale geometry\n\n\t\tvar m1 = new Matrix4();\n\n\t\treturn function scale( x, y, z ) {\n\n\t\t\tm1.makeScale( x, y, z );\n\n\t\t\tthis.applyMatrix( m1 );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tlookAt: function () {\n\n\t\tvar obj = new Object3D();\n\n\t\treturn function lookAt( vector ) {\n\n\t\t\tobj.lookAt( vector );\n\n\t\t\tobj.updateMatrix();\n\n\t\t\tthis.applyMatrix( obj.matrix );\n\n\t\t};\n\n\t}(),\n\n\tfromBufferGeometry: function ( geometry ) {\n\n\t\tvar scope = this;\n\n\t\tvar indices = geometry.index !== null ? geometry.index.array : undefined;\n\t\tvar attributes = geometry.attributes;\n\n\t\tvar positions = attributes.position.array;\n\t\tvar normals = attributes.normal !== undefined ? attributes.normal.array : undefined;\n\t\tvar colors = attributes.color !== undefined ? attributes.color.array : undefined;\n\t\tvar uvs = attributes.uv !== undefined ? attributes.uv.array : undefined;\n\t\tvar uvs2 = attributes.uv2 !== undefined ? attributes.uv2.array : undefined;\n\n\t\tif ( uvs2 !== undefined ) this.faceVertexUvs[ 1 ] = [];\n\n\t\tvar tempNormals = [];\n\t\tvar tempUVs = [];\n\t\tvar tempUVs2 = [];\n\n\t\tfor ( var i = 0, j = 0; i < positions.length; i += 3, j += 2 ) {\n\n\t\t\tscope.vertices.push( new Vector3( positions[ i ], positions[ i + 1 ], positions[ i + 2 ] ) );\n\n\t\t\tif ( normals !== undefined ) {\n\n\t\t\t\ttempNormals.push( new Vector3( normals[ i ], normals[ i + 1 ], normals[ i + 2 ] ) );\n\n\t\t\t}\n\n\t\t\tif ( colors !== undefined ) {\n\n\t\t\t\tscope.colors.push( new Color( colors[ i ], colors[ i + 1 ], colors[ i + 2 ] ) );\n\n\t\t\t}\n\n\t\t\tif ( uvs !== undefined ) {\n\n\t\t\t\ttempUVs.push( new Vector2( uvs[ j ], uvs[ j + 1 ] ) );\n\n\t\t\t}\n\n\t\t\tif ( uvs2 !== undefined ) {\n\n\t\t\t\ttempUVs2.push( new Vector2( uvs2[ j ], uvs2[ j + 1 ] ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction addFace( a, b, c, materialIndex ) {\n\n\t\t\tvar vertexNormals = normals !== undefined ? [ tempNormals[ a ].clone(), tempNormals[ b ].clone(), tempNormals[ c ].clone() ] : [];\n\t\t\tvar vertexColors = colors !== undefined ? [ scope.colors[ a ].clone(), scope.colors[ b ].clone(), scope.colors[ c ].clone() ] : [];\n\n\t\t\tvar face = new Face3( a, b, c, vertexNormals, vertexColors, materialIndex );\n\n\t\t\tscope.faces.push( face );\n\n\t\t\tif ( uvs !== undefined ) {\n\n\t\t\t\tscope.faceVertexUvs[ 0 ].push( [ tempUVs[ a ].clone(), tempUVs[ b ].clone(), tempUVs[ c ].clone() ] );\n\n\t\t\t}\n\n\t\t\tif ( uvs2 !== undefined ) {\n\n\t\t\t\tscope.faceVertexUvs[ 1 ].push( [ tempUVs2[ a ].clone(), tempUVs2[ b ].clone(), tempUVs2[ c ].clone() ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar groups = geometry.groups;\n\n\t\tif ( groups.length > 0 ) {\n\n\t\t\tfor ( var i = 0; i < groups.length; i ++ ) {\n\n\t\t\t\tvar group = groups[ i ];\n\n\t\t\t\tvar start = group.start;\n\t\t\t\tvar count = group.count;\n\n\t\t\t\tfor ( var j = start, jl = start + count; j < jl; j += 3 ) {\n\n\t\t\t\t\tif ( indices !== undefined ) {\n\n\t\t\t\t\t\taddFace( indices[ j ], indices[ j + 1 ], indices[ j + 2 ], group.materialIndex );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\taddFace( j, j + 1, j + 2, group.materialIndex );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( indices !== undefined ) {\n\n\t\t\t\tfor ( var i = 0; i < indices.length; i += 3 ) {\n\n\t\t\t\t\taddFace( indices[ i ], indices[ i + 1 ], indices[ i + 2 ] );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tfor ( var i = 0; i < positions.length / 3; i += 3 ) {\n\n\t\t\t\t\taddFace( i, i + 1, i + 2 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.computeFaceNormals();\n\n\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\tthis.boundingBox = geometry.boundingBox.clone();\n\n\t\t}\n\n\t\tif ( geometry.boundingSphere !== null ) {\n\n\t\t\tthis.boundingSphere = geometry.boundingSphere.clone();\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tcenter: function () {\n\n\t\tvar offset = new Vector3();\n\n\t\treturn function center() {\n\n\t\t\tthis.computeBoundingBox();\n\n\t\t\tthis.boundingBox.getCenter( offset ).negate();\n\n\t\t\tthis.translate( offset.x, offset.y, offset.z );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tnormalize: function () {\n\n\t\tthis.computeBoundingSphere();\n\n\t\tvar center = this.boundingSphere.center;\n\t\tvar radius = this.boundingSphere.radius;\n\n\t\tvar s = radius === 0 ? 1 : 1.0 / radius;\n\n\t\tvar matrix = new Matrix4();\n\t\tmatrix.set(\n\t\t\ts, 0, 0, - s * center.x,\n\t\t\t0, s, 0, - s * center.y,\n\t\t\t0, 0, s, - s * center.z,\n\t\t\t0, 0, 0, 1\n\t\t);\n\n\t\tthis.applyMatrix( matrix );\n\n\t\treturn this;\n\n\t},\n\n\tcomputeFaceNormals: function () {\n\n\t\tvar cb = new Vector3(), ab = new Vector3();\n\n\t\tfor ( var f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\tvar face = this.faces[ f ];\n\n\t\t\tvar vA = this.vertices[ face.a ];\n\t\t\tvar vB = this.vertices[ face.b ];\n\t\t\tvar vC = this.vertices[ face.c ];\n\n\t\t\tcb.subVectors( vC, vB );\n\t\t\tab.subVectors( vA, vB );\n\t\t\tcb.cross( ab );\n\n\t\t\tcb.normalize();\n\n\t\t\tface.normal.copy( cb );\n\n\t\t}\n\n\t},\n\n\tcomputeVertexNormals: function ( areaWeighted ) {\n\n\t\tif ( areaWeighted === undefined ) areaWeighted = true;\n\n\t\tvar v, vl, f, fl, face, vertices;\n\n\t\tvertices = new Array( this.vertices.length );\n\n\t\tfor ( v = 0, vl = this.vertices.length; v < vl; v ++ ) {\n\n\t\t\tvertices[ v ] = new Vector3();\n\n\t\t}\n\n\t\tif ( areaWeighted ) {\n\n\t\t\t// vertex normals weighted by triangle areas\n\t\t\t// http://www.iquilezles.org/www/articles/normals/normals.htm\n\n\t\t\tvar vA, vB, vC;\n\t\t\tvar cb = new Vector3(), ab = new Vector3();\n\n\t\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\tface = this.faces[ f ];\n\n\t\t\t\tvA = this.vertices[ face.a ];\n\t\t\t\tvB = this.vertices[ face.b ];\n\t\t\t\tvC = this.vertices[ face.c ];\n\n\t\t\t\tcb.subVectors( vC, vB );\n\t\t\t\tab.subVectors( vA, vB );\n\t\t\t\tcb.cross( ab );\n\n\t\t\t\tvertices[ face.a ].add( cb );\n\t\t\t\tvertices[ face.b ].add( cb );\n\t\t\t\tvertices[ face.c ].add( cb );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tthis.computeFaceNormals();\n\n\t\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\tface = this.faces[ f ];\n\n\t\t\t\tvertices[ face.a ].add( face.normal );\n\t\t\t\tvertices[ face.b ].add( face.normal );\n\t\t\t\tvertices[ face.c ].add( face.normal );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( v = 0, vl = this.vertices.length; v < vl; v ++ ) {\n\n\t\t\tvertices[ v ].normalize();\n\n\t\t}\n\n\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\tface = this.faces[ f ];\n\n\t\t\tvar vertexNormals = face.vertexNormals;\n\n\t\t\tif ( vertexNormals.length === 3 ) {\n\n\t\t\t\tvertexNormals[ 0 ].copy( vertices[ face.a ] );\n\t\t\t\tvertexNormals[ 1 ].copy( vertices[ face.b ] );\n\t\t\t\tvertexNormals[ 2 ].copy( vertices[ face.c ] );\n\n\t\t\t} else {\n\n\t\t\t\tvertexNormals[ 0 ] = vertices[ face.a ].clone();\n\t\t\t\tvertexNormals[ 1 ] = vertices[ face.b ].clone();\n\t\t\t\tvertexNormals[ 2 ] = vertices[ face.c ].clone();\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.faces.length > 0 ) {\n\n\t\t\tthis.normalsNeedUpdate = true;\n\n\t\t}\n\n\t},\n\n\tcomputeFlatVertexNormals: function () {\n\n\t\tvar f, fl, face;\n\n\t\tthis.computeFaceNormals();\n\n\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\tface = this.faces[ f ];\n\n\t\t\tvar vertexNormals = face.vertexNormals;\n\n\t\t\tif ( vertexNormals.length === 3 ) {\n\n\t\t\t\tvertexNormals[ 0 ].copy( face.normal );\n\t\t\t\tvertexNormals[ 1 ].copy( face.normal );\n\t\t\t\tvertexNormals[ 2 ].copy( face.normal );\n\n\t\t\t} else {\n\n\t\t\t\tvertexNormals[ 0 ] = face.normal.clone();\n\t\t\t\tvertexNormals[ 1 ] = face.normal.clone();\n\t\t\t\tvertexNormals[ 2 ] = face.normal.clone();\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.faces.length > 0 ) {\n\n\t\t\tthis.normalsNeedUpdate = true;\n\n\t\t}\n\n\t},\n\n\tcomputeMorphNormals: function () {\n\n\t\tvar i, il, f, fl, face;\n\n\t\t// save original normals\n\t\t// - create temp variables on first access\n\t\t// otherwise just copy (for faster repeated calls)\n\n\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\tface = this.faces[ f ];\n\n\t\t\tif ( ! face.__originalFaceNormal ) {\n\n\t\t\t\tface.__originalFaceNormal = face.normal.clone();\n\n\t\t\t} else {\n\n\t\t\t\tface.__originalFaceNormal.copy( face.normal );\n\n\t\t\t}\n\n\t\t\tif ( ! face.__originalVertexNormals ) face.__originalVertexNormals = [];\n\n\t\t\tfor ( i = 0, il = face.vertexNormals.length; i < il; i ++ ) {\n\n\t\t\t\tif ( ! face.__originalVertexNormals[ i ] ) {\n\n\t\t\t\t\tface.__originalVertexNormals[ i ] = face.vertexNormals[ i ].clone();\n\n\t\t\t\t} else {\n\n\t\t\t\t\tface.__originalVertexNormals[ i ].copy( face.vertexNormals[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// use temp geometry to compute face and vertex normals for each morph\n\n\t\tvar tmpGeo = new Geometry();\n\t\ttmpGeo.faces = this.faces;\n\n\t\tfor ( i = 0, il = this.morphTargets.length; i < il; i ++ ) {\n\n\t\t\t// create on first access\n\n\t\t\tif ( ! this.morphNormals[ i ] ) {\n\n\t\t\t\tthis.morphNormals[ i ] = {};\n\t\t\t\tthis.morphNormals[ i ].faceNormals = [];\n\t\t\t\tthis.morphNormals[ i ].vertexNormals = [];\n\n\t\t\t\tvar dstNormalsFace = this.morphNormals[ i ].faceNormals;\n\t\t\t\tvar dstNormalsVertex = this.morphNormals[ i ].vertexNormals;\n\n\t\t\t\tvar faceNormal, vertexNormals;\n\n\t\t\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\t\tfaceNormal = new Vector3();\n\t\t\t\t\tvertexNormals = { a: new Vector3(), b: new Vector3(), c: new Vector3() };\n\n\t\t\t\t\tdstNormalsFace.push( faceNormal );\n\t\t\t\t\tdstNormalsVertex.push( vertexNormals );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tvar morphNormals = this.morphNormals[ i ];\n\n\t\t\t// set vertices to morph target\n\n\t\t\ttmpGeo.vertices = this.morphTargets[ i ].vertices;\n\n\t\t\t// compute morph normals\n\n\t\t\ttmpGeo.computeFaceNormals();\n\t\t\ttmpGeo.computeVertexNormals();\n\n\t\t\t// store morph normals\n\n\t\t\tvar faceNormal, vertexNormals;\n\n\t\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\tface = this.faces[ f ];\n\n\t\t\t\tfaceNormal = morphNormals.faceNormals[ f ];\n\t\t\t\tvertexNormals = morphNormals.vertexNormals[ f ];\n\n\t\t\t\tfaceNormal.copy( face.normal );\n\n\t\t\t\tvertexNormals.a.copy( face.vertexNormals[ 0 ] );\n\t\t\t\tvertexNormals.b.copy( face.vertexNormals[ 1 ] );\n\t\t\t\tvertexNormals.c.copy( face.vertexNormals[ 2 ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// restore original normals\n\n\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\tface = this.faces[ f ];\n\n\t\t\tface.normal = face.__originalFaceNormal;\n\t\t\tface.vertexNormals = face.__originalVertexNormals;\n\n\t\t}\n\n\t},\n\n\tcomputeBoundingBox: function () {\n\n\t\tif ( this.boundingBox === null ) {\n\n\t\t\tthis.boundingBox = new Box3();\n\n\t\t}\n\n\t\tthis.boundingBox.setFromPoints( this.vertices );\n\n\t},\n\n\tcomputeBoundingSphere: function () {\n\n\t\tif ( this.boundingSphere === null ) {\n\n\t\t\tthis.boundingSphere = new Sphere();\n\n\t\t}\n\n\t\tthis.boundingSphere.setFromPoints( this.vertices );\n\n\t},\n\n\tmerge: function ( geometry, matrix, materialIndexOffset ) {\n\n\t\tif ( ! ( geometry && geometry.isGeometry ) ) {\n\n\t\t\tconsole.error( 'THREE.Geometry.merge(): geometry not an instance of THREE.Geometry.', geometry );\n\t\t\treturn;\n\n\t\t}\n\n\t\tvar normalMatrix,\n\t\t\tvertexOffset = this.vertices.length,\n\t\t\tvertices1 = this.vertices,\n\t\t\tvertices2 = geometry.vertices,\n\t\t\tfaces1 = this.faces,\n\t\t\tfaces2 = geometry.faces,\n\t\t\tuvs1 = this.faceVertexUvs[ 0 ],\n\t\t\tuvs2 = geometry.faceVertexUvs[ 0 ],\n\t\t\tcolors1 = this.colors,\n\t\t\tcolors2 = geometry.colors;\n\n\t\tif ( materialIndexOffset === undefined ) materialIndexOffset = 0;\n\n\t\tif ( matrix !== undefined ) {\n\n\t\t\tnormalMatrix = new Matrix3().getNormalMatrix( matrix );\n\n\t\t}\n\n\t\t// vertices\n\n\t\tfor ( var i = 0, il = vertices2.length; i < il; i ++ ) {\n\n\t\t\tvar vertex = vertices2[ i ];\n\n\t\t\tvar vertexCopy = vertex.clone();\n\n\t\t\tif ( matrix !== undefined ) vertexCopy.applyMatrix4( matrix );\n\n\t\t\tvertices1.push( vertexCopy );\n\n\t\t}\n\n\t\t// colors\n\n\t\tfor ( var i = 0, il = colors2.length; i < il; i ++ ) {\n\n\t\t\tcolors1.push( colors2[ i ].clone() );\n\n\t\t}\n\n\t\t// faces\n\n\t\tfor ( i = 0, il = faces2.length; i < il; i ++ ) {\n\n\t\t\tvar face = faces2[ i ], faceCopy, normal, color,\n\t\t\t\tfaceVertexNormals = face.vertexNormals,\n\t\t\t\tfaceVertexColors = face.vertexColors;\n\n\t\t\tfaceCopy = new Face3( face.a + vertexOffset, face.b + vertexOffset, face.c + vertexOffset );\n\t\t\tfaceCopy.normal.copy( face.normal );\n\n\t\t\tif ( normalMatrix !== undefined ) {\n\n\t\t\t\tfaceCopy.normal.applyMatrix3( normalMatrix ).normalize();\n\n\t\t\t}\n\n\t\t\tfor ( var j = 0, jl = faceVertexNormals.length; j < jl; j ++ ) {\n\n\t\t\t\tnormal = faceVertexNormals[ j ].clone();\n\n\t\t\t\tif ( normalMatrix !== undefined ) {\n\n\t\t\t\t\tnormal.applyMatrix3( normalMatrix ).normalize();\n\n\t\t\t\t}\n\n\t\t\t\tfaceCopy.vertexNormals.push( normal );\n\n\t\t\t}\n\n\t\t\tfaceCopy.color.copy( face.color );\n\n\t\t\tfor ( var j = 0, jl = faceVertexColors.length; j < jl; j ++ ) {\n\n\t\t\t\tcolor = faceVertexColors[ j ];\n\t\t\t\tfaceCopy.vertexColors.push( color.clone() );\n\n\t\t\t}\n\n\t\t\tfaceCopy.materialIndex = face.materialIndex + materialIndexOffset;\n\n\t\t\tfaces1.push( faceCopy );\n\n\t\t}\n\n\t\t// uvs\n\n\t\tfor ( i = 0, il = uvs2.length; i < il; i ++ ) {\n\n\t\t\tvar uv = uvs2[ i ], uvCopy = [];\n\n\t\t\tif ( uv === undefined ) {\n\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tfor ( var j = 0, jl = uv.length; j < jl; j ++ ) {\n\n\t\t\t\tuvCopy.push( uv[ j ].clone() );\n\n\t\t\t}\n\n\t\t\tuvs1.push( uvCopy );\n\n\t\t}\n\n\t},\n\n\tmergeMesh: function ( mesh ) {\n\n\t\tif ( ! ( mesh && mesh.isMesh ) ) {\n\n\t\t\tconsole.error( 'THREE.Geometry.mergeMesh(): mesh not an instance of THREE.Mesh.', mesh );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( mesh.matrixAutoUpdate ) mesh.updateMatrix();\n\n\t\tthis.merge( mesh.geometry, mesh.matrix );\n\n\t},\n\n\t/*\n\t * Checks for duplicate vertices with hashmap.\n\t * Duplicated vertices are removed\n\t * and faces' vertices are updated.\n\t */\n\n\tmergeVertices: function () {\n\n\t\tvar verticesMap = {}; // Hashmap for looking up vertices by position coordinates (and making sure they are unique)\n\t\tvar unique = [], changes = [];\n\n\t\tvar v, key;\n\t\tvar precisionPoints = 4; // number of decimal points, e.g. 4 for epsilon of 0.0001\n\t\tvar precision = Math.pow( 10, precisionPoints );\n\t\tvar i, il, face;\n\t\tvar indices, j, jl;\n\n\t\tfor ( i = 0, il = this.vertices.length; i < il; i ++ ) {\n\n\t\t\tv = this.vertices[ i ];\n\t\t\tkey = Math.round( v.x * precision ) + '_' + Math.round( v.y * precision ) + '_' + Math.round( v.z * precision );\n\n\t\t\tif ( verticesMap[ key ] === undefined ) {\n\n\t\t\t\tverticesMap[ key ] = i;\n\t\t\t\tunique.push( this.vertices[ i ] );\n\t\t\t\tchanges[ i ] = unique.length - 1;\n\n\t\t\t} else {\n\n\t\t\t\t//console.log('Duplicate vertex found. ', i, ' could be using ', verticesMap[key]);\n\t\t\t\tchanges[ i ] = changes[ verticesMap[ key ] ];\n\n\t\t\t}\n\n\t\t}\n\n\n\t\t// if faces are completely degenerate after merging vertices, we\n\t\t// have to remove them from the geometry.\n\t\tvar faceIndicesToRemove = [];\n\n\t\tfor ( i = 0, il = this.faces.length; i < il; i ++ ) {\n\n\t\t\tface = this.faces[ i ];\n\n\t\t\tface.a = changes[ face.a ];\n\t\t\tface.b = changes[ face.b ];\n\t\t\tface.c = changes[ face.c ];\n\n\t\t\tindices = [ face.a, face.b, face.c ];\n\n\t\t\t// if any duplicate vertices are found in a Face3\n\t\t\t// we have to remove the face as nothing can be saved\n\t\t\tfor ( var n = 0; n < 3; n ++ ) {\n\n\t\t\t\tif ( indices[ n ] === indices[ ( n + 1 ) % 3 ] ) {\n\n\t\t\t\t\tfaceIndicesToRemove.push( i );\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( i = faceIndicesToRemove.length - 1; i >= 0; i -- ) {\n\n\t\t\tvar idx = faceIndicesToRemove[ i ];\n\n\t\t\tthis.faces.splice( idx, 1 );\n\n\t\t\tfor ( j = 0, jl = this.faceVertexUvs.length; j < jl; j ++ ) {\n\n\t\t\t\tthis.faceVertexUvs[ j ].splice( idx, 1 );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Use unique set of vertices\n\n\t\tvar diff = this.vertices.length - unique.length;\n\t\tthis.vertices = unique;\n\t\treturn diff;\n\n\t},\n\n\tsetFromPoints: function ( points ) {\n\n\t\tthis.vertices = [];\n\n\t\tfor ( var i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\tvar point = points[ i ];\n\t\t\tthis.vertices.push( new Vector3( point.x, point.y, point.z || 0 ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tsortFacesByMaterialIndex: function () {\n\n\t\tvar faces = this.faces;\n\t\tvar length = faces.length;\n\n\t\t// tag faces\n\n\t\tfor ( var i = 0; i < length; i ++ ) {\n\n\t\t\tfaces[ i ]._id = i;\n\n\t\t}\n\n\t\t// sort faces\n\n\t\tfunction materialIndexSort( a, b ) {\n\n\t\t\treturn a.materialIndex - b.materialIndex;\n\n\t\t}\n\n\t\tfaces.sort( materialIndexSort );\n\n\t\t// sort uvs\n\n\t\tvar uvs1 = this.faceVertexUvs[ 0 ];\n\t\tvar uvs2 = this.faceVertexUvs[ 1 ];\n\n\t\tvar newUvs1, newUvs2;\n\n\t\tif ( uvs1 && uvs1.length === length ) newUvs1 = [];\n\t\tif ( uvs2 && uvs2.length === length ) newUvs2 = [];\n\n\t\tfor ( var i = 0; i < length; i ++ ) {\n\n\t\t\tvar id = faces[ i ]._id;\n\n\t\t\tif ( newUvs1 ) newUvs1.push( uvs1[ id ] );\n\t\t\tif ( newUvs2 ) newUvs2.push( uvs2[ id ] );\n\n\t\t}\n\n\t\tif ( newUvs1 ) this.faceVertexUvs[ 0 ] = newUvs1;\n\t\tif ( newUvs2 ) this.faceVertexUvs[ 1 ] = newUvs2;\n\n\t},\n\n\ttoJSON: function () {\n\n\t\tvar data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Geometry',\n\t\t\t\tgenerator: 'Geometry.toJSON'\n\t\t\t}\n\t\t};\n\n\t\t// standard Geometry serialization\n\n\t\tdata.uuid = this.uuid;\n\t\tdata.type = this.type;\n\t\tif ( this.name !== '' ) data.name = this.name;\n\n\t\tif ( this.parameters !== undefined ) {\n\n\t\t\tvar parameters = this.parameters;\n\n\t\t\tfor ( var key in parameters ) {\n\n\t\t\t\tif ( parameters[ key ] !== undefined ) data[ key ] = parameters[ key ];\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tvar vertices = [];\n\n\t\tfor ( var i = 0; i < this.vertices.length; i ++ ) {\n\n\t\t\tvar vertex = this.vertices[ i ];\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t}\n\n\t\tvar faces = [];\n\t\tvar normals = [];\n\t\tvar normalsHash = {};\n\t\tvar colors = [];\n\t\tvar colorsHash = {};\n\t\tvar uvs = [];\n\t\tvar uvsHash = {};\n\n\t\tfor ( var i = 0; i < this.faces.length; i ++ ) {\n\n\t\t\tvar face = this.faces[ i ];\n\n\t\t\tvar hasMaterial = true;\n\t\t\tvar hasFaceUv = false; // deprecated\n\t\t\tvar hasFaceVertexUv = this.faceVertexUvs[ 0 ][ i ] !== undefined;\n\t\t\tvar hasFaceNormal = face.normal.length() > 0;\n\t\t\tvar hasFaceVertexNormal = face.vertexNormals.length > 0;\n\t\t\tvar hasFaceColor = face.color.r !== 1 || face.color.g !== 1 || face.color.b !== 1;\n\t\t\tvar hasFaceVertexColor = face.vertexColors.length > 0;\n\n\t\t\tvar faceType = 0;\n\n\t\t\tfaceType = setBit( faceType, 0, 0 ); // isQuad\n\t\t\tfaceType = setBit( faceType, 1, hasMaterial );\n\t\t\tfaceType = setBit( faceType, 2, hasFaceUv );\n\t\t\tfaceType = setBit( faceType, 3, hasFaceVertexUv );\n\t\t\tfaceType = setBit( faceType, 4, hasFaceNormal );\n\t\t\tfaceType = setBit( faceType, 5, hasFaceVertexNormal );\n\t\t\tfaceType = setBit( faceType, 6, hasFaceColor );\n\t\t\tfaceType = setBit( faceType, 7, hasFaceVertexColor );\n\n\t\t\tfaces.push( faceType );\n\t\t\tfaces.push( face.a, face.b, face.c );\n\t\t\tfaces.push( face.materialIndex );\n\n\t\t\tif ( hasFaceVertexUv ) {\n\n\t\t\t\tvar faceVertexUvs = this.faceVertexUvs[ 0 ][ i ];\n\n\t\t\t\tfaces.push(\n\t\t\t\t\tgetUvIndex( faceVertexUvs[ 0 ] ),\n\t\t\t\t\tgetUvIndex( faceVertexUvs[ 1 ] ),\n\t\t\t\t\tgetUvIndex( faceVertexUvs[ 2 ] )\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t\tif ( hasFaceNormal ) {\n\n\t\t\t\tfaces.push( getNormalIndex( face.normal ) );\n\n\t\t\t}\n\n\t\t\tif ( hasFaceVertexNormal ) {\n\n\t\t\t\tvar vertexNormals = face.vertexNormals;\n\n\t\t\t\tfaces.push(\n\t\t\t\t\tgetNormalIndex( vertexNormals[ 0 ] ),\n\t\t\t\t\tgetNormalIndex( vertexNormals[ 1 ] ),\n\t\t\t\t\tgetNormalIndex( vertexNormals[ 2 ] )\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t\tif ( hasFaceColor ) {\n\n\t\t\t\tfaces.push( getColorIndex( face.color ) );\n\n\t\t\t}\n\n\t\t\tif ( hasFaceVertexColor ) {\n\n\t\t\t\tvar vertexColors = face.vertexColors;\n\n\t\t\t\tfaces.push(\n\t\t\t\t\tgetColorIndex( vertexColors[ 0 ] ),\n\t\t\t\t\tgetColorIndex( vertexColors[ 1 ] ),\n\t\t\t\t\tgetColorIndex( vertexColors[ 2 ] )\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction setBit( value, position, enabled ) {\n\n\t\t\treturn enabled ? value | ( 1 << position ) : value & ( ~ ( 1 << position ) );\n\n\t\t}\n\n\t\tfunction getNormalIndex( normal ) {\n\n\t\t\tvar hash = normal.x.toString() + normal.y.toString() + normal.z.toString();\n\n\t\t\tif ( normalsHash[ hash ] !== undefined ) {\n\n\t\t\t\treturn normalsHash[ hash ];\n\n\t\t\t}\n\n\t\t\tnormalsHash[ hash ] = normals.length / 3;\n\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\treturn normalsHash[ hash ];\n\n\t\t}\n\n\t\tfunction getColorIndex( color ) {\n\n\t\t\tvar hash = color.r.toString() + color.g.toString() + color.b.toString();\n\n\t\t\tif ( colorsHash[ hash ] !== undefined ) {\n\n\t\t\t\treturn colorsHash[ hash ];\n\n\t\t\t}\n\n\t\t\tcolorsHash[ hash ] = colors.length;\n\t\t\tcolors.push( color.getHex() );\n\n\t\t\treturn colorsHash[ hash ];\n\n\t\t}\n\n\t\tfunction getUvIndex( uv ) {\n\n\t\t\tvar hash = uv.x.toString() + uv.y.toString();\n\n\t\t\tif ( uvsHash[ hash ] !== undefined ) {\n\n\t\t\t\treturn uvsHash[ hash ];\n\n\t\t\t}\n\n\t\t\tuvsHash[ hash ] = uvs.length / 2;\n\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\treturn uvsHash[ hash ];\n\n\t\t}\n\n\t\tdata.data = {};\n\n\t\tdata.data.vertices = vertices;\n\t\tdata.data.normals = normals;\n\t\tif ( colors.length > 0 ) data.data.colors = colors;\n\t\tif ( uvs.length > 0 ) data.data.uvs = [ uvs ]; // temporal backward compatibility\n\t\tdata.data.faces = faces;\n\n\t\treturn data;\n\n\t},\n\n\tclone: function () {\n\n\t\t/*\n\t\t // Handle primitives\n\n\t\t var parameters = this.parameters;\n\n\t\t if ( parameters !== undefined ) {\n\n\t\t var values = [];\n\n\t\t for ( var key in parameters ) {\n\n\t\t values.push( parameters[ key ] );\n\n\t\t }\n\n\t\t var geometry = Object.create( this.constructor.prototype );\n\t\t this.constructor.apply( geometry, values );\n\t\t return geometry;\n\n\t\t }\n\n\t\t return new this.constructor().copy( this );\n\t\t */\n\n\t\treturn new Geometry().copy( this );\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tvar i, il, j, jl, k, kl;\n\n\t\t// reset\n\n\t\tthis.vertices = [];\n\t\tthis.colors = [];\n\t\tthis.faces = [];\n\t\tthis.faceVertexUvs = [[]];\n\t\tthis.morphTargets = [];\n\t\tthis.morphNormals = [];\n\t\tthis.skinWeights = [];\n\t\tthis.skinIndices = [];\n\t\tthis.lineDistances = [];\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\n\t\t// name\n\n\t\tthis.name = source.name;\n\n\t\t// vertices\n\n\t\tvar vertices = source.vertices;\n\n\t\tfor ( i = 0, il = vertices.length; i < il; i ++ ) {\n\n\t\t\tthis.vertices.push( vertices[ i ].clone() );\n\n\t\t}\n\n\t\t// colors\n\n\t\tvar colors = source.colors;\n\n\t\tfor ( i = 0, il = colors.length; i < il; i ++ ) {\n\n\t\t\tthis.colors.push( colors[ i ].clone() );\n\n\t\t}\n\n\t\t// faces\n\n\t\tvar faces = source.faces;\n\n\t\tfor ( i = 0, il = faces.length; i < il; i ++ ) {\n\n\t\t\tthis.faces.push( faces[ i ].clone() );\n\n\t\t}\n\n\t\t// face vertex uvs\n\n\t\tfor ( i = 0, il = source.faceVertexUvs.length; i < il; i ++ ) {\n\n\t\t\tvar faceVertexUvs = source.faceVertexUvs[ i ];\n\n\t\t\tif ( this.faceVertexUvs[ i ] === undefined ) {\n\n\t\t\t\tthis.faceVertexUvs[ i ] = [];\n\n\t\t\t}\n\n\t\t\tfor ( j = 0, jl = faceVertexUvs.length; j < jl; j ++ ) {\n\n\t\t\t\tvar uvs = faceVertexUvs[ j ], uvsCopy = [];\n\n\t\t\t\tfor ( k = 0, kl = uvs.length; k < kl; k ++ ) {\n\n\t\t\t\t\tvar uv = uvs[ k ];\n\n\t\t\t\t\tuvsCopy.push( uv.clone() );\n\n\t\t\t\t}\n\n\t\t\t\tthis.faceVertexUvs[ i ].push( uvsCopy );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// morph targets\n\n\t\tvar morphTargets = source.morphTargets;\n\n\t\tfor ( i = 0, il = morphTargets.length; i < il; i ++ ) {\n\n\t\t\tvar morphTarget = {};\n\t\t\tmorphTarget.name = morphTargets[ i ].name;\n\n\t\t\t// vertices\n\n\t\t\tif ( morphTargets[ i ].vertices !== undefined ) {\n\n\t\t\t\tmorphTarget.vertices = [];\n\n\t\t\t\tfor ( j = 0, jl = morphTargets[ i ].vertices.length; j < jl; j ++ ) {\n\n\t\t\t\t\tmorphTarget.vertices.push( morphTargets[ i ].vertices[ j ].clone() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// normals\n\n\t\t\tif ( morphTargets[ i ].normals !== undefined ) {\n\n\t\t\t\tmorphTarget.normals = [];\n\n\t\t\t\tfor ( j = 0, jl = morphTargets[ i ].normals.length; j < jl; j ++ ) {\n\n\t\t\t\t\tmorphTarget.normals.push( morphTargets[ i ].normals[ j ].clone() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.morphTargets.push( morphTarget );\n\n\t\t}\n\n\t\t// morph normals\n\n\t\tvar morphNormals = source.morphNormals;\n\n\t\tfor ( i = 0, il = morphNormals.length; i < il; i ++ ) {\n\n\t\t\tvar morphNormal = {};\n\n\t\t\t// vertex normals\n\n\t\t\tif ( morphNormals[ i ].vertexNormals !== undefined ) {\n\n\t\t\t\tmorphNormal.vertexNormals = [];\n\n\t\t\t\tfor ( j = 0, jl = morphNormals[ i ].vertexNormals.length; j < jl; j ++ ) {\n\n\t\t\t\t\tvar srcVertexNormal = morphNormals[ i ].vertexNormals[ j ];\n\t\t\t\t\tvar destVertexNormal = {};\n\n\t\t\t\t\tdestVertexNormal.a = srcVertexNormal.a.clone();\n\t\t\t\t\tdestVertexNormal.b = srcVertexNormal.b.clone();\n\t\t\t\t\tdestVertexNormal.c = srcVertexNormal.c.clone();\n\n\t\t\t\t\tmorphNormal.vertexNormals.push( destVertexNormal );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// face normals\n\n\t\t\tif ( morphNormals[ i ].faceNormals !== undefined ) {\n\n\t\t\t\tmorphNormal.faceNormals = [];\n\n\t\t\t\tfor ( j = 0, jl = morphNormals[ i ].faceNormals.length; j < jl; j ++ ) {\n\n\t\t\t\t\tmorphNormal.faceNormals.push( morphNormals[ i ].faceNormals[ j ].clone() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.morphNormals.push( morphNormal );\n\n\t\t}\n\n\t\t// skin weights\n\n\t\tvar skinWeights = source.skinWeights;\n\n\t\tfor ( i = 0, il = skinWeights.length; i < il; i ++ ) {\n\n\t\t\tthis.skinWeights.push( skinWeights[ i ].clone() );\n\n\t\t}\n\n\t\t// skin indices\n\n\t\tvar skinIndices = source.skinIndices;\n\n\t\tfor ( i = 0, il = skinIndices.length; i < il; i ++ ) {\n\n\t\t\tthis.skinIndices.push( skinIndices[ i ].clone() );\n\n\t\t}\n\n\t\t// line distances\n\n\t\tvar lineDistances = source.lineDistances;\n\n\t\tfor ( i = 0, il = lineDistances.length; i < il; i ++ ) {\n\n\t\t\tthis.lineDistances.push( lineDistances[ i ] );\n\n\t\t}\n\n\t\t// bounding box\n\n\t\tvar boundingBox = source.boundingBox;\n\n\t\tif ( boundingBox !== null ) {\n\n\t\t\tthis.boundingBox = boundingBox.clone();\n\n\t\t}\n\n\t\t// bounding sphere\n\n\t\tvar boundingSphere = source.boundingSphere;\n\n\t\tif ( boundingSphere !== null ) {\n\n\t\t\tthis.boundingSphere = boundingSphere.clone();\n\n\t\t}\n\n\t\t// update flags\n\n\t\tthis.elementsNeedUpdate = source.elementsNeedUpdate;\n\t\tthis.verticesNeedUpdate = source.verticesNeedUpdate;\n\t\tthis.uvsNeedUpdate = source.uvsNeedUpdate;\n\t\tthis.normalsNeedUpdate = source.normalsNeedUpdate;\n\t\tthis.colorsNeedUpdate = source.colorsNeedUpdate;\n\t\tthis.lineDistancesNeedUpdate = source.lineDistancesNeedUpdate;\n\t\tthis.groupsNeedUpdate = source.groupsNeedUpdate;\n\n\t\treturn this;\n\n\t},\n\n\tdispose: function () {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction BufferAttribute( array, itemSize, normalized ) {\n\n\tif ( Array.isArray( array ) ) {\n\n\t\tthrow new TypeError( 'THREE.BufferAttribute: array should be a Typed Array.' );\n\n\t}\n\n\tthis.name = '';\n\n\tthis.array = array;\n\tthis.itemSize = itemSize;\n\tthis.count = array !== undefined ? array.length / itemSize : 0;\n\tthis.normalized = normalized === true;\n\n\tthis.dynamic = false;\n\tthis.updateRange = { offset: 0, count: - 1 };\n\n\tthis.version = 0;\n\n}\n\nObject.defineProperty( BufferAttribute.prototype, 'needsUpdate', {\n\n\tset: function ( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n} );\n\nObject.assign( BufferAttribute.prototype, {\n\n\tisBufferAttribute: true,\n\n\tonUploadCallback: function () {},\n\n\tsetArray: function ( array ) {\n\n\t\tif ( Array.isArray( array ) ) {\n\n\t\t\tthrow new TypeError( 'THREE.BufferAttribute: array should be a Typed Array.' );\n\n\t\t}\n\n\t\tthis.count = array !== undefined ? array.length / this.itemSize : 0;\n\t\tthis.array = array;\n\n\t\treturn this;\n\n\t},\n\n\tsetDynamic: function ( value ) {\n\n\t\tthis.dynamic = value;\n\n\t\treturn this;\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tthis.name = source.name;\n\t\tthis.array = new source.array.constructor( source.array );\n\t\tthis.itemSize = source.itemSize;\n\t\tthis.count = source.count;\n\t\tthis.normalized = source.normalized;\n\n\t\tthis.dynamic = source.dynamic;\n\n\t\treturn this;\n\n\t},\n\n\tcopyAt: function ( index1, attribute, index2 ) {\n\n\t\tindex1 *= this.itemSize;\n\t\tindex2 *= attribute.itemSize;\n\n\t\tfor ( var i = 0, l = this.itemSize; i < l; i ++ ) {\n\n\t\t\tthis.array[ index1 + i ] = attribute.array[ index2 + i ];\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tcopyArray: function ( array ) {\n\n\t\tthis.array.set( array );\n\n\t\treturn this;\n\n\t},\n\n\tcopyColorsArray: function ( colors ) {\n\n\t\tvar array = this.array, offset = 0;\n\n\t\tfor ( var i = 0, l = colors.length; i < l; i ++ ) {\n\n\t\t\tvar color = colors[ i ];\n\n\t\t\tif ( color === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.BufferAttribute.copyColorsArray(): color is undefined', i );\n\t\t\t\tcolor = new Color();\n\n\t\t\t}\n\n\t\t\tarray[ offset ++ ] = color.r;\n\t\t\tarray[ offset ++ ] = color.g;\n\t\t\tarray[ offset ++ ] = color.b;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tcopyVector2sArray: function ( vectors ) {\n\n\t\tvar array = this.array, offset = 0;\n\n\t\tfor ( var i = 0, l = vectors.length; i < l; i ++ ) {\n\n\t\t\tvar vector = vectors[ i ];\n\n\t\t\tif ( vector === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.BufferAttribute.copyVector2sArray(): vector is undefined', i );\n\t\t\t\tvector = new Vector2();\n\n\t\t\t}\n\n\t\t\tarray[ offset ++ ] = vector.x;\n\t\t\tarray[ offset ++ ] = vector.y;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tcopyVector3sArray: function ( vectors ) {\n\n\t\tvar array = this.array, offset = 0;\n\n\t\tfor ( var i = 0, l = vectors.length; i < l; i ++ ) {\n\n\t\t\tvar vector = vectors[ i ];\n\n\t\t\tif ( vector === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.BufferAttribute.copyVector3sArray(): vector is undefined', i );\n\t\t\t\tvector = new Vector3();\n\n\t\t\t}\n\n\t\t\tarray[ offset ++ ] = vector.x;\n\t\t\tarray[ offset ++ ] = vector.y;\n\t\t\tarray[ offset ++ ] = vector.z;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tcopyVector4sArray: function ( vectors ) {\n\n\t\tvar array = this.array, offset = 0;\n\n\t\tfor ( var i = 0, l = vectors.length; i < l; i ++ ) {\n\n\t\t\tvar vector = vectors[ i ];\n\n\t\t\tif ( vector === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.BufferAttribute.copyVector4sArray(): vector is undefined', i );\n\t\t\t\tvector = new Vector4();\n\n\t\t\t}\n\n\t\t\tarray[ offset ++ ] = vector.x;\n\t\t\tarray[ offset ++ ] = vector.y;\n\t\t\tarray[ offset ++ ] = vector.z;\n\t\t\tarray[ offset ++ ] = vector.w;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tset: function ( value, offset ) {\n\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tthis.array.set( value, offset );\n\n\t\treturn this;\n\n\t},\n\n\tgetX: function ( index ) {\n\n\t\treturn this.array[ index * this.itemSize ];\n\n\t},\n\n\tsetX: function ( index, x ) {\n\n\t\tthis.array[ index * this.itemSize ] = x;\n\n\t\treturn this;\n\n\t},\n\n\tgetY: function ( index ) {\n\n\t\treturn this.array[ index * this.itemSize + 1 ];\n\n\t},\n\n\tsetY: function ( index, y ) {\n\n\t\tthis.array[ index * this.itemSize + 1 ] = y;\n\n\t\treturn this;\n\n\t},\n\n\tgetZ: function ( index ) {\n\n\t\treturn this.array[ index * this.itemSize + 2 ];\n\n\t},\n\n\tsetZ: function ( index, z ) {\n\n\t\tthis.array[ index * this.itemSize + 2 ] = z;\n\n\t\treturn this;\n\n\t},\n\n\tgetW: function ( index ) {\n\n\t\treturn this.array[ index * this.itemSize + 3 ];\n\n\t},\n\n\tsetW: function ( index, w ) {\n\n\t\tthis.array[ index * this.itemSize + 3 ] = w;\n\n\t\treturn this;\n\n\t},\n\n\tsetXY: function ( index, x, y ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tthis.array[ index + 0 ] = x;\n\t\tthis.array[ index + 1 ] = y;\n\n\t\treturn this;\n\n\t},\n\n\tsetXYZ: function ( index, x, y, z ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tthis.array[ index + 0 ] = x;\n\t\tthis.array[ index + 1 ] = y;\n\t\tthis.array[ index + 2 ] = z;\n\n\t\treturn this;\n\n\t},\n\n\tsetXYZW: function ( index, x, y, z, w ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tthis.array[ index + 0 ] = x;\n\t\tthis.array[ index + 1 ] = y;\n\t\tthis.array[ index + 2 ] = z;\n\t\tthis.array[ index + 3 ] = w;\n\n\t\treturn this;\n\n\t},\n\n\tonUpload: function ( callback ) {\n\n\t\tthis.onUploadCallback = callback;\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor( this.array, this.itemSize ).copy( this );\n\n\t}\n\n} );\n\n//\n\nfunction Int8BufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Int8Array( array ), itemSize, normalized );\n\n}\n\nInt8BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nInt8BufferAttribute.prototype.constructor = Int8BufferAttribute;\n\n\nfunction Uint8BufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Uint8Array( array ), itemSize, normalized );\n\n}\n\nUint8BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nUint8BufferAttribute.prototype.constructor = Uint8BufferAttribute;\n\n\nfunction Uint8ClampedBufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Uint8ClampedArray( array ), itemSize, normalized );\n\n}\n\nUint8ClampedBufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nUint8ClampedBufferAttribute.prototype.constructor = Uint8ClampedBufferAttribute;\n\n\nfunction Int16BufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Int16Array( array ), itemSize, normalized );\n\n}\n\nInt16BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nInt16BufferAttribute.prototype.constructor = Int16BufferAttribute;\n\n\nfunction Uint16BufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Uint16Array( array ), itemSize, normalized );\n\n}\n\nUint16BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nUint16BufferAttribute.prototype.constructor = Uint16BufferAttribute;\n\n\nfunction Int32BufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Int32Array( array ), itemSize, normalized );\n\n}\n\nInt32BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nInt32BufferAttribute.prototype.constructor = Int32BufferAttribute;\n\n\nfunction Uint32BufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Uint32Array( array ), itemSize, normalized );\n\n}\n\nUint32BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nUint32BufferAttribute.prototype.constructor = Uint32BufferAttribute;\n\n\nfunction Float32BufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Float32Array( array ), itemSize, normalized );\n\n}\n\nFloat32BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nFloat32BufferAttribute.prototype.constructor = Float32BufferAttribute;\n\n\nfunction Float64BufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Float64Array( array ), itemSize, normalized );\n\n}\n\nFloat64BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nFloat64BufferAttribute.prototype.constructor = Float64BufferAttribute;\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction DirectGeometry() {\n\n\tthis.vertices = [];\n\tthis.normals = [];\n\tthis.colors = [];\n\tthis.uvs = [];\n\tthis.uvs2 = [];\n\n\tthis.groups = [];\n\n\tthis.morphTargets = {};\n\n\tthis.skinWeights = [];\n\tthis.skinIndices = [];\n\n\t// this.lineDistances = [];\n\n\tthis.boundingBox = null;\n\tthis.boundingSphere = null;\n\n\t// update flags\n\n\tthis.verticesNeedUpdate = false;\n\tthis.normalsNeedUpdate = false;\n\tthis.colorsNeedUpdate = false;\n\tthis.uvsNeedUpdate = false;\n\tthis.groupsNeedUpdate = false;\n\n}\n\nObject.assign( DirectGeometry.prototype, {\n\n\tcomputeGroups: function ( geometry ) {\n\n\t\tvar group;\n\t\tvar groups = [];\n\t\tvar materialIndex = undefined;\n\n\t\tvar faces = geometry.faces;\n\n\t\tfor ( var i = 0; i < faces.length; i ++ ) {\n\n\t\t\tvar face = faces[ i ];\n\n\t\t\t// materials\n\n\t\t\tif ( face.materialIndex !== materialIndex ) {\n\n\t\t\t\tmaterialIndex = face.materialIndex;\n\n\t\t\t\tif ( group !== undefined ) {\n\n\t\t\t\t\tgroup.count = ( i * 3 ) - group.start;\n\t\t\t\t\tgroups.push( group );\n\n\t\t\t\t}\n\n\t\t\t\tgroup = {\n\t\t\t\t\tstart: i * 3,\n\t\t\t\t\tmaterialIndex: materialIndex\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( group !== undefined ) {\n\n\t\t\tgroup.count = ( i * 3 ) - group.start;\n\t\t\tgroups.push( group );\n\n\t\t}\n\n\t\tthis.groups = groups;\n\n\t},\n\n\tfromGeometry: function ( geometry ) {\n\n\t\tvar faces = geometry.faces;\n\t\tvar vertices = geometry.vertices;\n\t\tvar faceVertexUvs = geometry.faceVertexUvs;\n\n\t\tvar hasFaceVertexUv = faceVertexUvs[ 0 ] && faceVertexUvs[ 0 ].length > 0;\n\t\tvar hasFaceVertexUv2 = faceVertexUvs[ 1 ] && faceVertexUvs[ 1 ].length > 0;\n\n\t\t// morphs\n\n\t\tvar morphTargets = geometry.morphTargets;\n\t\tvar morphTargetsLength = morphTargets.length;\n\n\t\tvar morphTargetsPosition;\n\n\t\tif ( morphTargetsLength > 0 ) {\n\n\t\t\tmorphTargetsPosition = [];\n\n\t\t\tfor ( var i = 0; i < morphTargetsLength; i ++ ) {\n\n\t\t\t\tmorphTargetsPosition[ i ] = [];\n\n\t\t\t}\n\n\t\t\tthis.morphTargets.position = morphTargetsPosition;\n\n\t\t}\n\n\t\tvar morphNormals = geometry.morphNormals;\n\t\tvar morphNormalsLength = morphNormals.length;\n\n\t\tvar morphTargetsNormal;\n\n\t\tif ( morphNormalsLength > 0 ) {\n\n\t\t\tmorphTargetsNormal = [];\n\n\t\t\tfor ( var i = 0; i < morphNormalsLength; i ++ ) {\n\n\t\t\t\tmorphTargetsNormal[ i ] = [];\n\n\t\t\t}\n\n\t\t\tthis.morphTargets.normal = morphTargetsNormal;\n\n\t\t}\n\n\t\t// skins\n\n\t\tvar skinIndices = geometry.skinIndices;\n\t\tvar skinWeights = geometry.skinWeights;\n\n\t\tvar hasSkinIndices = skinIndices.length === vertices.length;\n\t\tvar hasSkinWeights = skinWeights.length === vertices.length;\n\n\t\t//\n\n\t\tfor ( var i = 0; i < faces.length; i ++ ) {\n\n\t\t\tvar face = faces[ i ];\n\n\t\t\tthis.vertices.push( vertices[ face.a ], vertices[ face.b ], vertices[ face.c ] );\n\n\t\t\tvar vertexNormals = face.vertexNormals;\n\n\t\t\tif ( vertexNormals.length === 3 ) {\n\n\t\t\t\tthis.normals.push( vertexNormals[ 0 ], vertexNormals[ 1 ], vertexNormals[ 2 ] );\n\n\t\t\t} else {\n\n\t\t\t\tvar normal = face.normal;\n\n\t\t\t\tthis.normals.push( normal, normal, normal );\n\n\t\t\t}\n\n\t\t\tvar vertexColors = face.vertexColors;\n\n\t\t\tif ( vertexColors.length === 3 ) {\n\n\t\t\t\tthis.colors.push( vertexColors[ 0 ], vertexColors[ 1 ], vertexColors[ 2 ] );\n\n\t\t\t} else {\n\n\t\t\t\tvar color = face.color;\n\n\t\t\t\tthis.colors.push( color, color, color );\n\n\t\t\t}\n\n\t\t\tif ( hasFaceVertexUv === true ) {\n\n\t\t\t\tvar vertexUvs = faceVertexUvs[ 0 ][ i ];\n\n\t\t\t\tif ( vertexUvs !== undefined ) {\n\n\t\t\t\t\tthis.uvs.push( vertexUvs[ 0 ], vertexUvs[ 1 ], vertexUvs[ 2 ] );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.DirectGeometry.fromGeometry(): Undefined vertexUv ', i );\n\n\t\t\t\t\tthis.uvs.push( new Vector2(), new Vector2(), new Vector2() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( hasFaceVertexUv2 === true ) {\n\n\t\t\t\tvar vertexUvs = faceVertexUvs[ 1 ][ i ];\n\n\t\t\t\tif ( vertexUvs !== undefined ) {\n\n\t\t\t\t\tthis.uvs2.push( vertexUvs[ 0 ], vertexUvs[ 1 ], vertexUvs[ 2 ] );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.DirectGeometry.fromGeometry(): Undefined vertexUv2 ', i );\n\n\t\t\t\t\tthis.uvs2.push( new Vector2(), new Vector2(), new Vector2() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// morphs\n\n\t\t\tfor ( var j = 0; j < morphTargetsLength; j ++ ) {\n\n\t\t\t\tvar morphTarget = morphTargets[ j ].vertices;\n\n\t\t\t\tmorphTargetsPosition[ j ].push( morphTarget[ face.a ], morphTarget[ face.b ], morphTarget[ face.c ] );\n\n\t\t\t}\n\n\t\t\tfor ( var j = 0; j < morphNormalsLength; j ++ ) {\n\n\t\t\t\tvar morphNormal = morphNormals[ j ].vertexNormals[ i ];\n\n\t\t\t\tmorphTargetsNormal[ j ].push( morphNormal.a, morphNormal.b, morphNormal.c );\n\n\t\t\t}\n\n\t\t\t// skins\n\n\t\t\tif ( hasSkinIndices ) {\n\n\t\t\t\tthis.skinIndices.push( skinIndices[ face.a ], skinIndices[ face.b ], skinIndices[ face.c ] );\n\n\t\t\t}\n\n\t\t\tif ( hasSkinWeights ) {\n\n\t\t\t\tthis.skinWeights.push( skinWeights[ face.a ], skinWeights[ face.b ], skinWeights[ face.c ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.computeGroups( geometry );\n\n\t\tthis.verticesNeedUpdate = geometry.verticesNeedUpdate;\n\t\tthis.normalsNeedUpdate = geometry.normalsNeedUpdate;\n\t\tthis.colorsNeedUpdate = geometry.colorsNeedUpdate;\n\t\tthis.uvsNeedUpdate = geometry.uvsNeedUpdate;\n\t\tthis.groupsNeedUpdate = geometry.groupsNeedUpdate;\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction arrayMax( array ) {\n\n\tif ( array.length === 0 ) return - Infinity;\n\n\tvar max = array[ 0 ];\n\n\tfor ( var i = 1, l = array.length; i < l; ++ i ) {\n\n\t\tif ( array[ i ] > max ) max = array[ i ];\n\n\t}\n\n\treturn max;\n\n}\n\n/**\n * @author alteredq / http://alteredqualia.com/\n * @author mrdoob / http://mrdoob.com/\n */\n\nvar bufferGeometryId = 1; // BufferGeometry uses odd numbers as Id\n\nfunction BufferGeometry() {\n\n\tObject.defineProperty( this, 'id', { value: bufferGeometryId += 2 } );\n\n\tthis.uuid = _Math.generateUUID();\n\n\tthis.name = '';\n\tthis.type = 'BufferGeometry';\n\n\tthis.index = null;\n\tthis.attributes = {};\n\n\tthis.morphAttributes = {};\n\n\tthis.groups = [];\n\n\tthis.boundingBox = null;\n\tthis.boundingSphere = null;\n\n\tthis.drawRange = { start: 0, count: Infinity };\n\n}\n\nBufferGeometry.prototype = Object.assign( Object.create( EventDispatcher.prototype ), {\n\n\tconstructor: BufferGeometry,\n\n\tisBufferGeometry: true,\n\n\tgetIndex: function () {\n\n\t\treturn this.index;\n\n\t},\n\n\tsetIndex: function ( index ) {\n\n\t\tif ( Array.isArray( index ) ) {\n\n\t\t\tthis.index = new ( arrayMax( index ) > 65535 ? Uint32BufferAttribute : Uint16BufferAttribute )( index, 1 );\n\n\t\t} else {\n\n\t\t\tthis.index = index;\n\n\t\t}\n\n\t},\n\n\taddAttribute: function ( name, attribute ) {\n\n\t\tif ( ! ( attribute && attribute.isBufferAttribute ) && ! ( attribute && attribute.isInterleavedBufferAttribute ) ) {\n\n\t\t\tconsole.warn( 'THREE.BufferGeometry: .addAttribute() now expects ( name, attribute ).' );\n\n\t\t\tthis.addAttribute( name, new BufferAttribute( arguments[ 1 ], arguments[ 2 ] ) );\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( name === 'index' ) {\n\n\t\t\tconsole.warn( 'THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute.' );\n\t\t\tthis.setIndex( attribute );\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis.attributes[ name ] = attribute;\n\n\t\treturn this;\n\n\t},\n\n\tgetAttribute: function ( name ) {\n\n\t\treturn this.attributes[ name ];\n\n\t},\n\n\tremoveAttribute: function ( name ) {\n\n\t\tdelete this.attributes[ name ];\n\n\t\treturn this;\n\n\t},\n\n\taddGroup: function ( start, count, materialIndex ) {\n\n\t\tthis.groups.push( {\n\n\t\t\tstart: start,\n\t\t\tcount: count,\n\t\t\tmaterialIndex: materialIndex !== undefined ? materialIndex : 0\n\n\t\t} );\n\n\t},\n\n\tclearGroups: function () {\n\n\t\tthis.groups = [];\n\n\t},\n\n\tsetDrawRange: function ( start, count ) {\n\n\t\tthis.drawRange.start = start;\n\t\tthis.drawRange.count = count;\n\n\t},\n\n\tapplyMatrix: function ( matrix ) {\n\n\t\tvar position = this.attributes.position;\n\n\t\tif ( position !== undefined ) {\n\n\t\t\tmatrix.applyToBufferAttribute( position );\n\t\t\tposition.needsUpdate = true;\n\n\t\t}\n\n\t\tvar normal = this.attributes.normal;\n\n\t\tif ( normal !== undefined ) {\n\n\t\t\tvar normalMatrix = new Matrix3().getNormalMatrix( matrix );\n\n\t\t\tnormalMatrix.applyToBufferAttribute( normal );\n\t\t\tnormal.needsUpdate = true;\n\n\t\t}\n\n\t\tif ( this.boundingBox !== null ) {\n\n\t\t\tthis.computeBoundingBox();\n\n\t\t}\n\n\t\tif ( this.boundingSphere !== null ) {\n\n\t\t\tthis.computeBoundingSphere();\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\trotateX: function () {\n\n\t\t// rotate geometry around world x-axis\n\n\t\tvar m1 = new Matrix4();\n\n\t\treturn function rotateX( angle ) {\n\n\t\t\tm1.makeRotationX( angle );\n\n\t\t\tthis.applyMatrix( m1 );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\trotateY: function () {\n\n\t\t// rotate geometry around world y-axis\n\n\t\tvar m1 = new Matrix4();\n\n\t\treturn function rotateY( angle ) {\n\n\t\t\tm1.makeRotationY( angle );\n\n\t\t\tthis.applyMatrix( m1 );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\trotateZ: function () {\n\n\t\t// rotate geometry around world z-axis\n\n\t\tvar m1 = new Matrix4();\n\n\t\treturn function rotateZ( angle ) {\n\n\t\t\tm1.makeRotationZ( angle );\n\n\t\t\tthis.applyMatrix( m1 );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\ttranslate: function () {\n\n\t\t// translate geometry\n\n\t\tvar m1 = new Matrix4();\n\n\t\treturn function translate( x, y, z ) {\n\n\t\t\tm1.makeTranslation( x, y, z );\n\n\t\t\tthis.applyMatrix( m1 );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tscale: function () {\n\n\t\t// scale geometry\n\n\t\tvar m1 = new Matrix4();\n\n\t\treturn function scale( x, y, z ) {\n\n\t\t\tm1.makeScale( x, y, z );\n\n\t\t\tthis.applyMatrix( m1 );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tlookAt: function () {\n\n\t\tvar obj = new Object3D();\n\n\t\treturn function lookAt( vector ) {\n\n\t\t\tobj.lookAt( vector );\n\n\t\t\tobj.updateMatrix();\n\n\t\t\tthis.applyMatrix( obj.matrix );\n\n\t\t};\n\n\t}(),\n\n\tcenter: function () {\n\n\t\tvar offset = new Vector3();\n\n\t\treturn function center() {\n\n\t\t\tthis.computeBoundingBox();\n\n\t\t\tthis.boundingBox.getCenter( offset ).negate();\n\n\t\t\tthis.translate( offset.x, offset.y, offset.z );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tsetFromObject: function ( object ) {\n\n\t\t// console.log( 'THREE.BufferGeometry.setFromObject(). Converting', object, this );\n\n\t\tvar geometry = object.geometry;\n\n\t\tif ( object.isPoints || object.isLine ) {\n\n\t\t\tvar positions = new Float32BufferAttribute( geometry.vertices.length * 3, 3 );\n\t\t\tvar colors = new Float32BufferAttribute( geometry.colors.length * 3, 3 );\n\n\t\t\tthis.addAttribute( 'position', positions.copyVector3sArray( geometry.vertices ) );\n\t\t\tthis.addAttribute( 'color', colors.copyColorsArray( geometry.colors ) );\n\n\t\t\tif ( geometry.lineDistances && geometry.lineDistances.length === geometry.vertices.length ) {\n\n\t\t\t\tvar lineDistances = new Float32BufferAttribute( geometry.lineDistances.length, 1 );\n\n\t\t\t\tthis.addAttribute( 'lineDistance', lineDistances.copyArray( geometry.lineDistances ) );\n\n\t\t\t}\n\n\t\t\tif ( geometry.boundingSphere !== null ) {\n\n\t\t\t\tthis.boundingSphere = geometry.boundingSphere.clone();\n\n\t\t\t}\n\n\t\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\t\tthis.boundingBox = geometry.boundingBox.clone();\n\n\t\t\t}\n\n\t\t} else if ( object.isMesh ) {\n\n\t\t\tif ( geometry && geometry.isGeometry ) {\n\n\t\t\t\tthis.fromGeometry( geometry );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tsetFromPoints: function ( points ) {\n\n\t\tvar position = [];\n\n\t\tfor ( var i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\tvar point = points[ i ];\n\t\t\tposition.push( point.x, point.y, point.z || 0 );\n\n\t\t}\n\n\t\tthis.addAttribute( 'position', new Float32BufferAttribute( position, 3 ) );\n\n\t\treturn this;\n\n\t},\n\n\tupdateFromObject: function ( object ) {\n\n\t\tvar geometry = object.geometry;\n\n\t\tif ( object.isMesh ) {\n\n\t\t\tvar direct = geometry.__directGeometry;\n\n\t\t\tif ( geometry.elementsNeedUpdate === true ) {\n\n\t\t\t\tdirect = undefined;\n\t\t\t\tgeometry.elementsNeedUpdate = false;\n\n\t\t\t}\n\n\t\t\tif ( direct === undefined ) {\n\n\t\t\t\treturn this.fromGeometry( geometry );\n\n\t\t\t}\n\n\t\t\tdirect.verticesNeedUpdate = geometry.verticesNeedUpdate;\n\t\t\tdirect.normalsNeedUpdate = geometry.normalsNeedUpdate;\n\t\t\tdirect.colorsNeedUpdate = geometry.colorsNeedUpdate;\n\t\t\tdirect.uvsNeedUpdate = geometry.uvsNeedUpdate;\n\t\t\tdirect.groupsNeedUpdate = geometry.groupsNeedUpdate;\n\n\t\t\tgeometry.verticesNeedUpdate = false;\n\t\t\tgeometry.normalsNeedUpdate = false;\n\t\t\tgeometry.colorsNeedUpdate = false;\n\t\t\tgeometry.uvsNeedUpdate = false;\n\t\t\tgeometry.groupsNeedUpdate = false;\n\n\t\t\tgeometry = direct;\n\n\t\t}\n\n\t\tvar attribute;\n\n\t\tif ( geometry.verticesNeedUpdate === true ) {\n\n\t\t\tattribute = this.attributes.position;\n\n\t\t\tif ( attribute !== undefined ) {\n\n\t\t\t\tattribute.copyVector3sArray( geometry.vertices );\n\t\t\t\tattribute.needsUpdate = true;\n\n\t\t\t}\n\n\t\t\tgeometry.verticesNeedUpdate = false;\n\n\t\t}\n\n\t\tif ( geometry.normalsNeedUpdate === true ) {\n\n\t\t\tattribute = this.attributes.normal;\n\n\t\t\tif ( attribute !== undefined ) {\n\n\t\t\t\tattribute.copyVector3sArray( geometry.normals );\n\t\t\t\tattribute.needsUpdate = true;\n\n\t\t\t}\n\n\t\t\tgeometry.normalsNeedUpdate = false;\n\n\t\t}\n\n\t\tif ( geometry.colorsNeedUpdate === true ) {\n\n\t\t\tattribute = this.attributes.color;\n\n\t\t\tif ( attribute !== undefined ) {\n\n\t\t\t\tattribute.copyColorsArray( geometry.colors );\n\t\t\t\tattribute.needsUpdate = true;\n\n\t\t\t}\n\n\t\t\tgeometry.colorsNeedUpdate = false;\n\n\t\t}\n\n\t\tif ( geometry.uvsNeedUpdate ) {\n\n\t\t\tattribute = this.attributes.uv;\n\n\t\t\tif ( attribute !== undefined ) {\n\n\t\t\t\tattribute.copyVector2sArray( geometry.uvs );\n\t\t\t\tattribute.needsUpdate = true;\n\n\t\t\t}\n\n\t\t\tgeometry.uvsNeedUpdate = false;\n\n\t\t}\n\n\t\tif ( geometry.lineDistancesNeedUpdate ) {\n\n\t\t\tattribute = this.attributes.lineDistance;\n\n\t\t\tif ( attribute !== undefined ) {\n\n\t\t\t\tattribute.copyArray( geometry.lineDistances );\n\t\t\t\tattribute.needsUpdate = true;\n\n\t\t\t}\n\n\t\t\tgeometry.lineDistancesNeedUpdate = false;\n\n\t\t}\n\n\t\tif ( geometry.groupsNeedUpdate ) {\n\n\t\t\tgeometry.computeGroups( object.geometry );\n\t\t\tthis.groups = geometry.groups;\n\n\t\t\tgeometry.groupsNeedUpdate = false;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tfromGeometry: function ( geometry ) {\n\n\t\tgeometry.__directGeometry = new DirectGeometry().fromGeometry( geometry );\n\n\t\treturn this.fromDirectGeometry( geometry.__directGeometry );\n\n\t},\n\n\tfromDirectGeometry: function ( geometry ) {\n\n\t\tvar positions = new Float32Array( geometry.vertices.length * 3 );\n\t\tthis.addAttribute( 'position', new BufferAttribute( positions, 3 ).copyVector3sArray( geometry.vertices ) );\n\n\t\tif ( geometry.normals.length > 0 ) {\n\n\t\t\tvar normals = new Float32Array( geometry.normals.length * 3 );\n\t\t\tthis.addAttribute( 'normal', new BufferAttribute( normals, 3 ).copyVector3sArray( geometry.normals ) );\n\n\t\t}\n\n\t\tif ( geometry.colors.length > 0 ) {\n\n\t\t\tvar colors = new Float32Array( geometry.colors.length * 3 );\n\t\t\tthis.addAttribute( 'color', new BufferAttribute( colors, 3 ).copyColorsArray( geometry.colors ) );\n\n\t\t}\n\n\t\tif ( geometry.uvs.length > 0 ) {\n\n\t\t\tvar uvs = new Float32Array( geometry.uvs.length * 2 );\n\t\t\tthis.addAttribute( 'uv', new BufferAttribute( uvs, 2 ).copyVector2sArray( geometry.uvs ) );\n\n\t\t}\n\n\t\tif ( geometry.uvs2.length > 0 ) {\n\n\t\t\tvar uvs2 = new Float32Array( geometry.uvs2.length * 2 );\n\t\t\tthis.addAttribute( 'uv2', new BufferAttribute( uvs2, 2 ).copyVector2sArray( geometry.uvs2 ) );\n\n\t\t}\n\n\t\t// groups\n\n\t\tthis.groups = geometry.groups;\n\n\t\t// morphs\n\n\t\tfor ( var name in geometry.morphTargets ) {\n\n\t\t\tvar array = [];\n\t\t\tvar morphTargets = geometry.morphTargets[ name ];\n\n\t\t\tfor ( var i = 0, l = morphTargets.length; i < l; i ++ ) {\n\n\t\t\t\tvar morphTarget = morphTargets[ i ];\n\n\t\t\t\tvar attribute = new Float32BufferAttribute( morphTarget.length * 3, 3 );\n\n\t\t\t\tarray.push( attribute.copyVector3sArray( morphTarget ) );\n\n\t\t\t}\n\n\t\t\tthis.morphAttributes[ name ] = array;\n\n\t\t}\n\n\t\t// skinning\n\n\t\tif ( geometry.skinIndices.length > 0 ) {\n\n\t\t\tvar skinIndices = new Float32BufferAttribute( geometry.skinIndices.length * 4, 4 );\n\t\t\tthis.addAttribute( 'skinIndex', skinIndices.copyVector4sArray( geometry.skinIndices ) );\n\n\t\t}\n\n\t\tif ( geometry.skinWeights.length > 0 ) {\n\n\t\t\tvar skinWeights = new Float32BufferAttribute( geometry.skinWeights.length * 4, 4 );\n\t\t\tthis.addAttribute( 'skinWeight', skinWeights.copyVector4sArray( geometry.skinWeights ) );\n\n\t\t}\n\n\t\t//\n\n\t\tif ( geometry.boundingSphere !== null ) {\n\n\t\t\tthis.boundingSphere = geometry.boundingSphere.clone();\n\n\t\t}\n\n\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\tthis.boundingBox = geometry.boundingBox.clone();\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tcomputeBoundingBox: function () {\n\n\t\tif ( this.boundingBox === null ) {\n\n\t\t\tthis.boundingBox = new Box3();\n\n\t\t}\n\n\t\tvar position = this.attributes.position;\n\n\t\tif ( position !== undefined ) {\n\n\t\t\tthis.boundingBox.setFromBufferAttribute( position );\n\n\t\t} else {\n\n\t\t\tthis.boundingBox.makeEmpty();\n\n\t\t}\n\n\t\tif ( isNaN( this.boundingBox.min.x ) || isNaN( this.boundingBox.min.y ) || isNaN( this.boundingBox.min.z ) ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingBox: Computed min/max have NaN values. The \"position\" attribute is likely to have NaN values.', this );\n\n\t\t}\n\n\t},\n\n\tcomputeBoundingSphere: function () {\n\n\t\tvar box = new Box3();\n\t\tvar vector = new Vector3();\n\n\t\treturn function computeBoundingSphere() {\n\n\t\t\tif ( this.boundingSphere === null ) {\n\n\t\t\t\tthis.boundingSphere = new Sphere();\n\n\t\t\t}\n\n\t\t\tvar position = this.attributes.position;\n\n\t\t\tif ( position ) {\n\n\t\t\t\tvar center = this.boundingSphere.center;\n\n\t\t\t\tbox.setFromBufferAttribute( position );\n\t\t\t\tbox.getCenter( center );\n\n\t\t\t\t// hoping to find a boundingSphere with a radius smaller than the\n\t\t\t\t// boundingSphere of the boundingBox: sqrt(3) smaller in the best case\n\n\t\t\t\tvar maxRadiusSq = 0;\n\n\t\t\t\tfor ( var i = 0, il = position.count; i < il; i ++ ) {\n\n\t\t\t\t\tvector.x = position.getX( i );\n\t\t\t\t\tvector.y = position.getY( i );\n\t\t\t\t\tvector.z = position.getZ( i );\n\t\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( vector ) );\n\n\t\t\t\t}\n\n\t\t\t\tthis.boundingSphere.radius = Math.sqrt( maxRadiusSq );\n\n\t\t\t\tif ( isNaN( this.boundingSphere.radius ) ) {\n\n\t\t\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The \"position\" attribute is likely to have NaN values.', this );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t}(),\n\n\tcomputeFaceNormals: function () {\n\n\t\t// backwards compatibility\n\n\t},\n\n\tcomputeVertexNormals: function () {\n\n\t\tvar index = this.index;\n\t\tvar attributes = this.attributes;\n\t\tvar groups = this.groups;\n\n\t\tif ( attributes.position ) {\n\n\t\t\tvar positions = attributes.position.array;\n\n\t\t\tif ( attributes.normal === undefined ) {\n\n\t\t\t\tthis.addAttribute( 'normal', new BufferAttribute( new Float32Array( positions.length ), 3 ) );\n\n\t\t\t} else {\n\n\t\t\t\t// reset existing normals to zero\n\n\t\t\t\tvar array = attributes.normal.array;\n\n\t\t\t\tfor ( var i = 0, il = array.length; i < il; i ++ ) {\n\n\t\t\t\t\tarray[ i ] = 0;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tvar normals = attributes.normal.array;\n\n\t\t\tvar vA, vB, vC;\n\t\t\tvar pA = new Vector3(), pB = new Vector3(), pC = new Vector3();\n\t\t\tvar cb = new Vector3(), ab = new Vector3();\n\n\t\t\t// indexed elements\n\n\t\t\tif ( index ) {\n\n\t\t\t\tvar indices = index.array;\n\n\t\t\t\tif ( groups.length === 0 ) {\n\n\t\t\t\t\tthis.addGroup( 0, indices.length );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( var j = 0, jl = groups.length; j < jl; ++ j ) {\n\n\t\t\t\t\tvar group = groups[ j ];\n\n\t\t\t\t\tvar start = group.start;\n\t\t\t\t\tvar count = group.count;\n\n\t\t\t\t\tfor ( var i = start, il = start + count; i < il; i += 3 ) {\n\n\t\t\t\t\t\tvA = indices[ i + 0 ] * 3;\n\t\t\t\t\t\tvB = indices[ i + 1 ] * 3;\n\t\t\t\t\t\tvC = indices[ i + 2 ] * 3;\n\n\t\t\t\t\t\tpA.fromArray( positions, vA );\n\t\t\t\t\t\tpB.fromArray( positions, vB );\n\t\t\t\t\t\tpC.fromArray( positions, vC );\n\n\t\t\t\t\t\tcb.subVectors( pC, pB );\n\t\t\t\t\t\tab.subVectors( pA, pB );\n\t\t\t\t\t\tcb.cross( ab );\n\n\t\t\t\t\t\tnormals[ vA ] += cb.x;\n\t\t\t\t\t\tnormals[ vA + 1 ] += cb.y;\n\t\t\t\t\t\tnormals[ vA + 2 ] += cb.z;\n\n\t\t\t\t\t\tnormals[ vB ] += cb.x;\n\t\t\t\t\t\tnormals[ vB + 1 ] += cb.y;\n\t\t\t\t\t\tnormals[ vB + 2 ] += cb.z;\n\n\t\t\t\t\t\tnormals[ vC ] += cb.x;\n\t\t\t\t\t\tnormals[ vC + 1 ] += cb.y;\n\t\t\t\t\t\tnormals[ vC + 2 ] += cb.z;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// non-indexed elements (unconnected triangle soup)\n\n\t\t\t\tfor ( var i = 0, il = positions.length; i < il; i += 9 ) {\n\n\t\t\t\t\tpA.fromArray( positions, i );\n\t\t\t\t\tpB.fromArray( positions, i + 3 );\n\t\t\t\t\tpC.fromArray( positions, i + 6 );\n\n\t\t\t\t\tcb.subVectors( pC, pB );\n\t\t\t\t\tab.subVectors( pA, pB );\n\t\t\t\t\tcb.cross( ab );\n\n\t\t\t\t\tnormals[ i ] = cb.x;\n\t\t\t\t\tnormals[ i + 1 ] = cb.y;\n\t\t\t\t\tnormals[ i + 2 ] = cb.z;\n\n\t\t\t\t\tnormals[ i + 3 ] = cb.x;\n\t\t\t\t\tnormals[ i + 4 ] = cb.y;\n\t\t\t\t\tnormals[ i + 5 ] = cb.z;\n\n\t\t\t\t\tnormals[ i + 6 ] = cb.x;\n\t\t\t\t\tnormals[ i + 7 ] = cb.y;\n\t\t\t\t\tnormals[ i + 8 ] = cb.z;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.normalizeNormals();\n\n\t\t\tattributes.normal.needsUpdate = true;\n\n\t\t}\n\n\t},\n\n\tmerge: function ( geometry, offset ) {\n\n\t\tif ( ! ( geometry && geometry.isBufferGeometry ) ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry.merge(): geometry not an instance of THREE.BufferGeometry.', geometry );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( offset === undefined ) {\n\n\t\t\toffset = 0;\n\n\t\t\tconsole.warn(\n\t\t\t\t'THREE.BufferGeometry.merge(): Overwriting original geometry, starting at offset=0. '\n\t\t\t\t+ 'Use BufferGeometryUtils.mergeBufferGeometries() for lossless merge.'\n\t\t\t);\n\n\t\t}\n\n\t\tvar attributes = this.attributes;\n\n\t\tfor ( var key in attributes ) {\n\n\t\t\tif ( geometry.attributes[ key ] === undefined ) continue;\n\n\t\t\tvar attribute1 = attributes[ key ];\n\t\t\tvar attributeArray1 = attribute1.array;\n\n\t\t\tvar attribute2 = geometry.attributes[ key ];\n\t\t\tvar attributeArray2 = attribute2.array;\n\n\t\t\tvar attributeSize = attribute2.itemSize;\n\n\t\t\tfor ( var i = 0, j = attributeSize * offset; i < attributeArray2.length; i ++, j ++ ) {\n\n\t\t\t\tattributeArray1[ j ] = attributeArray2[ i ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tnormalizeNormals: function () {\n\n\t\tvar vector = new Vector3();\n\n\t\treturn function normalizeNormals() {\n\n\t\t\tvar normals = this.attributes.normal;\n\n\t\t\tfor ( var i = 0, il = normals.count; i < il; i ++ ) {\n\n\t\t\t\tvector.x = normals.getX( i );\n\t\t\t\tvector.y = normals.getY( i );\n\t\t\t\tvector.z = normals.getZ( i );\n\n\t\t\t\tvector.normalize();\n\n\t\t\t\tnormals.setXYZ( i, vector.x, vector.y, vector.z );\n\n\t\t\t}\n\n\t\t};\n\n\t}(),\n\n\ttoNonIndexed: function () {\n\n\t\tif ( this.index === null ) {\n\n\t\t\tconsole.warn( 'THREE.BufferGeometry.toNonIndexed(): Geometry is already non-indexed.' );\n\t\t\treturn this;\n\n\t\t}\n\n\t\tvar geometry2 = new BufferGeometry();\n\n\t\tvar indices = this.index.array;\n\t\tvar attributes = this.attributes;\n\n\t\tfor ( var name in attributes ) {\n\n\t\t\tvar attribute = attributes[ name ];\n\n\t\t\tvar array = attribute.array;\n\t\t\tvar itemSize = attribute.itemSize;\n\n\t\t\tvar array2 = new array.constructor( indices.length * itemSize );\n\n\t\t\tvar index = 0, index2 = 0;\n\n\t\t\tfor ( var i = 0, l = indices.length; i < l; i ++ ) {\n\n\t\t\t\tindex = indices[ i ] * itemSize;\n\n\t\t\t\tfor ( var j = 0; j < itemSize; j ++ ) {\n\n\t\t\t\t\tarray2[ index2 ++ ] = array[ index ++ ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tgeometry2.addAttribute( name, new BufferAttribute( array2, itemSize ) );\n\n\t\t}\n\n\t\tvar groups = this.groups;\n\n\t\tfor ( var i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\tvar group = groups[ i ];\n\t\t\tgeometry2.addGroup( group.start, group.count, group.materialIndex );\n\n\t\t}\n\n\t\treturn geometry2;\n\n\t},\n\n\ttoJSON: function () {\n\n\t\tvar data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'BufferGeometry',\n\t\t\t\tgenerator: 'BufferGeometry.toJSON'\n\t\t\t}\n\t\t};\n\n\t\t// standard BufferGeometry serialization\n\n\t\tdata.uuid = this.uuid;\n\t\tdata.type = this.type;\n\t\tif ( this.name !== '' ) data.name = this.name;\n\n\t\tif ( this.parameters !== undefined ) {\n\n\t\t\tvar parameters = this.parameters;\n\n\t\t\tfor ( var key in parameters ) {\n\n\t\t\t\tif ( parameters[ key ] !== undefined ) data[ key ] = parameters[ key ];\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tdata.data = { attributes: {} };\n\n\t\tvar index = this.index;\n\n\t\tif ( index !== null ) {\n\n\t\t\tvar array = Array.prototype.slice.call( index.array );\n\n\t\t\tdata.data.index = {\n\t\t\t\ttype: index.array.constructor.name,\n\t\t\t\tarray: array\n\t\t\t};\n\n\t\t}\n\n\t\tvar attributes = this.attributes;\n\n\t\tfor ( var key in attributes ) {\n\n\t\t\tvar attribute = attributes[ key ];\n\n\t\t\tvar array = Array.prototype.slice.call( attribute.array );\n\n\t\t\tdata.data.attributes[ key ] = {\n\t\t\t\titemSize: attribute.itemSize,\n\t\t\t\ttype: attribute.array.constructor.name,\n\t\t\t\tarray: array,\n\t\t\t\tnormalized: attribute.normalized\n\t\t\t};\n\n\t\t}\n\n\t\tvar groups = this.groups;\n\n\t\tif ( groups.length > 0 ) {\n\n\t\t\tdata.data.groups = JSON.parse( JSON.stringify( groups ) );\n\n\t\t}\n\n\t\tvar boundingSphere = this.boundingSphere;\n\n\t\tif ( boundingSphere !== null ) {\n\n\t\t\tdata.data.boundingSphere = {\n\t\t\t\tcenter: boundingSphere.center.toArray(),\n\t\t\t\tradius: boundingSphere.radius\n\t\t\t};\n\n\t\t}\n\n\t\treturn data;\n\n\t},\n\n\tclone: function () {\n\n\t\t/*\n\t\t // Handle primitives\n\n\t\t var parameters = this.parameters;\n\n\t\t if ( parameters !== undefined ) {\n\n\t\t var values = [];\n\n\t\t for ( var key in parameters ) {\n\n\t\t values.push( parameters[ key ] );\n\n\t\t }\n\n\t\t var geometry = Object.create( this.constructor.prototype );\n\t\t this.constructor.apply( geometry, values );\n\t\t return geometry;\n\n\t\t }\n\n\t\t return new this.constructor().copy( this );\n\t\t */\n\n\t\treturn new BufferGeometry().copy( this );\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tvar name, i, l;\n\n\t\t// reset\n\n\t\tthis.index = null;\n\t\tthis.attributes = {};\n\t\tthis.morphAttributes = {};\n\t\tthis.groups = [];\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\n\t\t// name\n\n\t\tthis.name = source.name;\n\n\t\t// index\n\n\t\tvar index = source.index;\n\n\t\tif ( index !== null ) {\n\n\t\t\tthis.setIndex( index.clone() );\n\n\t\t}\n\n\t\t// attributes\n\n\t\tvar attributes = source.attributes;\n\n\t\tfor ( name in attributes ) {\n\n\t\t\tvar attribute = attributes[ name ];\n\t\t\tthis.addAttribute( name, attribute.clone() );\n\n\t\t}\n\n\t\t// morph attributes\n\n\t\tvar morphAttributes = source.morphAttributes;\n\n\t\tfor ( name in morphAttributes ) {\n\n\t\t\tvar array = [];\n\t\t\tvar morphAttribute = morphAttributes[ name ]; // morphAttribute: array of Float32BufferAttributes\n\n\t\t\tfor ( i = 0, l = morphAttribute.length; i < l; i ++ ) {\n\n\t\t\t\tarray.push( morphAttribute[ i ].clone() );\n\n\t\t\t}\n\n\t\t\tthis.morphAttributes[ name ] = array;\n\n\t\t}\n\n\t\t// groups\n\n\t\tvar groups = source.groups;\n\n\t\tfor ( i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\tvar group = groups[ i ];\n\t\t\tthis.addGroup( group.start, group.count, group.materialIndex );\n\n\t\t}\n\n\t\t// bounding box\n\n\t\tvar boundingBox = source.boundingBox;\n\n\t\tif ( boundingBox !== null ) {\n\n\t\t\tthis.boundingBox = boundingBox.clone();\n\n\t\t}\n\n\t\t// bounding sphere\n\n\t\tvar boundingSphere = source.boundingSphere;\n\n\t\tif ( boundingSphere !== null ) {\n\n\t\t\tthis.boundingSphere = boundingSphere.clone();\n\n\t\t}\n\n\t\t// draw range\n\n\t\tthis.drawRange.start = source.drawRange.start;\n\t\tthis.drawRange.count = source.drawRange.count;\n\n\t\treturn this;\n\n\t},\n\n\tdispose: function () {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author Mugen87 / https://github.com/Mugen87\n */\n\n// BoxGeometry\n\nfunction BoxGeometry( width, height, depth, widthSegments, heightSegments, depthSegments ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'BoxGeometry';\n\n\tthis.parameters = {\n\t\twidth: width,\n\t\theight: height,\n\t\tdepth: depth,\n\t\twidthSegments: widthSegments,\n\t\theightSegments: heightSegments,\n\t\tdepthSegments: depthSegments\n\t};\n\n\tthis.fromBufferGeometry( new BoxBufferGeometry( width, height, depth, widthSegments, heightSegments, depthSegments ) );\n\tthis.mergeVertices();\n\n}\n\nBoxGeometry.prototype = Object.create( Geometry.prototype );\nBoxGeometry.prototype.constructor = BoxGeometry;\n\n// BoxBufferGeometry\n\nfunction BoxBufferGeometry( width, height, depth, widthSegments, heightSegments, depthSegments ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'BoxBufferGeometry';\n\n\tthis.parameters = {\n\t\twidth: width,\n\t\theight: height,\n\t\tdepth: depth,\n\t\twidthSegments: widthSegments,\n\t\theightSegments: heightSegments,\n\t\tdepthSegments: depthSegments\n\t};\n\n\tvar scope = this;\n\n\twidth = width || 1;\n\theight = height || 1;\n\tdepth = depth || 1;\n\n\t// segments\n\n\twidthSegments = Math.floor( widthSegments ) || 1;\n\theightSegments = Math.floor( heightSegments ) || 1;\n\tdepthSegments = Math.floor( depthSegments ) || 1;\n\n\t// buffers\n\n\tvar indices = [];\n\tvar vertices = [];\n\tvar normals = [];\n\tvar uvs = [];\n\n\t// helper variables\n\n\tvar numberOfVertices = 0;\n\tvar groupStart = 0;\n\n\t// build each side of the box geometry\n\n\tbuildPlane( 'z', 'y', 'x', - 1, - 1, depth, height, width, depthSegments, heightSegments, 0 ); // px\n\tbuildPlane( 'z', 'y', 'x', 1, - 1, depth, height, - width, depthSegments, heightSegments, 1 ); // nx\n\tbuildPlane( 'x', 'z', 'y', 1, 1, width, depth, height, widthSegments, depthSegments, 2 ); // py\n\tbuildPlane( 'x', 'z', 'y', 1, - 1, width, depth, - height, widthSegments, depthSegments, 3 ); // ny\n\tbuildPlane( 'x', 'y', 'z', 1, - 1, width, height, depth, widthSegments, heightSegments, 4 ); // pz\n\tbuildPlane( 'x', 'y', 'z', - 1, - 1, width, height, - depth, widthSegments, heightSegments, 5 ); // nz\n\n\t// build geometry\n\n\tthis.setIndex( indices );\n\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\tfunction buildPlane( u, v, w, udir, vdir, width, height, depth, gridX, gridY, materialIndex ) {\n\n\t\tvar segmentWidth = width / gridX;\n\t\tvar segmentHeight = height / gridY;\n\n\t\tvar widthHalf = width / 2;\n\t\tvar heightHalf = height / 2;\n\t\tvar depthHalf = depth / 2;\n\n\t\tvar gridX1 = gridX + 1;\n\t\tvar gridY1 = gridY + 1;\n\n\t\tvar vertexCounter = 0;\n\t\tvar groupCount = 0;\n\n\t\tvar ix, iy;\n\n\t\tvar vector = new Vector3();\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( iy = 0; iy < gridY1; iy ++ ) {\n\n\t\t\tvar y = iy * segmentHeight - heightHalf;\n\n\t\t\tfor ( ix = 0; ix < gridX1; ix ++ ) {\n\n\t\t\t\tvar x = ix * segmentWidth - widthHalf;\n\n\t\t\t\t// set values to correct vector component\n\n\t\t\t\tvector[ u ] = x * udir;\n\t\t\t\tvector[ v ] = y * vdir;\n\t\t\t\tvector[ w ] = depthHalf;\n\n\t\t\t\t// now apply vector to vertex buffer\n\n\t\t\t\tvertices.push( vector.x, vector.y, vector.z );\n\n\t\t\t\t// set values to correct vector component\n\n\t\t\t\tvector[ u ] = 0;\n\t\t\t\tvector[ v ] = 0;\n\t\t\t\tvector[ w ] = depth > 0 ? 1 : - 1;\n\n\t\t\t\t// now apply vector to normal buffer\n\n\t\t\t\tnormals.push( vector.x, vector.y, vector.z );\n\n\t\t\t\t// uvs\n\n\t\t\t\tuvs.push( ix / gridX );\n\t\t\t\tuvs.push( 1 - ( iy / gridY ) );\n\n\t\t\t\t// counters\n\n\t\t\t\tvertexCounter += 1;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// indices\n\n\t\t// 1. you need three indices to draw a single face\n\t\t// 2. a single segment consists of two faces\n\t\t// 3. so we need to generate six (2*3) indices per segment\n\n\t\tfor ( iy = 0; iy < gridY; iy ++ ) {\n\n\t\t\tfor ( ix = 0; ix < gridX; ix ++ ) {\n\n\t\t\t\tvar a = numberOfVertices + ix + gridX1 * iy;\n\t\t\t\tvar b = numberOfVertices + ix + gridX1 * ( iy + 1 );\n\t\t\t\tvar c = numberOfVertices + ( ix + 1 ) + gridX1 * ( iy + 1 );\n\t\t\t\tvar d = numberOfVertices + ( ix + 1 ) + gridX1 * iy;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t\t// increase counter\n\n\t\t\t\tgroupCount += 6;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// add a group to the geometry. this will ensure multi material support\n\n\t\tscope.addGroup( groupStart, groupCount, materialIndex );\n\n\t\t// calculate new start value for groups\n\n\t\tgroupStart += groupCount;\n\n\t\t// update total number of vertices\n\n\t\tnumberOfVertices += vertexCounter;\n\n\t}\n\n}\n\nBoxBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nBoxBufferGeometry.prototype.constructor = BoxBufferGeometry;\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author Mugen87 / https://github.com/Mugen87\n */\n\n// PlaneGeometry\n\nfunction PlaneGeometry( width, height, widthSegments, heightSegments ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'PlaneGeometry';\n\n\tthis.parameters = {\n\t\twidth: width,\n\t\theight: height,\n\t\twidthSegments: widthSegments,\n\t\theightSegments: heightSegments\n\t};\n\n\tthis.fromBufferGeometry( new PlaneBufferGeometry( width, height, widthSegments, heightSegments ) );\n\tthis.mergeVertices();\n\n}\n\nPlaneGeometry.prototype = Object.create( Geometry.prototype );\nPlaneGeometry.prototype.constructor = PlaneGeometry;\n\n// PlaneBufferGeometry\n\nfunction PlaneBufferGeometry( width, height, widthSegments, heightSegments ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'PlaneBufferGeometry';\n\n\tthis.parameters = {\n\t\twidth: width,\n\t\theight: height,\n\t\twidthSegments: widthSegments,\n\t\theightSegments: heightSegments\n\t};\n\n\twidth = width || 1;\n\theight = height || 1;\n\n\tvar width_half = width / 2;\n\tvar height_half = height / 2;\n\n\tvar gridX = Math.floor( widthSegments ) || 1;\n\tvar gridY = Math.floor( heightSegments ) || 1;\n\n\tvar gridX1 = gridX + 1;\n\tvar gridY1 = gridY + 1;\n\n\tvar segment_width = width / gridX;\n\tvar segment_height = height / gridY;\n\n\tvar ix, iy;\n\n\t// buffers\n\n\tvar indices = [];\n\tvar vertices = [];\n\tvar normals = [];\n\tvar uvs = [];\n\n\t// generate vertices, normals and uvs\n\n\tfor ( iy = 0; iy < gridY1; iy ++ ) {\n\n\t\tvar y = iy * segment_height - height_half;\n\n\t\tfor ( ix = 0; ix < gridX1; ix ++ ) {\n\n\t\t\tvar x = ix * segment_width - width_half;\n\n\t\t\tvertices.push( x, - y, 0 );\n\n\t\t\tnormals.push( 0, 0, 1 );\n\n\t\t\tuvs.push( ix / gridX );\n\t\t\tuvs.push( 1 - ( iy / gridY ) );\n\n\t\t}\n\n\t}\n\n\t// indices\n\n\tfor ( iy = 0; iy < gridY; iy ++ ) {\n\n\t\tfor ( ix = 0; ix < gridX; ix ++ ) {\n\n\t\t\tvar a = ix + gridX1 * iy;\n\t\t\tvar b = ix + gridX1 * ( iy + 1 );\n\t\t\tvar c = ( ix + 1 ) + gridX1 * ( iy + 1 );\n\t\t\tvar d = ( ix + 1 ) + gridX1 * iy;\n\n\t\t\t// faces\n\n\t\t\tindices.push( a, b, d );\n\t\t\tindices.push( b, c, d );\n\n\t\t}\n\n\t}\n\n\t// build geometry\n\n\tthis.setIndex( indices );\n\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n}\n\nPlaneBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nPlaneBufferGeometry.prototype.constructor = PlaneBufferGeometry;\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n */\n\nvar materialId = 0;\n\nfunction Material() {\n\n\tObject.defineProperty( this, 'id', { value: materialId ++ } );\n\n\tthis.uuid = _Math.generateUUID();\n\n\tthis.name = '';\n\tthis.type = 'Material';\n\n\tthis.fog = true;\n\tthis.lights = true;\n\n\tthis.blending = NormalBlending;\n\tthis.side = FrontSide;\n\tthis.flatShading = false;\n\tthis.vertexColors = NoColors; // THREE.NoColors, THREE.VertexColors, THREE.FaceColors\n\n\tthis.opacity = 1;\n\tthis.transparent = false;\n\n\tthis.blendSrc = SrcAlphaFactor;\n\tthis.blendDst = OneMinusSrcAlphaFactor;\n\tthis.blendEquation = AddEquation;\n\tthis.blendSrcAlpha = null;\n\tthis.blendDstAlpha = null;\n\tthis.blendEquationAlpha = null;\n\n\tthis.depthFunc = LessEqualDepth;\n\tthis.depthTest = true;\n\tthis.depthWrite = true;\n\n\tthis.clippingPlanes = null;\n\tthis.clipIntersection = false;\n\tthis.clipShadows = false;\n\n\tthis.shadowSide = null;\n\n\tthis.colorWrite = true;\n\n\tthis.precision = null; // override the renderer's default precision for this material\n\n\tthis.polygonOffset = false;\n\tthis.polygonOffsetFactor = 0;\n\tthis.polygonOffsetUnits = 0;\n\n\tthis.dithering = false;\n\n\tthis.alphaTest = 0;\n\tthis.premultipliedAlpha = false;\n\n\tthis.overdraw = 0; // Overdrawn pixels (typically between 0 and 1) for fixing antialiasing gaps in CanvasRenderer\n\n\tthis.visible = true;\n\n\tthis.userData = {};\n\n\tthis.needsUpdate = true;\n\n}\n\nMaterial.prototype = Object.assign( Object.create( EventDispatcher.prototype ), {\n\n\tconstructor: Material,\n\n\tisMaterial: true,\n\n\tonBeforeCompile: function () {},\n\n\tsetValues: function ( values ) {\n\n\t\tif ( values === undefined ) return;\n\n\t\tfor ( var key in values ) {\n\n\t\t\tvar newValue = values[ key ];\n\n\t\t\tif ( newValue === undefined ) {\n\n\t\t\t\tconsole.warn( \"THREE.Material: '\" + key + \"' parameter is undefined.\" );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\t// for backward compatability if shading is set in the constructor\n\t\t\tif ( key === 'shading' ) {\n\n\t\t\t\tconsole.warn( 'THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.' );\n\t\t\t\tthis.flatShading = ( newValue === FlatShading ) ? true : false;\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tvar currentValue = this[ key ];\n\n\t\t\tif ( currentValue === undefined ) {\n\n\t\t\t\tconsole.warn( \"THREE.\" + this.type + \": '\" + key + \"' is not a property of this material.\" );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tif ( currentValue && currentValue.isColor ) {\n\n\t\t\t\tcurrentValue.set( newValue );\n\n\t\t\t} else if ( ( currentValue && currentValue.isVector3 ) && ( newValue && newValue.isVector3 ) ) {\n\n\t\t\t\tcurrentValue.copy( newValue );\n\n\t\t\t} else if ( key === 'overdraw' ) {\n\n\t\t\t\t// ensure overdraw is backwards-compatible with legacy boolean type\n\t\t\t\tthis[ key ] = Number( newValue );\n\n\t\t\t} else {\n\n\t\t\t\tthis[ key ] = newValue;\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\tvar isRoot = ( meta === undefined || typeof meta === 'string' );\n\n\t\tif ( isRoot ) {\n\n\t\t\tmeta = {\n\t\t\t\ttextures: {},\n\t\t\t\timages: {}\n\t\t\t};\n\n\t\t}\n\n\t\tvar data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Material',\n\t\t\t\tgenerator: 'Material.toJSON'\n\t\t\t}\n\t\t};\n\n\t\t// standard Material serialization\n\t\tdata.uuid = this.uuid;\n\t\tdata.type = this.type;\n\n\t\tif ( this.name !== '' ) data.name = this.name;\n\n\t\tif ( this.color && this.color.isColor ) data.color = this.color.getHex();\n\n\t\tif ( this.roughness !== undefined ) data.roughness = this.roughness;\n\t\tif ( this.metalness !== undefined ) data.metalness = this.metalness;\n\n\t\tif ( this.emissive && this.emissive.isColor ) data.emissive = this.emissive.getHex();\n\t\tif ( this.emissiveIntensity !== 1 ) data.emissiveIntensity = this.emissiveIntensity;\n\n\t\tif ( this.specular && this.specular.isColor ) data.specular = this.specular.getHex();\n\t\tif ( this.shininess !== undefined ) data.shininess = this.shininess;\n\t\tif ( this.clearCoat !== undefined ) data.clearCoat = this.clearCoat;\n\t\tif ( this.clearCoatRoughness !== undefined ) data.clearCoatRoughness = this.clearCoatRoughness;\n\n\t\tif ( this.map && this.map.isTexture ) data.map = this.map.toJSON( meta ).uuid;\n\t\tif ( this.alphaMap && this.alphaMap.isTexture ) data.alphaMap = this.alphaMap.toJSON( meta ).uuid;\n\t\tif ( this.lightMap && this.lightMap.isTexture ) data.lightMap = this.lightMap.toJSON( meta ).uuid;\n\t\tif ( this.bumpMap && this.bumpMap.isTexture ) {\n\n\t\t\tdata.bumpMap = this.bumpMap.toJSON( meta ).uuid;\n\t\t\tdata.bumpScale = this.bumpScale;\n\n\t\t}\n\t\tif ( this.normalMap && this.normalMap.isTexture ) {\n\n\t\t\tdata.normalMap = this.normalMap.toJSON( meta ).uuid;\n\t\t\tdata.normalScale = this.normalScale.toArray();\n\n\t\t}\n\t\tif ( this.displacementMap && this.displacementMap.isTexture ) {\n\n\t\t\tdata.displacementMap = this.displacementMap.toJSON( meta ).uuid;\n\t\t\tdata.displacementScale = this.displacementScale;\n\t\t\tdata.displacementBias = this.displacementBias;\n\n\t\t}\n\t\tif ( this.roughnessMap && this.roughnessMap.isTexture ) data.roughnessMap = this.roughnessMap.toJSON( meta ).uuid;\n\t\tif ( this.metalnessMap && this.metalnessMap.isTexture ) data.metalnessMap = this.metalnessMap.toJSON( meta ).uuid;\n\n\t\tif ( this.emissiveMap && this.emissiveMap.isTexture ) data.emissiveMap = this.emissiveMap.toJSON( meta ).uuid;\n\t\tif ( this.specularMap && this.specularMap.isTexture ) data.specularMap = this.specularMap.toJSON( meta ).uuid;\n\n\t\tif ( this.envMap && this.envMap.isTexture ) {\n\n\t\t\tdata.envMap = this.envMap.toJSON( meta ).uuid;\n\t\t\tdata.reflectivity = this.reflectivity; // Scale behind envMap\n\n\t\t}\n\n\t\tif ( this.gradientMap && this.gradientMap.isTexture ) {\n\n\t\t\tdata.gradientMap = this.gradientMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.size !== undefined ) data.size = this.size;\n\t\tif ( this.sizeAttenuation !== undefined ) data.sizeAttenuation = this.sizeAttenuation;\n\n\t\tif ( this.blending !== NormalBlending ) data.blending = this.blending;\n\t\tif ( this.flatShading === true ) data.flatShading = this.flatShading;\n\t\tif ( this.side !== FrontSide ) data.side = this.side;\n\t\tif ( this.vertexColors !== NoColors ) data.vertexColors = this.vertexColors;\n\n\t\tif ( this.opacity < 1 ) data.opacity = this.opacity;\n\t\tif ( this.transparent === true ) data.transparent = this.transparent;\n\n\t\tdata.depthFunc = this.depthFunc;\n\t\tdata.depthTest = this.depthTest;\n\t\tdata.depthWrite = this.depthWrite;\n\n\t\t// rotation (SpriteMaterial)\n\t\tif ( this.rotation !== 0 ) data.rotation = this.rotation;\n\n\t\tif ( this.linewidth !== 1 ) data.linewidth = this.linewidth;\n\t\tif ( this.dashSize !== undefined ) data.dashSize = this.dashSize;\n\t\tif ( this.gapSize !== undefined ) data.gapSize = this.gapSize;\n\t\tif ( this.scale !== undefined ) data.scale = this.scale;\n\n\t\tif ( this.dithering === true ) data.dithering = true;\n\n\t\tif ( this.alphaTest > 0 ) data.alphaTest = this.alphaTest;\n\t\tif ( this.premultipliedAlpha === true ) data.premultipliedAlpha = this.premultipliedAlpha;\n\n\t\tif ( this.wireframe === true ) data.wireframe = this.wireframe;\n\t\tif ( this.wireframeLinewidth > 1 ) data.wireframeLinewidth = this.wireframeLinewidth;\n\t\tif ( this.wireframeLinecap !== 'round' ) data.wireframeLinecap = this.wireframeLinecap;\n\t\tif ( this.wireframeLinejoin !== 'round' ) data.wireframeLinejoin = this.wireframeLinejoin;\n\n\t\tif ( this.morphTargets === true ) data.morphTargets = true;\n\t\tif ( this.skinning === true ) data.skinning = true;\n\n\t\tif ( this.visible === false ) data.visible = false;\n\t\tif ( JSON.stringify( this.userData ) !== '{}' ) data.userData = this.userData;\n\n\t\t// TODO: Copied from Object3D.toJSON\n\n\t\tfunction extractFromCache( cache ) {\n\n\t\t\tvar values = [];\n\n\t\t\tfor ( var key in cache ) {\n\n\t\t\t\tvar data = cache[ key ];\n\t\t\t\tdelete data.metadata;\n\t\t\t\tvalues.push( data );\n\n\t\t\t}\n\n\t\t\treturn values;\n\n\t\t}\n\n\t\tif ( isRoot ) {\n\n\t\t\tvar textures = extractFromCache( meta.textures );\n\t\t\tvar images = extractFromCache( meta.images );\n\n\t\t\tif ( textures.length > 0 ) data.textures = textures;\n\t\t\tif ( images.length > 0 ) data.images = images;\n\n\t\t}\n\n\t\treturn data;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tthis.name = source.name;\n\n\t\tthis.fog = source.fog;\n\t\tthis.lights = source.lights;\n\n\t\tthis.blending = source.blending;\n\t\tthis.side = source.side;\n\t\tthis.flatShading = source.flatShading;\n\t\tthis.vertexColors = source.vertexColors;\n\n\t\tthis.opacity = source.opacity;\n\t\tthis.transparent = source.transparent;\n\n\t\tthis.blendSrc = source.blendSrc;\n\t\tthis.blendDst = source.blendDst;\n\t\tthis.blendEquation = source.blendEquation;\n\t\tthis.blendSrcAlpha = source.blendSrcAlpha;\n\t\tthis.blendDstAlpha = source.blendDstAlpha;\n\t\tthis.blendEquationAlpha = source.blendEquationAlpha;\n\n\t\tthis.depthFunc = source.depthFunc;\n\t\tthis.depthTest = source.depthTest;\n\t\tthis.depthWrite = source.depthWrite;\n\n\t\tthis.colorWrite = source.colorWrite;\n\n\t\tthis.precision = source.precision;\n\n\t\tthis.polygonOffset = source.polygonOffset;\n\t\tthis.polygonOffsetFactor = source.polygonOffsetFactor;\n\t\tthis.polygonOffsetUnits = source.polygonOffsetUnits;\n\n\t\tthis.dithering = source.dithering;\n\n\t\tthis.alphaTest = source.alphaTest;\n\t\tthis.premultipliedAlpha = source.premultipliedAlpha;\n\n\t\tthis.overdraw = source.overdraw;\n\n\t\tthis.visible = source.visible;\n\t\tthis.userData = JSON.parse( JSON.stringify( source.userData ) );\n\n\t\tthis.clipShadows = source.clipShadows;\n\t\tthis.clipIntersection = source.clipIntersection;\n\n\t\tvar srcPlanes = source.clippingPlanes,\n\t\t\tdstPlanes = null;\n\n\t\tif ( srcPlanes !== null ) {\n\n\t\t\tvar n = srcPlanes.length;\n\t\t\tdstPlanes = new Array( n );\n\n\t\t\tfor ( var i = 0; i !== n; ++ i )\n\t\t\t\tdstPlanes[ i ] = srcPlanes[ i ].clone();\n\n\t\t}\n\n\t\tthis.clippingPlanes = dstPlanes;\n\n\t\tthis.shadowSide = source.shadowSide;\n\n\t\treturn this;\n\n\t},\n\n\tdispose: function () {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n *\n * parameters = {\n * color: ,\n * opacity: ,\n * map: new THREE.Texture( ),\n *\n * lightMap: new THREE.Texture( ),\n * lightMapIntensity: \n *\n * aoMap: new THREE.Texture( ),\n * aoMapIntensity: \n *\n * specularMap: new THREE.Texture( ),\n *\n * alphaMap: new THREE.Texture( ),\n *\n * envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),\n * combine: THREE.Multiply,\n * reflectivity: ,\n * refractionRatio: ,\n *\n * depthTest: ,\n * depthWrite: ,\n *\n * wireframe: ,\n * wireframeLinewidth: ,\n *\n * skinning: ,\n * morphTargets: \n * }\n */\n\nfunction MeshBasicMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'MeshBasicMaterial';\n\n\tthis.color = new Color( 0xffffff ); // emissive\n\n\tthis.map = null;\n\n\tthis.lightMap = null;\n\tthis.lightMapIntensity = 1.0;\n\n\tthis.aoMap = null;\n\tthis.aoMapIntensity = 1.0;\n\n\tthis.specularMap = null;\n\n\tthis.alphaMap = null;\n\n\tthis.envMap = null;\n\tthis.combine = MultiplyOperation;\n\tthis.reflectivity = 1;\n\tthis.refractionRatio = 0.98;\n\n\tthis.wireframe = false;\n\tthis.wireframeLinewidth = 1;\n\tthis.wireframeLinecap = 'round';\n\tthis.wireframeLinejoin = 'round';\n\n\tthis.skinning = false;\n\tthis.morphTargets = false;\n\n\tthis.lights = false;\n\n\tthis.setValues( parameters );\n\n}\n\nMeshBasicMaterial.prototype = Object.create( Material.prototype );\nMeshBasicMaterial.prototype.constructor = MeshBasicMaterial;\n\nMeshBasicMaterial.prototype.isMeshBasicMaterial = true;\n\nMeshBasicMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.color.copy( source.color );\n\n\tthis.map = source.map;\n\n\tthis.lightMap = source.lightMap;\n\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\tthis.aoMap = source.aoMap;\n\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\tthis.specularMap = source.specularMap;\n\n\tthis.alphaMap = source.alphaMap;\n\n\tthis.envMap = source.envMap;\n\tthis.combine = source.combine;\n\tthis.reflectivity = source.reflectivity;\n\tthis.refractionRatio = source.refractionRatio;\n\n\tthis.wireframe = source.wireframe;\n\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\tthis.wireframeLinecap = source.wireframeLinecap;\n\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\tthis.skinning = source.skinning;\n\tthis.morphTargets = source.morphTargets;\n\n\treturn this;\n\n};\n\n/**\n * @author alteredq / http://alteredqualia.com/\n *\n * parameters = {\n * defines: { \"label\" : \"value\" },\n * uniforms: { \"parameter1\": { value: 1.0 }, \"parameter2\": { value2: 2 } },\n *\n * fragmentShader: ,\n * vertexShader: ,\n *\n * wireframe: ,\n * wireframeLinewidth: ,\n *\n * lights: ,\n *\n * skinning: ,\n * morphTargets: ,\n * morphNormals: \n * }\n */\n\nfunction ShaderMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'ShaderMaterial';\n\n\tthis.defines = {};\n\tthis.uniforms = {};\n\n\tthis.vertexShader = 'void main() {\\n\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\n}';\n\tthis.fragmentShader = 'void main() {\\n\\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\\n}';\n\n\tthis.linewidth = 1;\n\n\tthis.wireframe = false;\n\tthis.wireframeLinewidth = 1;\n\n\tthis.fog = false; // set to use scene fog\n\tthis.lights = false; // set to use scene lights\n\tthis.clipping = false; // set to use user-defined clipping planes\n\n\tthis.skinning = false; // set to use skinning attribute streams\n\tthis.morphTargets = false; // set to use morph targets\n\tthis.morphNormals = false; // set to use morph normals\n\n\tthis.extensions = {\n\t\tderivatives: false, // set to use derivatives\n\t\tfragDepth: false, // set to use fragment depth values\n\t\tdrawBuffers: false, // set to use draw buffers\n\t\tshaderTextureLOD: false // set to use shader texture LOD\n\t};\n\n\t// When rendered geometry doesn't include these attributes but the material does,\n\t// use these default values in WebGL. This avoids errors when buffer data is missing.\n\tthis.defaultAttributeValues = {\n\t\t'color': [ 1, 1, 1 ],\n\t\t'uv': [ 0, 0 ],\n\t\t'uv2': [ 0, 0 ]\n\t};\n\n\tthis.index0AttributeName = undefined;\n\tthis.uniformsNeedUpdate = false;\n\n\tif ( parameters !== undefined ) {\n\n\t\tif ( parameters.attributes !== undefined ) {\n\n\t\t\tconsole.error( 'THREE.ShaderMaterial: attributes should now be defined in THREE.BufferGeometry instead.' );\n\n\t\t}\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n}\n\nShaderMaterial.prototype = Object.create( Material.prototype );\nShaderMaterial.prototype.constructor = ShaderMaterial;\n\nShaderMaterial.prototype.isShaderMaterial = true;\n\nShaderMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.fragmentShader = source.fragmentShader;\n\tthis.vertexShader = source.vertexShader;\n\n\tthis.uniforms = UniformsUtils.clone( source.uniforms );\n\n\tthis.defines = Object.assign( {}, source.defines );\n\n\tthis.wireframe = source.wireframe;\n\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\n\tthis.lights = source.lights;\n\tthis.clipping = source.clipping;\n\n\tthis.skinning = source.skinning;\n\n\tthis.morphTargets = source.morphTargets;\n\tthis.morphNormals = source.morphNormals;\n\n\tthis.extensions = source.extensions;\n\n\treturn this;\n\n};\n\nShaderMaterial.prototype.toJSON = function ( meta ) {\n\n\tvar data = Material.prototype.toJSON.call( this, meta );\n\n\tdata.uniforms = this.uniforms;\n\tdata.vertexShader = this.vertexShader;\n\tdata.fragmentShader = this.fragmentShader;\n\n\treturn data;\n\n};\n\n/**\n * @author bhouston / http://clara.io\n */\n\nfunction Ray( origin, direction ) {\n\n\tthis.origin = ( origin !== undefined ) ? origin : new Vector3();\n\tthis.direction = ( direction !== undefined ) ? direction : new Vector3();\n\n}\n\nObject.assign( Ray.prototype, {\n\n\tset: function ( origin, direction ) {\n\n\t\tthis.origin.copy( origin );\n\t\tthis.direction.copy( direction );\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( ray ) {\n\n\t\tthis.origin.copy( ray.origin );\n\t\tthis.direction.copy( ray.direction );\n\n\t\treturn this;\n\n\t},\n\n\tat: function ( t, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Ray: .at() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.copy( this.direction ).multiplyScalar( t ).add( this.origin );\n\n\t},\n\n\tlookAt: function ( v ) {\n\n\t\tthis.direction.copy( v ).sub( this.origin ).normalize();\n\n\t\treturn this;\n\n\t},\n\n\trecast: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function recast( t ) {\n\n\t\t\tthis.origin.copy( this.at( t, v1 ) );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tclosestPointToPoint: function ( point, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Ray: .closestPointToPoint() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\ttarget.subVectors( point, this.origin );\n\n\t\tvar directionDistance = target.dot( this.direction );\n\n\t\tif ( directionDistance < 0 ) {\n\n\t\t\treturn target.copy( this.origin );\n\n\t\t}\n\n\t\treturn target.copy( this.direction ).multiplyScalar( directionDistance ).add( this.origin );\n\n\t},\n\n\tdistanceToPoint: function ( point ) {\n\n\t\treturn Math.sqrt( this.distanceSqToPoint( point ) );\n\n\t},\n\n\tdistanceSqToPoint: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function distanceSqToPoint( point ) {\n\n\t\t\tvar directionDistance = v1.subVectors( point, this.origin ).dot( this.direction );\n\n\t\t\t// point behind the ray\n\n\t\t\tif ( directionDistance < 0 ) {\n\n\t\t\t\treturn this.origin.distanceToSquared( point );\n\n\t\t\t}\n\n\t\t\tv1.copy( this.direction ).multiplyScalar( directionDistance ).add( this.origin );\n\n\t\t\treturn v1.distanceToSquared( point );\n\n\t\t};\n\n\t}(),\n\n\tdistanceSqToSegment: function () {\n\n\t\tvar segCenter = new Vector3();\n\t\tvar segDir = new Vector3();\n\t\tvar diff = new Vector3();\n\n\t\treturn function distanceSqToSegment( v0, v1, optionalPointOnRay, optionalPointOnSegment ) {\n\n\t\t\t// from http://www.geometrictools.com/GTEngine/Include/Mathematics/GteDistRaySegment.h\n\t\t\t// It returns the min distance between the ray and the segment\n\t\t\t// defined by v0 and v1\n\t\t\t// It can also set two optional targets :\n\t\t\t// - The closest point on the ray\n\t\t\t// - The closest point on the segment\n\n\t\t\tsegCenter.copy( v0 ).add( v1 ).multiplyScalar( 0.5 );\n\t\t\tsegDir.copy( v1 ).sub( v0 ).normalize();\n\t\t\tdiff.copy( this.origin ).sub( segCenter );\n\n\t\t\tvar segExtent = v0.distanceTo( v1 ) * 0.5;\n\t\t\tvar a01 = - this.direction.dot( segDir );\n\t\t\tvar b0 = diff.dot( this.direction );\n\t\t\tvar b1 = - diff.dot( segDir );\n\t\t\tvar c = diff.lengthSq();\n\t\t\tvar det = Math.abs( 1 - a01 * a01 );\n\t\t\tvar s0, s1, sqrDist, extDet;\n\n\t\t\tif ( det > 0 ) {\n\n\t\t\t\t// The ray and segment are not parallel.\n\n\t\t\t\ts0 = a01 * b1 - b0;\n\t\t\t\ts1 = a01 * b0 - b1;\n\t\t\t\textDet = segExtent * det;\n\n\t\t\t\tif ( s0 >= 0 ) {\n\n\t\t\t\t\tif ( s1 >= - extDet ) {\n\n\t\t\t\t\t\tif ( s1 <= extDet ) {\n\n\t\t\t\t\t\t\t// region 0\n\t\t\t\t\t\t\t// Minimum at interior points of ray and segment.\n\n\t\t\t\t\t\t\tvar invDet = 1 / det;\n\t\t\t\t\t\t\ts0 *= invDet;\n\t\t\t\t\t\t\ts1 *= invDet;\n\t\t\t\t\t\t\tsqrDist = s0 * ( s0 + a01 * s1 + 2 * b0 ) + s1 * ( a01 * s0 + s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// region 1\n\n\t\t\t\t\t\t\ts1 = segExtent;\n\t\t\t\t\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// region 5\n\n\t\t\t\t\t\ts1 = - segExtent;\n\t\t\t\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( s1 <= - extDet ) {\n\n\t\t\t\t\t\t// region 4\n\n\t\t\t\t\t\ts0 = Math.max( 0, - ( - a01 * segExtent + b0 ) );\n\t\t\t\t\t\ts1 = ( s0 > 0 ) ? - segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t} else if ( s1 <= extDet ) {\n\n\t\t\t\t\t\t// region 3\n\n\t\t\t\t\t\ts0 = 0;\n\t\t\t\t\t\ts1 = Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\t\tsqrDist = s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// region 2\n\n\t\t\t\t\t\ts0 = Math.max( 0, - ( a01 * segExtent + b0 ) );\n\t\t\t\t\t\ts1 = ( s0 > 0 ) ? segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// Ray and segment are parallel.\n\n\t\t\t\ts1 = ( a01 > 0 ) ? - segExtent : segExtent;\n\t\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t}\n\n\t\t\tif ( optionalPointOnRay ) {\n\n\t\t\t\toptionalPointOnRay.copy( this.direction ).multiplyScalar( s0 ).add( this.origin );\n\n\t\t\t}\n\n\t\t\tif ( optionalPointOnSegment ) {\n\n\t\t\t\toptionalPointOnSegment.copy( segDir ).multiplyScalar( s1 ).add( segCenter );\n\n\t\t\t}\n\n\t\t\treturn sqrDist;\n\n\t\t};\n\n\t}(),\n\n\tintersectSphere: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function intersectSphere( sphere, target ) {\n\n\t\t\tv1.subVectors( sphere.center, this.origin );\n\t\t\tvar tca = v1.dot( this.direction );\n\t\t\tvar d2 = v1.dot( v1 ) - tca * tca;\n\t\t\tvar radius2 = sphere.radius * sphere.radius;\n\n\t\t\tif ( d2 > radius2 ) return null;\n\n\t\t\tvar thc = Math.sqrt( radius2 - d2 );\n\n\t\t\t// t0 = first intersect point - entrance on front of sphere\n\t\t\tvar t0 = tca - thc;\n\n\t\t\t// t1 = second intersect point - exit point on back of sphere\n\t\t\tvar t1 = tca + thc;\n\n\t\t\t// test to see if both t0 and t1 are behind the ray - if so, return null\n\t\t\tif ( t0 < 0 && t1 < 0 ) return null;\n\n\t\t\t// test to see if t0 is behind the ray:\n\t\t\t// if it is, the ray is inside the sphere, so return the second exit point scaled by t1,\n\t\t\t// in order to always return an intersect point that is in front of the ray.\n\t\t\tif ( t0 < 0 ) return this.at( t1, target );\n\n\t\t\t// else t0 is in front of the ray, so return the first collision point scaled by t0\n\t\t\treturn this.at( t0, target );\n\n\t\t};\n\n\t}(),\n\n\tintersectsSphere: function ( sphere ) {\n\n\t\treturn this.distanceToPoint( sphere.center ) <= sphere.radius;\n\n\t},\n\n\tdistanceToPlane: function ( plane ) {\n\n\t\tvar denominator = plane.normal.dot( this.direction );\n\n\t\tif ( denominator === 0 ) {\n\n\t\t\t// line is coplanar, return origin\n\t\t\tif ( plane.distanceToPoint( this.origin ) === 0 ) {\n\n\t\t\t\treturn 0;\n\n\t\t\t}\n\n\t\t\t// Null is preferable to undefined since undefined means.... it is undefined\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tvar t = - ( this.origin.dot( plane.normal ) + plane.constant ) / denominator;\n\n\t\t// Return if the ray never intersects the plane\n\n\t\treturn t >= 0 ? t : null;\n\n\t},\n\n\tintersectPlane: function ( plane, target ) {\n\n\t\tvar t = this.distanceToPlane( plane );\n\n\t\tif ( t === null ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\treturn this.at( t, target );\n\n\t},\n\n\tintersectsPlane: function ( plane ) {\n\n\t\t// check if the ray lies on the plane first\n\n\t\tvar distToPoint = plane.distanceToPoint( this.origin );\n\n\t\tif ( distToPoint === 0 ) {\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\tvar denominator = plane.normal.dot( this.direction );\n\n\t\tif ( denominator * distToPoint < 0 ) {\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\t// ray origin is behind the plane (and is pointing behind it)\n\n\t\treturn false;\n\n\t},\n\n\tintersectBox: function ( box, target ) {\n\n\t\tvar tmin, tmax, tymin, tymax, tzmin, tzmax;\n\n\t\tvar invdirx = 1 / this.direction.x,\n\t\t\tinvdiry = 1 / this.direction.y,\n\t\t\tinvdirz = 1 / this.direction.z;\n\n\t\tvar origin = this.origin;\n\n\t\tif ( invdirx >= 0 ) {\n\n\t\t\ttmin = ( box.min.x - origin.x ) * invdirx;\n\t\t\ttmax = ( box.max.x - origin.x ) * invdirx;\n\n\t\t} else {\n\n\t\t\ttmin = ( box.max.x - origin.x ) * invdirx;\n\t\t\ttmax = ( box.min.x - origin.x ) * invdirx;\n\n\t\t}\n\n\t\tif ( invdiry >= 0 ) {\n\n\t\t\ttymin = ( box.min.y - origin.y ) * invdiry;\n\t\t\ttymax = ( box.max.y - origin.y ) * invdiry;\n\n\t\t} else {\n\n\t\t\ttymin = ( box.max.y - origin.y ) * invdiry;\n\t\t\ttymax = ( box.min.y - origin.y ) * invdiry;\n\n\t\t}\n\n\t\tif ( ( tmin > tymax ) || ( tymin > tmax ) ) return null;\n\n\t\t// These lines also handle the case where tmin or tmax is NaN\n\t\t// (result of 0 * Infinity). x !== x returns true if x is NaN\n\n\t\tif ( tymin > tmin || tmin !== tmin ) tmin = tymin;\n\n\t\tif ( tymax < tmax || tmax !== tmax ) tmax = tymax;\n\n\t\tif ( invdirz >= 0 ) {\n\n\t\t\ttzmin = ( box.min.z - origin.z ) * invdirz;\n\t\t\ttzmax = ( box.max.z - origin.z ) * invdirz;\n\n\t\t} else {\n\n\t\t\ttzmin = ( box.max.z - origin.z ) * invdirz;\n\t\t\ttzmax = ( box.min.z - origin.z ) * invdirz;\n\n\t\t}\n\n\t\tif ( ( tmin > tzmax ) || ( tzmin > tmax ) ) return null;\n\n\t\tif ( tzmin > tmin || tmin !== tmin ) tmin = tzmin;\n\n\t\tif ( tzmax < tmax || tmax !== tmax ) tmax = tzmax;\n\n\t\t//return point closest to the ray (positive side)\n\n\t\tif ( tmax < 0 ) return null;\n\n\t\treturn this.at( tmin >= 0 ? tmin : tmax, target );\n\n\t},\n\n\tintersectsBox: ( function () {\n\n\t\tvar v = new Vector3();\n\n\t\treturn function intersectsBox( box ) {\n\n\t\t\treturn this.intersectBox( box, v ) !== null;\n\n\t\t};\n\n\t} )(),\n\n\tintersectTriangle: function () {\n\n\t\t// Compute the offset origin, edges, and normal.\n\t\tvar diff = new Vector3();\n\t\tvar edge1 = new Vector3();\n\t\tvar edge2 = new Vector3();\n\t\tvar normal = new Vector3();\n\n\t\treturn function intersectTriangle( a, b, c, backfaceCulling, target ) {\n\n\t\t\t// from http://www.geometrictools.com/GTEngine/Include/Mathematics/GteIntrRay3Triangle3.h\n\n\t\t\tedge1.subVectors( b, a );\n\t\t\tedge2.subVectors( c, a );\n\t\t\tnormal.crossVectors( edge1, edge2 );\n\n\t\t\t// Solve Q + t*D = b1*E1 + b2*E2 (Q = kDiff, D = ray direction,\n\t\t\t// E1 = kEdge1, E2 = kEdge2, N = Cross(E1,E2)) by\n\t\t\t// |Dot(D,N)|*b1 = sign(Dot(D,N))*Dot(D,Cross(Q,E2))\n\t\t\t// |Dot(D,N)|*b2 = sign(Dot(D,N))*Dot(D,Cross(E1,Q))\n\t\t\t// |Dot(D,N)|*t = -sign(Dot(D,N))*Dot(Q,N)\n\t\t\tvar DdN = this.direction.dot( normal );\n\t\t\tvar sign;\n\n\t\t\tif ( DdN > 0 ) {\n\n\t\t\t\tif ( backfaceCulling ) return null;\n\t\t\t\tsign = 1;\n\n\t\t\t} else if ( DdN < 0 ) {\n\n\t\t\t\tsign = - 1;\n\t\t\t\tDdN = - DdN;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tdiff.subVectors( this.origin, a );\n\t\t\tvar DdQxE2 = sign * this.direction.dot( edge2.crossVectors( diff, edge2 ) );\n\n\t\t\t// b1 < 0, no intersection\n\t\t\tif ( DdQxE2 < 0 ) {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tvar DdE1xQ = sign * this.direction.dot( edge1.cross( diff ) );\n\n\t\t\t// b2 < 0, no intersection\n\t\t\tif ( DdE1xQ < 0 ) {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\t// b1+b2 > 1, no intersection\n\t\t\tif ( DdQxE2 + DdE1xQ > DdN ) {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\t// Line intersects triangle, check if ray does.\n\t\t\tvar QdN = - sign * diff.dot( normal );\n\n\t\t\t// t < 0, no intersection\n\t\t\tif ( QdN < 0 ) {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\t// Ray intersects triangle.\n\t\t\treturn this.at( QdN / DdN, target );\n\n\t\t};\n\n\t}(),\n\n\tapplyMatrix4: function ( matrix4 ) {\n\n\t\tthis.origin.applyMatrix4( matrix4 );\n\t\tthis.direction.transformDirection( matrix4 );\n\n\t\treturn this;\n\n\t},\n\n\tequals: function ( ray ) {\n\n\t\treturn ray.origin.equals( this.origin ) && ray.direction.equals( this.direction );\n\n\t}\n\n} );\n\n/**\n * @author bhouston / http://clara.io\n */\n\nfunction Line3( start, end ) {\n\n\tthis.start = ( start !== undefined ) ? start : new Vector3();\n\tthis.end = ( end !== undefined ) ? end : new Vector3();\n\n}\n\nObject.assign( Line3.prototype, {\n\n\tset: function ( start, end ) {\n\n\t\tthis.start.copy( start );\n\t\tthis.end.copy( end );\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( line ) {\n\n\t\tthis.start.copy( line.start );\n\t\tthis.end.copy( line.end );\n\n\t\treturn this;\n\n\t},\n\n\tgetCenter: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Line3: .getCenter() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.addVectors( this.start, this.end ).multiplyScalar( 0.5 );\n\n\t},\n\n\tdelta: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Line3: .delta() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.subVectors( this.end, this.start );\n\n\t},\n\n\tdistanceSq: function () {\n\n\t\treturn this.start.distanceToSquared( this.end );\n\n\t},\n\n\tdistance: function () {\n\n\t\treturn this.start.distanceTo( this.end );\n\n\t},\n\n\tat: function ( t, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Line3: .at() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn this.delta( target ).multiplyScalar( t ).add( this.start );\n\n\t},\n\n\tclosestPointToPointParameter: function () {\n\n\t\tvar startP = new Vector3();\n\t\tvar startEnd = new Vector3();\n\n\t\treturn function closestPointToPointParameter( point, clampToLine ) {\n\n\t\t\tstartP.subVectors( point, this.start );\n\t\t\tstartEnd.subVectors( this.end, this.start );\n\n\t\t\tvar startEnd2 = startEnd.dot( startEnd );\n\t\t\tvar startEnd_startP = startEnd.dot( startP );\n\n\t\t\tvar t = startEnd_startP / startEnd2;\n\n\t\t\tif ( clampToLine ) {\n\n\t\t\t\tt = _Math.clamp( t, 0, 1 );\n\n\t\t\t}\n\n\t\t\treturn t;\n\n\t\t};\n\n\t}(),\n\n\tclosestPointToPoint: function ( point, clampToLine, target ) {\n\n\t\tvar t = this.closestPointToPointParameter( point, clampToLine );\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Line3: .closestPointToPoint() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn this.delta( target ).multiplyScalar( t ).add( this.start );\n\n\t},\n\n\tapplyMatrix4: function ( matrix ) {\n\n\t\tthis.start.applyMatrix4( matrix );\n\t\tthis.end.applyMatrix4( matrix );\n\n\t\treturn this;\n\n\t},\n\n\tequals: function ( line ) {\n\n\t\treturn line.start.equals( this.start ) && line.end.equals( this.end );\n\n\t}\n\n} );\n\n/**\n * @author bhouston / http://clara.io\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction Triangle( a, b, c ) {\n\n\tthis.a = ( a !== undefined ) ? a : new Vector3();\n\tthis.b = ( b !== undefined ) ? b : new Vector3();\n\tthis.c = ( c !== undefined ) ? c : new Vector3();\n\n}\n\nObject.assign( Triangle, {\n\n\tgetNormal: function () {\n\n\t\tvar v0 = new Vector3();\n\n\t\treturn function getNormal( a, b, c, target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Triangle: .getNormal() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\ttarget.subVectors( c, b );\n\t\t\tv0.subVectors( a, b );\n\t\t\ttarget.cross( v0 );\n\n\t\t\tvar targetLengthSq = target.lengthSq();\n\t\t\tif ( targetLengthSq > 0 ) {\n\n\t\t\t\treturn target.multiplyScalar( 1 / Math.sqrt( targetLengthSq ) );\n\n\t\t\t}\n\n\t\t\treturn target.set( 0, 0, 0 );\n\n\t\t};\n\n\t}(),\n\n\t// static/instance method to calculate barycentric coordinates\n\t// based on: http://www.blackpawn.com/texts/pointinpoly/default.html\n\tgetBarycoord: function () {\n\n\t\tvar v0 = new Vector3();\n\t\tvar v1 = new Vector3();\n\t\tvar v2 = new Vector3();\n\n\t\treturn function getBarycoord( point, a, b, c, target ) {\n\n\t\t\tv0.subVectors( c, a );\n\t\t\tv1.subVectors( b, a );\n\t\t\tv2.subVectors( point, a );\n\n\t\t\tvar dot00 = v0.dot( v0 );\n\t\t\tvar dot01 = v0.dot( v1 );\n\t\t\tvar dot02 = v0.dot( v2 );\n\t\t\tvar dot11 = v1.dot( v1 );\n\t\t\tvar dot12 = v1.dot( v2 );\n\n\t\t\tvar denom = ( dot00 * dot11 - dot01 * dot01 );\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Triangle: .getBarycoord() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\t// collinear or singular triangle\n\t\t\tif ( denom === 0 ) {\n\n\t\t\t\t// arbitrary location outside of triangle?\n\t\t\t\t// not sure if this is the best idea, maybe should be returning undefined\n\t\t\t\treturn target.set( - 2, - 1, - 1 );\n\n\t\t\t}\n\n\t\t\tvar invDenom = 1 / denom;\n\t\t\tvar u = ( dot11 * dot02 - dot01 * dot12 ) * invDenom;\n\t\t\tvar v = ( dot00 * dot12 - dot01 * dot02 ) * invDenom;\n\n\t\t\t// barycentric coordinates must always sum to 1\n\t\t\treturn target.set( 1 - u - v, v, u );\n\n\t\t};\n\n\t}(),\n\n\tcontainsPoint: function () {\n\n\t\tvar v1 = new Vector3();\n\n\t\treturn function containsPoint( point, a, b, c ) {\n\n\t\t\tTriangle.getBarycoord( point, a, b, c, v1 );\n\n\t\t\treturn ( v1.x >= 0 ) && ( v1.y >= 0 ) && ( ( v1.x + v1.y ) <= 1 );\n\n\t\t};\n\n\t}()\n\n} );\n\nObject.assign( Triangle.prototype, {\n\n\tset: function ( a, b, c ) {\n\n\t\tthis.a.copy( a );\n\t\tthis.b.copy( b );\n\t\tthis.c.copy( c );\n\n\t\treturn this;\n\n\t},\n\n\tsetFromPointsAndIndices: function ( points, i0, i1, i2 ) {\n\n\t\tthis.a.copy( points[ i0 ] );\n\t\tthis.b.copy( points[ i1 ] );\n\t\tthis.c.copy( points[ i2 ] );\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( triangle ) {\n\n\t\tthis.a.copy( triangle.a );\n\t\tthis.b.copy( triangle.b );\n\t\tthis.c.copy( triangle.c );\n\n\t\treturn this;\n\n\t},\n\n\tgetArea: function () {\n\n\t\tvar v0 = new Vector3();\n\t\tvar v1 = new Vector3();\n\n\t\treturn function getArea() {\n\n\t\t\tv0.subVectors( this.c, this.b );\n\t\t\tv1.subVectors( this.a, this.b );\n\n\t\t\treturn v0.cross( v1 ).length() * 0.5;\n\n\t\t};\n\n\t}(),\n\n\tgetMidpoint: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Triangle: .getMidpoint() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.addVectors( this.a, this.b ).add( this.c ).multiplyScalar( 1 / 3 );\n\n\t},\n\n\tgetNormal: function ( target ) {\n\n\t\treturn Triangle.getNormal( this.a, this.b, this.c, target );\n\n\t},\n\n\tgetPlane: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Triangle: .getPlane() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.setFromCoplanarPoints( this.a, this.b, this.c );\n\n\t},\n\n\tgetBarycoord: function ( point, target ) {\n\n\t\treturn Triangle.getBarycoord( point, this.a, this.b, this.c, target );\n\n\t},\n\n\tcontainsPoint: function ( point ) {\n\n\t\treturn Triangle.containsPoint( point, this.a, this.b, this.c );\n\n\t},\n\n\tintersectsBox: function ( box ) {\n\n\t\treturn box.intersectsTriangle( this );\n\n\t},\n\n\tclosestPointToPoint: function () {\n\n\t\tvar plane = new Plane();\n\t\tvar edgeList = [ new Line3(), new Line3(), new Line3() ];\n\t\tvar projectedPoint = new Vector3();\n\t\tvar closestPoint = new Vector3();\n\n\t\treturn function closestPointToPoint( point, target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Triangle: .closestPointToPoint() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\tvar minDistance = Infinity;\n\n\t\t\t// project the point onto the plane of the triangle\n\n\t\t\tplane.setFromCoplanarPoints( this.a, this.b, this.c );\n\t\t\tplane.projectPoint( point, projectedPoint );\n\n\t\t\t// check if the projection lies within the triangle\n\n\t\t\tif ( this.containsPoint( projectedPoint ) === true ) {\n\n\t\t\t\t// if so, this is the closest point\n\n\t\t\t\ttarget.copy( projectedPoint );\n\n\t\t\t} else {\n\n\t\t\t\t// if not, the point falls outside the triangle. the target is the closest point to the triangle's edges or vertices\n\n\t\t\t\tedgeList[ 0 ].set( this.a, this.b );\n\t\t\t\tedgeList[ 1 ].set( this.b, this.c );\n\t\t\t\tedgeList[ 2 ].set( this.c, this.a );\n\n\t\t\t\tfor ( var i = 0; i < edgeList.length; i ++ ) {\n\n\t\t\t\t\tedgeList[ i ].closestPointToPoint( projectedPoint, true, closestPoint );\n\n\t\t\t\t\tvar distance = projectedPoint.distanceToSquared( closestPoint );\n\n\t\t\t\t\tif ( distance < minDistance ) {\n\n\t\t\t\t\t\tminDistance = distance;\n\n\t\t\t\t\t\ttarget.copy( closestPoint );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn target;\n\n\t\t};\n\n\t}(),\n\n\tequals: function ( triangle ) {\n\n\t\treturn triangle.a.equals( this.a ) && triangle.b.equals( this.b ) && triangle.c.equals( this.c );\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n * @author mikael emtinger / http://gomo.se/\n * @author jonobr1 / http://jonobr1.com/\n */\n\nfunction Mesh( geometry, material ) {\n\n\tObject3D.call( this );\n\n\tthis.type = 'Mesh';\n\n\tthis.geometry = geometry !== undefined ? geometry : new BufferGeometry();\n\tthis.material = material !== undefined ? material : new MeshBasicMaterial( { color: Math.random() * 0xffffff } );\n\n\tthis.drawMode = TrianglesDrawMode;\n\n\tthis.updateMorphTargets();\n\n}\n\nMesh.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Mesh,\n\n\tisMesh: true,\n\n\tsetDrawMode: function ( value ) {\n\n\t\tthis.drawMode = value;\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tObject3D.prototype.copy.call( this, source );\n\n\t\tthis.drawMode = source.drawMode;\n\n\t\tif ( source.morphTargetInfluences !== undefined ) {\n\n\t\t\tthis.morphTargetInfluences = source.morphTargetInfluences.slice();\n\n\t\t}\n\n\t\tif ( source.morphTargetDictionary !== undefined ) {\n\n\t\t\tthis.morphTargetDictionary = Object.assign( {}, source.morphTargetDictionary );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tupdateMorphTargets: function () {\n\n\t\tvar geometry = this.geometry;\n\t\tvar m, ml, name;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tvar morphAttributes = geometry.morphAttributes;\n\t\t\tvar keys = Object.keys( morphAttributes );\n\n\t\t\tif ( keys.length > 0 ) {\n\n\t\t\t\tvar morphAttribute = morphAttributes[ keys[ 0 ] ];\n\n\t\t\t\tif ( morphAttribute !== undefined ) {\n\n\t\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\t\tfor ( m = 0, ml = morphAttribute.length; m < ml; m ++ ) {\n\n\t\t\t\t\t\tname = morphAttribute[ m ].name || String( m );\n\n\t\t\t\t\t\tthis.morphTargetInfluences.push( 0 );\n\t\t\t\t\t\tthis.morphTargetDictionary[ name ] = m;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tvar morphTargets = geometry.morphTargets;\n\n\t\t\tif ( morphTargets !== undefined && morphTargets.length > 0 ) {\n\n\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\tfor ( m = 0, ml = morphTargets.length; m < ml; m ++ ) {\n\n\t\t\t\t\tname = morphTargets[ m ].name || String( m );\n\n\t\t\t\t\tthis.morphTargetInfluences.push( 0 );\n\t\t\t\t\tthis.morphTargetDictionary[ name ] = m;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\traycast: ( function () {\n\n\t\tvar inverseMatrix = new Matrix4();\n\t\tvar ray = new Ray();\n\t\tvar sphere = new Sphere();\n\n\t\tvar vA = new Vector3();\n\t\tvar vB = new Vector3();\n\t\tvar vC = new Vector3();\n\n\t\tvar tempA = new Vector3();\n\t\tvar tempB = new Vector3();\n\t\tvar tempC = new Vector3();\n\n\t\tvar uvA = new Vector2();\n\t\tvar uvB = new Vector2();\n\t\tvar uvC = new Vector2();\n\n\t\tvar barycoord = new Vector3();\n\n\t\tvar intersectionPoint = new Vector3();\n\t\tvar intersectionPointWorld = new Vector3();\n\n\t\tfunction uvIntersection( point, p1, p2, p3, uv1, uv2, uv3 ) {\n\n\t\t\tTriangle.getBarycoord( point, p1, p2, p3, barycoord );\n\n\t\t\tuv1.multiplyScalar( barycoord.x );\n\t\t\tuv2.multiplyScalar( barycoord.y );\n\t\t\tuv3.multiplyScalar( barycoord.z );\n\n\t\t\tuv1.add( uv2 ).add( uv3 );\n\n\t\t\treturn uv1.clone();\n\n\t\t}\n\n\t\tfunction checkIntersection( object, material, raycaster, ray, pA, pB, pC, point ) {\n\n\t\t\tvar intersect;\n\n\t\t\tif ( material.side === BackSide ) {\n\n\t\t\t\tintersect = ray.intersectTriangle( pC, pB, pA, true, point );\n\n\t\t\t} else {\n\n\t\t\t\tintersect = ray.intersectTriangle( pA, pB, pC, material.side !== DoubleSide, point );\n\n\t\t\t}\n\n\t\t\tif ( intersect === null ) return null;\n\n\t\t\tintersectionPointWorld.copy( point );\n\t\t\tintersectionPointWorld.applyMatrix4( object.matrixWorld );\n\n\t\t\tvar distance = raycaster.ray.origin.distanceTo( intersectionPointWorld );\n\n\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) return null;\n\n\t\t\treturn {\n\t\t\t\tdistance: distance,\n\t\t\t\tpoint: intersectionPointWorld.clone(),\n\t\t\t\tobject: object\n\t\t\t};\n\n\t\t}\n\n\t\tfunction checkBufferGeometryIntersection( object, raycaster, ray, position, uv, a, b, c ) {\n\n\t\t\tvA.fromBufferAttribute( position, a );\n\t\t\tvB.fromBufferAttribute( position, b );\n\t\t\tvC.fromBufferAttribute( position, c );\n\n\t\t\tvar intersection = checkIntersection( object, object.material, raycaster, ray, vA, vB, vC, intersectionPoint );\n\n\t\t\tif ( intersection ) {\n\n\t\t\t\tif ( uv ) {\n\n\t\t\t\t\tuvA.fromBufferAttribute( uv, a );\n\t\t\t\t\tuvB.fromBufferAttribute( uv, b );\n\t\t\t\t\tuvC.fromBufferAttribute( uv, c );\n\n\t\t\t\t\tintersection.uv = uvIntersection( intersectionPoint, vA, vB, vC, uvA, uvB, uvC );\n\n\t\t\t\t}\n\n\t\t\t\tvar face = new Face3( a, b, c );\n\t\t\t\tTriangle.getNormal( vA, vB, vC, face.normal );\n\n\t\t\t\tintersection.face = face;\n\t\t\t\tintersection.faceIndex = a;\n\n\t\t\t}\n\n\t\t\treturn intersection;\n\n\t\t}\n\n\t\treturn function raycast( raycaster, intersects ) {\n\n\t\t\tvar geometry = this.geometry;\n\t\t\tvar material = this.material;\n\t\t\tvar matrixWorld = this.matrixWorld;\n\n\t\t\tif ( material === undefined ) return;\n\n\t\t\t// Checking boundingSphere distance to ray\n\n\t\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t\tsphere.copy( geometry.boundingSphere );\n\t\t\tsphere.applyMatrix4( matrixWorld );\n\n\t\t\tif ( raycaster.ray.intersectsSphere( sphere ) === false ) return;\n\n\t\t\t//\n\n\t\t\tinverseMatrix.getInverse( matrixWorld );\n\t\t\tray.copy( raycaster.ray ).applyMatrix4( inverseMatrix );\n\n\t\t\t// Check boundingBox before continuing\n\n\t\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\t\tif ( ray.intersectsBox( geometry.boundingBox ) === false ) return;\n\n\t\t\t}\n\n\t\t\tvar intersection;\n\n\t\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\t\tvar a, b, c;\n\t\t\t\tvar index = geometry.index;\n\t\t\t\tvar position = geometry.attributes.position;\n\t\t\t\tvar uv = geometry.attributes.uv;\n\t\t\t\tvar i, l;\n\n\t\t\t\tif ( index !== null ) {\n\n\t\t\t\t\t// indexed buffer geometry\n\n\t\t\t\t\tfor ( i = 0, l = index.count; i < l; i += 3 ) {\n\n\t\t\t\t\t\ta = index.getX( i );\n\t\t\t\t\t\tb = index.getX( i + 1 );\n\t\t\t\t\t\tc = index.getX( i + 2 );\n\n\t\t\t\t\t\tintersection = checkBufferGeometryIntersection( this, raycaster, ray, position, uv, a, b, c );\n\n\t\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\t\tintersection.faceIndex = Math.floor( i / 3 ); // triangle number in indices buffer semantics\n\t\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( position !== undefined ) {\n\n\t\t\t\t\t// non-indexed buffer geometry\n\n\t\t\t\t\tfor ( i = 0, l = position.count; i < l; i += 3 ) {\n\n\t\t\t\t\t\ta = i;\n\t\t\t\t\t\tb = i + 1;\n\t\t\t\t\t\tc = i + 2;\n\n\t\t\t\t\t\tintersection = checkBufferGeometryIntersection( this, raycaster, ray, position, uv, a, b, c );\n\n\t\t\t\t\t\tif ( intersection ) intersects.push( intersection );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\t\tvar fvA, fvB, fvC;\n\t\t\t\tvar isMultiMaterial = Array.isArray( material );\n\n\t\t\t\tvar vertices = geometry.vertices;\n\t\t\t\tvar faces = geometry.faces;\n\t\t\t\tvar uvs;\n\n\t\t\t\tvar faceVertexUvs = geometry.faceVertexUvs[ 0 ];\n\t\t\t\tif ( faceVertexUvs.length > 0 ) uvs = faceVertexUvs;\n\n\t\t\t\tfor ( var f = 0, fl = faces.length; f < fl; f ++ ) {\n\n\t\t\t\t\tvar face = faces[ f ];\n\t\t\t\t\tvar faceMaterial = isMultiMaterial ? material[ face.materialIndex ] : material;\n\n\t\t\t\t\tif ( faceMaterial === undefined ) continue;\n\n\t\t\t\t\tfvA = vertices[ face.a ];\n\t\t\t\t\tfvB = vertices[ face.b ];\n\t\t\t\t\tfvC = vertices[ face.c ];\n\n\t\t\t\t\tif ( faceMaterial.morphTargets === true ) {\n\n\t\t\t\t\t\tvar morphTargets = geometry.morphTargets;\n\t\t\t\t\t\tvar morphInfluences = this.morphTargetInfluences;\n\n\t\t\t\t\t\tvA.set( 0, 0, 0 );\n\t\t\t\t\t\tvB.set( 0, 0, 0 );\n\t\t\t\t\t\tvC.set( 0, 0, 0 );\n\n\t\t\t\t\t\tfor ( var t = 0, tl = morphTargets.length; t < tl; t ++ ) {\n\n\t\t\t\t\t\t\tvar influence = morphInfluences[ t ];\n\n\t\t\t\t\t\t\tif ( influence === 0 ) continue;\n\n\t\t\t\t\t\t\tvar targets = morphTargets[ t ].vertices;\n\n\t\t\t\t\t\t\tvA.addScaledVector( tempA.subVectors( targets[ face.a ], fvA ), influence );\n\t\t\t\t\t\t\tvB.addScaledVector( tempB.subVectors( targets[ face.b ], fvB ), influence );\n\t\t\t\t\t\t\tvC.addScaledVector( tempC.subVectors( targets[ face.c ], fvC ), influence );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvA.add( fvA );\n\t\t\t\t\t\tvB.add( fvB );\n\t\t\t\t\t\tvC.add( fvC );\n\n\t\t\t\t\t\tfvA = vA;\n\t\t\t\t\t\tfvB = vB;\n\t\t\t\t\t\tfvC = vC;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tintersection = checkIntersection( this, faceMaterial, raycaster, ray, fvA, fvB, fvC, intersectionPoint );\n\n\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\tif ( uvs && uvs[ f ] ) {\n\n\t\t\t\t\t\t\tvar uvs_f = uvs[ f ];\n\t\t\t\t\t\t\tuvA.copy( uvs_f[ 0 ] );\n\t\t\t\t\t\t\tuvB.copy( uvs_f[ 1 ] );\n\t\t\t\t\t\t\tuvC.copy( uvs_f[ 2 ] );\n\n\t\t\t\t\t\t\tintersection.uv = uvIntersection( intersectionPoint, fvA, fvB, fvC, uvA, uvB, uvC );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tintersection.face = face;\n\t\t\t\t\t\tintersection.faceIndex = f;\n\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t}() ),\n\n\tclone: function () {\n\n\t\treturn new this.constructor( this.geometry, this.material ).copy( this );\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebGLBackground( renderer, state, geometries, premultipliedAlpha ) {\n\n\tvar clearColor = new Color( 0x000000 );\n\tvar clearAlpha = 0;\n\n\tvar planeCamera, planeMesh;\n\tvar boxMesh;\n\n\tfunction render( renderList, scene, camera, forceClear ) {\n\n\t\tvar background = scene.background;\n\n\t\tif ( background === null ) {\n\n\t\t\tsetClear( clearColor, clearAlpha );\n\n\t\t} else if ( background && background.isColor ) {\n\n\t\t\tsetClear( background, 1 );\n\t\t\tforceClear = true;\n\n\t\t}\n\n\t\tif ( renderer.autoClear || forceClear ) {\n\n\t\t\trenderer.clear( renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil );\n\n\t\t}\n\n\t\tif ( background && background.isCubeTexture ) {\n\n\t\t\tif ( boxMesh === undefined ) {\n\n\t\t\t\tboxMesh = new Mesh(\n\t\t\t\t\tnew BoxBufferGeometry( 1, 1, 1 ),\n\t\t\t\t\tnew ShaderMaterial( {\n\t\t\t\t\t\tuniforms: ShaderLib.cube.uniforms,\n\t\t\t\t\t\tvertexShader: ShaderLib.cube.vertexShader,\n\t\t\t\t\t\tfragmentShader: ShaderLib.cube.fragmentShader,\n\t\t\t\t\t\tside: BackSide,\n\t\t\t\t\t\tdepthTest: true,\n\t\t\t\t\t\tdepthWrite: false,\n\t\t\t\t\t\tfog: false\n\t\t\t\t\t} )\n\t\t\t\t);\n\n\t\t\t\tboxMesh.geometry.removeAttribute( 'normal' );\n\t\t\t\tboxMesh.geometry.removeAttribute( 'uv' );\n\n\t\t\t\tboxMesh.onBeforeRender = function ( renderer, scene, camera ) {\n\n\t\t\t\t\tthis.matrixWorld.copyPosition( camera.matrixWorld );\n\n\t\t\t\t};\n\n\t\t\t\tgeometries.update( boxMesh.geometry );\n\n\t\t\t}\n\n\t\t\tboxMesh.material.uniforms.tCube.value = background;\n\n\t\t\trenderList.push( boxMesh, boxMesh.geometry, boxMesh.material, 0, null );\n\n\t\t} else if ( background && background.isTexture ) {\n\n\t\t\tif ( planeCamera === undefined ) {\n\n\t\t\t\tplaneCamera = new OrthographicCamera( - 1, 1, 1, - 1, 0, 1 );\n\n\t\t\t\tplaneMesh = new Mesh(\n\t\t\t\t\tnew PlaneBufferGeometry( 2, 2 ),\n\t\t\t\t\tnew MeshBasicMaterial( { depthTest: false, depthWrite: false, fog: false } )\n\t\t\t\t);\n\n\t\t\t\tgeometries.update( planeMesh.geometry );\n\n\t\t\t}\n\n\t\t\tplaneMesh.material.map = background;\n\n\t\t\t// TODO Push this to renderList\n\n\t\t\trenderer.renderBufferDirect( planeCamera, null, planeMesh.geometry, planeMesh.material, planeMesh, null );\n\n\t\t}\n\n\t}\n\n\tfunction setClear( color, alpha ) {\n\n\t\tstate.buffers.color.setClear( color.r, color.g, color.b, alpha, premultipliedAlpha );\n\n\t}\n\n\treturn {\n\n\t\tgetClearColor: function () {\n\n\t\t\treturn clearColor;\n\n\t\t},\n\t\tsetClearColor: function ( color, alpha ) {\n\n\t\t\tclearColor.set( color );\n\t\t\tclearAlpha = alpha !== undefined ? alpha : 1;\n\t\t\tsetClear( clearColor, clearAlpha );\n\n\t\t},\n\t\tgetClearAlpha: function () {\n\n\t\t\treturn clearAlpha;\n\n\t\t},\n\t\tsetClearAlpha: function ( alpha ) {\n\n\t\t\tclearAlpha = alpha;\n\t\t\tsetClear( clearColor, clearAlpha );\n\n\t\t},\n\t\trender: render\n\n\t};\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebGLBufferRenderer( gl, extensions, info ) {\n\n\tvar mode;\n\n\tfunction setMode( value ) {\n\n\t\tmode = value;\n\n\t}\n\n\tfunction render( start, count ) {\n\n\t\tgl.drawArrays( mode, start, count );\n\n\t\tinfo.update( count, mode );\n\n\t}\n\n\tfunction renderInstances( geometry, start, count ) {\n\n\t\tvar extension = extensions.get( 'ANGLE_instanced_arrays' );\n\n\t\tif ( extension === null ) {\n\n\t\t\tconsole.error( 'THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tvar position = geometry.attributes.position;\n\n\t\tif ( position.isInterleavedBufferAttribute ) {\n\n\t\t\tcount = position.data.count;\n\n\t\t\textension.drawArraysInstancedANGLE( mode, 0, count, geometry.maxInstancedCount );\n\n\t\t} else {\n\n\t\t\textension.drawArraysInstancedANGLE( mode, start, count, geometry.maxInstancedCount );\n\n\t\t}\n\n\t\tinfo.update( count, mode, geometry.maxInstancedCount );\n\n\t}\n\n\t//\n\n\tthis.setMode = setMode;\n\tthis.render = render;\n\tthis.renderInstances = renderInstances;\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebGLCapabilities( gl, extensions, parameters ) {\n\n\tvar maxAnisotropy;\n\n\tfunction getMaxAnisotropy() {\n\n\t\tif ( maxAnisotropy !== undefined ) return maxAnisotropy;\n\n\t\tvar extension = extensions.get( 'EXT_texture_filter_anisotropic' );\n\n\t\tif ( extension !== null ) {\n\n\t\t\tmaxAnisotropy = gl.getParameter( extension.MAX_TEXTURE_MAX_ANISOTROPY_EXT );\n\n\t\t} else {\n\n\t\t\tmaxAnisotropy = 0;\n\n\t\t}\n\n\t\treturn maxAnisotropy;\n\n\t}\n\n\tfunction getMaxPrecision( precision ) {\n\n\t\tif ( precision === 'highp' ) {\n\n\t\t\tif ( gl.getShaderPrecisionFormat( gl.VERTEX_SHADER, gl.HIGH_FLOAT ).precision > 0 &&\n\t\t\t gl.getShaderPrecisionFormat( gl.FRAGMENT_SHADER, gl.HIGH_FLOAT ).precision > 0 ) {\n\n\t\t\t\treturn 'highp';\n\n\t\t\t}\n\n\t\t\tprecision = 'mediump';\n\n\t\t}\n\n\t\tif ( precision === 'mediump' ) {\n\n\t\t\tif ( gl.getShaderPrecisionFormat( gl.VERTEX_SHADER, gl.MEDIUM_FLOAT ).precision > 0 &&\n\t\t\t gl.getShaderPrecisionFormat( gl.FRAGMENT_SHADER, gl.MEDIUM_FLOAT ).precision > 0 ) {\n\n\t\t\t\treturn 'mediump';\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn 'lowp';\n\n\t}\n\n\tvar precision = parameters.precision !== undefined ? parameters.precision : 'highp';\n\tvar maxPrecision = getMaxPrecision( precision );\n\n\tif ( maxPrecision !== precision ) {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer:', precision, 'not supported, using', maxPrecision, 'instead.' );\n\t\tprecision = maxPrecision;\n\n\t}\n\n\tvar logarithmicDepthBuffer = parameters.logarithmicDepthBuffer === true;\n\n\tvar maxTextures = gl.getParameter( gl.MAX_TEXTURE_IMAGE_UNITS );\n\tvar maxVertexTextures = gl.getParameter( gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS );\n\tvar maxTextureSize = gl.getParameter( gl.MAX_TEXTURE_SIZE );\n\tvar maxCubemapSize = gl.getParameter( gl.MAX_CUBE_MAP_TEXTURE_SIZE );\n\n\tvar maxAttributes = gl.getParameter( gl.MAX_VERTEX_ATTRIBS );\n\tvar maxVertexUniforms = gl.getParameter( gl.MAX_VERTEX_UNIFORM_VECTORS );\n\tvar maxVaryings = gl.getParameter( gl.MAX_VARYING_VECTORS );\n\tvar maxFragmentUniforms = gl.getParameter( gl.MAX_FRAGMENT_UNIFORM_VECTORS );\n\n\tvar vertexTextures = maxVertexTextures > 0;\n\tvar floatFragmentTextures = !! extensions.get( 'OES_texture_float' );\n\tvar floatVertexTextures = vertexTextures && floatFragmentTextures;\n\n\treturn {\n\n\t\tgetMaxAnisotropy: getMaxAnisotropy,\n\t\tgetMaxPrecision: getMaxPrecision,\n\n\t\tprecision: precision,\n\t\tlogarithmicDepthBuffer: logarithmicDepthBuffer,\n\n\t\tmaxTextures: maxTextures,\n\t\tmaxVertexTextures: maxVertexTextures,\n\t\tmaxTextureSize: maxTextureSize,\n\t\tmaxCubemapSize: maxCubemapSize,\n\n\t\tmaxAttributes: maxAttributes,\n\t\tmaxVertexUniforms: maxVertexUniforms,\n\t\tmaxVaryings: maxVaryings,\n\t\tmaxFragmentUniforms: maxFragmentUniforms,\n\n\t\tvertexTextures: vertexTextures,\n\t\tfloatFragmentTextures: floatFragmentTextures,\n\t\tfloatVertexTextures: floatVertexTextures\n\n\t};\n\n}\n\n/**\n * @author tschw\n */\n\nfunction WebGLClipping() {\n\n\tvar scope = this,\n\n\t\tglobalState = null,\n\t\tnumGlobalPlanes = 0,\n\t\tlocalClippingEnabled = false,\n\t\trenderingShadows = false,\n\n\t\tplane = new Plane(),\n\t\tviewNormalMatrix = new Matrix3(),\n\n\t\tuniform = { value: null, needsUpdate: false };\n\n\tthis.uniform = uniform;\n\tthis.numPlanes = 0;\n\tthis.numIntersection = 0;\n\n\tthis.init = function ( planes, enableLocalClipping, camera ) {\n\n\t\tvar enabled =\n\t\t\tplanes.length !== 0 ||\n\t\t\tenableLocalClipping ||\n\t\t\t// enable state of previous frame - the clipping code has to\n\t\t\t// run another frame in order to reset the state:\n\t\t\tnumGlobalPlanes !== 0 ||\n\t\t\tlocalClippingEnabled;\n\n\t\tlocalClippingEnabled = enableLocalClipping;\n\n\t\tglobalState = projectPlanes( planes, camera, 0 );\n\t\tnumGlobalPlanes = planes.length;\n\n\t\treturn enabled;\n\n\t};\n\n\tthis.beginShadows = function () {\n\n\t\trenderingShadows = true;\n\t\tprojectPlanes( null );\n\n\t};\n\n\tthis.endShadows = function () {\n\n\t\trenderingShadows = false;\n\t\tresetGlobalState();\n\n\t};\n\n\tthis.setState = function ( planes, clipIntersection, clipShadows, camera, cache, fromCache ) {\n\n\t\tif ( ! localClippingEnabled || planes === null || planes.length === 0 || renderingShadows && ! clipShadows ) {\n\n\t\t\t// there's no local clipping\n\n\t\t\tif ( renderingShadows ) {\n\n\t\t\t\t// there's no global clipping\n\n\t\t\t\tprojectPlanes( null );\n\n\t\t\t} else {\n\n\t\t\t\tresetGlobalState();\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tvar nGlobal = renderingShadows ? 0 : numGlobalPlanes,\n\t\t\t\tlGlobal = nGlobal * 4,\n\n\t\t\t\tdstArray = cache.clippingState || null;\n\n\t\t\tuniform.value = dstArray; // ensure unique state\n\n\t\t\tdstArray = projectPlanes( planes, camera, lGlobal, fromCache );\n\n\t\t\tfor ( var i = 0; i !== lGlobal; ++ i ) {\n\n\t\t\t\tdstArray[ i ] = globalState[ i ];\n\n\t\t\t}\n\n\t\t\tcache.clippingState = dstArray;\n\t\t\tthis.numIntersection = clipIntersection ? this.numPlanes : 0;\n\t\t\tthis.numPlanes += nGlobal;\n\n\t\t}\n\n\n\t};\n\n\tfunction resetGlobalState() {\n\n\t\tif ( uniform.value !== globalState ) {\n\n\t\t\tuniform.value = globalState;\n\t\t\tuniform.needsUpdate = numGlobalPlanes > 0;\n\n\t\t}\n\n\t\tscope.numPlanes = numGlobalPlanes;\n\t\tscope.numIntersection = 0;\n\n\t}\n\n\tfunction projectPlanes( planes, camera, dstOffset, skipTransform ) {\n\n\t\tvar nPlanes = planes !== null ? planes.length : 0,\n\t\t\tdstArray = null;\n\n\t\tif ( nPlanes !== 0 ) {\n\n\t\t\tdstArray = uniform.value;\n\n\t\t\tif ( skipTransform !== true || dstArray === null ) {\n\n\t\t\t\tvar flatSize = dstOffset + nPlanes * 4,\n\t\t\t\t\tviewMatrix = camera.matrixWorldInverse;\n\n\t\t\t\tviewNormalMatrix.getNormalMatrix( viewMatrix );\n\n\t\t\t\tif ( dstArray === null || dstArray.length < flatSize ) {\n\n\t\t\t\t\tdstArray = new Float32Array( flatSize );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( var i = 0, i4 = dstOffset; i !== nPlanes; ++ i, i4 += 4 ) {\n\n\t\t\t\t\tplane.copy( planes[ i ] ).applyMatrix4( viewMatrix, viewNormalMatrix );\n\n\t\t\t\t\tplane.normal.toArray( dstArray, i4 );\n\t\t\t\t\tdstArray[ i4 + 3 ] = plane.constant;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tuniform.value = dstArray;\n\t\t\tuniform.needsUpdate = true;\n\n\t\t}\n\n\t\tscope.numPlanes = nPlanes;\n\n\t\treturn dstArray;\n\n\t}\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebGLExtensions( gl ) {\n\n\tvar extensions = {};\n\n\treturn {\n\n\t\tget: function ( name ) {\n\n\t\t\tif ( extensions[ name ] !== undefined ) {\n\n\t\t\t\treturn extensions[ name ];\n\n\t\t\t}\n\n\t\t\tvar extension;\n\n\t\t\tswitch ( name ) {\n\n\t\t\t\tcase 'WEBGL_depth_texture':\n\t\t\t\t\textension = gl.getExtension( 'WEBGL_depth_texture' ) || gl.getExtension( 'MOZ_WEBGL_depth_texture' ) || gl.getExtension( 'WEBKIT_WEBGL_depth_texture' );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'EXT_texture_filter_anisotropic':\n\t\t\t\t\textension = gl.getExtension( 'EXT_texture_filter_anisotropic' ) || gl.getExtension( 'MOZ_EXT_texture_filter_anisotropic' ) || gl.getExtension( 'WEBKIT_EXT_texture_filter_anisotropic' );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'WEBGL_compressed_texture_s3tc':\n\t\t\t\t\textension = gl.getExtension( 'WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'MOZ_WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_s3tc' );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'WEBGL_compressed_texture_pvrtc':\n\t\t\t\t\textension = gl.getExtension( 'WEBGL_compressed_texture_pvrtc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_pvrtc' );\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\textension = gl.getExtension( name );\n\n\t\t\t}\n\n\t\t\tif ( extension === null ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: ' + name + ' extension not supported.' );\n\n\t\t\t}\n\n\t\t\textensions[ name ] = extension;\n\n\t\t\treturn extension;\n\n\t\t}\n\n\t};\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebGLGeometries( gl, attributes, info ) {\n\n\tvar geometries = {};\n\tvar wireframeAttributes = {};\n\n\tfunction onGeometryDispose( event ) {\n\n\t\tvar geometry = event.target;\n\t\tvar buffergeometry = geometries[ geometry.id ];\n\n\t\tif ( buffergeometry.index !== null ) {\n\n\t\t\tattributes.remove( buffergeometry.index );\n\n\t\t}\n\n\t\tfor ( var name in buffergeometry.attributes ) {\n\n\t\t\tattributes.remove( buffergeometry.attributes[ name ] );\n\n\t\t}\n\n\t\tgeometry.removeEventListener( 'dispose', onGeometryDispose );\n\n\t\tdelete geometries[ geometry.id ];\n\n\t\t// TODO Remove duplicate code\n\n\t\tvar attribute = wireframeAttributes[ geometry.id ];\n\n\t\tif ( attribute ) {\n\n\t\t\tattributes.remove( attribute );\n\t\t\tdelete wireframeAttributes[ geometry.id ];\n\n\t\t}\n\n\t\tattribute = wireframeAttributes[ buffergeometry.id ];\n\n\t\tif ( attribute ) {\n\n\t\t\tattributes.remove( attribute );\n\t\t\tdelete wireframeAttributes[ buffergeometry.id ];\n\n\t\t}\n\n\t\t//\n\n\t\tinfo.memory.geometries --;\n\n\t}\n\n\tfunction get( object, geometry ) {\n\n\t\tvar buffergeometry = geometries[ geometry.id ];\n\n\t\tif ( buffergeometry ) return buffergeometry;\n\n\t\tgeometry.addEventListener( 'dispose', onGeometryDispose );\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tbuffergeometry = geometry;\n\n\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\tif ( geometry._bufferGeometry === undefined ) {\n\n\t\t\t\tgeometry._bufferGeometry = new BufferGeometry().setFromObject( object );\n\n\t\t\t}\n\n\t\t\tbuffergeometry = geometry._bufferGeometry;\n\n\t\t}\n\n\t\tgeometries[ geometry.id ] = buffergeometry;\n\n\t\tinfo.memory.geometries ++;\n\n\t\treturn buffergeometry;\n\n\t}\n\n\tfunction update( geometry ) {\n\n\t\tvar index = geometry.index;\n\t\tvar geometryAttributes = geometry.attributes;\n\n\t\tif ( index !== null ) {\n\n\t\t\tattributes.update( index, gl.ELEMENT_ARRAY_BUFFER );\n\n\t\t}\n\n\t\tfor ( var name in geometryAttributes ) {\n\n\t\t\tattributes.update( geometryAttributes[ name ], gl.ARRAY_BUFFER );\n\n\t\t}\n\n\t\t// morph targets\n\n\t\tvar morphAttributes = geometry.morphAttributes;\n\n\t\tfor ( var name in morphAttributes ) {\n\n\t\t\tvar array = morphAttributes[ name ];\n\n\t\t\tfor ( var i = 0, l = array.length; i < l; i ++ ) {\n\n\t\t\t\tattributes.update( array[ i ], gl.ARRAY_BUFFER );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction getWireframeAttribute( geometry ) {\n\n\t\tvar attribute = wireframeAttributes[ geometry.id ];\n\n\t\tif ( attribute ) return attribute;\n\n\t\tvar indices = [];\n\n\t\tvar geometryIndex = geometry.index;\n\t\tvar geometryAttributes = geometry.attributes;\n\n\t\t// console.time( 'wireframe' );\n\n\t\tif ( geometryIndex !== null ) {\n\n\t\t\tvar array = geometryIndex.array;\n\n\t\t\tfor ( var i = 0, l = array.length; i < l; i += 3 ) {\n\n\t\t\t\tvar a = array[ i + 0 ];\n\t\t\t\tvar b = array[ i + 1 ];\n\t\t\t\tvar c = array[ i + 2 ];\n\n\t\t\t\tindices.push( a, b, b, c, c, a );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tvar array = geometryAttributes.position.array;\n\n\t\t\tfor ( var i = 0, l = ( array.length / 3 ) - 1; i < l; i += 3 ) {\n\n\t\t\t\tvar a = i + 0;\n\t\t\t\tvar b = i + 1;\n\t\t\t\tvar c = i + 2;\n\n\t\t\t\tindices.push( a, b, b, c, c, a );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// console.timeEnd( 'wireframe' );\n\n\t\tattribute = new ( arrayMax( indices ) > 65535 ? Uint32BufferAttribute : Uint16BufferAttribute )( indices, 1 );\n\n\t\tattributes.update( attribute, gl.ELEMENT_ARRAY_BUFFER );\n\n\t\twireframeAttributes[ geometry.id ] = attribute;\n\n\t\treturn attribute;\n\n\t}\n\n\treturn {\n\n\t\tget: get,\n\t\tupdate: update,\n\n\t\tgetWireframeAttribute: getWireframeAttribute\n\n\t};\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebGLIndexedBufferRenderer( gl, extensions, info ) {\n\n\tvar mode;\n\n\tfunction setMode( value ) {\n\n\t\tmode = value;\n\n\t}\n\n\tvar type, bytesPerElement;\n\n\tfunction setIndex( value ) {\n\n\t\ttype = value.type;\n\t\tbytesPerElement = value.bytesPerElement;\n\n\t}\n\n\tfunction render( start, count ) {\n\n\t\tgl.drawElements( mode, count, type, start * bytesPerElement );\n\n\t\tinfo.update( count, mode );\n\n\t}\n\n\tfunction renderInstances( geometry, start, count ) {\n\n\t\tvar extension = extensions.get( 'ANGLE_instanced_arrays' );\n\n\t\tif ( extension === null ) {\n\n\t\t\tconsole.error( 'THREE.WebGLIndexedBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\textension.drawElementsInstancedANGLE( mode, count, type, start * bytesPerElement, geometry.maxInstancedCount );\n\n\t\tinfo.update( count, mode, geometry.maxInstancedCount );\n\n\t}\n\n\t//\n\n\tthis.setMode = setMode;\n\tthis.setIndex = setIndex;\n\tthis.render = render;\n\tthis.renderInstances = renderInstances;\n\n}\n\n/**\n * @author Mugen87 / https://github.com/Mugen87\n */\n\nfunction WebGLInfo( gl ) {\n\n\tvar memory = {\n\t\tgeometries: 0,\n\t\ttextures: 0\n\t};\n\n\tvar render = {\n\t\tframe: 0,\n\t\tcalls: 0,\n\t\ttriangles: 0,\n\t\tpoints: 0,\n\t\tlines: 0\n\t};\n\n\tfunction update( count, mode, instanceCount ) {\n\n\t\tinstanceCount = instanceCount || 1;\n\n\t\trender.calls ++;\n\n\t\tswitch ( mode ) {\n\n\t\t\tcase gl.TRIANGLES:\n\t\t\t\trender.triangles += instanceCount * ( count / 3 );\n\t\t\t\tbreak;\n\n\t\t\tcase gl.TRIANGLE_STRIP:\n\t\t\tcase gl.TRIANGLE_FAN:\n\t\t\t\trender.triangles += instanceCount * ( count - 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase gl.LINES:\n\t\t\t\trender.lines += instanceCount * ( count / 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase gl.LINE_STRIP:\n\t\t\t\trender.lines += instanceCount * ( count - 1 );\n\t\t\t\tbreak;\n\n\t\t\tcase gl.LINE_LOOP:\n\t\t\t\trender.lines += instanceCount * count;\n\t\t\t\tbreak;\n\n\t\t\tcase gl.POINTS:\n\t\t\t\trender.points += instanceCount * count;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tconsole.error( 'THREE.WebGLInfo: Unknown draw mode:', mode );\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\tfunction reset() {\n\n\t\trender.frame ++;\n\t\trender.calls = 0;\n\t\trender.triangles = 0;\n\t\trender.points = 0;\n\t\trender.lines = 0;\n\n\t}\n\n\treturn {\n\t\tmemory: memory,\n\t\trender: render,\n\t\tprograms: null,\n\t\tautoReset: true,\n\t\treset: reset,\n\t\tupdate: update\n\t};\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction absNumericalSort( a, b ) {\n\n\treturn Math.abs( b[ 1 ] ) - Math.abs( a[ 1 ] );\n\n}\n\nfunction WebGLMorphtargets( gl ) {\n\n\tvar influencesList = {};\n\tvar morphInfluences = new Float32Array( 8 );\n\n\tfunction update( object, geometry, material, program ) {\n\n\t\tvar objectInfluences = object.morphTargetInfluences;\n\n\t\tvar length = objectInfluences.length;\n\n\t\tvar influences = influencesList[ geometry.id ];\n\n\t\tif ( influences === undefined ) {\n\n\t\t\t// initialise list\n\n\t\t\tinfluences = [];\n\n\t\t\tfor ( var i = 0; i < length; i ++ ) {\n\n\t\t\t\tinfluences[ i ] = [ i, 0 ];\n\n\t\t\t}\n\n\t\t\tinfluencesList[ geometry.id ] = influences;\n\n\t\t}\n\n\t\tvar morphTargets = material.morphTargets && geometry.morphAttributes.position;\n\t\tvar morphNormals = material.morphNormals && geometry.morphAttributes.normal;\n\n\t\t// Remove current morphAttributes\n\n\t\tfor ( var i = 0; i < length; i ++ ) {\n\n\t\t\tvar influence = influences[ i ];\n\n\t\t\tif ( influence[ 1 ] !== 0 ) {\n\n\t\t\t\tif ( morphTargets ) geometry.removeAttribute( 'morphTarget' + i );\n\t\t\t\tif ( morphNormals ) geometry.removeAttribute( 'morphNormal' + i );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Collect influences\n\n\t\tfor ( var i = 0; i < length; i ++ ) {\n\n\t\t\tvar influence = influences[ i ];\n\n\t\t\tinfluence[ 0 ] = i;\n\t\t\tinfluence[ 1 ] = objectInfluences[ i ];\n\n\t\t}\n\n\t\tinfluences.sort( absNumericalSort );\n\n\t\t// Add morphAttributes\n\n\t\tfor ( var i = 0; i < 8; i ++ ) {\n\n\t\t\tvar influence = influences[ i ];\n\n\t\t\tif ( influence ) {\n\n\t\t\t\tvar index = influence[ 0 ];\n\t\t\t\tvar value = influence[ 1 ];\n\n\t\t\t\tif ( value ) {\n\n\t\t\t\t\tif ( morphTargets ) geometry.addAttribute( 'morphTarget' + i, morphTargets[ index ] );\n\t\t\t\t\tif ( morphNormals ) geometry.addAttribute( 'morphNormal' + i, morphNormals[ index ] );\n\n\t\t\t\t\tmorphInfluences[ i ] = value;\n\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tmorphInfluences[ i ] = 0;\n\n\t\t}\n\n\t\tprogram.getUniforms().setValue( gl, 'morphTargetInfluences', morphInfluences );\n\n\t}\n\n\treturn {\n\n\t\tupdate: update\n\n\t};\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebGLObjects( geometries, info ) {\n\n\tvar updateList = {};\n\n\tfunction update( object ) {\n\n\t\tvar frame = info.render.frame;\n\n\t\tvar geometry = object.geometry;\n\t\tvar buffergeometry = geometries.get( object, geometry );\n\n\t\t// Update once per frame\n\n\t\tif ( updateList[ buffergeometry.id ] !== frame ) {\n\n\t\t\tif ( geometry.isGeometry ) {\n\n\t\t\t\tbuffergeometry.updateFromObject( object );\n\n\t\t\t}\n\n\t\t\tgeometries.update( buffergeometry );\n\n\t\t\tupdateList[ buffergeometry.id ] = frame;\n\n\t\t}\n\n\t\treturn buffergeometry;\n\n\t}\n\n\tfunction dispose() {\n\n\t\tupdateList = {};\n\n\t}\n\n\treturn {\n\n\t\tupdate: update,\n\t\tdispose: dispose\n\n\t};\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction CubeTexture( images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ) {\n\n\timages = images !== undefined ? images : [];\n\tmapping = mapping !== undefined ? mapping : CubeReflectionMapping;\n\n\tTexture.call( this, images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding );\n\n\tthis.flipY = false;\n\n}\n\nCubeTexture.prototype = Object.create( Texture.prototype );\nCubeTexture.prototype.constructor = CubeTexture;\n\nCubeTexture.prototype.isCubeTexture = true;\n\nObject.defineProperty( CubeTexture.prototype, 'images', {\n\n\tget: function () {\n\n\t\treturn this.image;\n\n\t},\n\n\tset: function ( value ) {\n\n\t\tthis.image = value;\n\n\t}\n\n} );\n\n/**\n * @author tschw\n *\n * Uniforms of a program.\n * Those form a tree structure with a special top-level container for the root,\n * which you get by calling 'new WebGLUniforms( gl, program, renderer )'.\n *\n *\n * Properties of inner nodes including the top-level container:\n *\n * .seq - array of nested uniforms\n * .map - nested uniforms by name\n *\n *\n * Methods of all nodes except the top-level container:\n *\n * .setValue( gl, value, [renderer] )\n *\n * \t\tuploads a uniform value(s)\n * \tthe 'renderer' parameter is needed for sampler uniforms\n *\n *\n * Static methods of the top-level container (renderer factorizations):\n *\n * .upload( gl, seq, values, renderer )\n *\n * \t\tsets uniforms in 'seq' to 'values[id].value'\n *\n * .seqWithValue( seq, values ) : filteredSeq\n *\n * \t\tfilters 'seq' entries with corresponding entry in values\n *\n *\n * Methods of the top-level container (renderer factorizations):\n *\n * .setValue( gl, name, value )\n *\n * \t\tsets uniform with name 'name' to 'value'\n *\n * .set( gl, obj, prop )\n *\n * \t\tsets uniform from object and property with same name than uniform\n *\n * .setOptional( gl, obj, prop )\n *\n * \t\tlike .set for an optional property of the object\n *\n */\n\nvar emptyTexture = new Texture();\nvar emptyCubeTexture = new CubeTexture();\n\n// --- Base for inner nodes (including the root) ---\n\nfunction UniformContainer() {\n\n\tthis.seq = [];\n\tthis.map = {};\n\n}\n\n// --- Utilities ---\n\n// Array Caches (provide typed arrays for temporary by size)\n\nvar arrayCacheF32 = [];\nvar arrayCacheI32 = [];\n\n// Float32Array caches used for uploading Matrix uniforms\n\nvar mat4array = new Float32Array( 16 );\nvar mat3array = new Float32Array( 9 );\n\n// Flattening for arrays of vectors and matrices\n\nfunction flatten( array, nBlocks, blockSize ) {\n\n\tvar firstElem = array[ 0 ];\n\n\tif ( firstElem <= 0 || firstElem > 0 ) return array;\n\t// unoptimized: ! isNaN( firstElem )\n\t// see http://jacksondunstan.com/articles/983\n\n\tvar n = nBlocks * blockSize,\n\t\tr = arrayCacheF32[ n ];\n\n\tif ( r === undefined ) {\n\n\t\tr = new Float32Array( n );\n\t\tarrayCacheF32[ n ] = r;\n\n\t}\n\n\tif ( nBlocks !== 0 ) {\n\n\t\tfirstElem.toArray( r, 0 );\n\n\t\tfor ( var i = 1, offset = 0; i !== nBlocks; ++ i ) {\n\n\t\t\toffset += blockSize;\n\t\t\tarray[ i ].toArray( r, offset );\n\n\t\t}\n\n\t}\n\n\treturn r;\n\n}\n\n// Texture unit allocation\n\nfunction allocTexUnits( renderer, n ) {\n\n\tvar r = arrayCacheI32[ n ];\n\n\tif ( r === undefined ) {\n\n\t\tr = new Int32Array( n );\n\t\tarrayCacheI32[ n ] = r;\n\n\t}\n\n\tfor ( var i = 0; i !== n; ++ i )\n\t\tr[ i ] = renderer.allocTextureUnit();\n\n\treturn r;\n\n}\n\n// --- Setters ---\n\n// Note: Defining these methods externally, because they come in a bunch\n// and this way their names minify.\n\n// Single scalar\n\nfunction setValue1f( gl, v ) {\n\n\tgl.uniform1f( this.addr, v );\n\n}\n\nfunction setValue1i( gl, v ) {\n\n\tgl.uniform1i( this.addr, v );\n\n}\n\n// Single float vector (from flat array or THREE.VectorN)\n\nfunction setValue2fv( gl, v ) {\n\n\tif ( v.x === undefined ) {\n\n\t\tgl.uniform2fv( this.addr, v );\n\n\t} else {\n\n\t\tgl.uniform2f( this.addr, v.x, v.y );\n\n\t}\n\n}\n\nfunction setValue3fv( gl, v ) {\n\n\tif ( v.x !== undefined ) {\n\n\t\tgl.uniform3f( this.addr, v.x, v.y, v.z );\n\n\t} else if ( v.r !== undefined ) {\n\n\t\tgl.uniform3f( this.addr, v.r, v.g, v.b );\n\n\t} else {\n\n\t\tgl.uniform3fv( this.addr, v );\n\n\t}\n\n}\n\nfunction setValue4fv( gl, v ) {\n\n\tif ( v.x === undefined ) {\n\n\t\tgl.uniform4fv( this.addr, v );\n\n\t} else {\n\n\t\t gl.uniform4f( this.addr, v.x, v.y, v.z, v.w );\n\n\t}\n\n}\n\n// Single matrix (from flat array or MatrixN)\n\nfunction setValue2fm( gl, v ) {\n\n\tgl.uniformMatrix2fv( this.addr, false, v.elements || v );\n\n}\n\nfunction setValue3fm( gl, v ) {\n\n\tif ( v.elements === undefined ) {\n\n\t\tgl.uniformMatrix3fv( this.addr, false, v );\n\n\t} else {\n\n\t\tmat3array.set( v.elements );\n\t\tgl.uniformMatrix3fv( this.addr, false, mat3array );\n\n\t}\n\n}\n\nfunction setValue4fm( gl, v ) {\n\n\tif ( v.elements === undefined ) {\n\n\t\tgl.uniformMatrix4fv( this.addr, false, v );\n\n\t} else {\n\n\t\tmat4array.set( v.elements );\n\t\tgl.uniformMatrix4fv( this.addr, false, mat4array );\n\n\t}\n\n}\n\n// Single texture (2D / Cube)\n\nfunction setValueT1( gl, v, renderer ) {\n\n\tvar unit = renderer.allocTextureUnit();\n\tgl.uniform1i( this.addr, unit );\n\trenderer.setTexture2D( v || emptyTexture, unit );\n\n}\n\nfunction setValueT6( gl, v, renderer ) {\n\n\tvar unit = renderer.allocTextureUnit();\n\tgl.uniform1i( this.addr, unit );\n\trenderer.setTextureCube( v || emptyCubeTexture, unit );\n\n}\n\n// Integer / Boolean vectors or arrays thereof (always flat arrays)\n\nfunction setValue2iv( gl, v ) {\n\n\tgl.uniform2iv( this.addr, v );\n\n}\n\nfunction setValue3iv( gl, v ) {\n\n\tgl.uniform3iv( this.addr, v );\n\n}\n\nfunction setValue4iv( gl, v ) {\n\n\tgl.uniform4iv( this.addr, v );\n\n}\n\n// Helper to pick the right setter for the singular case\n\nfunction getSingularSetter( type ) {\n\n\tswitch ( type ) {\n\n\t\tcase 0x1406: return setValue1f; // FLOAT\n\t\tcase 0x8b50: return setValue2fv; // _VEC2\n\t\tcase 0x8b51: return setValue3fv; // _VEC3\n\t\tcase 0x8b52: return setValue4fv; // _VEC4\n\n\t\tcase 0x8b5a: return setValue2fm; // _MAT2\n\t\tcase 0x8b5b: return setValue3fm; // _MAT3\n\t\tcase 0x8b5c: return setValue4fm; // _MAT4\n\n\t\tcase 0x8b5e: case 0x8d66: return setValueT1; // SAMPLER_2D, SAMPLER_EXTERNAL_OES\n\t\tcase 0x8b60: return setValueT6; // SAMPLER_CUBE\n\n\t\tcase 0x1404: case 0x8b56: return setValue1i; // INT, BOOL\n\t\tcase 0x8b53: case 0x8b57: return setValue2iv; // _VEC2\n\t\tcase 0x8b54: case 0x8b58: return setValue3iv; // _VEC3\n\t\tcase 0x8b55: case 0x8b59: return setValue4iv; // _VEC4\n\n\t}\n\n}\n\n// Array of scalars\n\nfunction setValue1fv( gl, v ) {\n\n\tgl.uniform1fv( this.addr, v );\n\n}\nfunction setValue1iv( gl, v ) {\n\n\tgl.uniform1iv( this.addr, v );\n\n}\n\n// Array of vectors (flat or from THREE classes)\n\nfunction setValueV2a( gl, v ) {\n\n\tgl.uniform2fv( this.addr, flatten( v, this.size, 2 ) );\n\n}\n\nfunction setValueV3a( gl, v ) {\n\n\tgl.uniform3fv( this.addr, flatten( v, this.size, 3 ) );\n\n}\n\nfunction setValueV4a( gl, v ) {\n\n\tgl.uniform4fv( this.addr, flatten( v, this.size, 4 ) );\n\n}\n\n// Array of matrices (flat or from THREE clases)\n\nfunction setValueM2a( gl, v ) {\n\n\tgl.uniformMatrix2fv( this.addr, false, flatten( v, this.size, 4 ) );\n\n}\n\nfunction setValueM3a( gl, v ) {\n\n\tgl.uniformMatrix3fv( this.addr, false, flatten( v, this.size, 9 ) );\n\n}\n\nfunction setValueM4a( gl, v ) {\n\n\tgl.uniformMatrix4fv( this.addr, false, flatten( v, this.size, 16 ) );\n\n}\n\n// Array of textures (2D / Cube)\n\nfunction setValueT1a( gl, v, renderer ) {\n\n\tvar n = v.length,\n\t\tunits = allocTexUnits( renderer, n );\n\n\tgl.uniform1iv( this.addr, units );\n\n\tfor ( var i = 0; i !== n; ++ i ) {\n\n\t\trenderer.setTexture2D( v[ i ] || emptyTexture, units[ i ] );\n\n\t}\n\n}\n\nfunction setValueT6a( gl, v, renderer ) {\n\n\tvar n = v.length,\n\t\tunits = allocTexUnits( renderer, n );\n\n\tgl.uniform1iv( this.addr, units );\n\n\tfor ( var i = 0; i !== n; ++ i ) {\n\n\t\trenderer.setTextureCube( v[ i ] || emptyCubeTexture, units[ i ] );\n\n\t}\n\n}\n\n// Helper to pick the right setter for a pure (bottom-level) array\n\nfunction getPureArraySetter( type ) {\n\n\tswitch ( type ) {\n\n\t\tcase 0x1406: return setValue1fv; // FLOAT\n\t\tcase 0x8b50: return setValueV2a; // _VEC2\n\t\tcase 0x8b51: return setValueV3a; // _VEC3\n\t\tcase 0x8b52: return setValueV4a; // _VEC4\n\n\t\tcase 0x8b5a: return setValueM2a; // _MAT2\n\t\tcase 0x8b5b: return setValueM3a; // _MAT3\n\t\tcase 0x8b5c: return setValueM4a; // _MAT4\n\n\t\tcase 0x8b5e: return setValueT1a; // SAMPLER_2D\n\t\tcase 0x8b60: return setValueT6a; // SAMPLER_CUBE\n\n\t\tcase 0x1404: case 0x8b56: return setValue1iv; // INT, BOOL\n\t\tcase 0x8b53: case 0x8b57: return setValue2iv; // _VEC2\n\t\tcase 0x8b54: case 0x8b58: return setValue3iv; // _VEC3\n\t\tcase 0x8b55: case 0x8b59: return setValue4iv; // _VEC4\n\n\t}\n\n}\n\n// --- Uniform Classes ---\n\nfunction SingleUniform( id, activeInfo, addr ) {\n\n\tthis.id = id;\n\tthis.addr = addr;\n\tthis.setValue = getSingularSetter( activeInfo.type );\n\n\t// this.path = activeInfo.name; // DEBUG\n\n}\n\nfunction PureArrayUniform( id, activeInfo, addr ) {\n\n\tthis.id = id;\n\tthis.addr = addr;\n\tthis.size = activeInfo.size;\n\tthis.setValue = getPureArraySetter( activeInfo.type );\n\n\t// this.path = activeInfo.name; // DEBUG\n\n}\n\nfunction StructuredUniform( id ) {\n\n\tthis.id = id;\n\n\tUniformContainer.call( this ); // mix-in\n\n}\n\nStructuredUniform.prototype.setValue = function ( gl, value ) {\n\n\t// Note: Don't need an extra 'renderer' parameter, since samplers\n\t// are not allowed in structured uniforms.\n\n\tvar seq = this.seq;\n\n\tfor ( var i = 0, n = seq.length; i !== n; ++ i ) {\n\n\t\tvar u = seq[ i ];\n\t\tu.setValue( gl, value[ u.id ] );\n\n\t}\n\n};\n\n// --- Top-level ---\n\n// Parser - builds up the property tree from the path strings\n\nvar RePathPart = /([\\w\\d_]+)(\\])?(\\[|\\.)?/g;\n\n// extracts\n// \t- the identifier (member name or array index)\n// - followed by an optional right bracket (found when array index)\n// - followed by an optional left bracket or dot (type of subscript)\n//\n// Note: These portions can be read in a non-overlapping fashion and\n// allow straightforward parsing of the hierarchy that WebGL encodes\n// in the uniform names.\n\nfunction addUniform( container, uniformObject ) {\n\n\tcontainer.seq.push( uniformObject );\n\tcontainer.map[ uniformObject.id ] = uniformObject;\n\n}\n\nfunction parseUniform( activeInfo, addr, container ) {\n\n\tvar path = activeInfo.name,\n\t\tpathLength = path.length;\n\n\t// reset RegExp object, because of the early exit of a previous run\n\tRePathPart.lastIndex = 0;\n\n\tfor ( ; ; ) {\n\n\t\tvar match = RePathPart.exec( path ),\n\t\t\tmatchEnd = RePathPart.lastIndex,\n\n\t\t\tid = match[ 1 ],\n\t\t\tidIsIndex = match[ 2 ] === ']',\n\t\t\tsubscript = match[ 3 ];\n\n\t\tif ( idIsIndex ) id = id | 0; // convert to integer\n\n\t\tif ( subscript === undefined || subscript === '[' && matchEnd + 2 === pathLength ) {\n\n\t\t\t// bare name or \"pure\" bottom-level array \"[0]\" suffix\n\n\t\t\taddUniform( container, subscript === undefined ?\n\t\t\t\tnew SingleUniform( id, activeInfo, addr ) :\n\t\t\t\tnew PureArrayUniform( id, activeInfo, addr ) );\n\n\t\t\tbreak;\n\n\t\t} else {\n\n\t\t\t// step into inner node / create it in case it doesn't exist\n\n\t\t\tvar map = container.map, next = map[ id ];\n\n\t\t\tif ( next === undefined ) {\n\n\t\t\t\tnext = new StructuredUniform( id );\n\t\t\t\taddUniform( container, next );\n\n\t\t\t}\n\n\t\t\tcontainer = next;\n\n\t\t}\n\n\t}\n\n}\n\n// Root Container\n\nfunction WebGLUniforms( gl, program, renderer ) {\n\n\tUniformContainer.call( this );\n\n\tthis.renderer = renderer;\n\n\tvar n = gl.getProgramParameter( program, gl.ACTIVE_UNIFORMS );\n\n\tfor ( var i = 0; i < n; ++ i ) {\n\n\t\tvar info = gl.getActiveUniform( program, i ),\n\t\t\taddr = gl.getUniformLocation( program, info.name );\n\n\t\tparseUniform( info, addr, this );\n\n\t}\n\n}\n\nWebGLUniforms.prototype.setValue = function ( gl, name, value ) {\n\n\tvar u = this.map[ name ];\n\n\tif ( u !== undefined ) u.setValue( gl, value, this.renderer );\n\n};\n\nWebGLUniforms.prototype.setOptional = function ( gl, object, name ) {\n\n\tvar v = object[ name ];\n\n\tif ( v !== undefined ) this.setValue( gl, name, v );\n\n};\n\n\n// Static interface\n\nWebGLUniforms.upload = function ( gl, seq, values, renderer ) {\n\n\tfor ( var i = 0, n = seq.length; i !== n; ++ i ) {\n\n\t\tvar u = seq[ i ],\n\t\t\tv = values[ u.id ];\n\n\t\tif ( v.needsUpdate !== false ) {\n\n\t\t\t// note: always updating when .needsUpdate is undefined\n\t\t\tu.setValue( gl, v.value, renderer );\n\n\t\t}\n\n\t}\n\n};\n\nWebGLUniforms.seqWithValue = function ( seq, values ) {\n\n\tvar r = [];\n\n\tfor ( var i = 0, n = seq.length; i !== n; ++ i ) {\n\n\t\tvar u = seq[ i ];\n\t\tif ( u.id in values ) r.push( u );\n\n\t}\n\n\treturn r;\n\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction addLineNumbers( string ) {\n\n\tvar lines = string.split( '\\n' );\n\n\tfor ( var i = 0; i < lines.length; i ++ ) {\n\n\t\tlines[ i ] = ( i + 1 ) + ': ' + lines[ i ];\n\n\t}\n\n\treturn lines.join( '\\n' );\n\n}\n\nfunction WebGLShader( gl, type, string ) {\n\n\tvar shader = gl.createShader( type );\n\n\tgl.shaderSource( shader, string );\n\tgl.compileShader( shader );\n\n\tif ( gl.getShaderParameter( shader, gl.COMPILE_STATUS ) === false ) {\n\n\t\tconsole.error( 'THREE.WebGLShader: Shader couldn\\'t compile.' );\n\n\t}\n\n\tif ( gl.getShaderInfoLog( shader ) !== '' ) {\n\n\t\tconsole.warn( 'THREE.WebGLShader: gl.getShaderInfoLog()', type === gl.VERTEX_SHADER ? 'vertex' : 'fragment', gl.getShaderInfoLog( shader ), addLineNumbers( string ) );\n\n\t}\n\n\t// --enable-privileged-webgl-extension\n\t// console.log( type, gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( shader ) );\n\n\treturn shader;\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nvar programIdCount = 0;\n\nfunction getEncodingComponents( encoding ) {\n\n\tswitch ( encoding ) {\n\n\t\tcase LinearEncoding:\n\t\t\treturn [ 'Linear', '( value )' ];\n\t\tcase sRGBEncoding:\n\t\t\treturn [ 'sRGB', '( value )' ];\n\t\tcase RGBEEncoding:\n\t\t\treturn [ 'RGBE', '( value )' ];\n\t\tcase RGBM7Encoding:\n\t\t\treturn [ 'RGBM', '( value, 7.0 )' ];\n\t\tcase RGBM16Encoding:\n\t\t\treturn [ 'RGBM', '( value, 16.0 )' ];\n\t\tcase RGBDEncoding:\n\t\t\treturn [ 'RGBD', '( value, 256.0 )' ];\n\t\tcase GammaEncoding:\n\t\t\treturn [ 'Gamma', '( value, float( GAMMA_FACTOR ) )' ];\n\t\tdefault:\n\t\t\tthrow new Error( 'unsupported encoding: ' + encoding );\n\n\t}\n\n}\n\nfunction getTexelDecodingFunction( functionName, encoding ) {\n\n\tvar components = getEncodingComponents( encoding );\n\treturn 'vec4 ' + functionName + '( vec4 value ) { return ' + components[ 0 ] + 'ToLinear' + components[ 1 ] + '; }';\n\n}\n\nfunction getTexelEncodingFunction( functionName, encoding ) {\n\n\tvar components = getEncodingComponents( encoding );\n\treturn 'vec4 ' + functionName + '( vec4 value ) { return LinearTo' + components[ 0 ] + components[ 1 ] + '; }';\n\n}\n\nfunction getToneMappingFunction( functionName, toneMapping ) {\n\n\tvar toneMappingName;\n\n\tswitch ( toneMapping ) {\n\n\t\tcase LinearToneMapping:\n\t\t\ttoneMappingName = 'Linear';\n\t\t\tbreak;\n\n\t\tcase ReinhardToneMapping:\n\t\t\ttoneMappingName = 'Reinhard';\n\t\t\tbreak;\n\n\t\tcase Uncharted2ToneMapping:\n\t\t\ttoneMappingName = 'Uncharted2';\n\t\t\tbreak;\n\n\t\tcase CineonToneMapping:\n\t\t\ttoneMappingName = 'OptimizedCineon';\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tthrow new Error( 'unsupported toneMapping: ' + toneMapping );\n\n\t}\n\n\treturn 'vec3 ' + functionName + '( vec3 color ) { return ' + toneMappingName + 'ToneMapping( color ); }';\n\n}\n\nfunction generateExtensions( extensions, parameters, rendererExtensions ) {\n\n\textensions = extensions || {};\n\n\tvar chunks = [\n\t\t( extensions.derivatives || parameters.envMapCubeUV || parameters.bumpMap || parameters.normalMap || parameters.flatShading ) ? '#extension GL_OES_standard_derivatives : enable' : '',\n\t\t( extensions.fragDepth || parameters.logarithmicDepthBuffer ) && rendererExtensions.get( 'EXT_frag_depth' ) ? '#extension GL_EXT_frag_depth : enable' : '',\n\t\t( extensions.drawBuffers ) && rendererExtensions.get( 'WEBGL_draw_buffers' ) ? '#extension GL_EXT_draw_buffers : require' : '',\n\t\t( extensions.shaderTextureLOD || parameters.envMap ) && rendererExtensions.get( 'EXT_shader_texture_lod' ) ? '#extension GL_EXT_shader_texture_lod : enable' : ''\n\t];\n\n\treturn chunks.filter( filterEmptyLine ).join( '\\n' );\n\n}\n\nfunction generateDefines( defines ) {\n\n\tvar chunks = [];\n\n\tfor ( var name in defines ) {\n\n\t\tvar value = defines[ name ];\n\n\t\tif ( value === false ) continue;\n\n\t\tchunks.push( '#define ' + name + ' ' + value );\n\n\t}\n\n\treturn chunks.join( '\\n' );\n\n}\n\nfunction fetchAttributeLocations( gl, program ) {\n\n\tvar attributes = {};\n\n\tvar n = gl.getProgramParameter( program, gl.ACTIVE_ATTRIBUTES );\n\n\tfor ( var i = 0; i < n; i ++ ) {\n\n\t\tvar info = gl.getActiveAttrib( program, i );\n\t\tvar name = info.name;\n\n\t\t// console.log( 'THREE.WebGLProgram: ACTIVE VERTEX ATTRIBUTE:', name, i );\n\n\t\tattributes[ name ] = gl.getAttribLocation( program, name );\n\n\t}\n\n\treturn attributes;\n\n}\n\nfunction filterEmptyLine( string ) {\n\n\treturn string !== '';\n\n}\n\nfunction replaceLightNums( string, parameters ) {\n\n\treturn string\n\t\t.replace( /NUM_DIR_LIGHTS/g, parameters.numDirLights )\n\t\t.replace( /NUM_SPOT_LIGHTS/g, parameters.numSpotLights )\n\t\t.replace( /NUM_RECT_AREA_LIGHTS/g, parameters.numRectAreaLights )\n\t\t.replace( /NUM_POINT_LIGHTS/g, parameters.numPointLights )\n\t\t.replace( /NUM_HEMI_LIGHTS/g, parameters.numHemiLights );\n\n}\n\nfunction replaceClippingPlaneNums( string, parameters ) {\n\n\treturn string\n\t\t.replace( /NUM_CLIPPING_PLANES/g, parameters.numClippingPlanes )\n\t\t.replace( /UNION_CLIPPING_PLANES/g, ( parameters.numClippingPlanes - parameters.numClipIntersection ) );\n\n}\n\nfunction parseIncludes( string ) {\n\n\tvar pattern = /^[ \\t]*#include +<([\\w\\d.]+)>/gm;\n\n\tfunction replace( match, include ) {\n\n\t\tvar replace = ShaderChunk[ include ];\n\n\t\tif ( replace === undefined ) {\n\n\t\t\tthrow new Error( 'Can not resolve #include <' + include + '>' );\n\n\t\t}\n\n\t\treturn parseIncludes( replace );\n\n\t}\n\n\treturn string.replace( pattern, replace );\n\n}\n\nfunction unrollLoops( string ) {\n\n\tvar pattern = /#pragma unroll_loop[\\s]+?for \\( int i \\= (\\d+)\\; i < (\\d+)\\; i \\+\\+ \\) \\{([\\s\\S]+?)(?=\\})\\}/g;\n\n\tfunction replace( match, start, end, snippet ) {\n\n\t\tvar unroll = '';\n\n\t\tfor ( var i = parseInt( start ); i < parseInt( end ); i ++ ) {\n\n\t\t\tunroll += snippet.replace( /\\[ i \\]/g, '[ ' + i + ' ]' );\n\n\t\t}\n\n\t\treturn unroll;\n\n\t}\n\n\treturn string.replace( pattern, replace );\n\n}\n\nfunction WebGLProgram( renderer, extensions, code, material, shader, parameters ) {\n\n\tvar gl = renderer.context;\n\n\tvar defines = material.defines;\n\n\tvar vertexShader = shader.vertexShader;\n\tvar fragmentShader = shader.fragmentShader;\n\n\tvar shadowMapTypeDefine = 'SHADOWMAP_TYPE_BASIC';\n\n\tif ( parameters.shadowMapType === PCFShadowMap ) {\n\n\t\tshadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF';\n\n\t} else if ( parameters.shadowMapType === PCFSoftShadowMap ) {\n\n\t\tshadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF_SOFT';\n\n\t}\n\n\tvar envMapTypeDefine = 'ENVMAP_TYPE_CUBE';\n\tvar envMapModeDefine = 'ENVMAP_MODE_REFLECTION';\n\tvar envMapBlendingDefine = 'ENVMAP_BLENDING_MULTIPLY';\n\n\tif ( parameters.envMap ) {\n\n\t\tswitch ( material.envMap.mapping ) {\n\n\t\t\tcase CubeReflectionMapping:\n\t\t\tcase CubeRefractionMapping:\n\t\t\t\tenvMapTypeDefine = 'ENVMAP_TYPE_CUBE';\n\t\t\t\tbreak;\n\n\t\t\tcase CubeUVReflectionMapping:\n\t\t\tcase CubeUVRefractionMapping:\n\t\t\t\tenvMapTypeDefine = 'ENVMAP_TYPE_CUBE_UV';\n\t\t\t\tbreak;\n\n\t\t\tcase EquirectangularReflectionMapping:\n\t\t\tcase EquirectangularRefractionMapping:\n\t\t\t\tenvMapTypeDefine = 'ENVMAP_TYPE_EQUIREC';\n\t\t\t\tbreak;\n\n\t\t\tcase SphericalReflectionMapping:\n\t\t\t\tenvMapTypeDefine = 'ENVMAP_TYPE_SPHERE';\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tswitch ( material.envMap.mapping ) {\n\n\t\t\tcase CubeRefractionMapping:\n\t\t\tcase EquirectangularRefractionMapping:\n\t\t\t\tenvMapModeDefine = 'ENVMAP_MODE_REFRACTION';\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tswitch ( material.combine ) {\n\n\t\t\tcase MultiplyOperation:\n\t\t\t\tenvMapBlendingDefine = 'ENVMAP_BLENDING_MULTIPLY';\n\t\t\t\tbreak;\n\n\t\t\tcase MixOperation:\n\t\t\t\tenvMapBlendingDefine = 'ENVMAP_BLENDING_MIX';\n\t\t\t\tbreak;\n\n\t\t\tcase AddOperation:\n\t\t\t\tenvMapBlendingDefine = 'ENVMAP_BLENDING_ADD';\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\tvar gammaFactorDefine = ( renderer.gammaFactor > 0 ) ? renderer.gammaFactor : 1.0;\n\n\t// console.log( 'building new program ' );\n\n\t//\n\n\tvar customExtensions = generateExtensions( material.extensions, parameters, extensions );\n\n\tvar customDefines = generateDefines( defines );\n\n\t//\n\n\tvar program = gl.createProgram();\n\n\tvar prefixVertex, prefixFragment;\n\n\tif ( material.isRawShaderMaterial ) {\n\n\t\tprefixVertex = [\n\n\t\t\tcustomDefines\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t\tif ( prefixVertex.length > 0 ) {\n\n\t\t\tprefixVertex += '\\n';\n\n\t\t}\n\n\t\tprefixFragment = [\n\n\t\t\tcustomExtensions,\n\t\t\tcustomDefines\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t\tif ( prefixFragment.length > 0 ) {\n\n\t\t\tprefixFragment += '\\n';\n\n\t\t}\n\n\t} else {\n\n\t\tprefixVertex = [\n\n\t\t\t'precision ' + parameters.precision + ' float;',\n\t\t\t'precision ' + parameters.precision + ' int;',\n\n\t\t\t'#define SHADER_NAME ' + shader.name,\n\n\t\t\tcustomDefines,\n\n\t\t\tparameters.supportsVertexTextures ? '#define VERTEX_TEXTURES' : '',\n\n\t\t\t'#define GAMMA_FACTOR ' + gammaFactorDefine,\n\n\t\t\t'#define MAX_BONES ' + parameters.maxBones,\n\t\t\t( parameters.useFog && parameters.fog ) ? '#define USE_FOG' : '',\n\t\t\t( parameters.useFog && parameters.fogExp ) ? '#define FOG_EXP2' : '',\n\n\t\t\tparameters.map ? '#define USE_MAP' : '',\n\t\t\tparameters.envMap ? '#define USE_ENVMAP' : '',\n\t\t\tparameters.envMap ? '#define ' + envMapModeDefine : '',\n\t\t\tparameters.lightMap ? '#define USE_LIGHTMAP' : '',\n\t\t\tparameters.aoMap ? '#define USE_AOMAP' : '',\n\t\t\tparameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '',\n\t\t\tparameters.bumpMap ? '#define USE_BUMPMAP' : '',\n\t\t\tparameters.normalMap ? '#define USE_NORMALMAP' : '',\n\t\t\tparameters.displacementMap && parameters.supportsVertexTextures ? '#define USE_DISPLACEMENTMAP' : '',\n\t\t\tparameters.specularMap ? '#define USE_SPECULARMAP' : '',\n\t\t\tparameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '',\n\t\t\tparameters.metalnessMap ? '#define USE_METALNESSMAP' : '',\n\t\t\tparameters.alphaMap ? '#define USE_ALPHAMAP' : '',\n\t\t\tparameters.vertexColors ? '#define USE_COLOR' : '',\n\n\t\t\tparameters.flatShading ? '#define FLAT_SHADED' : '',\n\n\t\t\tparameters.skinning ? '#define USE_SKINNING' : '',\n\t\t\tparameters.useVertexTexture ? '#define BONE_TEXTURE' : '',\n\n\t\t\tparameters.morphTargets ? '#define USE_MORPHTARGETS' : '',\n\t\t\tparameters.morphNormals && parameters.flatShading === false ? '#define USE_MORPHNORMALS' : '',\n\t\t\tparameters.doubleSided ? '#define DOUBLE_SIDED' : '',\n\t\t\tparameters.flipSided ? '#define FLIP_SIDED' : '',\n\n\t\t\tparameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '',\n\t\t\tparameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '',\n\n\t\t\tparameters.sizeAttenuation ? '#define USE_SIZEATTENUATION' : '',\n\n\t\t\tparameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',\n\t\t\tparameters.logarithmicDepthBuffer && extensions.get( 'EXT_frag_depth' ) ? '#define USE_LOGDEPTHBUF_EXT' : '',\n\n\t\t\t'uniform mat4 modelMatrix;',\n\t\t\t'uniform mat4 modelViewMatrix;',\n\t\t\t'uniform mat4 projectionMatrix;',\n\t\t\t'uniform mat4 viewMatrix;',\n\t\t\t'uniform mat3 normalMatrix;',\n\t\t\t'uniform vec3 cameraPosition;',\n\n\t\t\t'attribute vec3 position;',\n\t\t\t'attribute vec3 normal;',\n\t\t\t'attribute vec2 uv;',\n\n\t\t\t'#ifdef USE_COLOR',\n\n\t\t\t'\tattribute vec3 color;',\n\n\t\t\t'#endif',\n\n\t\t\t'#ifdef USE_MORPHTARGETS',\n\n\t\t\t'\tattribute vec3 morphTarget0;',\n\t\t\t'\tattribute vec3 morphTarget1;',\n\t\t\t'\tattribute vec3 morphTarget2;',\n\t\t\t'\tattribute vec3 morphTarget3;',\n\n\t\t\t'\t#ifdef USE_MORPHNORMALS',\n\n\t\t\t'\t\tattribute vec3 morphNormal0;',\n\t\t\t'\t\tattribute vec3 morphNormal1;',\n\t\t\t'\t\tattribute vec3 morphNormal2;',\n\t\t\t'\t\tattribute vec3 morphNormal3;',\n\n\t\t\t'\t#else',\n\n\t\t\t'\t\tattribute vec3 morphTarget4;',\n\t\t\t'\t\tattribute vec3 morphTarget5;',\n\t\t\t'\t\tattribute vec3 morphTarget6;',\n\t\t\t'\t\tattribute vec3 morphTarget7;',\n\n\t\t\t'\t#endif',\n\n\t\t\t'#endif',\n\n\t\t\t'#ifdef USE_SKINNING',\n\n\t\t\t'\tattribute vec4 skinIndex;',\n\t\t\t'\tattribute vec4 skinWeight;',\n\n\t\t\t'#endif',\n\n\t\t\t'\\n'\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t\tprefixFragment = [\n\n\t\t\tcustomExtensions,\n\n\t\t\t'precision ' + parameters.precision + ' float;',\n\t\t\t'precision ' + parameters.precision + ' int;',\n\n\t\t\t'#define SHADER_NAME ' + shader.name,\n\n\t\t\tcustomDefines,\n\n\t\t\tparameters.alphaTest ? '#define ALPHATEST ' + parameters.alphaTest : '',\n\n\t\t\t'#define GAMMA_FACTOR ' + gammaFactorDefine,\n\n\t\t\t( parameters.useFog && parameters.fog ) ? '#define USE_FOG' : '',\n\t\t\t( parameters.useFog && parameters.fogExp ) ? '#define FOG_EXP2' : '',\n\n\t\t\tparameters.map ? '#define USE_MAP' : '',\n\t\t\tparameters.envMap ? '#define USE_ENVMAP' : '',\n\t\t\tparameters.envMap ? '#define ' + envMapTypeDefine : '',\n\t\t\tparameters.envMap ? '#define ' + envMapModeDefine : '',\n\t\t\tparameters.envMap ? '#define ' + envMapBlendingDefine : '',\n\t\t\tparameters.lightMap ? '#define USE_LIGHTMAP' : '',\n\t\t\tparameters.aoMap ? '#define USE_AOMAP' : '',\n\t\t\tparameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '',\n\t\t\tparameters.bumpMap ? '#define USE_BUMPMAP' : '',\n\t\t\tparameters.normalMap ? '#define USE_NORMALMAP' : '',\n\t\t\tparameters.specularMap ? '#define USE_SPECULARMAP' : '',\n\t\t\tparameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '',\n\t\t\tparameters.metalnessMap ? '#define USE_METALNESSMAP' : '',\n\t\t\tparameters.alphaMap ? '#define USE_ALPHAMAP' : '',\n\t\t\tparameters.vertexColors ? '#define USE_COLOR' : '',\n\n\t\t\tparameters.gradientMap ? '#define USE_GRADIENTMAP' : '',\n\n\t\t\tparameters.flatShading ? '#define FLAT_SHADED' : '',\n\n\t\t\tparameters.doubleSided ? '#define DOUBLE_SIDED' : '',\n\t\t\tparameters.flipSided ? '#define FLIP_SIDED' : '',\n\n\t\t\tparameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '',\n\t\t\tparameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '',\n\n\t\t\tparameters.premultipliedAlpha ? '#define PREMULTIPLIED_ALPHA' : '',\n\n\t\t\tparameters.physicallyCorrectLights ? '#define PHYSICALLY_CORRECT_LIGHTS' : '',\n\n\t\t\tparameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',\n\t\t\tparameters.logarithmicDepthBuffer && extensions.get( 'EXT_frag_depth' ) ? '#define USE_LOGDEPTHBUF_EXT' : '',\n\n\t\t\tparameters.envMap && extensions.get( 'EXT_shader_texture_lod' ) ? '#define TEXTURE_LOD_EXT' : '',\n\n\t\t\t'uniform mat4 viewMatrix;',\n\t\t\t'uniform vec3 cameraPosition;',\n\n\t\t\t( parameters.toneMapping !== NoToneMapping ) ? '#define TONE_MAPPING' : '',\n\t\t\t( parameters.toneMapping !== NoToneMapping ) ? ShaderChunk[ 'tonemapping_pars_fragment' ] : '', // this code is required here because it is used by the toneMapping() function defined below\n\t\t\t( parameters.toneMapping !== NoToneMapping ) ? getToneMappingFunction( 'toneMapping', parameters.toneMapping ) : '',\n\n\t\t\tparameters.dithering ? '#define DITHERING' : '',\n\n\t\t\t( parameters.outputEncoding || parameters.mapEncoding || parameters.envMapEncoding || parameters.emissiveMapEncoding ) ? ShaderChunk[ 'encodings_pars_fragment' ] : '', // this code is required here because it is used by the various encoding/decoding function defined below\n\t\t\tparameters.mapEncoding ? getTexelDecodingFunction( 'mapTexelToLinear', parameters.mapEncoding ) : '',\n\t\t\tparameters.envMapEncoding ? getTexelDecodingFunction( 'envMapTexelToLinear', parameters.envMapEncoding ) : '',\n\t\t\tparameters.emissiveMapEncoding ? getTexelDecodingFunction( 'emissiveMapTexelToLinear', parameters.emissiveMapEncoding ) : '',\n\t\t\tparameters.outputEncoding ? getTexelEncodingFunction( 'linearToOutputTexel', parameters.outputEncoding ) : '',\n\n\t\t\tparameters.depthPacking ? '#define DEPTH_PACKING ' + material.depthPacking : '',\n\n\t\t\t'\\n'\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t}\n\n\tvertexShader = parseIncludes( vertexShader );\n\tvertexShader = replaceLightNums( vertexShader, parameters );\n\tvertexShader = replaceClippingPlaneNums( vertexShader, parameters );\n\n\tfragmentShader = parseIncludes( fragmentShader );\n\tfragmentShader = replaceLightNums( fragmentShader, parameters );\n\tfragmentShader = replaceClippingPlaneNums( fragmentShader, parameters );\n\n\tvertexShader = unrollLoops( vertexShader );\n\tfragmentShader = unrollLoops( fragmentShader );\n\n\tvar vertexGlsl = prefixVertex + vertexShader;\n\tvar fragmentGlsl = prefixFragment + fragmentShader;\n\n\t// console.log( '*VERTEX*', vertexGlsl );\n\t// console.log( '*FRAGMENT*', fragmentGlsl );\n\n\tvar glVertexShader = WebGLShader( gl, gl.VERTEX_SHADER, vertexGlsl );\n\tvar glFragmentShader = WebGLShader( gl, gl.FRAGMENT_SHADER, fragmentGlsl );\n\n\tgl.attachShader( program, glVertexShader );\n\tgl.attachShader( program, glFragmentShader );\n\n\t// Force a particular attribute to index 0.\n\n\tif ( material.index0AttributeName !== undefined ) {\n\n\t\tgl.bindAttribLocation( program, 0, material.index0AttributeName );\n\n\t} else if ( parameters.morphTargets === true ) {\n\n\t\t// programs with morphTargets displace position out of attribute 0\n\t\tgl.bindAttribLocation( program, 0, 'position' );\n\n\t}\n\n\tgl.linkProgram( program );\n\n\tvar programLog = gl.getProgramInfoLog( program ).trim();\n\tvar vertexLog = gl.getShaderInfoLog( glVertexShader ).trim();\n\tvar fragmentLog = gl.getShaderInfoLog( glFragmentShader ).trim();\n\n\tvar runnable = true;\n\tvar haveDiagnostics = true;\n\n\t// console.log( '**VERTEX**', gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( glVertexShader ) );\n\t// console.log( '**FRAGMENT**', gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( glFragmentShader ) );\n\n\tif ( gl.getProgramParameter( program, gl.LINK_STATUS ) === false ) {\n\n\t\trunnable = false;\n\n\t\tconsole.error( 'THREE.WebGLProgram: shader error: ', gl.getError(), 'gl.VALIDATE_STATUS', gl.getProgramParameter( program, gl.VALIDATE_STATUS ), 'gl.getProgramInfoLog', programLog, vertexLog, fragmentLog );\n\n\t} else if ( programLog !== '' ) {\n\n\t\tconsole.warn( 'THREE.WebGLProgram: gl.getProgramInfoLog()', programLog );\n\n\t} else if ( vertexLog === '' || fragmentLog === '' ) {\n\n\t\thaveDiagnostics = false;\n\n\t}\n\n\tif ( haveDiagnostics ) {\n\n\t\tthis.diagnostics = {\n\n\t\t\trunnable: runnable,\n\t\t\tmaterial: material,\n\n\t\t\tprogramLog: programLog,\n\n\t\t\tvertexShader: {\n\n\t\t\t\tlog: vertexLog,\n\t\t\t\tprefix: prefixVertex\n\n\t\t\t},\n\n\t\t\tfragmentShader: {\n\n\t\t\t\tlog: fragmentLog,\n\t\t\t\tprefix: prefixFragment\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\t// clean up\n\n\tgl.deleteShader( glVertexShader );\n\tgl.deleteShader( glFragmentShader );\n\n\t// set up caching for uniform locations\n\n\tvar cachedUniforms;\n\n\tthis.getUniforms = function () {\n\n\t\tif ( cachedUniforms === undefined ) {\n\n\t\t\tcachedUniforms = new WebGLUniforms( gl, program, renderer );\n\n\t\t}\n\n\t\treturn cachedUniforms;\n\n\t};\n\n\t// set up caching for attribute locations\n\n\tvar cachedAttributes;\n\n\tthis.getAttributes = function () {\n\n\t\tif ( cachedAttributes === undefined ) {\n\n\t\t\tcachedAttributes = fetchAttributeLocations( gl, program );\n\n\t\t}\n\n\t\treturn cachedAttributes;\n\n\t};\n\n\t// free resource\n\n\tthis.destroy = function () {\n\n\t\tgl.deleteProgram( program );\n\t\tthis.program = undefined;\n\n\t};\n\n\t// DEPRECATED\n\n\tObject.defineProperties( this, {\n\n\t\tuniforms: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLProgram: .uniforms is now .getUniforms().' );\n\t\t\t\treturn this.getUniforms();\n\n\t\t\t}\n\t\t},\n\n\t\tattributes: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLProgram: .attributes is now .getAttributes().' );\n\t\t\t\treturn this.getAttributes();\n\n\t\t\t}\n\t\t}\n\n\t} );\n\n\n\t//\n\n\tthis.name = shader.name;\n\tthis.id = programIdCount ++;\n\tthis.code = code;\n\tthis.usedTimes = 1;\n\tthis.program = program;\n\tthis.vertexShader = glVertexShader;\n\tthis.fragmentShader = glFragmentShader;\n\n\treturn this;\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebGLPrograms( renderer, extensions, capabilities ) {\n\n\tvar programs = [];\n\n\tvar shaderIDs = {\n\t\tMeshDepthMaterial: 'depth',\n\t\tMeshDistanceMaterial: 'distanceRGBA',\n\t\tMeshNormalMaterial: 'normal',\n\t\tMeshBasicMaterial: 'basic',\n\t\tMeshLambertMaterial: 'lambert',\n\t\tMeshPhongMaterial: 'phong',\n\t\tMeshToonMaterial: 'phong',\n\t\tMeshStandardMaterial: 'physical',\n\t\tMeshPhysicalMaterial: 'physical',\n\t\tLineBasicMaterial: 'basic',\n\t\tLineDashedMaterial: 'dashed',\n\t\tPointsMaterial: 'points',\n\t\tShadowMaterial: 'shadow'\n\t};\n\n\tvar parameterNames = [\n\t\t\"precision\", \"supportsVertexTextures\", \"map\", \"mapEncoding\", \"envMap\", \"envMapMode\", \"envMapEncoding\",\n\t\t\"lightMap\", \"aoMap\", \"emissiveMap\", \"emissiveMapEncoding\", \"bumpMap\", \"normalMap\", \"displacementMap\", \"specularMap\",\n\t\t\"roughnessMap\", \"metalnessMap\", \"gradientMap\",\n\t\t\"alphaMap\", \"combine\", \"vertexColors\", \"fog\", \"useFog\", \"fogExp\",\n\t\t\"flatShading\", \"sizeAttenuation\", \"logarithmicDepthBuffer\", \"skinning\",\n\t\t\"maxBones\", \"useVertexTexture\", \"morphTargets\", \"morphNormals\",\n\t\t\"maxMorphTargets\", \"maxMorphNormals\", \"premultipliedAlpha\",\n\t\t\"numDirLights\", \"numPointLights\", \"numSpotLights\", \"numHemiLights\", \"numRectAreaLights\",\n\t\t\"shadowMapEnabled\", \"shadowMapType\", \"toneMapping\", 'physicallyCorrectLights',\n\t\t\"alphaTest\", \"doubleSided\", \"flipSided\", \"numClippingPlanes\", \"numClipIntersection\", \"depthPacking\", \"dithering\"\n\t];\n\n\n\tfunction allocateBones( object ) {\n\n\t\tvar skeleton = object.skeleton;\n\t\tvar bones = skeleton.bones;\n\n\t\tif ( capabilities.floatVertexTextures ) {\n\n\t\t\treturn 1024;\n\n\t\t} else {\n\n\t\t\t// default for when object is not specified\n\t\t\t// ( for example when prebuilding shader to be used with multiple objects )\n\t\t\t//\n\t\t\t// - leave some extra space for other uniforms\n\t\t\t// - limit here is ANGLE's 254 max uniform vectors\n\t\t\t// (up to 54 should be safe)\n\n\t\t\tvar nVertexUniforms = capabilities.maxVertexUniforms;\n\t\t\tvar nVertexMatrices = Math.floor( ( nVertexUniforms - 20 ) / 4 );\n\n\t\t\tvar maxBones = Math.min( nVertexMatrices, bones.length );\n\n\t\t\tif ( maxBones < bones.length ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Skeleton has ' + bones.length + ' bones. This GPU supports ' + maxBones + '.' );\n\t\t\t\treturn 0;\n\n\t\t\t}\n\n\t\t\treturn maxBones;\n\n\t\t}\n\n\t}\n\n\tfunction getTextureEncodingFromMap( map, gammaOverrideLinear ) {\n\n\t\tvar encoding;\n\n\t\tif ( ! map ) {\n\n\t\t\tencoding = LinearEncoding;\n\n\t\t} else if ( map.isTexture ) {\n\n\t\t\tencoding = map.encoding;\n\n\t\t} else if ( map.isWebGLRenderTarget ) {\n\n\t\t\tconsole.warn( \"THREE.WebGLPrograms.getTextureEncodingFromMap: don't use render targets as textures. Use their .texture property instead.\" );\n\t\t\tencoding = map.texture.encoding;\n\n\t\t}\n\n\t\t// add backwards compatibility for WebGLRenderer.gammaInput/gammaOutput parameter, should probably be removed at some point.\n\t\tif ( encoding === LinearEncoding && gammaOverrideLinear ) {\n\n\t\t\tencoding = GammaEncoding;\n\n\t\t}\n\n\t\treturn encoding;\n\n\t}\n\n\tthis.getParameters = function ( material, lights, shadows, fog, nClipPlanes, nClipIntersection, object ) {\n\n\t\tvar shaderID = shaderIDs[ material.type ];\n\n\t\t// heuristics to create shader parameters according to lights in the scene\n\t\t// (not to blow over maxLights budget)\n\n\t\tvar maxBones = object.isSkinnedMesh ? allocateBones( object ) : 0;\n\t\tvar precision = capabilities.precision;\n\n\t\tif ( material.precision !== null ) {\n\n\t\t\tprecision = capabilities.getMaxPrecision( material.precision );\n\n\t\t\tif ( precision !== material.precision ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLProgram.getParameters:', material.precision, 'not supported, using', precision, 'instead.' );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar currentRenderTarget = renderer.getRenderTarget();\n\n\t\tvar parameters = {\n\n\t\t\tshaderID: shaderID,\n\n\t\t\tprecision: precision,\n\t\t\tsupportsVertexTextures: capabilities.vertexTextures,\n\t\t\toutputEncoding: getTextureEncodingFromMap( ( ! currentRenderTarget ) ? null : currentRenderTarget.texture, renderer.gammaOutput ),\n\t\t\tmap: !! material.map,\n\t\t\tmapEncoding: getTextureEncodingFromMap( material.map, renderer.gammaInput ),\n\t\t\tenvMap: !! material.envMap,\n\t\t\tenvMapMode: material.envMap && material.envMap.mapping,\n\t\t\tenvMapEncoding: getTextureEncodingFromMap( material.envMap, renderer.gammaInput ),\n\t\t\tenvMapCubeUV: ( !! material.envMap ) && ( ( material.envMap.mapping === CubeUVReflectionMapping ) || ( material.envMap.mapping === CubeUVRefractionMapping ) ),\n\t\t\tlightMap: !! material.lightMap,\n\t\t\taoMap: !! material.aoMap,\n\t\t\temissiveMap: !! material.emissiveMap,\n\t\t\temissiveMapEncoding: getTextureEncodingFromMap( material.emissiveMap, renderer.gammaInput ),\n\t\t\tbumpMap: !! material.bumpMap,\n\t\t\tnormalMap: !! material.normalMap,\n\t\t\tdisplacementMap: !! material.displacementMap,\n\t\t\troughnessMap: !! material.roughnessMap,\n\t\t\tmetalnessMap: !! material.metalnessMap,\n\t\t\tspecularMap: !! material.specularMap,\n\t\t\talphaMap: !! material.alphaMap,\n\n\t\t\tgradientMap: !! material.gradientMap,\n\n\t\t\tcombine: material.combine,\n\n\t\t\tvertexColors: material.vertexColors,\n\n\t\t\tfog: !! fog,\n\t\t\tuseFog: material.fog,\n\t\t\tfogExp: ( fog && fog.isFogExp2 ),\n\n\t\t\tflatShading: material.flatShading,\n\n\t\t\tsizeAttenuation: material.sizeAttenuation,\n\t\t\tlogarithmicDepthBuffer: capabilities.logarithmicDepthBuffer,\n\n\t\t\tskinning: material.skinning && maxBones > 0,\n\t\t\tmaxBones: maxBones,\n\t\t\tuseVertexTexture: capabilities.floatVertexTextures,\n\n\t\t\tmorphTargets: material.morphTargets,\n\t\t\tmorphNormals: material.morphNormals,\n\t\t\tmaxMorphTargets: renderer.maxMorphTargets,\n\t\t\tmaxMorphNormals: renderer.maxMorphNormals,\n\n\t\t\tnumDirLights: lights.directional.length,\n\t\t\tnumPointLights: lights.point.length,\n\t\t\tnumSpotLights: lights.spot.length,\n\t\t\tnumRectAreaLights: lights.rectArea.length,\n\t\t\tnumHemiLights: lights.hemi.length,\n\n\t\t\tnumClippingPlanes: nClipPlanes,\n\t\t\tnumClipIntersection: nClipIntersection,\n\n\t\t\tdithering: material.dithering,\n\n\t\t\tshadowMapEnabled: renderer.shadowMap.enabled && object.receiveShadow && shadows.length > 0,\n\t\t\tshadowMapType: renderer.shadowMap.type,\n\n\t\t\ttoneMapping: renderer.toneMapping,\n\t\t\tphysicallyCorrectLights: renderer.physicallyCorrectLights,\n\n\t\t\tpremultipliedAlpha: material.premultipliedAlpha,\n\n\t\t\talphaTest: material.alphaTest,\n\t\t\tdoubleSided: material.side === DoubleSide,\n\t\t\tflipSided: material.side === BackSide,\n\n\t\t\tdepthPacking: ( material.depthPacking !== undefined ) ? material.depthPacking : false\n\n\t\t};\n\n\t\treturn parameters;\n\n\t};\n\n\tthis.getProgramCode = function ( material, parameters ) {\n\n\t\tvar array = [];\n\n\t\tif ( parameters.shaderID ) {\n\n\t\t\tarray.push( parameters.shaderID );\n\n\t\t} else {\n\n\t\t\tarray.push( material.fragmentShader );\n\t\t\tarray.push( material.vertexShader );\n\n\t\t}\n\n\t\tif ( material.defines !== undefined ) {\n\n\t\t\tfor ( var name in material.defines ) {\n\n\t\t\t\tarray.push( name );\n\t\t\t\tarray.push( material.defines[ name ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( var i = 0; i < parameterNames.length; i ++ ) {\n\n\t\t\tarray.push( parameters[ parameterNames[ i ] ] );\n\n\t\t}\n\n\t\tarray.push( material.onBeforeCompile.toString() );\n\n\t\tarray.push( renderer.gammaOutput );\n\n\t\treturn array.join();\n\n\t};\n\n\tthis.acquireProgram = function ( material, shader, parameters, code ) {\n\n\t\tvar program;\n\n\t\t// Check if code has been already compiled\n\t\tfor ( var p = 0, pl = programs.length; p < pl; p ++ ) {\n\n\t\t\tvar programInfo = programs[ p ];\n\n\t\t\tif ( programInfo.code === code ) {\n\n\t\t\t\tprogram = programInfo;\n\t\t\t\t++ program.usedTimes;\n\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( program === undefined ) {\n\n\t\t\tprogram = new WebGLProgram( renderer, extensions, code, material, shader, parameters );\n\t\t\tprograms.push( program );\n\n\t\t}\n\n\t\treturn program;\n\n\t};\n\n\tthis.releaseProgram = function ( program ) {\n\n\t\tif ( -- program.usedTimes === 0 ) {\n\n\t\t\t// Remove from unordered set\n\t\t\tvar i = programs.indexOf( program );\n\t\t\tprograms[ i ] = programs[ programs.length - 1 ];\n\t\t\tprograms.pop();\n\n\t\t\t// Free WebGL resources\n\t\t\tprogram.destroy();\n\n\t\t}\n\n\t};\n\n\t// Exposed for resource monitoring & error feedback via renderer.info:\n\tthis.programs = programs;\n\n}\n\n/**\n * @author fordacious / fordacious.github.io\n */\n\nfunction WebGLProperties() {\n\n\tvar properties = new WeakMap();\n\n\tfunction get( object ) {\n\n\t\tvar map = properties.get( object );\n\n\t\tif ( map === undefined ) {\n\n\t\t\tmap = {};\n\t\t\tproperties.set( object, map );\n\n\t\t}\n\n\t\treturn map;\n\n\t}\n\n\tfunction remove( object ) {\n\n\t\tproperties.delete( object );\n\n\t}\n\n\tfunction update( object, key, value ) {\n\n\t\tproperties.get( object )[ key ] = value;\n\n\t}\n\n\tfunction dispose() {\n\n\t\tproperties = new WeakMap();\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tremove: remove,\n\t\tupdate: update,\n\t\tdispose: dispose\n\t};\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction painterSortStable( a, b ) {\n\n\tif ( a.renderOrder !== b.renderOrder ) {\n\n\t\treturn a.renderOrder - b.renderOrder;\n\n\t} else if ( a.program && b.program && a.program !== b.program ) {\n\n\t\treturn a.program.id - b.program.id;\n\n\t} else if ( a.material.id !== b.material.id ) {\n\n\t\treturn a.material.id - b.material.id;\n\n\t} else if ( a.z !== b.z ) {\n\n\t\treturn a.z - b.z;\n\n\t} else {\n\n\t\treturn a.id - b.id;\n\n\t}\n\n}\n\nfunction reversePainterSortStable( a, b ) {\n\n\tif ( a.renderOrder !== b.renderOrder ) {\n\n\t\treturn a.renderOrder - b.renderOrder;\n\n\t} if ( a.z !== b.z ) {\n\n\t\treturn b.z - a.z;\n\n\t} else {\n\n\t\treturn a.id - b.id;\n\n\t}\n\n}\n\nfunction WebGLRenderList() {\n\n\tvar renderItems = [];\n\tvar renderItemsIndex = 0;\n\n\tvar opaque = [];\n\tvar transparent = [];\n\n\tfunction init() {\n\n\t\trenderItemsIndex = 0;\n\n\t\topaque.length = 0;\n\t\ttransparent.length = 0;\n\n\t}\n\n\tfunction push( object, geometry, material, z, group ) {\n\n\t\tvar renderItem = renderItems[ renderItemsIndex ];\n\n\t\tif ( renderItem === undefined ) {\n\n\t\t\trenderItem = {\n\t\t\t\tid: object.id,\n\t\t\t\tobject: object,\n\t\t\t\tgeometry: geometry,\n\t\t\t\tmaterial: material,\n\t\t\t\tprogram: material.program,\n\t\t\t\trenderOrder: object.renderOrder,\n\t\t\t\tz: z,\n\t\t\t\tgroup: group\n\t\t\t};\n\n\t\t\trenderItems[ renderItemsIndex ] = renderItem;\n\n\t\t} else {\n\n\t\t\trenderItem.id = object.id;\n\t\t\trenderItem.object = object;\n\t\t\trenderItem.geometry = geometry;\n\t\t\trenderItem.material = material;\n\t\t\trenderItem.program = material.program;\n\t\t\trenderItem.renderOrder = object.renderOrder;\n\t\t\trenderItem.z = z;\n\t\t\trenderItem.group = group;\n\n\t\t}\n\n\t\t( material.transparent === true ? transparent : opaque ).push( renderItem );\n\n\t\trenderItemsIndex ++;\n\n\t}\n\n\tfunction sort() {\n\n\t\tif ( opaque.length > 1 ) opaque.sort( painterSortStable );\n\t\tif ( transparent.length > 1 ) transparent.sort( reversePainterSortStable );\n\n\t}\n\n\treturn {\n\t\topaque: opaque,\n\t\ttransparent: transparent,\n\n\t\tinit: init,\n\t\tpush: push,\n\n\t\tsort: sort\n\t};\n\n}\n\nfunction WebGLRenderLists() {\n\n\tvar lists = {};\n\n\tfunction get( scene, camera ) {\n\n\t\tvar hash = scene.id + ',' + camera.id;\n\t\tvar list = lists[ hash ];\n\n\t\tif ( list === undefined ) {\n\n\t\t\t// console.log( 'THREE.WebGLRenderLists:', hash );\n\n\t\t\tlist = new WebGLRenderList();\n\t\t\tlists[ hash ] = list;\n\n\t\t}\n\n\t\treturn list;\n\n\t}\n\n\tfunction dispose() {\n\n\t\tlists = {};\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tdispose: dispose\n\t};\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction UniformsCache() {\n\n\tvar lights = {};\n\n\treturn {\n\n\t\tget: function ( light ) {\n\n\t\t\tif ( lights[ light.id ] !== undefined ) {\n\n\t\t\t\treturn lights[ light.id ];\n\n\t\t\t}\n\n\t\t\tvar uniforms;\n\n\t\t\tswitch ( light.type ) {\n\n\t\t\t\tcase 'DirectionalLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tdirection: new Vector3(),\n\t\t\t\t\t\tcolor: new Color(),\n\n\t\t\t\t\t\tshadow: false,\n\t\t\t\t\t\tshadowBias: 0,\n\t\t\t\t\t\tshadowRadius: 1,\n\t\t\t\t\t\tshadowMapSize: new Vector2()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'SpotLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tposition: new Vector3(),\n\t\t\t\t\t\tdirection: new Vector3(),\n\t\t\t\t\t\tcolor: new Color(),\n\t\t\t\t\t\tdistance: 0,\n\t\t\t\t\t\tconeCos: 0,\n\t\t\t\t\t\tpenumbraCos: 0,\n\t\t\t\t\t\tdecay: 0,\n\n\t\t\t\t\t\tshadow: false,\n\t\t\t\t\t\tshadowBias: 0,\n\t\t\t\t\t\tshadowRadius: 1,\n\t\t\t\t\t\tshadowMapSize: new Vector2()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'PointLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tposition: new Vector3(),\n\t\t\t\t\t\tcolor: new Color(),\n\t\t\t\t\t\tdistance: 0,\n\t\t\t\t\t\tdecay: 0,\n\n\t\t\t\t\t\tshadow: false,\n\t\t\t\t\t\tshadowBias: 0,\n\t\t\t\t\t\tshadowRadius: 1,\n\t\t\t\t\t\tshadowMapSize: new Vector2(),\n\t\t\t\t\t\tshadowCameraNear: 1,\n\t\t\t\t\t\tshadowCameraFar: 1000\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'HemisphereLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tdirection: new Vector3(),\n\t\t\t\t\t\tskyColor: new Color(),\n\t\t\t\t\t\tgroundColor: new Color()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'RectAreaLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tcolor: new Color(),\n\t\t\t\t\t\tposition: new Vector3(),\n\t\t\t\t\t\thalfWidth: new Vector3(),\n\t\t\t\t\t\thalfHeight: new Vector3()\n\t\t\t\t\t\t// TODO (abelnation): set RectAreaLight shadow uniforms\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tlights[ light.id ] = uniforms;\n\n\t\t\treturn uniforms;\n\n\t\t}\n\n\t};\n\n}\n\nvar count = 0;\n\nfunction WebGLLights() {\n\n\tvar cache = new UniformsCache();\n\n\tvar state = {\n\n\t\tid: count ++,\n\n\t\thash: '',\n\n\t\tambient: [ 0, 0, 0 ],\n\t\tdirectional: [],\n\t\tdirectionalShadowMap: [],\n\t\tdirectionalShadowMatrix: [],\n\t\tspot: [],\n\t\tspotShadowMap: [],\n\t\tspotShadowMatrix: [],\n\t\trectArea: [],\n\t\tpoint: [],\n\t\tpointShadowMap: [],\n\t\tpointShadowMatrix: [],\n\t\themi: []\n\n\t};\n\n\tvar vector3 = new Vector3();\n\tvar matrix4 = new Matrix4();\n\tvar matrix42 = new Matrix4();\n\n\tfunction setup( lights, shadows, camera ) {\n\n\t\tvar r = 0, g = 0, b = 0;\n\n\t\tvar directionalLength = 0;\n\t\tvar pointLength = 0;\n\t\tvar spotLength = 0;\n\t\tvar rectAreaLength = 0;\n\t\tvar hemiLength = 0;\n\n\t\tvar viewMatrix = camera.matrixWorldInverse;\n\n\t\tfor ( var i = 0, l = lights.length; i < l; i ++ ) {\n\n\t\t\tvar light = lights[ i ];\n\n\t\t\tvar color = light.color;\n\t\t\tvar intensity = light.intensity;\n\t\t\tvar distance = light.distance;\n\n\t\t\tvar shadowMap = ( light.shadow && light.shadow.map ) ? light.shadow.map.texture : null;\n\n\t\t\tif ( light.isAmbientLight ) {\n\n\t\t\t\tr += color.r * intensity;\n\t\t\t\tg += color.g * intensity;\n\t\t\t\tb += color.b * intensity;\n\n\t\t\t} else if ( light.isDirectionalLight ) {\n\n\t\t\t\tvar uniforms = cache.get( light );\n\n\t\t\t\tuniforms.color.copy( light.color ).multiplyScalar( light.intensity );\n\t\t\t\tuniforms.direction.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tvector3.setFromMatrixPosition( light.target.matrixWorld );\n\t\t\t\tuniforms.direction.sub( vector3 );\n\t\t\t\tuniforms.direction.transformDirection( viewMatrix );\n\n\t\t\t\tuniforms.shadow = light.castShadow;\n\n\t\t\t\tif ( light.castShadow ) {\n\n\t\t\t\t\tvar shadow = light.shadow;\n\n\t\t\t\t\tuniforms.shadowBias = shadow.bias;\n\t\t\t\t\tuniforms.shadowRadius = shadow.radius;\n\t\t\t\t\tuniforms.shadowMapSize = shadow.mapSize;\n\n\t\t\t\t}\n\n\t\t\t\tstate.directionalShadowMap[ directionalLength ] = shadowMap;\n\t\t\t\tstate.directionalShadowMatrix[ directionalLength ] = light.shadow.matrix;\n\t\t\t\tstate.directional[ directionalLength ] = uniforms;\n\n\t\t\t\tdirectionalLength ++;\n\n\t\t\t} else if ( light.isSpotLight ) {\n\n\t\t\t\tvar uniforms = cache.get( light );\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.position.applyMatrix4( viewMatrix );\n\n\t\t\t\tuniforms.color.copy( color ).multiplyScalar( intensity );\n\t\t\t\tuniforms.distance = distance;\n\n\t\t\t\tuniforms.direction.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tvector3.setFromMatrixPosition( light.target.matrixWorld );\n\t\t\t\tuniforms.direction.sub( vector3 );\n\t\t\t\tuniforms.direction.transformDirection( viewMatrix );\n\n\t\t\t\tuniforms.coneCos = Math.cos( light.angle );\n\t\t\t\tuniforms.penumbraCos = Math.cos( light.angle * ( 1 - light.penumbra ) );\n\t\t\t\tuniforms.decay = ( light.distance === 0 ) ? 0.0 : light.decay;\n\n\t\t\t\tuniforms.shadow = light.castShadow;\n\n\t\t\t\tif ( light.castShadow ) {\n\n\t\t\t\t\tvar shadow = light.shadow;\n\n\t\t\t\t\tuniforms.shadowBias = shadow.bias;\n\t\t\t\t\tuniforms.shadowRadius = shadow.radius;\n\t\t\t\t\tuniforms.shadowMapSize = shadow.mapSize;\n\n\t\t\t\t}\n\n\t\t\t\tstate.spotShadowMap[ spotLength ] = shadowMap;\n\t\t\t\tstate.spotShadowMatrix[ spotLength ] = light.shadow.matrix;\n\t\t\t\tstate.spot[ spotLength ] = uniforms;\n\n\t\t\t\tspotLength ++;\n\n\t\t\t} else if ( light.isRectAreaLight ) {\n\n\t\t\t\tvar uniforms = cache.get( light );\n\n\t\t\t\t// (a) intensity is the total visible light emitted\n\t\t\t\t//uniforms.color.copy( color ).multiplyScalar( intensity / ( light.width * light.height * Math.PI ) );\n\n\t\t\t\t// (b) intensity is the brightness of the light\n\t\t\t\tuniforms.color.copy( color ).multiplyScalar( intensity );\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.position.applyMatrix4( viewMatrix );\n\n\t\t\t\t// extract local rotation of light to derive width/height half vectors\n\t\t\t\tmatrix42.identity();\n\t\t\t\tmatrix4.copy( light.matrixWorld );\n\t\t\t\tmatrix4.premultiply( viewMatrix );\n\t\t\t\tmatrix42.extractRotation( matrix4 );\n\n\t\t\t\tuniforms.halfWidth.set( light.width * 0.5, 0.0, 0.0 );\n\t\t\t\tuniforms.halfHeight.set( 0.0, light.height * 0.5, 0.0 );\n\n\t\t\t\tuniforms.halfWidth.applyMatrix4( matrix42 );\n\t\t\t\tuniforms.halfHeight.applyMatrix4( matrix42 );\n\n\t\t\t\t// TODO (abelnation): RectAreaLight distance?\n\t\t\t\t// uniforms.distance = distance;\n\n\t\t\t\tstate.rectArea[ rectAreaLength ] = uniforms;\n\n\t\t\t\trectAreaLength ++;\n\n\t\t\t} else if ( light.isPointLight ) {\n\n\t\t\t\tvar uniforms = cache.get( light );\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.position.applyMatrix4( viewMatrix );\n\n\t\t\t\tuniforms.color.copy( light.color ).multiplyScalar( light.intensity );\n\t\t\t\tuniforms.distance = light.distance;\n\t\t\t\tuniforms.decay = ( light.distance === 0 ) ? 0.0 : light.decay;\n\n\t\t\t\tuniforms.shadow = light.castShadow;\n\n\t\t\t\tif ( light.castShadow ) {\n\n\t\t\t\t\tvar shadow = light.shadow;\n\n\t\t\t\t\tuniforms.shadowBias = shadow.bias;\n\t\t\t\t\tuniforms.shadowRadius = shadow.radius;\n\t\t\t\t\tuniforms.shadowMapSize = shadow.mapSize;\n\t\t\t\t\tuniforms.shadowCameraNear = shadow.camera.near;\n\t\t\t\t\tuniforms.shadowCameraFar = shadow.camera.far;\n\n\t\t\t\t}\n\n\t\t\t\tstate.pointShadowMap[ pointLength ] = shadowMap;\n\t\t\t\tstate.pointShadowMatrix[ pointLength ] = light.shadow.matrix;\n\t\t\t\tstate.point[ pointLength ] = uniforms;\n\n\t\t\t\tpointLength ++;\n\n\t\t\t} else if ( light.isHemisphereLight ) {\n\n\t\t\t\tvar uniforms = cache.get( light );\n\n\t\t\t\tuniforms.direction.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.direction.transformDirection( viewMatrix );\n\t\t\t\tuniforms.direction.normalize();\n\n\t\t\t\tuniforms.skyColor.copy( light.color ).multiplyScalar( intensity );\n\t\t\t\tuniforms.groundColor.copy( light.groundColor ).multiplyScalar( intensity );\n\n\t\t\t\tstate.hemi[ hemiLength ] = uniforms;\n\n\t\t\t\themiLength ++;\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.ambient[ 0 ] = r;\n\t\tstate.ambient[ 1 ] = g;\n\t\tstate.ambient[ 2 ] = b;\n\n\t\tstate.directional.length = directionalLength;\n\t\tstate.spot.length = spotLength;\n\t\tstate.rectArea.length = rectAreaLength;\n\t\tstate.point.length = pointLength;\n\t\tstate.hemi.length = hemiLength;\n\n\t\tstate.hash = state.id + ',' + directionalLength + ',' + pointLength + ',' + spotLength + ',' + rectAreaLength + ',' + hemiLength + ',' + shadows.length;\n\n\t}\n\n\treturn {\n\t\tsetup: setup,\n\t\tstate: state\n\t};\n\n}\n\n/**\n * @author Mugen87 / https://github.com/Mugen87\n */\n\nfunction WebGLRenderState() {\n\n\tvar lights = new WebGLLights();\n\n\tvar lightsArray = [];\n\tvar shadowsArray = [];\n\tvar spritesArray = [];\n\n\tfunction init() {\n\n\t\tlightsArray.length = 0;\n\t\tshadowsArray.length = 0;\n\t\tspritesArray.length = 0;\n\n\t}\n\n\tfunction pushLight( light ) {\n\n\t\tlightsArray.push( light );\n\n\t}\n\n\tfunction pushShadow( shadowLight ) {\n\n\t\tshadowsArray.push( shadowLight );\n\n\t}\n\n\tfunction pushSprite( shadowLight ) {\n\n\t\tspritesArray.push( shadowLight );\n\n\t}\n\n\tfunction setupLights( camera ) {\n\n\t\tlights.setup( lightsArray, shadowsArray, camera );\n\n\t}\n\n\tvar state = {\n\t\tlightsArray: lightsArray,\n\t\tshadowsArray: shadowsArray,\n\t\tspritesArray: spritesArray,\n\n\t\tlights: lights\n\t};\n\n\treturn {\n\t\tinit: init,\n\t\tstate: state,\n\t\tsetupLights: setupLights,\n\n\t\tpushLight: pushLight,\n\t\tpushShadow: pushShadow,\n\t\tpushSprite: pushSprite\n\t};\n\n}\n\nfunction WebGLRenderStates() {\n\n\tvar renderStates = {};\n\n\tfunction get( scene, camera ) {\n\n\t\tvar hash = scene.id + ',' + camera.id;\n\n\t\tvar renderState = renderStates[ hash ];\n\n\t\tif ( renderState === undefined ) {\n\n\t\t\trenderState = new WebGLRenderState();\n\t\t\trenderStates[ hash ] = renderState;\n\n\t\t}\n\n\t\treturn renderState;\n\n\t}\n\n\tfunction dispose() {\n\n\t\trenderStates = {};\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tdispose: dispose\n\t};\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n * @author bhouston / https://clara.io\n * @author WestLangley / http://github.com/WestLangley\n *\n * parameters = {\n *\n * opacity: ,\n *\n * map: new THREE.Texture( ),\n *\n * alphaMap: new THREE.Texture( ),\n *\n * displacementMap: new THREE.Texture( ),\n * displacementScale: ,\n * displacementBias: ,\n *\n * wireframe: ,\n * wireframeLinewidth: \n * }\n */\n\nfunction MeshDepthMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'MeshDepthMaterial';\n\n\tthis.depthPacking = BasicDepthPacking;\n\n\tthis.skinning = false;\n\tthis.morphTargets = false;\n\n\tthis.map = null;\n\n\tthis.alphaMap = null;\n\n\tthis.displacementMap = null;\n\tthis.displacementScale = 1;\n\tthis.displacementBias = 0;\n\n\tthis.wireframe = false;\n\tthis.wireframeLinewidth = 1;\n\n\tthis.fog = false;\n\tthis.lights = false;\n\n\tthis.setValues( parameters );\n\n}\n\nMeshDepthMaterial.prototype = Object.create( Material.prototype );\nMeshDepthMaterial.prototype.constructor = MeshDepthMaterial;\n\nMeshDepthMaterial.prototype.isMeshDepthMaterial = true;\n\nMeshDepthMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.depthPacking = source.depthPacking;\n\n\tthis.skinning = source.skinning;\n\tthis.morphTargets = source.morphTargets;\n\n\tthis.map = source.map;\n\n\tthis.alphaMap = source.alphaMap;\n\n\tthis.displacementMap = source.displacementMap;\n\tthis.displacementScale = source.displacementScale;\n\tthis.displacementBias = source.displacementBias;\n\n\tthis.wireframe = source.wireframe;\n\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\n\treturn this;\n\n};\n\n/**\n * @author WestLangley / http://github.com/WestLangley\n *\n * parameters = {\n *\n * referencePosition: ,\n * nearDistance: ,\n * farDistance: ,\n *\n * skinning: ,\n * morphTargets: ,\n *\n * map: new THREE.Texture( ),\n *\n * alphaMap: new THREE.Texture( ),\n *\n * displacementMap: new THREE.Texture( ),\n * displacementScale: ,\n * displacementBias: \n *\n * }\n */\n\nfunction MeshDistanceMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'MeshDistanceMaterial';\n\n\tthis.referencePosition = new Vector3();\n\tthis.nearDistance = 1;\n\tthis.farDistance = 1000;\n\n\tthis.skinning = false;\n\tthis.morphTargets = false;\n\n\tthis.map = null;\n\n\tthis.alphaMap = null;\n\n\tthis.displacementMap = null;\n\tthis.displacementScale = 1;\n\tthis.displacementBias = 0;\n\n\tthis.fog = false;\n\tthis.lights = false;\n\n\tthis.setValues( parameters );\n\n}\n\nMeshDistanceMaterial.prototype = Object.create( Material.prototype );\nMeshDistanceMaterial.prototype.constructor = MeshDistanceMaterial;\n\nMeshDistanceMaterial.prototype.isMeshDistanceMaterial = true;\n\nMeshDistanceMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.referencePosition.copy( source.referencePosition );\n\tthis.nearDistance = source.nearDistance;\n\tthis.farDistance = source.farDistance;\n\n\tthis.skinning = source.skinning;\n\tthis.morphTargets = source.morphTargets;\n\n\tthis.map = source.map;\n\n\tthis.alphaMap = source.alphaMap;\n\n\tthis.displacementMap = source.displacementMap;\n\tthis.displacementScale = source.displacementScale;\n\tthis.displacementBias = source.displacementBias;\n\n\treturn this;\n\n};\n\n/**\n * @author alteredq / http://alteredqualia.com/\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebGLShadowMap( _renderer, _objects, maxTextureSize ) {\n\n\tvar _frustum = new Frustum(),\n\t\t_projScreenMatrix = new Matrix4(),\n\n\t\t_shadowMapSize = new Vector2(),\n\t\t_maxShadowMapSize = new Vector2( maxTextureSize, maxTextureSize ),\n\n\t\t_lookTarget = new Vector3(),\n\t\t_lightPositionWorld = new Vector3(),\n\n\t\t_MorphingFlag = 1,\n\t\t_SkinningFlag = 2,\n\n\t\t_NumberOfMaterialVariants = ( _MorphingFlag | _SkinningFlag ) + 1,\n\n\t\t_depthMaterials = new Array( _NumberOfMaterialVariants ),\n\t\t_distanceMaterials = new Array( _NumberOfMaterialVariants ),\n\n\t\t_materialCache = {};\n\n\tvar shadowSide = { 0: BackSide, 1: FrontSide, 2: DoubleSide };\n\n\tvar cubeDirections = [\n\t\tnew Vector3( 1, 0, 0 ), new Vector3( - 1, 0, 0 ), new Vector3( 0, 0, 1 ),\n\t\tnew Vector3( 0, 0, - 1 ), new Vector3( 0, 1, 0 ), new Vector3( 0, - 1, 0 )\n\t];\n\n\tvar cubeUps = [\n\t\tnew Vector3( 0, 1, 0 ), new Vector3( 0, 1, 0 ), new Vector3( 0, 1, 0 ),\n\t\tnew Vector3( 0, 1, 0 ), new Vector3( 0, 0, 1 ),\tnew Vector3( 0, 0, - 1 )\n\t];\n\n\tvar cube2DViewPorts = [\n\t\tnew Vector4(), new Vector4(), new Vector4(),\n\t\tnew Vector4(), new Vector4(), new Vector4()\n\t];\n\n\t// init\n\n\tfor ( var i = 0; i !== _NumberOfMaterialVariants; ++ i ) {\n\n\t\tvar useMorphing = ( i & _MorphingFlag ) !== 0;\n\t\tvar useSkinning = ( i & _SkinningFlag ) !== 0;\n\n\t\tvar depthMaterial = new MeshDepthMaterial( {\n\n\t\t\tdepthPacking: RGBADepthPacking,\n\n\t\t\tmorphTargets: useMorphing,\n\t\t\tskinning: useSkinning\n\n\t\t} );\n\n\t\t_depthMaterials[ i ] = depthMaterial;\n\n\t\t//\n\n\t\tvar distanceMaterial = new MeshDistanceMaterial( {\n\n\t\t\tmorphTargets: useMorphing,\n\t\t\tskinning: useSkinning\n\n\t\t} );\n\n\t\t_distanceMaterials[ i ] = distanceMaterial;\n\n\t}\n\n\t//\n\n\tvar scope = this;\n\n\tthis.enabled = false;\n\n\tthis.autoUpdate = true;\n\tthis.needsUpdate = false;\n\n\tthis.type = PCFShadowMap;\n\n\tthis.render = function ( lights, scene, camera ) {\n\n\t\tif ( scope.enabled === false ) return;\n\t\tif ( scope.autoUpdate === false && scope.needsUpdate === false ) return;\n\n\t\tif ( lights.length === 0 ) return;\n\n\t\t// TODO Clean up (needed in case of contextlost)\n\t\tvar _gl = _renderer.context;\n\t\tvar _state = _renderer.state;\n\n\t\t// Set GL state for depth map.\n\t\t_state.disable( _gl.BLEND );\n\t\t_state.buffers.color.setClear( 1, 1, 1, 1 );\n\t\t_state.buffers.depth.setTest( true );\n\t\t_state.setScissorTest( false );\n\n\t\t// render depth map\n\n\t\tvar faceCount;\n\n\t\tfor ( var i = 0, il = lights.length; i < il; i ++ ) {\n\n\t\t\tvar light = lights[ i ];\n\t\t\tvar shadow = light.shadow;\n\t\t\tvar isPointLight = light && light.isPointLight;\n\n\t\t\tif ( shadow === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLShadowMap:', light, 'has no shadow.' );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tvar shadowCamera = shadow.camera;\n\n\t\t\t_shadowMapSize.copy( shadow.mapSize );\n\t\t\t_shadowMapSize.min( _maxShadowMapSize );\n\n\t\t\tif ( isPointLight ) {\n\n\t\t\t\tvar vpWidth = _shadowMapSize.x;\n\t\t\t\tvar vpHeight = _shadowMapSize.y;\n\n\t\t\t\t// These viewports map a cube-map onto a 2D texture with the\n\t\t\t\t// following orientation:\n\t\t\t\t//\n\t\t\t\t// xzXZ\n\t\t\t\t// y Y\n\t\t\t\t//\n\t\t\t\t// X - Positive x direction\n\t\t\t\t// x - Negative x direction\n\t\t\t\t// Y - Positive y direction\n\t\t\t\t// y - Negative y direction\n\t\t\t\t// Z - Positive z direction\n\t\t\t\t// z - Negative z direction\n\n\t\t\t\t// positive X\n\t\t\t\tcube2DViewPorts[ 0 ].set( vpWidth * 2, vpHeight, vpWidth, vpHeight );\n\t\t\t\t// negative X\n\t\t\t\tcube2DViewPorts[ 1 ].set( 0, vpHeight, vpWidth, vpHeight );\n\t\t\t\t// positive Z\n\t\t\t\tcube2DViewPorts[ 2 ].set( vpWidth * 3, vpHeight, vpWidth, vpHeight );\n\t\t\t\t// negative Z\n\t\t\t\tcube2DViewPorts[ 3 ].set( vpWidth, vpHeight, vpWidth, vpHeight );\n\t\t\t\t// positive Y\n\t\t\t\tcube2DViewPorts[ 4 ].set( vpWidth * 3, 0, vpWidth, vpHeight );\n\t\t\t\t// negative Y\n\t\t\t\tcube2DViewPorts[ 5 ].set( vpWidth, 0, vpWidth, vpHeight );\n\n\t\t\t\t_shadowMapSize.x *= 4.0;\n\t\t\t\t_shadowMapSize.y *= 2.0;\n\n\t\t\t}\n\n\t\t\tif ( shadow.map === null ) {\n\n\t\t\t\tvar pars = { minFilter: NearestFilter, magFilter: NearestFilter, format: RGBAFormat };\n\n\t\t\t\tshadow.map = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y, pars );\n\t\t\t\tshadow.map.texture.name = light.name + \".shadowMap\";\n\n\t\t\t\tshadowCamera.updateProjectionMatrix();\n\n\t\t\t}\n\n\t\t\tif ( shadow.isSpotLightShadow ) {\n\n\t\t\t\tshadow.update( light );\n\n\t\t\t}\n\n\t\t\tvar shadowMap = shadow.map;\n\t\t\tvar shadowMatrix = shadow.matrix;\n\n\t\t\t_lightPositionWorld.setFromMatrixPosition( light.matrixWorld );\n\t\t\tshadowCamera.position.copy( _lightPositionWorld );\n\n\t\t\tif ( isPointLight ) {\n\n\t\t\t\tfaceCount = 6;\n\n\t\t\t\t// for point lights we set the shadow matrix to be a translation-only matrix\n\t\t\t\t// equal to inverse of the light's position\n\n\t\t\t\tshadowMatrix.makeTranslation( - _lightPositionWorld.x, - _lightPositionWorld.y, - _lightPositionWorld.z );\n\n\t\t\t} else {\n\n\t\t\t\tfaceCount = 1;\n\n\t\t\t\t_lookTarget.setFromMatrixPosition( light.target.matrixWorld );\n\t\t\t\tshadowCamera.lookAt( _lookTarget );\n\t\t\t\tshadowCamera.updateMatrixWorld();\n\n\t\t\t\t// compute shadow matrix\n\n\t\t\t\tshadowMatrix.set(\n\t\t\t\t\t0.5, 0.0, 0.0, 0.5,\n\t\t\t\t\t0.0, 0.5, 0.0, 0.5,\n\t\t\t\t\t0.0, 0.0, 0.5, 0.5,\n\t\t\t\t\t0.0, 0.0, 0.0, 1.0\n\t\t\t\t);\n\n\t\t\t\tshadowMatrix.multiply( shadowCamera.projectionMatrix );\n\t\t\t\tshadowMatrix.multiply( shadowCamera.matrixWorldInverse );\n\n\t\t\t}\n\n\t\t\t_renderer.setRenderTarget( shadowMap );\n\t\t\t_renderer.clear();\n\n\t\t\t// render shadow map for each cube face (if omni-directional) or\n\t\t\t// run a single pass if not\n\n\t\t\tfor ( var face = 0; face < faceCount; face ++ ) {\n\n\t\t\t\tif ( isPointLight ) {\n\n\t\t\t\t\t_lookTarget.copy( shadowCamera.position );\n\t\t\t\t\t_lookTarget.add( cubeDirections[ face ] );\n\t\t\t\t\tshadowCamera.up.copy( cubeUps[ face ] );\n\t\t\t\t\tshadowCamera.lookAt( _lookTarget );\n\t\t\t\t\tshadowCamera.updateMatrixWorld();\n\n\t\t\t\t\tvar vpDimensions = cube2DViewPorts[ face ];\n\t\t\t\t\t_state.viewport( vpDimensions );\n\n\t\t\t\t}\n\n\t\t\t\t// update camera matrices and frustum\n\n\t\t\t\t_projScreenMatrix.multiplyMatrices( shadowCamera.projectionMatrix, shadowCamera.matrixWorldInverse );\n\t\t\t\t_frustum.setFromMatrix( _projScreenMatrix );\n\n\t\t\t\t// set object matrices & frustum culling\n\n\t\t\t\trenderObject( scene, camera, shadowCamera, isPointLight );\n\n\t\t\t}\n\n\t\t}\n\n\t\tscope.needsUpdate = false;\n\n\t};\n\n\tfunction getDepthMaterial( object, material, isPointLight, lightPositionWorld, shadowCameraNear, shadowCameraFar ) {\n\n\t\tvar geometry = object.geometry;\n\n\t\tvar result = null;\n\n\t\tvar materialVariants = _depthMaterials;\n\t\tvar customMaterial = object.customDepthMaterial;\n\n\t\tif ( isPointLight ) {\n\n\t\t\tmaterialVariants = _distanceMaterials;\n\t\t\tcustomMaterial = object.customDistanceMaterial;\n\n\t\t}\n\n\t\tif ( ! customMaterial ) {\n\n\t\t\tvar useMorphing = false;\n\n\t\t\tif ( material.morphTargets ) {\n\n\t\t\t\tif ( geometry && geometry.isBufferGeometry ) {\n\n\t\t\t\t\tuseMorphing = geometry.morphAttributes && geometry.morphAttributes.position && geometry.morphAttributes.position.length > 0;\n\n\t\t\t\t} else if ( geometry && geometry.isGeometry ) {\n\n\t\t\t\t\tuseMorphing = geometry.morphTargets && geometry.morphTargets.length > 0;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( object.isSkinnedMesh && material.skinning === false ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLShadowMap: THREE.SkinnedMesh with material.skinning set to false:', object );\n\n\t\t\t}\n\n\t\t\tvar useSkinning = object.isSkinnedMesh && material.skinning;\n\n\t\t\tvar variantIndex = 0;\n\n\t\t\tif ( useMorphing ) variantIndex |= _MorphingFlag;\n\t\t\tif ( useSkinning ) variantIndex |= _SkinningFlag;\n\n\t\t\tresult = materialVariants[ variantIndex ];\n\n\t\t} else {\n\n\t\t\tresult = customMaterial;\n\n\t\t}\n\n\t\tif ( _renderer.localClippingEnabled &&\n\t\t\t\tmaterial.clipShadows === true &&\n\t\t\t\tmaterial.clippingPlanes.length !== 0 ) {\n\n\t\t\t// in this case we need a unique material instance reflecting the\n\t\t\t// appropriate state\n\n\t\t\tvar keyA = result.uuid, keyB = material.uuid;\n\n\t\t\tvar materialsForVariant = _materialCache[ keyA ];\n\n\t\t\tif ( materialsForVariant === undefined ) {\n\n\t\t\t\tmaterialsForVariant = {};\n\t\t\t\t_materialCache[ keyA ] = materialsForVariant;\n\n\t\t\t}\n\n\t\t\tvar cachedMaterial = materialsForVariant[ keyB ];\n\n\t\t\tif ( cachedMaterial === undefined ) {\n\n\t\t\t\tcachedMaterial = result.clone();\n\t\t\t\tmaterialsForVariant[ keyB ] = cachedMaterial;\n\n\t\t\t}\n\n\t\t\tresult = cachedMaterial;\n\n\t\t}\n\n\t\tresult.visible = material.visible;\n\t\tresult.wireframe = material.wireframe;\n\n\t\tresult.side = ( material.shadowSide != null ) ? material.shadowSide : shadowSide[ material.side ];\n\n\t\tresult.clipShadows = material.clipShadows;\n\t\tresult.clippingPlanes = material.clippingPlanes;\n\t\tresult.clipIntersection = material.clipIntersection;\n\n\t\tresult.wireframeLinewidth = material.wireframeLinewidth;\n\t\tresult.linewidth = material.linewidth;\n\n\t\tif ( isPointLight && result.isMeshDistanceMaterial ) {\n\n\t\t\tresult.referencePosition.copy( lightPositionWorld );\n\t\t\tresult.nearDistance = shadowCameraNear;\n\t\t\tresult.farDistance = shadowCameraFar;\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n\tfunction renderObject( object, camera, shadowCamera, isPointLight ) {\n\n\t\tif ( object.visible === false ) return;\n\n\t\tvar visible = object.layers.test( camera.layers );\n\n\t\tif ( visible && ( object.isMesh || object.isLine || object.isPoints ) ) {\n\n\t\t\tif ( object.castShadow && ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) ) {\n\n\t\t\t\tobject.modelViewMatrix.multiplyMatrices( shadowCamera.matrixWorldInverse, object.matrixWorld );\n\n\t\t\t\tvar geometry = _objects.update( object );\n\t\t\t\tvar material = object.material;\n\n\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\tvar groups = geometry.groups;\n\n\t\t\t\t\tfor ( var k = 0, kl = groups.length; k < kl; k ++ ) {\n\n\t\t\t\t\t\tvar group = groups[ k ];\n\t\t\t\t\t\tvar groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\t\tif ( groupMaterial && groupMaterial.visible ) {\n\n\t\t\t\t\t\t\tvar depthMaterial = getDepthMaterial( object, groupMaterial, isPointLight, _lightPositionWorld, shadowCamera.near, shadowCamera.far );\n\t\t\t\t\t\t\t_renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, group );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( material.visible ) {\n\n\t\t\t\t\tvar depthMaterial = getDepthMaterial( object, material, isPointLight, _lightPositionWorld, shadowCamera.near, shadowCamera.far );\n\t\t\t\t\t_renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, null );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar children = object.children;\n\n\t\tfor ( var i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\trenderObject( children[ i ], camera, shadowCamera, isPointLight );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction CanvasTexture( canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) {\n\n\tTexture.call( this, canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\n\n\tthis.needsUpdate = true;\n\n}\n\nCanvasTexture.prototype = Object.create( Texture.prototype );\nCanvasTexture.prototype.constructor = CanvasTexture;\n\n/**\n * @author mikael emtinger / http://gomo.se/\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction WebGLSpriteRenderer( renderer, gl, state, textures, capabilities ) {\n\n\tvar vertexBuffer, elementBuffer;\n\tvar program, attributes, uniforms;\n\n\tvar texture;\n\n\t// decompose matrixWorld\n\n\tvar spritePosition = new Vector3();\n\tvar spriteRotation = new Quaternion();\n\tvar spriteScale = new Vector3();\n\n\tfunction init() {\n\n\t\tvar vertices = new Float32Array( [\n\t\t\t- 0.5, - 0.5, 0, 0,\n\t\t\t 0.5, - 0.5, 1, 0,\n\t\t\t 0.5, 0.5, 1, 1,\n\t\t\t- 0.5, 0.5, 0, 1\n\t\t] );\n\n\t\tvar faces = new Uint16Array( [\n\t\t\t0, 1, 2,\n\t\t\t0, 2, 3\n\t\t] );\n\n\t\tvertexBuffer = gl.createBuffer();\n\t\telementBuffer = gl.createBuffer();\n\n\t\tgl.bindBuffer( gl.ARRAY_BUFFER, vertexBuffer );\n\t\tgl.bufferData( gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW );\n\n\t\tgl.bindBuffer( gl.ELEMENT_ARRAY_BUFFER, elementBuffer );\n\t\tgl.bufferData( gl.ELEMENT_ARRAY_BUFFER, faces, gl.STATIC_DRAW );\n\n\t\tprogram = createProgram();\n\n\t\tattributes = {\n\t\t\tposition: gl.getAttribLocation( program, 'position' ),\n\t\t\tuv: gl.getAttribLocation( program, 'uv' )\n\t\t};\n\n\t\tuniforms = {\n\t\t\tuvOffset: gl.getUniformLocation( program, 'uvOffset' ),\n\t\t\tuvScale: gl.getUniformLocation( program, 'uvScale' ),\n\n\t\t\trotation: gl.getUniformLocation( program, 'rotation' ),\n\t\t\tcenter: gl.getUniformLocation( program, 'center' ),\n\t\t\tscale: gl.getUniformLocation( program, 'scale' ),\n\n\t\t\tcolor: gl.getUniformLocation( program, 'color' ),\n\t\t\tmap: gl.getUniformLocation( program, 'map' ),\n\t\t\topacity: gl.getUniformLocation( program, 'opacity' ),\n\n\t\t\tmodelViewMatrix: gl.getUniformLocation( program, 'modelViewMatrix' ),\n\t\t\tprojectionMatrix: gl.getUniformLocation( program, 'projectionMatrix' ),\n\n\t\t\tfogType: gl.getUniformLocation( program, 'fogType' ),\n\t\t\tfogDensity: gl.getUniformLocation( program, 'fogDensity' ),\n\t\t\tfogNear: gl.getUniformLocation( program, 'fogNear' ),\n\t\t\tfogFar: gl.getUniformLocation( program, 'fogFar' ),\n\t\t\tfogColor: gl.getUniformLocation( program, 'fogColor' ),\n\t\t\tfogDepth: gl.getUniformLocation( program, 'fogDepth' ),\n\n\t\t\talphaTest: gl.getUniformLocation( program, 'alphaTest' )\n\t\t};\n\n\t\tvar canvas = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' );\n\t\tcanvas.width = 8;\n\t\tcanvas.height = 8;\n\n\t\tvar context = canvas.getContext( '2d' );\n\t\tcontext.fillStyle = 'white';\n\t\tcontext.fillRect( 0, 0, 8, 8 );\n\n\t\ttexture = new CanvasTexture( canvas );\n\n\t}\n\n\tthis.render = function ( sprites, scene, camera ) {\n\n\t\tif ( sprites.length === 0 ) return;\n\n\t\t// setup gl\n\n\t\tif ( program === undefined ) {\n\n\t\t\tinit();\n\n\t\t}\n\n\t\tstate.useProgram( program );\n\n\t\tstate.initAttributes();\n\t\tstate.enableAttribute( attributes.position );\n\t\tstate.enableAttribute( attributes.uv );\n\t\tstate.disableUnusedAttributes();\n\n\t\tstate.disable( gl.CULL_FACE );\n\t\tstate.enable( gl.BLEND );\n\n\t\tgl.bindBuffer( gl.ARRAY_BUFFER, vertexBuffer );\n\t\tgl.vertexAttribPointer( attributes.position, 2, gl.FLOAT, false, 2 * 8, 0 );\n\t\tgl.vertexAttribPointer( attributes.uv, 2, gl.FLOAT, false, 2 * 8, 8 );\n\n\t\tgl.bindBuffer( gl.ELEMENT_ARRAY_BUFFER, elementBuffer );\n\n\t\tgl.uniformMatrix4fv( uniforms.projectionMatrix, false, camera.projectionMatrix.elements );\n\n\t\tstate.activeTexture( gl.TEXTURE0 );\n\t\tgl.uniform1i( uniforms.map, 0 );\n\n\t\tvar oldFogType = 0;\n\t\tvar sceneFogType = 0;\n\t\tvar fog = scene.fog;\n\n\t\tif ( fog ) {\n\n\t\t\tgl.uniform3f( uniforms.fogColor, fog.color.r, fog.color.g, fog.color.b );\n\n\t\t\tif ( fog.isFog ) {\n\n\t\t\t\tgl.uniform1f( uniforms.fogNear, fog.near );\n\t\t\t\tgl.uniform1f( uniforms.fogFar, fog.far );\n\n\t\t\t\tgl.uniform1i( uniforms.fogType, 1 );\n\t\t\t\toldFogType = 1;\n\t\t\t\tsceneFogType = 1;\n\n\t\t\t} else if ( fog.isFogExp2 ) {\n\n\t\t\t\tgl.uniform1f( uniforms.fogDensity, fog.density );\n\n\t\t\t\tgl.uniform1i( uniforms.fogType, 2 );\n\t\t\t\toldFogType = 2;\n\t\t\t\tsceneFogType = 2;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tgl.uniform1i( uniforms.fogType, 0 );\n\t\t\toldFogType = 0;\n\t\t\tsceneFogType = 0;\n\n\t\t}\n\n\n\t\t// update positions and sort\n\n\t\tfor ( var i = 0, l = sprites.length; i < l; i ++ ) {\n\n\t\t\tvar sprite = sprites[ i ];\n\n\t\t\tsprite.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, sprite.matrixWorld );\n\t\t\tsprite.z = - sprite.modelViewMatrix.elements[ 14 ];\n\n\t\t}\n\n\t\tsprites.sort( painterSortStable );\n\n\t\t// render all sprites\n\n\t\tvar scale = [];\n\t\tvar center = [];\n\n\t\tfor ( var i = 0, l = sprites.length; i < l; i ++ ) {\n\n\t\t\tvar sprite = sprites[ i ];\n\t\t\tvar material = sprite.material;\n\n\t\t\tif ( material.visible === false ) continue;\n\n\t\t\tsprite.onBeforeRender( renderer, scene, camera, undefined, material, undefined );\n\n\t\t\tgl.uniform1f( uniforms.alphaTest, material.alphaTest );\n\t\t\tgl.uniformMatrix4fv( uniforms.modelViewMatrix, false, sprite.modelViewMatrix.elements );\n\n\t\t\tsprite.matrixWorld.decompose( spritePosition, spriteRotation, spriteScale );\n\n\t\t\tscale[ 0 ] = spriteScale.x;\n\t\t\tscale[ 1 ] = spriteScale.y;\n\n\t\t\tcenter[ 0 ] = sprite.center.x - 0.5;\n\t\t\tcenter[ 1 ] = sprite.center.y - 0.5;\n\n\t\t\tvar fogType = 0;\n\n\t\t\tif ( scene.fog && material.fog ) {\n\n\t\t\t\tfogType = sceneFogType;\n\n\t\t\t}\n\n\t\t\tif ( oldFogType !== fogType ) {\n\n\t\t\t\tgl.uniform1i( uniforms.fogType, fogType );\n\t\t\t\toldFogType = fogType;\n\n\t\t\t}\n\n\t\t\tif ( material.map !== null ) {\n\n\t\t\t\tgl.uniform2f( uniforms.uvOffset, material.map.offset.x, material.map.offset.y );\n\t\t\t\tgl.uniform2f( uniforms.uvScale, material.map.repeat.x, material.map.repeat.y );\n\n\t\t\t} else {\n\n\t\t\t\tgl.uniform2f( uniforms.uvOffset, 0, 0 );\n\t\t\t\tgl.uniform2f( uniforms.uvScale, 1, 1 );\n\n\t\t\t}\n\n\t\t\tgl.uniform1f( uniforms.opacity, material.opacity );\n\t\t\tgl.uniform3f( uniforms.color, material.color.r, material.color.g, material.color.b );\n\n\t\t\tgl.uniform1f( uniforms.rotation, material.rotation );\n\t\t\tgl.uniform2fv( uniforms.center, center );\n\t\t\tgl.uniform2fv( uniforms.scale, scale );\n\n\t\t\tstate.setBlending( material.blending, material.blendEquation, material.blendSrc, material.blendDst, material.blendEquationAlpha, material.blendSrcAlpha, material.blendDstAlpha, material.premultipliedAlpha );\n\t\t\tstate.buffers.depth.setTest( material.depthTest );\n\t\t\tstate.buffers.depth.setMask( material.depthWrite );\n\t\t\tstate.buffers.color.setMask( material.colorWrite );\n\n\t\t\ttextures.setTexture2D( material.map || texture, 0 );\n\n\t\t\tgl.drawElements( gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 0 );\n\n\t\t\tsprite.onAfterRender( renderer, scene, camera, undefined, material, undefined );\n\n\t\t}\n\n\t\t// restore gl\n\n\t\tstate.enable( gl.CULL_FACE );\n\n\t\tstate.reset();\n\n\t};\n\n\tfunction createProgram() {\n\n\t\tvar program = gl.createProgram();\n\n\t\tvar vertexShader = gl.createShader( gl.VERTEX_SHADER );\n\t\tvar fragmentShader = gl.createShader( gl.FRAGMENT_SHADER );\n\n\t\tgl.shaderSource( vertexShader, [\n\n\t\t\t'precision ' + capabilities.precision + ' float;',\n\n\t\t\t'#define SHADER_NAME ' + 'SpriteMaterial',\n\n\t\t\t'uniform mat4 modelViewMatrix;',\n\t\t\t'uniform mat4 projectionMatrix;',\n\t\t\t'uniform float rotation;',\n\t\t\t'uniform vec2 center;',\n\t\t\t'uniform vec2 scale;',\n\t\t\t'uniform vec2 uvOffset;',\n\t\t\t'uniform vec2 uvScale;',\n\n\t\t\t'attribute vec2 position;',\n\t\t\t'attribute vec2 uv;',\n\n\t\t\t'varying vec2 vUV;',\n\t\t\t'varying float fogDepth;',\n\n\t\t\t'void main() {',\n\n\t\t\t'\tvUV = uvOffset + uv * uvScale;',\n\n\t\t\t'\tvec2 alignedPosition = ( position - center ) * scale;',\n\n\t\t\t'\tvec2 rotatedPosition;',\n\t\t\t'\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;',\n\t\t\t'\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;',\n\n\t\t\t'\tvec4 mvPosition;',\n\n\t\t\t'\tmvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );',\n\t\t\t'\tmvPosition.xy += rotatedPosition;',\n\n\t\t\t'\tgl_Position = projectionMatrix * mvPosition;',\n\n\t\t\t'\tfogDepth = - mvPosition.z;',\n\n\t\t\t'}'\n\n\t\t].join( '\\n' ) );\n\n\t\tgl.shaderSource( fragmentShader, [\n\n\t\t\t'precision ' + capabilities.precision + ' float;',\n\n\t\t\t'#define SHADER_NAME ' + 'SpriteMaterial',\n\n\t\t\t'uniform vec3 color;',\n\t\t\t'uniform sampler2D map;',\n\t\t\t'uniform float opacity;',\n\n\t\t\t'uniform int fogType;',\n\t\t\t'uniform vec3 fogColor;',\n\t\t\t'uniform float fogDensity;',\n\t\t\t'uniform float fogNear;',\n\t\t\t'uniform float fogFar;',\n\t\t\t'uniform float alphaTest;',\n\n\t\t\t'varying vec2 vUV;',\n\t\t\t'varying float fogDepth;',\n\n\t\t\t'void main() {',\n\n\t\t\t'\tvec4 texture = texture2D( map, vUV );',\n\n\t\t\t'\tgl_FragColor = vec4( color * texture.xyz, texture.a * opacity );',\n\n\t\t\t'\tif ( gl_FragColor.a < alphaTest ) discard;',\n\n\t\t\t'\tif ( fogType > 0 ) {',\n\n\t\t\t'\t\tfloat fogFactor = 0.0;',\n\n\t\t\t'\t\tif ( fogType == 1 ) {',\n\n\t\t\t'\t\t\tfogFactor = smoothstep( fogNear, fogFar, fogDepth );',\n\n\t\t\t'\t\t} else {',\n\n\t\t\t'\t\t\tconst float LOG2 = 1.442695;',\n\t\t\t'\t\t\tfogFactor = exp2( - fogDensity * fogDensity * fogDepth * fogDepth * LOG2 );',\n\t\t\t'\t\t\tfogFactor = 1.0 - clamp( fogFactor, 0.0, 1.0 );',\n\n\t\t\t'\t\t}',\n\n\t\t\t'\t\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );',\n\n\t\t\t'\t}',\n\n\t\t\t'}'\n\n\t\t].join( '\\n' ) );\n\n\t\tgl.compileShader( vertexShader );\n\t\tgl.compileShader( fragmentShader );\n\n\t\tgl.attachShader( program, vertexShader );\n\t\tgl.attachShader( program, fragmentShader );\n\n\t\tgl.linkProgram( program );\n\n\t\treturn program;\n\n\t}\n\n\tfunction painterSortStable( a, b ) {\n\n\t\tif ( a.renderOrder !== b.renderOrder ) {\n\n\t\t\treturn a.renderOrder - b.renderOrder;\n\n\t\t} else if ( a.z !== b.z ) {\n\n\t\t\treturn b.z - a.z;\n\n\t\t} else {\n\n\t\t\treturn b.id - a.id;\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebGLState( gl, extensions, utils ) {\n\n\tfunction ColorBuffer() {\n\n\t\tvar locked = false;\n\n\t\tvar color = new Vector4();\n\t\tvar currentColorMask = null;\n\t\tvar currentColorClear = new Vector4( 0, 0, 0, 0 );\n\n\t\treturn {\n\n\t\t\tsetMask: function ( colorMask ) {\n\n\t\t\t\tif ( currentColorMask !== colorMask && ! locked ) {\n\n\t\t\t\t\tgl.colorMask( colorMask, colorMask, colorMask, colorMask );\n\t\t\t\t\tcurrentColorMask = colorMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetLocked: function ( lock ) {\n\n\t\t\t\tlocked = lock;\n\n\t\t\t},\n\n\t\t\tsetClear: function ( r, g, b, a, premultipliedAlpha ) {\n\n\t\t\t\tif ( premultipliedAlpha === true ) {\n\n\t\t\t\t\tr *= a; g *= a; b *= a;\n\n\t\t\t\t}\n\n\t\t\t\tcolor.set( r, g, b, a );\n\n\t\t\t\tif ( currentColorClear.equals( color ) === false ) {\n\n\t\t\t\t\tgl.clearColor( r, g, b, a );\n\t\t\t\t\tcurrentColorClear.copy( color );\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\treset: function () {\n\n\t\t\t\tlocked = false;\n\n\t\t\t\tcurrentColorMask = null;\n\t\t\t\tcurrentColorClear.set( - 1, 0, 0, 0 ); // set to invalid state\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\tfunction DepthBuffer() {\n\n\t\tvar locked = false;\n\n\t\tvar currentDepthMask = null;\n\t\tvar currentDepthFunc = null;\n\t\tvar currentDepthClear = null;\n\n\t\treturn {\n\n\t\t\tsetTest: function ( depthTest ) {\n\n\t\t\t\tif ( depthTest ) {\n\n\t\t\t\t\tenable( gl.DEPTH_TEST );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tdisable( gl.DEPTH_TEST );\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetMask: function ( depthMask ) {\n\n\t\t\t\tif ( currentDepthMask !== depthMask && ! locked ) {\n\n\t\t\t\t\tgl.depthMask( depthMask );\n\t\t\t\t\tcurrentDepthMask = depthMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetFunc: function ( depthFunc ) {\n\n\t\t\t\tif ( currentDepthFunc !== depthFunc ) {\n\n\t\t\t\t\tif ( depthFunc ) {\n\n\t\t\t\t\t\tswitch ( depthFunc ) {\n\n\t\t\t\t\t\t\tcase NeverDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( gl.NEVER );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase AlwaysDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( gl.ALWAYS );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase LessDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( gl.LESS );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase LessEqualDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( gl.LEQUAL );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase EqualDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( gl.EQUAL );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase GreaterEqualDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( gl.GEQUAL );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase GreaterDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( gl.GREATER );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase NotEqualDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( gl.NOTEQUAL );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tdefault:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( gl.LEQUAL );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tgl.depthFunc( gl.LEQUAL );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcurrentDepthFunc = depthFunc;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetLocked: function ( lock ) {\n\n\t\t\t\tlocked = lock;\n\n\t\t\t},\n\n\t\t\tsetClear: function ( depth ) {\n\n\t\t\t\tif ( currentDepthClear !== depth ) {\n\n\t\t\t\t\tgl.clearDepth( depth );\n\t\t\t\t\tcurrentDepthClear = depth;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\treset: function () {\n\n\t\t\t\tlocked = false;\n\n\t\t\t\tcurrentDepthMask = null;\n\t\t\t\tcurrentDepthFunc = null;\n\t\t\t\tcurrentDepthClear = null;\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\tfunction StencilBuffer() {\n\n\t\tvar locked = false;\n\n\t\tvar currentStencilMask = null;\n\t\tvar currentStencilFunc = null;\n\t\tvar currentStencilRef = null;\n\t\tvar currentStencilFuncMask = null;\n\t\tvar currentStencilFail = null;\n\t\tvar currentStencilZFail = null;\n\t\tvar currentStencilZPass = null;\n\t\tvar currentStencilClear = null;\n\n\t\treturn {\n\n\t\t\tsetTest: function ( stencilTest ) {\n\n\t\t\t\tif ( stencilTest ) {\n\n\t\t\t\t\tenable( gl.STENCIL_TEST );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tdisable( gl.STENCIL_TEST );\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetMask: function ( stencilMask ) {\n\n\t\t\t\tif ( currentStencilMask !== stencilMask && ! locked ) {\n\n\t\t\t\t\tgl.stencilMask( stencilMask );\n\t\t\t\t\tcurrentStencilMask = stencilMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetFunc: function ( stencilFunc, stencilRef, stencilMask ) {\n\n\t\t\t\tif ( currentStencilFunc !== stencilFunc ||\n\t\t\t\t currentStencilRef \t!== stencilRef \t||\n\t\t\t\t currentStencilFuncMask !== stencilMask ) {\n\n\t\t\t\t\tgl.stencilFunc( stencilFunc, stencilRef, stencilMask );\n\n\t\t\t\t\tcurrentStencilFunc = stencilFunc;\n\t\t\t\t\tcurrentStencilRef = stencilRef;\n\t\t\t\t\tcurrentStencilFuncMask = stencilMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetOp: function ( stencilFail, stencilZFail, stencilZPass ) {\n\n\t\t\t\tif ( currentStencilFail\t !== stencilFail \t||\n\t\t\t\t currentStencilZFail !== stencilZFail ||\n\t\t\t\t currentStencilZPass !== stencilZPass ) {\n\n\t\t\t\t\tgl.stencilOp( stencilFail, stencilZFail, stencilZPass );\n\n\t\t\t\t\tcurrentStencilFail = stencilFail;\n\t\t\t\t\tcurrentStencilZFail = stencilZFail;\n\t\t\t\t\tcurrentStencilZPass = stencilZPass;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetLocked: function ( lock ) {\n\n\t\t\t\tlocked = lock;\n\n\t\t\t},\n\n\t\t\tsetClear: function ( stencil ) {\n\n\t\t\t\tif ( currentStencilClear !== stencil ) {\n\n\t\t\t\t\tgl.clearStencil( stencil );\n\t\t\t\t\tcurrentStencilClear = stencil;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\treset: function () {\n\n\t\t\t\tlocked = false;\n\n\t\t\t\tcurrentStencilMask = null;\n\t\t\t\tcurrentStencilFunc = null;\n\t\t\t\tcurrentStencilRef = null;\n\t\t\t\tcurrentStencilFuncMask = null;\n\t\t\t\tcurrentStencilFail = null;\n\t\t\t\tcurrentStencilZFail = null;\n\t\t\t\tcurrentStencilZPass = null;\n\t\t\t\tcurrentStencilClear = null;\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\t//\n\n\tvar colorBuffer = new ColorBuffer();\n\tvar depthBuffer = new DepthBuffer();\n\tvar stencilBuffer = new StencilBuffer();\n\n\tvar maxVertexAttributes = gl.getParameter( gl.MAX_VERTEX_ATTRIBS );\n\tvar newAttributes = new Uint8Array( maxVertexAttributes );\n\tvar enabledAttributes = new Uint8Array( maxVertexAttributes );\n\tvar attributeDivisors = new Uint8Array( maxVertexAttributes );\n\n\tvar capabilities = {};\n\n\tvar compressedTextureFormats = null;\n\n\tvar currentProgram = null;\n\n\tvar currentBlending = null;\n\tvar currentBlendEquation = null;\n\tvar currentBlendSrc = null;\n\tvar currentBlendDst = null;\n\tvar currentBlendEquationAlpha = null;\n\tvar currentBlendSrcAlpha = null;\n\tvar currentBlendDstAlpha = null;\n\tvar currentPremultipledAlpha = false;\n\n\tvar currentFlipSided = null;\n\tvar currentCullFace = null;\n\n\tvar currentLineWidth = null;\n\n\tvar currentPolygonOffsetFactor = null;\n\tvar currentPolygonOffsetUnits = null;\n\n\tvar maxTextures = gl.getParameter( gl.MAX_COMBINED_TEXTURE_IMAGE_UNITS );\n\n\tvar lineWidthAvailable = false;\n\tvar version = 0;\n\tvar glVersion = gl.getParameter( gl.VERSION );\n\n\tif ( glVersion.indexOf( 'WebGL' ) !== - 1 ) {\n\n\t\tversion = parseFloat( /^WebGL\\ ([0-9])/.exec( glVersion )[ 1 ] );\n\t\tlineWidthAvailable = ( version >= 1.0 );\n\n\t} else if ( glVersion.indexOf( 'OpenGL ES' ) !== - 1 ) {\n\n\t\tversion = parseFloat( /^OpenGL\\ ES\\ ([0-9])/.exec( glVersion )[ 1 ] );\n\t\tlineWidthAvailable = ( version >= 2.0 );\n\n\t}\n\n\tvar currentTextureSlot = null;\n\tvar currentBoundTextures = {};\n\n\tvar currentScissor = new Vector4();\n\tvar currentViewport = new Vector4();\n\n\tfunction createTexture( type, target, count ) {\n\n\t\tvar data = new Uint8Array( 4 ); // 4 is required to match default unpack alignment of 4.\n\t\tvar texture = gl.createTexture();\n\n\t\tgl.bindTexture( type, texture );\n\t\tgl.texParameteri( type, gl.TEXTURE_MIN_FILTER, gl.NEAREST );\n\t\tgl.texParameteri( type, gl.TEXTURE_MAG_FILTER, gl.NEAREST );\n\n\t\tfor ( var i = 0; i < count; i ++ ) {\n\n\t\t\tgl.texImage2D( target + i, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, data );\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\tvar emptyTextures = {};\n\temptyTextures[ gl.TEXTURE_2D ] = createTexture( gl.TEXTURE_2D, gl.TEXTURE_2D, 1 );\n\temptyTextures[ gl.TEXTURE_CUBE_MAP ] = createTexture( gl.TEXTURE_CUBE_MAP, gl.TEXTURE_CUBE_MAP_POSITIVE_X, 6 );\n\n\t// init\n\n\tcolorBuffer.setClear( 0, 0, 0, 1 );\n\tdepthBuffer.setClear( 1 );\n\tstencilBuffer.setClear( 0 );\n\n\tenable( gl.DEPTH_TEST );\n\tdepthBuffer.setFunc( LessEqualDepth );\n\n\tsetFlipSided( false );\n\tsetCullFace( CullFaceBack );\n\tenable( gl.CULL_FACE );\n\n\tenable( gl.BLEND );\n\tsetBlending( NormalBlending );\n\n\t//\n\n\tfunction initAttributes() {\n\n\t\tfor ( var i = 0, l = newAttributes.length; i < l; i ++ ) {\n\n\t\t\tnewAttributes[ i ] = 0;\n\n\t\t}\n\n\t}\n\n\tfunction enableAttribute( attribute ) {\n\n\t\tnewAttributes[ attribute ] = 1;\n\n\t\tif ( enabledAttributes[ attribute ] === 0 ) {\n\n\t\t\tgl.enableVertexAttribArray( attribute );\n\t\t\tenabledAttributes[ attribute ] = 1;\n\n\t\t}\n\n\t\tif ( attributeDivisors[ attribute ] !== 0 ) {\n\n\t\t\tvar extension = extensions.get( 'ANGLE_instanced_arrays' );\n\n\t\t\textension.vertexAttribDivisorANGLE( attribute, 0 );\n\t\t\tattributeDivisors[ attribute ] = 0;\n\n\t\t}\n\n\t}\n\n\tfunction enableAttributeAndDivisor( attribute, meshPerAttribute ) {\n\n\t\tnewAttributes[ attribute ] = 1;\n\n\t\tif ( enabledAttributes[ attribute ] === 0 ) {\n\n\t\t\tgl.enableVertexAttribArray( attribute );\n\t\t\tenabledAttributes[ attribute ] = 1;\n\n\t\t}\n\n\t\tif ( attributeDivisors[ attribute ] !== meshPerAttribute ) {\n\n\t\t\tvar extension = extensions.get( 'ANGLE_instanced_arrays' );\n\n\t\t\textension.vertexAttribDivisorANGLE( attribute, meshPerAttribute );\n\t\t\tattributeDivisors[ attribute ] = meshPerAttribute;\n\n\t\t}\n\n\t}\n\n\tfunction disableUnusedAttributes() {\n\n\t\tfor ( var i = 0, l = enabledAttributes.length; i !== l; ++ i ) {\n\n\t\t\tif ( enabledAttributes[ i ] !== newAttributes[ i ] ) {\n\n\t\t\t\tgl.disableVertexAttribArray( i );\n\t\t\t\tenabledAttributes[ i ] = 0;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction enable( id ) {\n\n\t\tif ( capabilities[ id ] !== true ) {\n\n\t\t\tgl.enable( id );\n\t\t\tcapabilities[ id ] = true;\n\n\t\t}\n\n\t}\n\n\tfunction disable( id ) {\n\n\t\tif ( capabilities[ id ] !== false ) {\n\n\t\t\tgl.disable( id );\n\t\t\tcapabilities[ id ] = false;\n\n\t\t}\n\n\t}\n\n\tfunction getCompressedTextureFormats() {\n\n\t\tif ( compressedTextureFormats === null ) {\n\n\t\t\tcompressedTextureFormats = [];\n\n\t\t\tif ( extensions.get( 'WEBGL_compressed_texture_pvrtc' ) ||\n\t\t\t extensions.get( 'WEBGL_compressed_texture_s3tc' ) ||\n\t\t\t extensions.get( 'WEBGL_compressed_texture_etc1' ) ||\n\t\t\t extensions.get( 'WEBGL_compressed_texture_astc' ) ) {\n\n\t\t\t\tvar formats = gl.getParameter( gl.COMPRESSED_TEXTURE_FORMATS );\n\n\t\t\t\tfor ( var i = 0; i < formats.length; i ++ ) {\n\n\t\t\t\t\tcompressedTextureFormats.push( formats[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn compressedTextureFormats;\n\n\t}\n\n\tfunction useProgram( program ) {\n\n\t\tif ( currentProgram !== program ) {\n\n\t\t\tgl.useProgram( program );\n\n\t\t\tcurrentProgram = program;\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\tfunction setBlending( blending, blendEquation, blendSrc, blendDst, blendEquationAlpha, blendSrcAlpha, blendDstAlpha, premultipliedAlpha ) {\n\n\t\tif ( blending !== NoBlending ) {\n\n\t\t\tenable( gl.BLEND );\n\n\t\t} else {\n\n\t\t\tdisable( gl.BLEND );\n\n\t\t}\n\n\t\tif ( blending !== CustomBlending ) {\n\n\t\t\tif ( blending !== currentBlending || premultipliedAlpha !== currentPremultipledAlpha ) {\n\n\t\t\t\tswitch ( blending ) {\n\n\t\t\t\t\tcase AdditiveBlending:\n\n\t\t\t\t\t\tif ( premultipliedAlpha ) {\n\n\t\t\t\t\t\t\tgl.blendEquationSeparate( gl.FUNC_ADD, gl.FUNC_ADD );\n\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.ONE, gl.ONE, gl.ONE, gl.ONE );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tgl.blendEquation( gl.FUNC_ADD );\n\t\t\t\t\t\t\tgl.blendFunc( gl.SRC_ALPHA, gl.ONE );\n\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase SubtractiveBlending:\n\n\t\t\t\t\t\tif ( premultipliedAlpha ) {\n\n\t\t\t\t\t\t\tgl.blendEquationSeparate( gl.FUNC_ADD, gl.FUNC_ADD );\n\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.ZERO, gl.ZERO, gl.ONE_MINUS_SRC_COLOR, gl.ONE_MINUS_SRC_ALPHA );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tgl.blendEquation( gl.FUNC_ADD );\n\t\t\t\t\t\t\tgl.blendFunc( gl.ZERO, gl.ONE_MINUS_SRC_COLOR );\n\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase MultiplyBlending:\n\n\t\t\t\t\t\tif ( premultipliedAlpha ) {\n\n\t\t\t\t\t\t\tgl.blendEquationSeparate( gl.FUNC_ADD, gl.FUNC_ADD );\n\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.ZERO, gl.SRC_COLOR, gl.ZERO, gl.SRC_ALPHA );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tgl.blendEquation( gl.FUNC_ADD );\n\t\t\t\t\t\t\tgl.blendFunc( gl.ZERO, gl.SRC_COLOR );\n\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tif ( premultipliedAlpha ) {\n\n\t\t\t\t\t\t\tgl.blendEquationSeparate( gl.FUNC_ADD, gl.FUNC_ADD );\n\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.ONE, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tgl.blendEquationSeparate( gl.FUNC_ADD, gl.FUNC_ADD );\n\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tcurrentBlendEquation = null;\n\t\t\tcurrentBlendSrc = null;\n\t\t\tcurrentBlendDst = null;\n\t\t\tcurrentBlendEquationAlpha = null;\n\t\t\tcurrentBlendSrcAlpha = null;\n\t\t\tcurrentBlendDstAlpha = null;\n\n\t\t} else {\n\n\t\t\tblendEquationAlpha = blendEquationAlpha || blendEquation;\n\t\t\tblendSrcAlpha = blendSrcAlpha || blendSrc;\n\t\t\tblendDstAlpha = blendDstAlpha || blendDst;\n\n\t\t\tif ( blendEquation !== currentBlendEquation || blendEquationAlpha !== currentBlendEquationAlpha ) {\n\n\t\t\t\tgl.blendEquationSeparate( utils.convert( blendEquation ), utils.convert( blendEquationAlpha ) );\n\n\t\t\t\tcurrentBlendEquation = blendEquation;\n\t\t\t\tcurrentBlendEquationAlpha = blendEquationAlpha;\n\n\t\t\t}\n\n\t\t\tif ( blendSrc !== currentBlendSrc || blendDst !== currentBlendDst || blendSrcAlpha !== currentBlendSrcAlpha || blendDstAlpha !== currentBlendDstAlpha ) {\n\n\t\t\t\tgl.blendFuncSeparate( utils.convert( blendSrc ), utils.convert( blendDst ), utils.convert( blendSrcAlpha ), utils.convert( blendDstAlpha ) );\n\n\t\t\t\tcurrentBlendSrc = blendSrc;\n\t\t\t\tcurrentBlendDst = blendDst;\n\t\t\t\tcurrentBlendSrcAlpha = blendSrcAlpha;\n\t\t\t\tcurrentBlendDstAlpha = blendDstAlpha;\n\n\t\t\t}\n\n\t\t}\n\n\t\tcurrentBlending = blending;\n\t\tcurrentPremultipledAlpha = premultipliedAlpha;\n\n\t}\n\n\tfunction setMaterial( material, frontFaceCW ) {\n\n\t\tmaterial.side === DoubleSide\n\t\t\t? disable( gl.CULL_FACE )\n\t\t\t: enable( gl.CULL_FACE );\n\n\t\tvar flipSided = ( material.side === BackSide );\n\t\tif ( frontFaceCW ) flipSided = ! flipSided;\n\n\t\tsetFlipSided( flipSided );\n\n\t\tmaterial.transparent === true\n\t\t\t? setBlending( material.blending, material.blendEquation, material.blendSrc, material.blendDst, material.blendEquationAlpha, material.blendSrcAlpha, material.blendDstAlpha, material.premultipliedAlpha )\n\t\t\t: setBlending( NoBlending );\n\n\t\tdepthBuffer.setFunc( material.depthFunc );\n\t\tdepthBuffer.setTest( material.depthTest );\n\t\tdepthBuffer.setMask( material.depthWrite );\n\t\tcolorBuffer.setMask( material.colorWrite );\n\n\t\tsetPolygonOffset( material.polygonOffset, material.polygonOffsetFactor, material.polygonOffsetUnits );\n\n\t}\n\n\t//\n\n\tfunction setFlipSided( flipSided ) {\n\n\t\tif ( currentFlipSided !== flipSided ) {\n\n\t\t\tif ( flipSided ) {\n\n\t\t\t\tgl.frontFace( gl.CW );\n\n\t\t\t} else {\n\n\t\t\t\tgl.frontFace( gl.CCW );\n\n\t\t\t}\n\n\t\t\tcurrentFlipSided = flipSided;\n\n\t\t}\n\n\t}\n\n\tfunction setCullFace( cullFace ) {\n\n\t\tif ( cullFace !== CullFaceNone ) {\n\n\t\t\tenable( gl.CULL_FACE );\n\n\t\t\tif ( cullFace !== currentCullFace ) {\n\n\t\t\t\tif ( cullFace === CullFaceBack ) {\n\n\t\t\t\t\tgl.cullFace( gl.BACK );\n\n\t\t\t\t} else if ( cullFace === CullFaceFront ) {\n\n\t\t\t\t\tgl.cullFace( gl.FRONT );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tgl.cullFace( gl.FRONT_AND_BACK );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tdisable( gl.CULL_FACE );\n\n\t\t}\n\n\t\tcurrentCullFace = cullFace;\n\n\t}\n\n\tfunction setLineWidth( width ) {\n\n\t\tif ( width !== currentLineWidth ) {\n\n\t\t\tif ( lineWidthAvailable ) gl.lineWidth( width );\n\n\t\t\tcurrentLineWidth = width;\n\n\t\t}\n\n\t}\n\n\tfunction setPolygonOffset( polygonOffset, factor, units ) {\n\n\t\tif ( polygonOffset ) {\n\n\t\t\tenable( gl.POLYGON_OFFSET_FILL );\n\n\t\t\tif ( currentPolygonOffsetFactor !== factor || currentPolygonOffsetUnits !== units ) {\n\n\t\t\t\tgl.polygonOffset( factor, units );\n\n\t\t\t\tcurrentPolygonOffsetFactor = factor;\n\t\t\t\tcurrentPolygonOffsetUnits = units;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tdisable( gl.POLYGON_OFFSET_FILL );\n\n\t\t}\n\n\t}\n\n\tfunction setScissorTest( scissorTest ) {\n\n\t\tif ( scissorTest ) {\n\n\t\t\tenable( gl.SCISSOR_TEST );\n\n\t\t} else {\n\n\t\t\tdisable( gl.SCISSOR_TEST );\n\n\t\t}\n\n\t}\n\n\t// texture\n\n\tfunction activeTexture( webglSlot ) {\n\n\t\tif ( webglSlot === undefined ) webglSlot = gl.TEXTURE0 + maxTextures - 1;\n\n\t\tif ( currentTextureSlot !== webglSlot ) {\n\n\t\t\tgl.activeTexture( webglSlot );\n\t\t\tcurrentTextureSlot = webglSlot;\n\n\t\t}\n\n\t}\n\n\tfunction bindTexture( webglType, webglTexture ) {\n\n\t\tif ( currentTextureSlot === null ) {\n\n\t\t\tactiveTexture();\n\n\t\t}\n\n\t\tvar boundTexture = currentBoundTextures[ currentTextureSlot ];\n\n\t\tif ( boundTexture === undefined ) {\n\n\t\t\tboundTexture = { type: undefined, texture: undefined };\n\t\t\tcurrentBoundTextures[ currentTextureSlot ] = boundTexture;\n\n\t\t}\n\n\t\tif ( boundTexture.type !== webglType || boundTexture.texture !== webglTexture ) {\n\n\t\t\tgl.bindTexture( webglType, webglTexture || emptyTextures[ webglType ] );\n\n\t\t\tboundTexture.type = webglType;\n\t\t\tboundTexture.texture = webglTexture;\n\n\t\t}\n\n\t}\n\n\tfunction compressedTexImage2D() {\n\n\t\ttry {\n\n\t\t\tgl.compressedTexImage2D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction texImage2D() {\n\n\t\ttry {\n\n\t\t\tgl.texImage2D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\t//\n\n\tfunction scissor( scissor ) {\n\n\t\tif ( currentScissor.equals( scissor ) === false ) {\n\n\t\t\tgl.scissor( scissor.x, scissor.y, scissor.z, scissor.w );\n\t\t\tcurrentScissor.copy( scissor );\n\n\t\t}\n\n\t}\n\n\tfunction viewport( viewport ) {\n\n\t\tif ( currentViewport.equals( viewport ) === false ) {\n\n\t\t\tgl.viewport( viewport.x, viewport.y, viewport.z, viewport.w );\n\t\t\tcurrentViewport.copy( viewport );\n\n\t\t}\n\n\t}\n\n\t//\n\n\tfunction reset() {\n\n\t\tfor ( var i = 0; i < enabledAttributes.length; i ++ ) {\n\n\t\t\tif ( enabledAttributes[ i ] === 1 ) {\n\n\t\t\t\tgl.disableVertexAttribArray( i );\n\t\t\t\tenabledAttributes[ i ] = 0;\n\n\t\t\t}\n\n\t\t}\n\n\t\tcapabilities = {};\n\n\t\tcompressedTextureFormats = null;\n\n\t\tcurrentTextureSlot = null;\n\t\tcurrentBoundTextures = {};\n\n\t\tcurrentProgram = null;\n\n\t\tcurrentBlending = null;\n\n\t\tcurrentFlipSided = null;\n\t\tcurrentCullFace = null;\n\n\t\tcolorBuffer.reset();\n\t\tdepthBuffer.reset();\n\t\tstencilBuffer.reset();\n\n\t}\n\n\treturn {\n\n\t\tbuffers: {\n\t\t\tcolor: colorBuffer,\n\t\t\tdepth: depthBuffer,\n\t\t\tstencil: stencilBuffer\n\t\t},\n\n\t\tinitAttributes: initAttributes,\n\t\tenableAttribute: enableAttribute,\n\t\tenableAttributeAndDivisor: enableAttributeAndDivisor,\n\t\tdisableUnusedAttributes: disableUnusedAttributes,\n\t\tenable: enable,\n\t\tdisable: disable,\n\t\tgetCompressedTextureFormats: getCompressedTextureFormats,\n\n\t\tuseProgram: useProgram,\n\n\t\tsetBlending: setBlending,\n\t\tsetMaterial: setMaterial,\n\n\t\tsetFlipSided: setFlipSided,\n\t\tsetCullFace: setCullFace,\n\n\t\tsetLineWidth: setLineWidth,\n\t\tsetPolygonOffset: setPolygonOffset,\n\n\t\tsetScissorTest: setScissorTest,\n\n\t\tactiveTexture: activeTexture,\n\t\tbindTexture: bindTexture,\n\t\tcompressedTexImage2D: compressedTexImage2D,\n\t\ttexImage2D: texImage2D,\n\n\t\tscissor: scissor,\n\t\tviewport: viewport,\n\n\t\treset: reset\n\n\t};\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info ) {\n\n\tvar _isWebGL2 = ( typeof WebGL2RenderingContext !== 'undefined' && _gl instanceof WebGL2RenderingContext ); /* global WebGL2RenderingContext */\n\tvar _videoTextures = {};\n\tvar _canvas;\n\n\t//\n\n\tfunction clampToMaxSize( image, maxSize ) {\n\n\t\tif ( image.width > maxSize || image.height > maxSize ) {\n\n\t\t\tif ( 'data' in image ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: image in DataTexture is too big (' + image.width + 'x' + image.height + ').' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\t// Warning: Scaling through the canvas will only work with images that use\n\t\t\t// premultiplied alpha.\n\n\t\t\tvar scale = maxSize / Math.max( image.width, image.height );\n\n\t\t\tvar canvas = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' );\n\t\t\tcanvas.width = Math.floor( image.width * scale );\n\t\t\tcanvas.height = Math.floor( image.height * scale );\n\n\t\t\tvar context = canvas.getContext( '2d' );\n\t\t\tcontext.drawImage( image, 0, 0, image.width, image.height, 0, 0, canvas.width, canvas.height );\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: image is too big (' + image.width + 'x' + image.height + '). Resized to ' + canvas.width + 'x' + canvas.height, image );\n\n\t\t\treturn canvas;\n\n\t\t}\n\n\t\treturn image;\n\n\t}\n\n\tfunction isPowerOfTwo( image ) {\n\n\t\treturn _Math.isPowerOfTwo( image.width ) && _Math.isPowerOfTwo( image.height );\n\n\t}\n\n\tfunction makePowerOfTwo( image ) {\n\n\t\tif ( image instanceof HTMLImageElement || image instanceof HTMLCanvasElement || image instanceof ImageBitmap ) {\n\n\t\t\tif ( _canvas === undefined ) _canvas = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' );\n\n\t\t\t_canvas.width = _Math.floorPowerOfTwo( image.width );\n\t\t\t_canvas.height = _Math.floorPowerOfTwo( image.height );\n\n\t\t\tvar context = _canvas.getContext( '2d' );\n\t\t\tcontext.drawImage( image, 0, 0, _canvas.width, _canvas.height );\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: image is not power of two (' + image.width + 'x' + image.height + '). Resized to ' + _canvas.width + 'x' + _canvas.height, image );\n\n\t\t\treturn _canvas;\n\n\t\t}\n\n\t\treturn image;\n\n\t}\n\n\tfunction textureNeedsPowerOfTwo( texture ) {\n\n\t\treturn ( texture.wrapS !== ClampToEdgeWrapping || texture.wrapT !== ClampToEdgeWrapping ) ||\n\t\t\t( texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter );\n\n\t}\n\n\tfunction textureNeedsGenerateMipmaps( texture, isPowerOfTwo ) {\n\n\t\treturn texture.generateMipmaps && isPowerOfTwo &&\n\t\t\ttexture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter;\n\n\t}\n\n\tfunction generateMipmap( target, texture, width, height ) {\n\n\t\t_gl.generateMipmap( target );\n\n\t\tvar textureProperties = properties.get( texture );\n\n\t\t// Note: Math.log( x ) * Math.LOG2E used instead of Math.log2( x ) which is not supported by IE11\n\t\ttextureProperties.__maxMipLevel = Math.log( Math.max( width, height ) ) * Math.LOG2E;\n\n\t}\n\n\t// Fallback filters for non-power-of-2 textures\n\n\tfunction filterFallback( f ) {\n\n\t\tif ( f === NearestFilter || f === NearestMipMapNearestFilter || f === NearestMipMapLinearFilter ) {\n\n\t\t\treturn _gl.NEAREST;\n\n\t\t}\n\n\t\treturn _gl.LINEAR;\n\n\t}\n\n\t//\n\n\tfunction onTextureDispose( event ) {\n\n\t\tvar texture = event.target;\n\n\t\ttexture.removeEventListener( 'dispose', onTextureDispose );\n\n\t\tdeallocateTexture( texture );\n\n\t\tif ( texture.isVideoTexture ) {\n\n\t\t\tdelete _videoTextures[ texture.id ];\n\n\t\t}\n\n\t\tinfo.memory.textures --;\n\n\t}\n\n\tfunction onRenderTargetDispose( event ) {\n\n\t\tvar renderTarget = event.target;\n\n\t\trenderTarget.removeEventListener( 'dispose', onRenderTargetDispose );\n\n\t\tdeallocateRenderTarget( renderTarget );\n\n\t\tinfo.memory.textures --;\n\n\t}\n\n\t//\n\n\tfunction deallocateTexture( texture ) {\n\n\t\tvar textureProperties = properties.get( texture );\n\n\t\tif ( texture.image && textureProperties.__image__webglTextureCube ) {\n\n\t\t\t// cube texture\n\n\t\t\t_gl.deleteTexture( textureProperties.__image__webglTextureCube );\n\n\t\t} else {\n\n\t\t\t// 2D texture\n\n\t\t\tif ( textureProperties.__webglInit === undefined ) return;\n\n\t\t\t_gl.deleteTexture( textureProperties.__webglTexture );\n\n\t\t}\n\n\t\t// remove all webgl properties\n\t\tproperties.remove( texture );\n\n\t}\n\n\tfunction deallocateRenderTarget( renderTarget ) {\n\n\t\tvar renderTargetProperties = properties.get( renderTarget );\n\t\tvar textureProperties = properties.get( renderTarget.texture );\n\n\t\tif ( ! renderTarget ) return;\n\n\t\tif ( textureProperties.__webglTexture !== undefined ) {\n\n\t\t\t_gl.deleteTexture( textureProperties.__webglTexture );\n\n\t\t}\n\n\t\tif ( renderTarget.depthTexture ) {\n\n\t\t\trenderTarget.depthTexture.dispose();\n\n\t\t}\n\n\t\tif ( renderTarget.isWebGLRenderTargetCube ) {\n\n\t\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\t\t_gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer[ i ] );\n\t\t\t\tif ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer[ i ] );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t_gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer );\n\t\t\tif ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer );\n\n\t\t}\n\n\t\tproperties.remove( renderTarget.texture );\n\t\tproperties.remove( renderTarget );\n\n\t}\n\n\t//\n\n\n\n\tfunction setTexture2D( texture, slot ) {\n\n\t\tvar textureProperties = properties.get( texture );\n\n\t\tif ( texture.isVideoTexture ) updateVideoTexture( texture );\n\n\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\tvar image = texture.image;\n\n\t\t\tif ( image === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture marked for update but image is undefined', texture );\n\n\t\t\t} else if ( image.complete === false ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture marked for update but image is incomplete', texture );\n\n\t\t\t} else {\n\n\t\t\t\tuploadTexture( textureProperties, texture, slot );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.activeTexture( _gl.TEXTURE0 + slot );\n\t\tstate.bindTexture( _gl.TEXTURE_2D, textureProperties.__webglTexture );\n\n\t}\n\n\tfunction setTextureCube( texture, slot ) {\n\n\t\tvar textureProperties = properties.get( texture );\n\n\t\tif ( texture.image.length === 6 ) {\n\n\t\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\t\tif ( ! textureProperties.__image__webglTextureCube ) {\n\n\t\t\t\t\ttexture.addEventListener( 'dispose', onTextureDispose );\n\n\t\t\t\t\ttextureProperties.__image__webglTextureCube = _gl.createTexture();\n\n\t\t\t\t\tinfo.memory.textures ++;\n\n\t\t\t\t}\n\n\t\t\t\tstate.activeTexture( _gl.TEXTURE0 + slot );\n\t\t\t\tstate.bindTexture( _gl.TEXTURE_CUBE_MAP, textureProperties.__image__webglTextureCube );\n\n\t\t\t\t_gl.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, texture.flipY );\n\n\t\t\t\tvar isCompressed = ( texture && texture.isCompressedTexture );\n\t\t\t\tvar isDataTexture = ( texture.image[ 0 ] && texture.image[ 0 ].isDataTexture );\n\n\t\t\t\tvar cubeImage = [];\n\n\t\t\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\t\t\tif ( ! isCompressed && ! isDataTexture ) {\n\n\t\t\t\t\t\tcubeImage[ i ] = clampToMaxSize( texture.image[ i ], capabilities.maxCubemapSize );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tcubeImage[ i ] = isDataTexture ? texture.image[ i ].image : texture.image[ i ];\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tvar image = cubeImage[ 0 ],\n\t\t\t\t\tisPowerOfTwoImage = isPowerOfTwo( image ),\n\t\t\t\t\tglFormat = utils.convert( texture.format ),\n\t\t\t\t\tglType = utils.convert( texture.type );\n\n\t\t\t\tsetTextureParameters( _gl.TEXTURE_CUBE_MAP, texture, isPowerOfTwoImage );\n\n\t\t\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\t\t\tif ( ! isCompressed ) {\n\n\t\t\t\t\t\tif ( isDataTexture ) {\n\n\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glFormat, cubeImage[ i ].width, cubeImage[ i ].height, 0, glFormat, glType, cubeImage[ i ].data );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glFormat, glFormat, glType, cubeImage[ i ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tvar mipmap, mipmaps = cubeImage[ i ].mipmaps;\n\n\t\t\t\t\t\tfor ( var j = 0, jl = mipmaps.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\t\tmipmap = mipmaps[ j ];\n\n\t\t\t\t\t\t\tif ( texture.format !== RGBAFormat && texture.format !== RGBFormat ) {\n\n\t\t\t\t\t\t\t\tif ( state.getCompressedTextureFormats().indexOf( glFormat ) > - 1 ) {\n\n\t\t\t\t\t\t\t\t\tstate.compressedTexImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, glFormat, mipmap.width, mipmap.height, 0, mipmap.data );\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()' );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, glFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( ! isCompressed ) {\n\n\t\t\t\t\ttextureProperties.__maxMipLevel = 0;\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttextureProperties.__maxMipLevel = mipmaps.length - 1;\n\n\t\t\t\t}\n\n\t\t\t\tif ( textureNeedsGenerateMipmaps( texture, isPowerOfTwoImage ) ) {\n\n\t\t\t\t\t// We assume images for cube map have the same size.\n\t\t\t\t\tgenerateMipmap( _gl.TEXTURE_CUBE_MAP, texture, image.width, image.height );\n\n\t\t\t\t}\n\n\t\t\t\ttextureProperties.__version = texture.version;\n\n\t\t\t\tif ( texture.onUpdate ) texture.onUpdate( texture );\n\n\t\t\t} else {\n\n\t\t\t\tstate.activeTexture( _gl.TEXTURE0 + slot );\n\t\t\t\tstate.bindTexture( _gl.TEXTURE_CUBE_MAP, textureProperties.__image__webglTextureCube );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction setTextureCubeDynamic( texture, slot ) {\n\n\t\tstate.activeTexture( _gl.TEXTURE0 + slot );\n\t\tstate.bindTexture( _gl.TEXTURE_CUBE_MAP, properties.get( texture ).__webglTexture );\n\n\t}\n\n\tfunction setTextureParameters( textureType, texture, isPowerOfTwoImage ) {\n\n\t\tvar extension;\n\n\t\tif ( isPowerOfTwoImage ) {\n\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_S, utils.convert( texture.wrapS ) );\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_T, utils.convert( texture.wrapT ) );\n\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_MAG_FILTER, utils.convert( texture.magFilter ) );\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_MIN_FILTER, utils.convert( texture.minFilter ) );\n\n\t\t} else {\n\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_S, _gl.CLAMP_TO_EDGE );\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_T, _gl.CLAMP_TO_EDGE );\n\n\t\t\tif ( texture.wrapS !== ClampToEdgeWrapping || texture.wrapT !== ClampToEdgeWrapping ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping.', texture );\n\n\t\t\t}\n\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_MAG_FILTER, filterFallback( texture.magFilter ) );\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_MIN_FILTER, filterFallback( texture.minFilter ) );\n\n\t\t\tif ( texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.', texture );\n\n\t\t\t}\n\n\t\t}\n\n\t\textension = extensions.get( 'EXT_texture_filter_anisotropic' );\n\n\t\tif ( extension ) {\n\n\t\t\tif ( texture.type === FloatType && extensions.get( 'OES_texture_float_linear' ) === null ) return;\n\t\t\tif ( texture.type === HalfFloatType && extensions.get( 'OES_texture_half_float_linear' ) === null ) return;\n\n\t\t\tif ( texture.anisotropy > 1 || properties.get( texture ).__currentAnisotropy ) {\n\n\t\t\t\t_gl.texParameterf( textureType, extension.TEXTURE_MAX_ANISOTROPY_EXT, Math.min( texture.anisotropy, capabilities.getMaxAnisotropy() ) );\n\t\t\t\tproperties.get( texture ).__currentAnisotropy = texture.anisotropy;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction uploadTexture( textureProperties, texture, slot ) {\n\n\t\tif ( textureProperties.__webglInit === undefined ) {\n\n\t\t\ttextureProperties.__webglInit = true;\n\n\t\t\ttexture.addEventListener( 'dispose', onTextureDispose );\n\n\t\t\ttextureProperties.__webglTexture = _gl.createTexture();\n\n\t\t\tinfo.memory.textures ++;\n\n\t\t}\n\n\t\tstate.activeTexture( _gl.TEXTURE0 + slot );\n\t\tstate.bindTexture( _gl.TEXTURE_2D, textureProperties.__webglTexture );\n\n\t\t_gl.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, texture.flipY );\n\t\t_gl.pixelStorei( _gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, texture.premultiplyAlpha );\n\t\t_gl.pixelStorei( _gl.UNPACK_ALIGNMENT, texture.unpackAlignment );\n\n\t\tvar image = clampToMaxSize( texture.image, capabilities.maxTextureSize );\n\n\t\tif ( textureNeedsPowerOfTwo( texture ) && isPowerOfTwo( image ) === false ) {\n\n\t\t\timage = makePowerOfTwo( image );\n\n\t\t}\n\n\t\tvar isPowerOfTwoImage = isPowerOfTwo( image ),\n\t\t\tglFormat = utils.convert( texture.format ),\n\t\t\tglType = utils.convert( texture.type );\n\n\t\tsetTextureParameters( _gl.TEXTURE_2D, texture, isPowerOfTwoImage );\n\n\t\tvar mipmap, mipmaps = texture.mipmaps;\n\n\t\tif ( texture.isDepthTexture ) {\n\n\t\t\t// populate depth texture with dummy data\n\n\t\t\tvar internalFormat = _gl.DEPTH_COMPONENT;\n\n\t\t\tif ( texture.type === FloatType ) {\n\n\t\t\t\tif ( ! _isWebGL2 ) throw new Error( 'Float Depth Texture only supported in WebGL2.0' );\n\t\t\t\tinternalFormat = _gl.DEPTH_COMPONENT32F;\n\n\t\t\t} else if ( _isWebGL2 ) {\n\n\t\t\t\t// WebGL 2.0 requires signed internalformat for glTexImage2D\n\t\t\t\tinternalFormat = _gl.DEPTH_COMPONENT16;\n\n\t\t\t}\n\n\t\t\tif ( texture.format === DepthFormat && internalFormat === _gl.DEPTH_COMPONENT ) {\n\n\t\t\t\t// The error INVALID_OPERATION is generated by texImage2D if format and internalformat are\n\t\t\t\t// DEPTH_COMPONENT and type is not UNSIGNED_SHORT or UNSIGNED_INT\n\t\t\t\t// (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/)\n\t\t\t\tif ( texture.type !== UnsignedShortType && texture.type !== UnsignedIntType ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture.' );\n\n\t\t\t\t\ttexture.type = UnsignedShortType;\n\t\t\t\t\tglType = utils.convert( texture.type );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Depth stencil textures need the DEPTH_STENCIL internal format\n\t\t\t// (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/)\n\t\t\tif ( texture.format === DepthStencilFormat ) {\n\n\t\t\t\tinternalFormat = _gl.DEPTH_STENCIL;\n\n\t\t\t\t// The error INVALID_OPERATION is generated by texImage2D if format and internalformat are\n\t\t\t\t// DEPTH_STENCIL and type is not UNSIGNED_INT_24_8_WEBGL.\n\t\t\t\t// (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/)\n\t\t\t\tif ( texture.type !== UnsignedInt248Type ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture.' );\n\n\t\t\t\t\ttexture.type = UnsignedInt248Type;\n\t\t\t\t\tglType = utils.convert( texture.type );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tstate.texImage2D( _gl.TEXTURE_2D, 0, internalFormat, image.width, image.height, 0, glFormat, glType, null );\n\n\t\t} else if ( texture.isDataTexture ) {\n\n\t\t\t// use manually created mipmaps if available\n\t\t\t// if there are no manual mipmaps\n\t\t\t// set 0 level mipmap and then use GL to generate other mipmap levels\n\n\t\t\tif ( mipmaps.length > 0 && isPowerOfTwoImage ) {\n\n\t\t\t\tfor ( var i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\t\tmipmap = mipmaps[ i ];\n\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, i, glFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t}\n\n\t\t\t\ttexture.generateMipmaps = false;\n\t\t\t\ttextureProperties.__maxMipLevel = mipmaps.length - 1;\n\n\t\t\t} else {\n\n\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, 0, glFormat, image.width, image.height, 0, glFormat, glType, image.data );\n\t\t\t\ttextureProperties.__maxMipLevel = 0;\n\n\t\t\t}\n\n\t\t} else if ( texture.isCompressedTexture ) {\n\n\t\t\tfor ( var i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\tmipmap = mipmaps[ i ];\n\n\t\t\t\tif ( texture.format !== RGBAFormat && texture.format !== RGBFormat ) {\n\n\t\t\t\t\tif ( state.getCompressedTextureFormats().indexOf( glFormat ) > - 1 ) {\n\n\t\t\t\t\t\tstate.compressedTexImage2D( _gl.TEXTURE_2D, i, glFormat, mipmap.width, mipmap.height, 0, mipmap.data );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()' );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, i, glFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\ttextureProperties.__maxMipLevel = mipmaps.length - 1;\n\n\t\t} else {\n\n\t\t\t// regular Texture (image, video, canvas)\n\n\t\t\t// use manually created mipmaps if available\n\t\t\t// if there are no manual mipmaps\n\t\t\t// set 0 level mipmap and then use GL to generate other mipmap levels\n\n\t\t\tif ( mipmaps.length > 0 && isPowerOfTwoImage ) {\n\n\t\t\t\tfor ( var i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\t\tmipmap = mipmaps[ i ];\n\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, i, glFormat, glFormat, glType, mipmap );\n\n\t\t\t\t}\n\n\t\t\t\ttexture.generateMipmaps = false;\n\t\t\t\ttextureProperties.__maxMipLevel = mipmaps.length - 1;\n\n\t\t\t} else {\n\n\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, 0, glFormat, glFormat, glType, image );\n\t\t\t\ttextureProperties.__maxMipLevel = 0;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( textureNeedsGenerateMipmaps( texture, isPowerOfTwoImage ) ) {\n\n\t\t\tgenerateMipmap( _gl.TEXTURE_2D, texture, image.width, image.height );\n\n\t\t}\n\n\t\ttextureProperties.__version = texture.version;\n\n\t\tif ( texture.onUpdate ) texture.onUpdate( texture );\n\n\t}\n\n\t// Render targets\n\n\t// Setup storage for target texture and bind it to correct framebuffer\n\tfunction setupFrameBufferTexture( framebuffer, renderTarget, attachment, textureTarget ) {\n\n\t\tvar glFormat = utils.convert( renderTarget.texture.format );\n\t\tvar glType = utils.convert( renderTarget.texture.type );\n\t\tstate.texImage2D( textureTarget, 0, glFormat, renderTarget.width, renderTarget.height, 0, glFormat, glType, null );\n\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\n\t\t_gl.framebufferTexture2D( _gl.FRAMEBUFFER, attachment, textureTarget, properties.get( renderTarget.texture ).__webglTexture, 0 );\n\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, null );\n\n\t}\n\n\t// Setup storage for internal depth/stencil buffers and bind to correct framebuffer\n\tfunction setupRenderBufferStorage( renderbuffer, renderTarget ) {\n\n\t\t_gl.bindRenderbuffer( _gl.RENDERBUFFER, renderbuffer );\n\n\t\tif ( renderTarget.depthBuffer && ! renderTarget.stencilBuffer ) {\n\n\t\t\t_gl.renderbufferStorage( _gl.RENDERBUFFER, _gl.DEPTH_COMPONENT16, renderTarget.width, renderTarget.height );\n\t\t\t_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.RENDERBUFFER, renderbuffer );\n\n\t\t} else if ( renderTarget.depthBuffer && renderTarget.stencilBuffer ) {\n\n\t\t\t_gl.renderbufferStorage( _gl.RENDERBUFFER, _gl.DEPTH_STENCIL, renderTarget.width, renderTarget.height );\n\t\t\t_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.DEPTH_STENCIL_ATTACHMENT, _gl.RENDERBUFFER, renderbuffer );\n\n\t\t} else {\n\n\t\t\t// FIXME: We don't support !depth !stencil\n\t\t\t_gl.renderbufferStorage( _gl.RENDERBUFFER, _gl.RGBA4, renderTarget.width, renderTarget.height );\n\n\t\t}\n\n\t\t_gl.bindRenderbuffer( _gl.RENDERBUFFER, null );\n\n\t}\n\n\t// Setup resources for a Depth Texture for a FBO (needs an extension)\n\tfunction setupDepthTexture( framebuffer, renderTarget ) {\n\n\t\tvar isCube = ( renderTarget && renderTarget.isWebGLRenderTargetCube );\n\t\tif ( isCube ) throw new Error( 'Depth Texture with cube render targets is not supported' );\n\n\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\n\n\t\tif ( ! ( renderTarget.depthTexture && renderTarget.depthTexture.isDepthTexture ) ) {\n\n\t\t\tthrow new Error( 'renderTarget.depthTexture must be an instance of THREE.DepthTexture' );\n\n\t\t}\n\n\t\t// upload an empty depth texture with framebuffer size\n\t\tif ( ! properties.get( renderTarget.depthTexture ).__webglTexture ||\n\t\t\t\trenderTarget.depthTexture.image.width !== renderTarget.width ||\n\t\t\t\trenderTarget.depthTexture.image.height !== renderTarget.height ) {\n\n\t\t\trenderTarget.depthTexture.image.width = renderTarget.width;\n\t\t\trenderTarget.depthTexture.image.height = renderTarget.height;\n\t\t\trenderTarget.depthTexture.needsUpdate = true;\n\n\t\t}\n\n\t\tsetTexture2D( renderTarget.depthTexture, 0 );\n\n\t\tvar webglDepthTexture = properties.get( renderTarget.depthTexture ).__webglTexture;\n\n\t\tif ( renderTarget.depthTexture.format === DepthFormat ) {\n\n\t\t\t_gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0 );\n\n\t\t} else if ( renderTarget.depthTexture.format === DepthStencilFormat ) {\n\n\t\t\t_gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.DEPTH_STENCIL_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0 );\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'Unknown depthTexture format' );\n\n\t\t}\n\n\t}\n\n\t// Setup GL resources for a non-texture depth buffer\n\tfunction setupDepthRenderbuffer( renderTarget ) {\n\n\t\tvar renderTargetProperties = properties.get( renderTarget );\n\n\t\tvar isCube = ( renderTarget.isWebGLRenderTargetCube === true );\n\n\t\tif ( renderTarget.depthTexture ) {\n\n\t\t\tif ( isCube ) throw new Error( 'target.depthTexture not supported in Cube render targets' );\n\n\t\t\tsetupDepthTexture( renderTargetProperties.__webglFramebuffer, renderTarget );\n\n\t\t} else {\n\n\t\t\tif ( isCube ) {\n\n\t\t\t\trenderTargetProperties.__webglDepthbuffer = [];\n\n\t\t\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\t\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer[ i ] );\n\t\t\t\t\trenderTargetProperties.__webglDepthbuffer[ i ] = _gl.createRenderbuffer();\n\t\t\t\t\tsetupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer[ i ], renderTarget );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );\n\t\t\t\trenderTargetProperties.__webglDepthbuffer = _gl.createRenderbuffer();\n\t\t\t\tsetupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer, renderTarget );\n\n\t\t\t}\n\n\t\t}\n\n\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, null );\n\n\t}\n\n\t// Set up GL resources for the render target\n\tfunction setupRenderTarget( renderTarget ) {\n\n\t\tvar renderTargetProperties = properties.get( renderTarget );\n\t\tvar textureProperties = properties.get( renderTarget.texture );\n\n\t\trenderTarget.addEventListener( 'dispose', onRenderTargetDispose );\n\n\t\ttextureProperties.__webglTexture = _gl.createTexture();\n\n\t\tinfo.memory.textures ++;\n\n\t\tvar isCube = ( renderTarget.isWebGLRenderTargetCube === true );\n\t\tvar isTargetPowerOfTwo = isPowerOfTwo( renderTarget );\n\n\t\t// Setup framebuffer\n\n\t\tif ( isCube ) {\n\n\t\t\trenderTargetProperties.__webglFramebuffer = [];\n\n\t\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\t\trenderTargetProperties.__webglFramebuffer[ i ] = _gl.createFramebuffer();\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\trenderTargetProperties.__webglFramebuffer = _gl.createFramebuffer();\n\n\t\t}\n\n\t\t// Setup color buffer\n\n\t\tif ( isCube ) {\n\n\t\t\tstate.bindTexture( _gl.TEXTURE_CUBE_MAP, textureProperties.__webglTexture );\n\t\t\tsetTextureParameters( _gl.TEXTURE_CUBE_MAP, renderTarget.texture, isTargetPowerOfTwo );\n\n\t\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer[ i ], renderTarget, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i );\n\n\t\t\t}\n\n\t\t\tif ( textureNeedsGenerateMipmaps( renderTarget.texture, isTargetPowerOfTwo ) ) {\n\n\t\t\t\tgenerateMipmap( _gl.TEXTURE_CUBE_MAP, renderTarget.texture, renderTarget.width, renderTarget.height );\n\n\t\t\t}\n\n\t\t\tstate.bindTexture( _gl.TEXTURE_CUBE_MAP, null );\n\n\t\t} else {\n\n\t\t\tstate.bindTexture( _gl.TEXTURE_2D, textureProperties.__webglTexture );\n\t\t\tsetTextureParameters( _gl.TEXTURE_2D, renderTarget.texture, isTargetPowerOfTwo );\n\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_2D );\n\n\t\t\tif ( textureNeedsGenerateMipmaps( renderTarget.texture, isTargetPowerOfTwo ) ) {\n\n\t\t\t\tgenerateMipmap( _gl.TEXTURE_2D, renderTarget.texture, renderTarget.width, renderTarget.height );\n\n\t\t\t}\n\n\t\t\tstate.bindTexture( _gl.TEXTURE_2D, null );\n\n\t\t}\n\n\t\t// Setup depth and stencil buffers\n\n\t\tif ( renderTarget.depthBuffer ) {\n\n\t\t\tsetupDepthRenderbuffer( renderTarget );\n\n\t\t}\n\n\t}\n\n\tfunction updateRenderTargetMipmap( renderTarget ) {\n\n\t\tvar texture = renderTarget.texture;\n\t\tvar isTargetPowerOfTwo = isPowerOfTwo( renderTarget );\n\n\t\tif ( textureNeedsGenerateMipmaps( texture, isTargetPowerOfTwo ) ) {\n\n\t\t\tvar target = renderTarget.isWebGLRenderTargetCube ? _gl.TEXTURE_CUBE_MAP : _gl.TEXTURE_2D;\n\t\t\tvar webglTexture = properties.get( texture ).__webglTexture;\n\n\t\t\tstate.bindTexture( target, webglTexture );\n\t\t\tgenerateMipmap( target, texture, renderTarget.width, renderTarget.height );\n\t\t\tstate.bindTexture( target, null );\n\n\t\t}\n\n\t}\n\n\tfunction updateVideoTexture( texture ) {\n\n\t\tvar id = texture.id;\n\t\tvar frame = info.render.frame;\n\n\t\t// Check the last frame we updated the VideoTexture\n\n\t\tif ( _videoTextures[ id ] !== frame ) {\n\n\t\t\t_videoTextures[ id ] = frame;\n\t\t\ttexture.update();\n\n\t\t}\n\n\t}\n\n\tthis.setTexture2D = setTexture2D;\n\tthis.setTextureCube = setTextureCube;\n\tthis.setTextureCubeDynamic = setTextureCubeDynamic;\n\tthis.setupRenderTarget = setupRenderTarget;\n\tthis.updateRenderTargetMipmap = updateRenderTargetMipmap;\n\n}\n\n/**\n * @author thespite / http://www.twitter.com/thespite\n */\n\nfunction WebGLUtils( gl, extensions ) {\n\n\tfunction convert( p ) {\n\n\t\tvar extension;\n\n\t\tif ( p === RepeatWrapping ) return gl.REPEAT;\n\t\tif ( p === ClampToEdgeWrapping ) return gl.CLAMP_TO_EDGE;\n\t\tif ( p === MirroredRepeatWrapping ) return gl.MIRRORED_REPEAT;\n\n\t\tif ( p === NearestFilter ) return gl.NEAREST;\n\t\tif ( p === NearestMipMapNearestFilter ) return gl.NEAREST_MIPMAP_NEAREST;\n\t\tif ( p === NearestMipMapLinearFilter ) return gl.NEAREST_MIPMAP_LINEAR;\n\n\t\tif ( p === LinearFilter ) return gl.LINEAR;\n\t\tif ( p === LinearMipMapNearestFilter ) return gl.LINEAR_MIPMAP_NEAREST;\n\t\tif ( p === LinearMipMapLinearFilter ) return gl.LINEAR_MIPMAP_LINEAR;\n\n\t\tif ( p === UnsignedByteType ) return gl.UNSIGNED_BYTE;\n\t\tif ( p === UnsignedShort4444Type ) return gl.UNSIGNED_SHORT_4_4_4_4;\n\t\tif ( p === UnsignedShort5551Type ) return gl.UNSIGNED_SHORT_5_5_5_1;\n\t\tif ( p === UnsignedShort565Type ) return gl.UNSIGNED_SHORT_5_6_5;\n\n\t\tif ( p === ByteType ) return gl.BYTE;\n\t\tif ( p === ShortType ) return gl.SHORT;\n\t\tif ( p === UnsignedShortType ) return gl.UNSIGNED_SHORT;\n\t\tif ( p === IntType ) return gl.INT;\n\t\tif ( p === UnsignedIntType ) return gl.UNSIGNED_INT;\n\t\tif ( p === FloatType ) return gl.FLOAT;\n\n\t\tif ( p === HalfFloatType ) {\n\n\t\t\textension = extensions.get( 'OES_texture_half_float' );\n\n\t\t\tif ( extension !== null ) return extension.HALF_FLOAT_OES;\n\n\t\t}\n\n\t\tif ( p === AlphaFormat ) return gl.ALPHA;\n\t\tif ( p === RGBFormat ) return gl.RGB;\n\t\tif ( p === RGBAFormat ) return gl.RGBA;\n\t\tif ( p === LuminanceFormat ) return gl.LUMINANCE;\n\t\tif ( p === LuminanceAlphaFormat ) return gl.LUMINANCE_ALPHA;\n\t\tif ( p === DepthFormat ) return gl.DEPTH_COMPONENT;\n\t\tif ( p === DepthStencilFormat ) return gl.DEPTH_STENCIL;\n\n\t\tif ( p === AddEquation ) return gl.FUNC_ADD;\n\t\tif ( p === SubtractEquation ) return gl.FUNC_SUBTRACT;\n\t\tif ( p === ReverseSubtractEquation ) return gl.FUNC_REVERSE_SUBTRACT;\n\n\t\tif ( p === ZeroFactor ) return gl.ZERO;\n\t\tif ( p === OneFactor ) return gl.ONE;\n\t\tif ( p === SrcColorFactor ) return gl.SRC_COLOR;\n\t\tif ( p === OneMinusSrcColorFactor ) return gl.ONE_MINUS_SRC_COLOR;\n\t\tif ( p === SrcAlphaFactor ) return gl.SRC_ALPHA;\n\t\tif ( p === OneMinusSrcAlphaFactor ) return gl.ONE_MINUS_SRC_ALPHA;\n\t\tif ( p === DstAlphaFactor ) return gl.DST_ALPHA;\n\t\tif ( p === OneMinusDstAlphaFactor ) return gl.ONE_MINUS_DST_ALPHA;\n\n\t\tif ( p === DstColorFactor ) return gl.DST_COLOR;\n\t\tif ( p === OneMinusDstColorFactor ) return gl.ONE_MINUS_DST_COLOR;\n\t\tif ( p === SrcAlphaSaturateFactor ) return gl.SRC_ALPHA_SATURATE;\n\n\t\tif ( p === RGB_S3TC_DXT1_Format || p === RGBA_S3TC_DXT1_Format ||\n\t\t\tp === RGBA_S3TC_DXT3_Format || p === RGBA_S3TC_DXT5_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_s3tc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGB_S3TC_DXT1_Format ) return extension.COMPRESSED_RGB_S3TC_DXT1_EXT;\n\t\t\t\tif ( p === RGBA_S3TC_DXT1_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT1_EXT;\n\t\t\t\tif ( p === RGBA_S3TC_DXT3_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT3_EXT;\n\t\t\t\tif ( p === RGBA_S3TC_DXT5_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT5_EXT;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( p === RGB_PVRTC_4BPPV1_Format || p === RGB_PVRTC_2BPPV1_Format ||\n\t\t\tp === RGBA_PVRTC_4BPPV1_Format || p === RGBA_PVRTC_2BPPV1_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_pvrtc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGB_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;\n\t\t\t\tif ( p === RGB_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;\n\t\t\t\tif ( p === RGBA_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;\n\t\t\t\tif ( p === RGBA_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( p === RGB_ETC1_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_etc1' );\n\n\t\t\tif ( extension !== null ) return extension.COMPRESSED_RGB_ETC1_WEBGL;\n\n\t\t}\n\n\t\tif ( p === RGBA_ASTC_4x4_Format || p === RGBA_ASTC_5x4_Format || p === RGBA_ASTC_5x5_Format ||\n\t\t\tp === RGBA_ASTC_6x5_Format || p === RGBA_ASTC_6x6_Format || p === RGBA_ASTC_8x5_Format ||\n\t\t\tp === RGBA_ASTC_8x6_Format || p === RGBA_ASTC_8x8_Format || p === RGBA_ASTC_10x5_Format ||\n\t\t\tp === RGBA_ASTC_10x6_Format || p === RGBA_ASTC_10x8_Format || p === RGBA_ASTC_10x10_Format ||\n\t\t\tp === RGBA_ASTC_12x10_Format || p === RGBA_ASTC_12x12_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_astc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\treturn p;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( p === MinEquation || p === MaxEquation ) {\n\n\t\t\textension = extensions.get( 'EXT_blend_minmax' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === MinEquation ) return extension.MIN_EXT;\n\t\t\t\tif ( p === MaxEquation ) return extension.MAX_EXT;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( p === UnsignedInt248Type ) {\n\n\t\t\textension = extensions.get( 'WEBGL_depth_texture' );\n\n\t\t\tif ( extension !== null ) return extension.UNSIGNED_INT_24_8_WEBGL;\n\n\t\t}\n\n\t\treturn 0;\n\n\t}\n\n\treturn { convert: convert };\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author greggman / http://games.greggman.com/\n * @author zz85 / http://www.lab4games.net/zz85/blog\n * @author tschw\n */\n\nfunction PerspectiveCamera( fov, aspect, near, far ) {\n\n\tCamera.call( this );\n\n\tthis.type = 'PerspectiveCamera';\n\n\tthis.fov = fov !== undefined ? fov : 50;\n\tthis.zoom = 1;\n\n\tthis.near = near !== undefined ? near : 0.1;\n\tthis.far = far !== undefined ? far : 2000;\n\tthis.focus = 10;\n\n\tthis.aspect = aspect !== undefined ? aspect : 1;\n\tthis.view = null;\n\n\tthis.filmGauge = 35;\t// width of the film (default in millimeters)\n\tthis.filmOffset = 0;\t// horizontal film offset (same unit as gauge)\n\n\tthis.updateProjectionMatrix();\n\n}\n\nPerspectiveCamera.prototype = Object.assign( Object.create( Camera.prototype ), {\n\n\tconstructor: PerspectiveCamera,\n\n\tisPerspectiveCamera: true,\n\n\tcopy: function ( source, recursive ) {\n\n\t\tCamera.prototype.copy.call( this, source, recursive );\n\n\t\tthis.fov = source.fov;\n\t\tthis.zoom = source.zoom;\n\n\t\tthis.near = source.near;\n\t\tthis.far = source.far;\n\t\tthis.focus = source.focus;\n\n\t\tthis.aspect = source.aspect;\n\t\tthis.view = source.view === null ? null : Object.assign( {}, source.view );\n\n\t\tthis.filmGauge = source.filmGauge;\n\t\tthis.filmOffset = source.filmOffset;\n\n\t\treturn this;\n\n\t},\n\n\t/**\n\t * Sets the FOV by focal length in respect to the current .filmGauge.\n\t *\n\t * The default film gauge is 35, so that the focal length can be specified for\n\t * a 35mm (full frame) camera.\n\t *\n\t * Values for focal length and film gauge must have the same unit.\n\t */\n\tsetFocalLength: function ( focalLength ) {\n\n\t\t// see http://www.bobatkins.com/photography/technical/field_of_view.html\n\t\tvar vExtentSlope = 0.5 * this.getFilmHeight() / focalLength;\n\n\t\tthis.fov = _Math.RAD2DEG * 2 * Math.atan( vExtentSlope );\n\t\tthis.updateProjectionMatrix();\n\n\t},\n\n\t/**\n\t * Calculates the focal length from the current .fov and .filmGauge.\n\t */\n\tgetFocalLength: function () {\n\n\t\tvar vExtentSlope = Math.tan( _Math.DEG2RAD * 0.5 * this.fov );\n\n\t\treturn 0.5 * this.getFilmHeight() / vExtentSlope;\n\n\t},\n\n\tgetEffectiveFOV: function () {\n\n\t\treturn _Math.RAD2DEG * 2 * Math.atan(\n\t\t\tMath.tan( _Math.DEG2RAD * 0.5 * this.fov ) / this.zoom );\n\n\t},\n\n\tgetFilmWidth: function () {\n\n\t\t// film not completely covered in portrait format (aspect < 1)\n\t\treturn this.filmGauge * Math.min( this.aspect, 1 );\n\n\t},\n\n\tgetFilmHeight: function () {\n\n\t\t// film not completely covered in landscape format (aspect > 1)\n\t\treturn this.filmGauge / Math.max( this.aspect, 1 );\n\n\t},\n\n\t/**\n\t * Sets an offset in a larger frustum. This is useful for multi-window or\n\t * multi-monitor/multi-machine setups.\n\t *\n\t * For example, if you have 3x2 monitors and each monitor is 1920x1080 and\n\t * the monitors are in grid like this\n\t *\n\t * +---+---+---+\n\t * | A | B | C |\n\t * +---+---+---+\n\t * | D | E | F |\n\t * +---+---+---+\n\t *\n\t * then for each monitor you would call it like this\n\t *\n\t * var w = 1920;\n\t * var h = 1080;\n\t * var fullWidth = w * 3;\n\t * var fullHeight = h * 2;\n\t *\n\t * --A--\n\t * camera.setOffset( fullWidth, fullHeight, w * 0, h * 0, w, h );\n\t * --B--\n\t * camera.setOffset( fullWidth, fullHeight, w * 1, h * 0, w, h );\n\t * --C--\n\t * camera.setOffset( fullWidth, fullHeight, w * 2, h * 0, w, h );\n\t * --D--\n\t * camera.setOffset( fullWidth, fullHeight, w * 0, h * 1, w, h );\n\t * --E--\n\t * camera.setOffset( fullWidth, fullHeight, w * 1, h * 1, w, h );\n\t * --F--\n\t * camera.setOffset( fullWidth, fullHeight, w * 2, h * 1, w, h );\n\t *\n\t * Note there is no reason monitors have to be the same size or in a grid.\n\t */\n\tsetViewOffset: function ( fullWidth, fullHeight, x, y, width, height ) {\n\n\t\tthis.aspect = fullWidth / fullHeight;\n\n\t\tif ( this.view === null ) {\n\n\t\t\tthis.view = {\n\t\t\t\tenabled: true,\n\t\t\t\tfullWidth: 1,\n\t\t\t\tfullHeight: 1,\n\t\t\t\toffsetX: 0,\n\t\t\t\toffsetY: 0,\n\t\t\t\twidth: 1,\n\t\t\t\theight: 1\n\t\t\t};\n\n\t\t}\n\n\t\tthis.view.enabled = true;\n\t\tthis.view.fullWidth = fullWidth;\n\t\tthis.view.fullHeight = fullHeight;\n\t\tthis.view.offsetX = x;\n\t\tthis.view.offsetY = y;\n\t\tthis.view.width = width;\n\t\tthis.view.height = height;\n\n\t\tthis.updateProjectionMatrix();\n\n\t},\n\n\tclearViewOffset: function () {\n\n\t\tif ( this.view !== null ) {\n\n\t\t\tthis.view.enabled = false;\n\n\t\t}\n\n\t\tthis.updateProjectionMatrix();\n\n\t},\n\n\tupdateProjectionMatrix: function () {\n\n\t\tvar near = this.near,\n\t\t\ttop = near * Math.tan(\n\t\t\t\t_Math.DEG2RAD * 0.5 * this.fov ) / this.zoom,\n\t\t\theight = 2 * top,\n\t\t\twidth = this.aspect * height,\n\t\t\tleft = - 0.5 * width,\n\t\t\tview = this.view;\n\n\t\tif ( this.view !== null && this.view.enabled ) {\n\n\t\t\tvar fullWidth = view.fullWidth,\n\t\t\t\tfullHeight = view.fullHeight;\n\n\t\t\tleft += view.offsetX * width / fullWidth;\n\t\t\ttop -= view.offsetY * height / fullHeight;\n\t\t\twidth *= view.width / fullWidth;\n\t\t\theight *= view.height / fullHeight;\n\n\t\t}\n\n\t\tvar skew = this.filmOffset;\n\t\tif ( skew !== 0 ) left += near * skew / this.getFilmWidth();\n\n\t\tthis.projectionMatrix.makePerspective( left, left + width, top, top - height, near, this.far );\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\tvar data = Object3D.prototype.toJSON.call( this, meta );\n\n\t\tdata.object.fov = this.fov;\n\t\tdata.object.zoom = this.zoom;\n\n\t\tdata.object.near = this.near;\n\t\tdata.object.far = this.far;\n\t\tdata.object.focus = this.focus;\n\n\t\tdata.object.aspect = this.aspect;\n\n\t\tif ( this.view !== null ) data.object.view = Object.assign( {}, this.view );\n\n\t\tdata.object.filmGauge = this.filmGauge;\n\t\tdata.object.filmOffset = this.filmOffset;\n\n\t\treturn data;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction ArrayCamera( array ) {\n\n\tPerspectiveCamera.call( this );\n\n\tthis.cameras = array || [];\n\n}\n\nArrayCamera.prototype = Object.assign( Object.create( PerspectiveCamera.prototype ), {\n\n\tconstructor: ArrayCamera,\n\n\tisArrayCamera: true\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction WebVRManager( renderer ) {\n\n\tvar scope = this;\n\n\tvar device = null;\n\tvar frameData = null;\n\n\tvar poseTarget = null;\n\n\tvar standingMatrix = new Matrix4();\n\tvar standingMatrixInverse = new Matrix4();\n\n\tif ( typeof window !== 'undefined' && 'VRFrameData' in window ) {\n\n\t\tframeData = new window.VRFrameData();\n\t\twindow.addEventListener( 'vrdisplaypresentchange', onVRDisplayPresentChange, false );\n\n\t}\n\n\tvar matrixWorldInverse = new Matrix4();\n\tvar tempQuaternion = new Quaternion();\n\tvar tempPosition = new Vector3();\n\n\tvar cameraL = new PerspectiveCamera();\n\tcameraL.bounds = new Vector4( 0.0, 0.0, 0.5, 1.0 );\n\tcameraL.layers.enable( 1 );\n\n\tvar cameraR = new PerspectiveCamera();\n\tcameraR.bounds = new Vector4( 0.5, 0.0, 0.5, 1.0 );\n\tcameraR.layers.enable( 2 );\n\n\tvar cameraVR = new ArrayCamera( [ cameraL, cameraR ] );\n\tcameraVR.layers.enable( 1 );\n\tcameraVR.layers.enable( 2 );\n\n\t//\n\n\tfunction isPresenting() {\n\n\t\treturn device !== null && device.isPresenting === true;\n\n\t}\n\n\tvar currentSize, currentPixelRatio;\n\n\tfunction onVRDisplayPresentChange() {\n\n\t\tif ( isPresenting() ) {\n\n\t\t\tvar eyeParameters = device.getEyeParameters( 'left' );\n\t\t\tvar renderWidth = eyeParameters.renderWidth;\n\t\t\tvar renderHeight = eyeParameters.renderHeight;\n\n\t\t\tcurrentPixelRatio = renderer.getPixelRatio();\n\t\t\tcurrentSize = renderer.getSize();\n\n\t\t\trenderer.setDrawingBufferSize( renderWidth * 2, renderHeight, 1 );\n\n\t\t} else if ( scope.enabled ) {\n\n\t\t\trenderer.setDrawingBufferSize( currentSize.width, currentSize.height, currentPixelRatio );\n\n\t\t}\n\n\t}\n\n\t//\n\n\tthis.enabled = false;\n\tthis.userHeight = 1.6;\n\n\tthis.getDevice = function () {\n\n\t\treturn device;\n\n\t};\n\n\tthis.setDevice = function ( value ) {\n\n\t\tif ( value !== undefined ) device = value;\n\n\t};\n\n\tthis.setPoseTarget = function ( object ) {\n\n\t\tif ( object !== undefined ) poseTarget = object;\n\n\t};\n\n\tthis.getCamera = function ( camera ) {\n\n\t\tif ( device === null ) return camera;\n\n\t\tdevice.depthNear = camera.near;\n\t\tdevice.depthFar = camera.far;\n\n\t\tdevice.getFrameData( frameData );\n\n\t\t//\n\n\t\tvar stageParameters = device.stageParameters;\n\n\t\tif ( stageParameters ) {\n\n\t\t\tstandingMatrix.fromArray( stageParameters.sittingToStandingTransform );\n\n\t\t} else {\n\n\t\t\tstandingMatrix.makeTranslation( 0, scope.userHeight, 0 );\n\n\t\t}\n\n\n\t\tvar pose = frameData.pose;\n\t\tvar poseObject = poseTarget !== null ? poseTarget : camera;\n\n\t\t// We want to manipulate poseObject by its position and quaternion components since users may rely on them.\n\t\tposeObject.matrix.copy( standingMatrix );\n\t\tposeObject.matrix.decompose( poseObject.position, poseObject.quaternion, poseObject.scale );\n\n\t\tif ( pose.orientation !== null ) {\n\n\t\t\ttempQuaternion.fromArray( pose.orientation );\n\t\t\tposeObject.quaternion.multiply( tempQuaternion );\n\n\t\t}\n\n\t\tif ( pose.position !== null ) {\n\n\t\t\ttempQuaternion.setFromRotationMatrix( standingMatrix );\n\t\t\ttempPosition.fromArray( pose.position );\n\t\t\ttempPosition.applyQuaternion( tempQuaternion );\n\t\t\tposeObject.position.add( tempPosition );\n\n\t\t}\n\n\t\tposeObject.updateMatrixWorld();\n\n\t\tif ( device.isPresenting === false ) return camera;\n\n\t\t//\n\n\t\tcameraL.near = camera.near;\n\t\tcameraR.near = camera.near;\n\n\t\tcameraL.far = camera.far;\n\t\tcameraR.far = camera.far;\n\n\t\tcameraVR.matrixWorld.copy( camera.matrixWorld );\n\t\tcameraVR.matrixWorldInverse.copy( camera.matrixWorldInverse );\n\n\t\tcameraL.matrixWorldInverse.fromArray( frameData.leftViewMatrix );\n\t\tcameraR.matrixWorldInverse.fromArray( frameData.rightViewMatrix );\n\n\t\t// TODO (mrdoob) Double check this code\n\n\t\tstandingMatrixInverse.getInverse( standingMatrix );\n\n\t\tcameraL.matrixWorldInverse.multiply( standingMatrixInverse );\n\t\tcameraR.matrixWorldInverse.multiply( standingMatrixInverse );\n\n\t\tvar parent = poseObject.parent;\n\n\t\tif ( parent !== null ) {\n\n\t\t\tmatrixWorldInverse.getInverse( parent.matrixWorld );\n\n\t\t\tcameraL.matrixWorldInverse.multiply( matrixWorldInverse );\n\t\t\tcameraR.matrixWorldInverse.multiply( matrixWorldInverse );\n\n\t\t}\n\n\t\t// envMap and Mirror needs camera.matrixWorld\n\n\t\tcameraL.matrixWorld.getInverse( cameraL.matrixWorldInverse );\n\t\tcameraR.matrixWorld.getInverse( cameraR.matrixWorldInverse );\n\n\t\tcameraL.projectionMatrix.fromArray( frameData.leftProjectionMatrix );\n\t\tcameraR.projectionMatrix.fromArray( frameData.rightProjectionMatrix );\n\n\t\t// HACK (mrdoob)\n\t\t// https://github.com/w3c/webvr/issues/203\n\n\t\tcameraVR.projectionMatrix.copy( cameraL.projectionMatrix );\n\n\t\t//\n\n\t\tvar layers = device.getLayers();\n\n\t\tif ( layers.length ) {\n\n\t\t\tvar layer = layers[ 0 ];\n\n\t\t\tif ( layer.leftBounds !== null && layer.leftBounds.length === 4 ) {\n\n\t\t\t\tcameraL.bounds.fromArray( layer.leftBounds );\n\n\t\t\t}\n\n\t\t\tif ( layer.rightBounds !== null && layer.rightBounds.length === 4 ) {\n\n\t\t\t\tcameraR.bounds.fromArray( layer.rightBounds );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn cameraVR;\n\n\t};\n\n\tthis.getStandingMatrix = function () {\n\n\t\treturn standingMatrix;\n\n\t};\n\n\tthis.submitFrame = function () {\n\n\t\tif ( isPresenting() ) device.submitFrame();\n\n\t};\n\n\tthis.dispose = function () {\n\n\t\tif ( typeof window !== 'undefined' ) {\n\n\t\t\twindow.removeEventListener( 'vrdisplaypresentchange', onVRDisplayPresentChange );\n\n\t\t}\n\n\t};\n\n}\n\n/**\n * @author supereggbert / http://www.paulbrunt.co.uk/\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n * @author szimek / https://github.com/szimek/\n * @author tschw\n */\n\nfunction WebGLRenderer( parameters ) {\n\n\tconsole.log( 'THREE.WebGLRenderer', REVISION );\n\n\tparameters = parameters || {};\n\n\tvar _canvas = parameters.canvas !== undefined ? parameters.canvas : document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' ),\n\t\t_context = parameters.context !== undefined ? parameters.context : null,\n\n\t\t_alpha = parameters.alpha !== undefined ? parameters.alpha : false,\n\t\t_depth = parameters.depth !== undefined ? parameters.depth : true,\n\t\t_stencil = parameters.stencil !== undefined ? parameters.stencil : true,\n\t\t_antialias = parameters.antialias !== undefined ? parameters.antialias : false,\n\t\t_premultipliedAlpha = parameters.premultipliedAlpha !== undefined ? parameters.premultipliedAlpha : true,\n\t\t_preserveDrawingBuffer = parameters.preserveDrawingBuffer !== undefined ? parameters.preserveDrawingBuffer : false,\n\t\t_powerPreference = parameters.powerPreference !== undefined ? parameters.powerPreference : 'default';\n\n\tvar currentRenderList = null;\n\tvar currentRenderState = null;\n\n\t// public properties\n\n\tthis.domElement = _canvas;\n\tthis.context = null;\n\n\t// clearing\n\n\tthis.autoClear = true;\n\tthis.autoClearColor = true;\n\tthis.autoClearDepth = true;\n\tthis.autoClearStencil = true;\n\n\t// scene graph\n\n\tthis.sortObjects = true;\n\n\t// user-defined clipping\n\n\tthis.clippingPlanes = [];\n\tthis.localClippingEnabled = false;\n\n\t// physically based shading\n\n\tthis.gammaFactor = 2.0;\t// for backwards compatibility\n\tthis.gammaInput = false;\n\tthis.gammaOutput = false;\n\n\t// physical lights\n\n\tthis.physicallyCorrectLights = false;\n\n\t// tone mapping\n\n\tthis.toneMapping = LinearToneMapping;\n\tthis.toneMappingExposure = 1.0;\n\tthis.toneMappingWhitePoint = 1.0;\n\n\t// morphs\n\n\tthis.maxMorphTargets = 8;\n\tthis.maxMorphNormals = 4;\n\n\t// internal properties\n\n\tvar _this = this,\n\n\t\t_isContextLost = false,\n\n\t\t// internal state cache\n\n\t\t_currentRenderTarget = null,\n\t\t_currentFramebuffer = null,\n\t\t_currentMaterialId = - 1,\n\t\t_currentGeometryProgram = '',\n\n\t\t_currentCamera = null,\n\t\t_currentArrayCamera = null,\n\n\t\t_currentViewport = new Vector4(),\n\t\t_currentScissor = new Vector4(),\n\t\t_currentScissorTest = null,\n\n\t\t//\n\n\t\t_usedTextureUnits = 0,\n\n\t\t//\n\n\t\t_width = _canvas.width,\n\t\t_height = _canvas.height,\n\n\t\t_pixelRatio = 1,\n\n\t\t_viewport = new Vector4( 0, 0, _width, _height ),\n\t\t_scissor = new Vector4( 0, 0, _width, _height ),\n\t\t_scissorTest = false,\n\n\t\t// frustum\n\n\t\t_frustum = new Frustum(),\n\n\t\t// clipping\n\n\t\t_clipping = new WebGLClipping(),\n\t\t_clippingEnabled = false,\n\t\t_localClippingEnabled = false,\n\n\t\t// camera matrices cache\n\n\t\t_projScreenMatrix = new Matrix4(),\n\n\t\t_vector3 = new Vector3();\n\n\tfunction getTargetPixelRatio() {\n\n\t\treturn _currentRenderTarget === null ? _pixelRatio : 1;\n\n\t}\n\n\t// initialize\n\n\tvar _gl;\n\n\ttry {\n\n\t\tvar contextAttributes = {\n\t\t\talpha: _alpha,\n\t\t\tdepth: _depth,\n\t\t\tstencil: _stencil,\n\t\t\tantialias: _antialias,\n\t\t\tpremultipliedAlpha: _premultipliedAlpha,\n\t\t\tpreserveDrawingBuffer: _preserveDrawingBuffer,\n\t\t\tpowerPreference: _powerPreference\n\t\t};\n\n\t\t// event listeners must be registered before WebGL context is created, see #12753\n\n\t\t_canvas.addEventListener( 'webglcontextlost', onContextLost, false );\n\t\t_canvas.addEventListener( 'webglcontextrestored', onContextRestore, false );\n\n\t\t_gl = _context || _canvas.getContext( 'webgl', contextAttributes ) || _canvas.getContext( 'experimental-webgl', contextAttributes );\n\n\t\tif ( _gl === null ) {\n\n\t\t\tif ( _canvas.getContext( 'webgl' ) !== null ) {\n\n\t\t\t\tthrow new Error( 'Error creating WebGL context with your selected attributes.' );\n\n\t\t\t} else {\n\n\t\t\t\tthrow new Error( 'Error creating WebGL context.' );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Some experimental-webgl implementations do not have getShaderPrecisionFormat\n\n\t\tif ( _gl.getShaderPrecisionFormat === undefined ) {\n\n\t\t\t_gl.getShaderPrecisionFormat = function () {\n\n\t\t\t\treturn { 'rangeMin': 1, 'rangeMax': 1, 'precision': 1 };\n\n\t\t\t};\n\n\t\t}\n\n\t} catch ( error ) {\n\n\t\tconsole.error( 'THREE.WebGLRenderer: ' + error.message );\n\n\t}\n\n\tvar extensions, capabilities, state, info;\n\tvar properties, textures, attributes, geometries, objects;\n\tvar programCache, renderLists, renderStates;\n\n\tvar background, morphtargets, bufferRenderer, indexedBufferRenderer;\n\tvar spriteRenderer;\n\n\tvar utils;\n\n\tfunction initGLContext() {\n\n\t\textensions = new WebGLExtensions( _gl );\n\t\textensions.get( 'WEBGL_depth_texture' );\n\t\textensions.get( 'OES_texture_float' );\n\t\textensions.get( 'OES_texture_float_linear' );\n\t\textensions.get( 'OES_texture_half_float' );\n\t\textensions.get( 'OES_texture_half_float_linear' );\n\t\textensions.get( 'OES_standard_derivatives' );\n\t\textensions.get( 'OES_element_index_uint' );\n\t\textensions.get( 'ANGLE_instanced_arrays' );\n\n\t\tutils = new WebGLUtils( _gl, extensions );\n\n\t\tcapabilities = new WebGLCapabilities( _gl, extensions, parameters );\n\n\t\tstate = new WebGLState( _gl, extensions, utils );\n\t\tstate.scissor( _currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ) );\n\t\tstate.viewport( _currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ) );\n\n\t\tinfo = new WebGLInfo( _gl );\n\t\tproperties = new WebGLProperties();\n\t\ttextures = new WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info );\n\t\tattributes = new WebGLAttributes( _gl );\n\t\tgeometries = new WebGLGeometries( _gl, attributes, info );\n\t\tobjects = new WebGLObjects( geometries, info );\n\t\tmorphtargets = new WebGLMorphtargets( _gl );\n\t\tprogramCache = new WebGLPrograms( _this, extensions, capabilities );\n\t\trenderLists = new WebGLRenderLists();\n\t\trenderStates = new WebGLRenderStates();\n\n\t\tbackground = new WebGLBackground( _this, state, geometries, _premultipliedAlpha );\n\n\t\tbufferRenderer = new WebGLBufferRenderer( _gl, extensions, info );\n\t\tindexedBufferRenderer = new WebGLIndexedBufferRenderer( _gl, extensions, info );\n\n\t\tspriteRenderer = new WebGLSpriteRenderer( _this, _gl, state, textures, capabilities );\n\n\t\tinfo.programs = programCache.programs;\n\n\t\t_this.context = _gl;\n\t\t_this.capabilities = capabilities;\n\t\t_this.extensions = extensions;\n\t\t_this.properties = properties;\n\t\t_this.renderLists = renderLists;\n\t\t_this.state = state;\n\t\t_this.info = info;\n\n\t}\n\n\tinitGLContext();\n\n\t// vr\n\n\tvar vr = new WebVRManager( _this );\n\n\tthis.vr = vr;\n\n\t// shadow map\n\n\tvar shadowMap = new WebGLShadowMap( _this, objects, capabilities.maxTextureSize );\n\n\tthis.shadowMap = shadowMap;\n\n\t// API\n\n\tthis.getContext = function () {\n\n\t\treturn _gl;\n\n\t};\n\n\tthis.getContextAttributes = function () {\n\n\t\treturn _gl.getContextAttributes();\n\n\t};\n\n\tthis.forceContextLoss = function () {\n\n\t\tvar extension = extensions.get( 'WEBGL_lose_context' );\n\t\tif ( extension ) extension.loseContext();\n\n\t};\n\n\tthis.forceContextRestore = function () {\n\n\t\tvar extension = extensions.get( 'WEBGL_lose_context' );\n\t\tif ( extension ) extension.restoreContext();\n\n\t};\n\n\tthis.getPixelRatio = function () {\n\n\t\treturn _pixelRatio;\n\n\t};\n\n\tthis.setPixelRatio = function ( value ) {\n\n\t\tif ( value === undefined ) return;\n\n\t\t_pixelRatio = value;\n\n\t\tthis.setSize( _width, _height, false );\n\n\t};\n\n\tthis.getSize = function () {\n\n\t\treturn {\n\t\t\twidth: _width,\n\t\t\theight: _height\n\t\t};\n\n\t};\n\n\tthis.setSize = function ( width, height, updateStyle ) {\n\n\t\tvar device = vr.getDevice();\n\n\t\tif ( device && device.isPresenting ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: Can\\'t change size while VR device is presenting.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\t_width = width;\n\t\t_height = height;\n\n\t\t_canvas.width = width * _pixelRatio;\n\t\t_canvas.height = height * _pixelRatio;\n\n\t\tif ( updateStyle !== false ) {\n\n\t\t\t_canvas.style.width = width + 'px';\n\t\t\t_canvas.style.height = height + 'px';\n\n\t\t}\n\n\t\tthis.setViewport( 0, 0, width, height );\n\n\t};\n\n\tthis.getDrawingBufferSize = function () {\n\n\t\treturn {\n\t\t\twidth: _width * _pixelRatio,\n\t\t\theight: _height * _pixelRatio\n\t\t};\n\n\t};\n\n\tthis.setDrawingBufferSize = function ( width, height, pixelRatio ) {\n\n\t\t_width = width;\n\t\t_height = height;\n\n\t\t_pixelRatio = pixelRatio;\n\n\t\t_canvas.width = width * pixelRatio;\n\t\t_canvas.height = height * pixelRatio;\n\n\t\tthis.setViewport( 0, 0, width, height );\n\n\t};\n\n\tthis.getCurrentViewport = function () {\n\n\t\treturn _currentViewport;\n\n\t};\n\n\tthis.setViewport = function ( x, y, width, height ) {\n\n\t\t_viewport.set( x, _height - y - height, width, height );\n\t\tstate.viewport( _currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ) );\n\n\t};\n\n\tthis.setScissor = function ( x, y, width, height ) {\n\n\t\t_scissor.set( x, _height - y - height, width, height );\n\t\tstate.scissor( _currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ) );\n\n\t};\n\n\tthis.setScissorTest = function ( boolean ) {\n\n\t\tstate.setScissorTest( _scissorTest = boolean );\n\n\t};\n\n\t// Clearing\n\n\tthis.getClearColor = function () {\n\n\t\treturn background.getClearColor();\n\n\t};\n\n\tthis.setClearColor = function () {\n\n\t\tbackground.setClearColor.apply( background, arguments );\n\n\t};\n\n\tthis.getClearAlpha = function () {\n\n\t\treturn background.getClearAlpha();\n\n\t};\n\n\tthis.setClearAlpha = function () {\n\n\t\tbackground.setClearAlpha.apply( background, arguments );\n\n\t};\n\n\tthis.clear = function ( color, depth, stencil ) {\n\n\t\tvar bits = 0;\n\n\t\tif ( color === undefined || color ) bits |= _gl.COLOR_BUFFER_BIT;\n\t\tif ( depth === undefined || depth ) bits |= _gl.DEPTH_BUFFER_BIT;\n\t\tif ( stencil === undefined || stencil ) bits |= _gl.STENCIL_BUFFER_BIT;\n\n\t\t_gl.clear( bits );\n\n\t};\n\n\tthis.clearColor = function () {\n\n\t\tthis.clear( true, false, false );\n\n\t};\n\n\tthis.clearDepth = function () {\n\n\t\tthis.clear( false, true, false );\n\n\t};\n\n\tthis.clearStencil = function () {\n\n\t\tthis.clear( false, false, true );\n\n\t};\n\n\tthis.clearTarget = function ( renderTarget, color, depth, stencil ) {\n\n\t\tthis.setRenderTarget( renderTarget );\n\t\tthis.clear( color, depth, stencil );\n\n\t};\n\n\t//\n\n\tthis.dispose = function () {\n\n\t\t_canvas.removeEventListener( 'webglcontextlost', onContextLost, false );\n\t\t_canvas.removeEventListener( 'webglcontextrestored', onContextRestore, false );\n\n\t\trenderLists.dispose();\n\t\trenderStates.dispose();\n\t\tproperties.dispose();\n\t\tobjects.dispose();\n\n\t\tvr.dispose();\n\n\t\tstopAnimation();\n\n\t};\n\n\t// Events\n\n\tfunction onContextLost( event ) {\n\n\t\tevent.preventDefault();\n\n\t\tconsole.log( 'THREE.WebGLRenderer: Context Lost.' );\n\n\t\t_isContextLost = true;\n\n\t}\n\n\tfunction onContextRestore( /* event */ ) {\n\n\t\tconsole.log( 'THREE.WebGLRenderer: Context Restored.' );\n\n\t\t_isContextLost = false;\n\n\t\tinitGLContext();\n\n\t}\n\n\tfunction onMaterialDispose( event ) {\n\n\t\tvar material = event.target;\n\n\t\tmaterial.removeEventListener( 'dispose', onMaterialDispose );\n\n\t\tdeallocateMaterial( material );\n\n\t}\n\n\t// Buffer deallocation\n\n\tfunction deallocateMaterial( material ) {\n\n\t\treleaseMaterialProgramReference( material );\n\n\t\tproperties.remove( material );\n\n\t}\n\n\n\tfunction releaseMaterialProgramReference( material ) {\n\n\t\tvar programInfo = properties.get( material ).program;\n\n\t\tmaterial.program = undefined;\n\n\t\tif ( programInfo !== undefined ) {\n\n\t\t\tprogramCache.releaseProgram( programInfo );\n\n\t\t}\n\n\t}\n\n\t// Buffer rendering\n\n\tfunction renderObjectImmediate( object, program, material ) {\n\n\t\tobject.render( function ( object ) {\n\n\t\t\t_this.renderBufferImmediate( object, program, material );\n\n\t\t} );\n\n\t}\n\n\tthis.renderBufferImmediate = function ( object, program, material ) {\n\n\t\tstate.initAttributes();\n\n\t\tvar buffers = properties.get( object );\n\n\t\tif ( object.hasPositions && ! buffers.position ) buffers.position = _gl.createBuffer();\n\t\tif ( object.hasNormals && ! buffers.normal ) buffers.normal = _gl.createBuffer();\n\t\tif ( object.hasUvs && ! buffers.uv ) buffers.uv = _gl.createBuffer();\n\t\tif ( object.hasColors && ! buffers.color ) buffers.color = _gl.createBuffer();\n\n\t\tvar programAttributes = program.getAttributes();\n\n\t\tif ( object.hasPositions ) {\n\n\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, buffers.position );\n\t\t\t_gl.bufferData( _gl.ARRAY_BUFFER, object.positionArray, _gl.DYNAMIC_DRAW );\n\n\t\t\tstate.enableAttribute( programAttributes.position );\n\t\t\t_gl.vertexAttribPointer( programAttributes.position, 3, _gl.FLOAT, false, 0, 0 );\n\n\t\t}\n\n\t\tif ( object.hasNormals ) {\n\n\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, buffers.normal );\n\n\t\t\tif ( ! material.isMeshPhongMaterial &&\n\t\t\t\t! material.isMeshStandardMaterial &&\n\t\t\t\t! material.isMeshNormalMaterial &&\n\t\t\t\tmaterial.flatShading === true ) {\n\n\t\t\t\tfor ( var i = 0, l = object.count * 3; i < l; i += 9 ) {\n\n\t\t\t\t\tvar array = object.normalArray;\n\n\t\t\t\t\tvar nx = ( array[ i + 0 ] + array[ i + 3 ] + array[ i + 6 ] ) / 3;\n\t\t\t\t\tvar ny = ( array[ i + 1 ] + array[ i + 4 ] + array[ i + 7 ] ) / 3;\n\t\t\t\t\tvar nz = ( array[ i + 2 ] + array[ i + 5 ] + array[ i + 8 ] ) / 3;\n\n\t\t\t\t\tarray[ i + 0 ] = nx;\n\t\t\t\t\tarray[ i + 1 ] = ny;\n\t\t\t\t\tarray[ i + 2 ] = nz;\n\n\t\t\t\t\tarray[ i + 3 ] = nx;\n\t\t\t\t\tarray[ i + 4 ] = ny;\n\t\t\t\t\tarray[ i + 5 ] = nz;\n\n\t\t\t\t\tarray[ i + 6 ] = nx;\n\t\t\t\t\tarray[ i + 7 ] = ny;\n\t\t\t\t\tarray[ i + 8 ] = nz;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t_gl.bufferData( _gl.ARRAY_BUFFER, object.normalArray, _gl.DYNAMIC_DRAW );\n\n\t\t\tstate.enableAttribute( programAttributes.normal );\n\n\t\t\t_gl.vertexAttribPointer( programAttributes.normal, 3, _gl.FLOAT, false, 0, 0 );\n\n\t\t}\n\n\t\tif ( object.hasUvs && material.map ) {\n\n\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, buffers.uv );\n\t\t\t_gl.bufferData( _gl.ARRAY_BUFFER, object.uvArray, _gl.DYNAMIC_DRAW );\n\n\t\t\tstate.enableAttribute( programAttributes.uv );\n\n\t\t\t_gl.vertexAttribPointer( programAttributes.uv, 2, _gl.FLOAT, false, 0, 0 );\n\n\t\t}\n\n\t\tif ( object.hasColors && material.vertexColors !== NoColors ) {\n\n\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, buffers.color );\n\t\t\t_gl.bufferData( _gl.ARRAY_BUFFER, object.colorArray, _gl.DYNAMIC_DRAW );\n\n\t\t\tstate.enableAttribute( programAttributes.color );\n\n\t\t\t_gl.vertexAttribPointer( programAttributes.color, 3, _gl.FLOAT, false, 0, 0 );\n\n\t\t}\n\n\t\tstate.disableUnusedAttributes();\n\n\t\t_gl.drawArrays( _gl.TRIANGLES, 0, object.count );\n\n\t\tobject.count = 0;\n\n\t};\n\n\tthis.renderBufferDirect = function ( camera, fog, geometry, material, object, group ) {\n\n\t\tvar frontFaceCW = ( object.isMesh && object.matrixWorld.determinant() < 0 );\n\n\t\tstate.setMaterial( material, frontFaceCW );\n\n\t\tvar program = setProgram( camera, fog, material, object );\n\t\tvar geometryProgram = geometry.id + '_' + program.id + '_' + ( material.wireframe === true );\n\n\t\tvar updateBuffers = false;\n\n\t\tif ( geometryProgram !== _currentGeometryProgram ) {\n\n\t\t\t_currentGeometryProgram = geometryProgram;\n\t\t\tupdateBuffers = true;\n\n\t\t}\n\n\t\tif ( object.morphTargetInfluences ) {\n\n\t\t\tmorphtargets.update( object, geometry, material, program );\n\n\t\t\tupdateBuffers = true;\n\n\t\t}\n\n\t\t//\n\n\t\tvar index = geometry.index;\n\t\tvar position = geometry.attributes.position;\n\t\tvar rangeFactor = 1;\n\n\t\tif ( material.wireframe === true ) {\n\n\t\t\tindex = geometries.getWireframeAttribute( geometry );\n\t\t\trangeFactor = 2;\n\n\t\t}\n\n\t\tvar attribute;\n\t\tvar renderer = bufferRenderer;\n\n\t\tif ( index !== null ) {\n\n\t\t\tattribute = attributes.get( index );\n\n\t\t\trenderer = indexedBufferRenderer;\n\t\t\trenderer.setIndex( attribute );\n\n\t\t}\n\n\t\tif ( updateBuffers ) {\n\n\t\t\tsetupVertexAttributes( material, program, geometry );\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\t_gl.bindBuffer( _gl.ELEMENT_ARRAY_BUFFER, attribute.buffer );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tvar dataCount = Infinity;\n\n\t\tif ( index !== null ) {\n\n\t\t\tdataCount = index.count;\n\n\t\t} else if ( position !== undefined ) {\n\n\t\t\tdataCount = position.count;\n\n\t\t}\n\n\t\tvar rangeStart = geometry.drawRange.start * rangeFactor;\n\t\tvar rangeCount = geometry.drawRange.count * rangeFactor;\n\n\t\tvar groupStart = group !== null ? group.start * rangeFactor : 0;\n\t\tvar groupCount = group !== null ? group.count * rangeFactor : Infinity;\n\n\t\tvar drawStart = Math.max( rangeStart, groupStart );\n\t\tvar drawEnd = Math.min( dataCount, rangeStart + rangeCount, groupStart + groupCount ) - 1;\n\n\t\tvar drawCount = Math.max( 0, drawEnd - drawStart + 1 );\n\n\t\tif ( drawCount === 0 ) return;\n\n\t\t//\n\n\t\tif ( object.isMesh ) {\n\n\t\t\tif ( material.wireframe === true ) {\n\n\t\t\t\tstate.setLineWidth( material.wireframeLinewidth * getTargetPixelRatio() );\n\t\t\t\trenderer.setMode( _gl.LINES );\n\n\t\t\t} else {\n\n\t\t\t\tswitch ( object.drawMode ) {\n\n\t\t\t\t\tcase TrianglesDrawMode:\n\t\t\t\t\t\trenderer.setMode( _gl.TRIANGLES );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase TriangleStripDrawMode:\n\t\t\t\t\t\trenderer.setMode( _gl.TRIANGLE_STRIP );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase TriangleFanDrawMode:\n\t\t\t\t\t\trenderer.setMode( _gl.TRIANGLE_FAN );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\n\t\t} else if ( object.isLine ) {\n\n\t\t\tvar lineWidth = material.linewidth;\n\n\t\t\tif ( lineWidth === undefined ) lineWidth = 1; // Not using Line*Material\n\n\t\t\tstate.setLineWidth( lineWidth * getTargetPixelRatio() );\n\n\t\t\tif ( object.isLineSegments ) {\n\n\t\t\t\trenderer.setMode( _gl.LINES );\n\n\t\t\t} else if ( object.isLineLoop ) {\n\n\t\t\t\trenderer.setMode( _gl.LINE_LOOP );\n\n\t\t\t} else {\n\n\t\t\t\trenderer.setMode( _gl.LINE_STRIP );\n\n\t\t\t}\n\n\t\t} else if ( object.isPoints ) {\n\n\t\t\trenderer.setMode( _gl.POINTS );\n\n\t\t}\n\n\t\tif ( geometry && geometry.isInstancedBufferGeometry ) {\n\n\t\t\tif ( geometry.maxInstancedCount > 0 ) {\n\n\t\t\t\trenderer.renderInstances( geometry, drawStart, drawCount );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\trenderer.render( drawStart, drawCount );\n\n\t\t}\n\n\t};\n\n\tfunction setupVertexAttributes( material, program, geometry ) {\n\n\t\tif ( geometry && geometry.isInstancedBufferGeometry ) {\n\n\t\t\tif ( extensions.get( 'ANGLE_instanced_arrays' ) === null ) {\n\n\t\t\t\tconsole.error( 'THREE.WebGLRenderer.setupVertexAttributes: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.initAttributes();\n\n\t\tvar geometryAttributes = geometry.attributes;\n\n\t\tvar programAttributes = program.getAttributes();\n\n\t\tvar materialDefaultAttributeValues = material.defaultAttributeValues;\n\n\t\tfor ( var name in programAttributes ) {\n\n\t\t\tvar programAttribute = programAttributes[ name ];\n\n\t\t\tif ( programAttribute >= 0 ) {\n\n\t\t\t\tvar geometryAttribute = geometryAttributes[ name ];\n\n\t\t\t\tif ( geometryAttribute !== undefined ) {\n\n\t\t\t\t\tvar normalized = geometryAttribute.normalized;\n\t\t\t\t\tvar size = geometryAttribute.itemSize;\n\n\t\t\t\t\tvar attribute = attributes.get( geometryAttribute );\n\n\t\t\t\t\t// TODO Attribute may not be available on context restore\n\n\t\t\t\t\tif ( attribute === undefined ) continue;\n\n\t\t\t\t\tvar buffer = attribute.buffer;\n\t\t\t\t\tvar type = attribute.type;\n\t\t\t\t\tvar bytesPerElement = attribute.bytesPerElement;\n\n\t\t\t\t\tif ( geometryAttribute.isInterleavedBufferAttribute ) {\n\n\t\t\t\t\t\tvar data = geometryAttribute.data;\n\t\t\t\t\t\tvar stride = data.stride;\n\t\t\t\t\t\tvar offset = geometryAttribute.offset;\n\n\t\t\t\t\t\tif ( data && data.isInstancedInterleavedBuffer ) {\n\n\t\t\t\t\t\t\tstate.enableAttributeAndDivisor( programAttribute, data.meshPerAttribute );\n\n\t\t\t\t\t\t\tif ( geometry.maxInstancedCount === undefined ) {\n\n\t\t\t\t\t\t\t\tgeometry.maxInstancedCount = data.meshPerAttribute * data.count;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tstate.enableAttribute( programAttribute );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, buffer );\n\t\t\t\t\t\t_gl.vertexAttribPointer( programAttribute, size, type, normalized, stride * bytesPerElement, offset * bytesPerElement );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( geometryAttribute.isInstancedBufferAttribute ) {\n\n\t\t\t\t\t\t\tstate.enableAttributeAndDivisor( programAttribute, geometryAttribute.meshPerAttribute );\n\n\t\t\t\t\t\t\tif ( geometry.maxInstancedCount === undefined ) {\n\n\t\t\t\t\t\t\t\tgeometry.maxInstancedCount = geometryAttribute.meshPerAttribute * geometryAttribute.count;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tstate.enableAttribute( programAttribute );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, buffer );\n\t\t\t\t\t\t_gl.vertexAttribPointer( programAttribute, size, type, normalized, 0, 0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( materialDefaultAttributeValues !== undefined ) {\n\n\t\t\t\t\tvar value = materialDefaultAttributeValues[ name ];\n\n\t\t\t\t\tif ( value !== undefined ) {\n\n\t\t\t\t\t\tswitch ( value.length ) {\n\n\t\t\t\t\t\t\tcase 2:\n\t\t\t\t\t\t\t\t_gl.vertexAttrib2fv( programAttribute, value );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase 3:\n\t\t\t\t\t\t\t\t_gl.vertexAttrib3fv( programAttribute, value );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase 4:\n\t\t\t\t\t\t\t\t_gl.vertexAttrib4fv( programAttribute, value );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t_gl.vertexAttrib1fv( programAttribute, value );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.disableUnusedAttributes();\n\n\t}\n\n\t// Compile\n\n\tthis.compile = function ( scene, camera ) {\n\n\t\tcurrentRenderState = renderStates.get( scene, camera );\n\t\tcurrentRenderState.init();\n\n\t\tscene.traverse( function ( object ) {\n\n\t\t\tif ( object.isLight ) {\n\n\t\t\t\tcurrentRenderState.pushLight( object );\n\n\t\t\t\tif ( object.castShadow ) {\n\n\t\t\t\t\tcurrentRenderState.pushShadow( object );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t\tcurrentRenderState.setupLights( camera );\n\n\t\tscene.traverse( function ( object ) {\n\n\t\t\tif ( object.material ) {\n\n\t\t\t\tif ( Array.isArray( object.material ) ) {\n\n\t\t\t\t\tfor ( var i = 0; i < object.material.length; i ++ ) {\n\n\t\t\t\t\t\tinitMaterial( object.material[ i ], scene.fog, object );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tinitMaterial( object.material, scene.fog, object );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t};\n\n\t// Animation Loop\n\n\tvar isAnimating = false;\n\tvar onAnimationFrame = null;\n\n\tfunction startAnimation() {\n\n\t\tif ( isAnimating ) return;\n\n\t\trequestAnimationLoopFrame();\n\n\t\tisAnimating = true;\n\n\t}\n\n\tfunction stopAnimation() {\n\n\t\tisAnimating = false;\n\n\t}\n\n\tfunction requestAnimationLoopFrame() {\n\n\t\tvar device = vr.getDevice();\n\n\t\tif ( device && device.isPresenting ) {\n\n\t\t\tdevice.requestAnimationFrame( animationLoop );\n\n\t\t} else {\n\n\t\t\twindow.requestAnimationFrame( animationLoop );\n\n\t\t}\n\n\t}\n\n\tfunction animationLoop( time ) {\n\n\t\tif ( isAnimating === false ) return;\n\n\t\tonAnimationFrame( time );\n\n\t\trequestAnimationLoopFrame();\n\n\t}\n\n\tthis.animate = function ( callback ) {\n\n\t\tonAnimationFrame = callback;\n\t\tonAnimationFrame !== null ? startAnimation() : stopAnimation();\n\n\t};\n\n\t// Rendering\n\n\tthis.render = function ( scene, camera, renderTarget, forceClear ) {\n\n\t\tif ( ! ( camera && camera.isCamera ) ) {\n\n\t\t\tconsole.error( 'THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( _isContextLost ) return;\n\n\t\t// reset caching for this frame\n\n\t\t_currentGeometryProgram = '';\n\t\t_currentMaterialId = - 1;\n\t\t_currentCamera = null;\n\n\t\t// update scene graph\n\n\t\tif ( scene.autoUpdate === true ) scene.updateMatrixWorld();\n\n\t\t// update camera matrices and frustum\n\n\t\tif ( camera.parent === null ) camera.updateMatrixWorld();\n\n\t\tif ( vr.enabled ) {\n\n\t\t\tcamera = vr.getCamera( camera );\n\n\t\t}\n\n\t\t//\n\n\t\tcurrentRenderState = renderStates.get( scene, camera );\n\t\tcurrentRenderState.init();\n\n\t\tscene.onBeforeRender( _this, scene, camera, renderTarget );\n\n\t\t_projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );\n\t\t_frustum.setFromMatrix( _projScreenMatrix );\n\n\t\t_localClippingEnabled = this.localClippingEnabled;\n\t\t_clippingEnabled = _clipping.init( this.clippingPlanes, _localClippingEnabled, camera );\n\n\t\tcurrentRenderList = renderLists.get( scene, camera );\n\t\tcurrentRenderList.init();\n\n\t\tprojectObject( scene, camera, _this.sortObjects );\n\n\t\tif ( _this.sortObjects === true ) {\n\n\t\t\tcurrentRenderList.sort();\n\n\t\t}\n\n\t\t//\n\n\t\tif ( _clippingEnabled ) _clipping.beginShadows();\n\n\t\tvar shadowsArray = currentRenderState.state.shadowsArray;\n\n\t\tshadowMap.render( shadowsArray, scene, camera );\n\n\t\tcurrentRenderState.setupLights( camera );\n\n\t\tif ( _clippingEnabled ) _clipping.endShadows();\n\n\t\t//\n\n\t\tif ( this.info.autoReset ) this.info.reset();\n\n\t\tif ( renderTarget === undefined ) {\n\n\t\t\trenderTarget = null;\n\n\t\t}\n\n\t\tthis.setRenderTarget( renderTarget );\n\n\t\t//\n\n\t\tbackground.render( currentRenderList, scene, camera, forceClear );\n\n\t\t// render scene\n\n\t\tvar opaqueObjects = currentRenderList.opaque;\n\t\tvar transparentObjects = currentRenderList.transparent;\n\n\t\tif ( scene.overrideMaterial ) {\n\n\t\t\tvar overrideMaterial = scene.overrideMaterial;\n\n\t\t\tif ( opaqueObjects.length ) renderObjects( opaqueObjects, scene, camera, overrideMaterial );\n\t\t\tif ( transparentObjects.length ) renderObjects( transparentObjects, scene, camera, overrideMaterial );\n\n\t\t} else {\n\n\t\t\t// opaque pass (front-to-back order)\n\n\t\t\tif ( opaqueObjects.length ) renderObjects( opaqueObjects, scene, camera );\n\n\t\t\t// transparent pass (back-to-front order)\n\n\t\t\tif ( transparentObjects.length ) renderObjects( transparentObjects, scene, camera );\n\n\t\t}\n\n\t\t// custom renderers\n\n\t\tvar spritesArray = currentRenderState.state.spritesArray;\n\n\t\tspriteRenderer.render( spritesArray, scene, camera );\n\n\t\t// Generate mipmap if we're using any kind of mipmap filtering\n\n\t\tif ( renderTarget ) {\n\n\t\t\ttextures.updateRenderTargetMipmap( renderTarget );\n\n\t\t}\n\n\t\t// Ensure depth buffer writing is enabled so it can be cleared on next render\n\n\t\tstate.buffers.depth.setTest( true );\n\t\tstate.buffers.depth.setMask( true );\n\t\tstate.buffers.color.setMask( true );\n\n\t\tstate.setPolygonOffset( false );\n\n\t\tscene.onAfterRender( _this, scene, camera );\n\n\t\tif ( vr.enabled ) {\n\n\t\t\tvr.submitFrame();\n\n\t\t}\n\n\t\t// _gl.finish();\n\n\t\tcurrentRenderList = null;\n\t\tcurrentRenderState = null;\n\n\t};\n\n\t/*\n\t// TODO Duplicated code (Frustum)\n\n\tvar _sphere = new Sphere();\n\n\tfunction isObjectViewable( object ) {\n\n\t\tvar geometry = object.geometry;\n\n\t\tif ( geometry.boundingSphere === null )\n\t\t\tgeometry.computeBoundingSphere();\n\n\t\t_sphere.copy( geometry.boundingSphere ).\n\t\tapplyMatrix4( object.matrixWorld );\n\n\t\treturn isSphereViewable( _sphere );\n\n\t}\n\n\tfunction isSpriteViewable( sprite ) {\n\n\t\t_sphere.center.set( 0, 0, 0 );\n\t\t_sphere.radius = 0.7071067811865476;\n\t\t_sphere.applyMatrix4( sprite.matrixWorld );\n\n\t\treturn isSphereViewable( _sphere );\n\n\t}\n\n\tfunction isSphereViewable( sphere ) {\n\n\t\tif ( ! _frustum.intersectsSphere( sphere ) ) return false;\n\n\t\tvar numPlanes = _clipping.numPlanes;\n\n\t\tif ( numPlanes === 0 ) return true;\n\n\t\tvar planes = _this.clippingPlanes,\n\n\t\t\tcenter = sphere.center,\n\t\t\tnegRad = - sphere.radius,\n\t\t\ti = 0;\n\n\t\tdo {\n\n\t\t\t// out when deeper than radius in the negative halfspace\n\t\t\tif ( planes[ i ].distanceToPoint( center ) < negRad ) return false;\n\n\t\t} while ( ++ i !== numPlanes );\n\n\t\treturn true;\n\n\t}\n\t*/\n\n\tfunction projectObject( object, camera, sortObjects ) {\n\n\t\tif ( object.visible === false ) return;\n\n\t\tvar visible = object.layers.test( camera.layers );\n\n\t\tif ( visible ) {\n\n\t\t\tif ( object.isLight ) {\n\n\t\t\t\tcurrentRenderState.pushLight( object );\n\n\t\t\t\tif ( object.castShadow ) {\n\n\t\t\t\t\tcurrentRenderState.pushShadow( object );\n\n\t\t\t\t}\n\n\t\t\t} else if ( object.isSprite ) {\n\n\t\t\t\tif ( ! object.frustumCulled || _frustum.intersectsSprite( object ) ) {\n\n\t\t\t\t\tcurrentRenderState.pushSprite( object );\n\n\t\t\t\t}\n\n\t\t\t} else if ( object.isImmediateRenderObject ) {\n\n\t\t\t\tif ( sortObjects ) {\n\n\t\t\t\t\t_vector3.setFromMatrixPosition( object.matrixWorld )\n\t\t\t\t\t\t.applyMatrix4( _projScreenMatrix );\n\n\t\t\t\t}\n\n\t\t\t\tcurrentRenderList.push( object, null, object.material, _vector3.z, null );\n\n\t\t\t} else if ( object.isMesh || object.isLine || object.isPoints ) {\n\n\t\t\t\tif ( object.isSkinnedMesh ) {\n\n\t\t\t\t\tobject.skeleton.update();\n\n\t\t\t\t}\n\n\t\t\t\tif ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) {\n\n\t\t\t\t\tif ( sortObjects ) {\n\n\t\t\t\t\t\t_vector3.setFromMatrixPosition( object.matrixWorld )\n\t\t\t\t\t\t\t.applyMatrix4( _projScreenMatrix );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tvar geometry = objects.update( object );\n\t\t\t\t\tvar material = object.material;\n\n\t\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\t\tvar groups = geometry.groups;\n\n\t\t\t\t\t\tfor ( var i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\t\t\t\t\tvar group = groups[ i ];\n\t\t\t\t\t\t\tvar groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\t\t\tif ( groupMaterial && groupMaterial.visible ) {\n\n\t\t\t\t\t\t\t\tcurrentRenderList.push( object, geometry, groupMaterial, _vector3.z, group );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else if ( material.visible ) {\n\n\t\t\t\t\t\tcurrentRenderList.push( object, geometry, material, _vector3.z, null );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar children = object.children;\n\n\t\tfor ( var i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tprojectObject( children[ i ], camera, sortObjects );\n\n\t\t}\n\n\t}\n\n\tfunction renderObjects( renderList, scene, camera, overrideMaterial ) {\n\n\t\tfor ( var i = 0, l = renderList.length; i < l; i ++ ) {\n\n\t\t\tvar renderItem = renderList[ i ];\n\n\t\t\tvar object = renderItem.object;\n\t\t\tvar geometry = renderItem.geometry;\n\t\t\tvar material = overrideMaterial === undefined ? renderItem.material : overrideMaterial;\n\t\t\tvar group = renderItem.group;\n\n\t\t\tif ( camera.isArrayCamera ) {\n\n\t\t\t\t_currentArrayCamera = camera;\n\n\t\t\t\tvar cameras = camera.cameras;\n\n\t\t\t\tfor ( var j = 0, jl = cameras.length; j < jl; j ++ ) {\n\n\t\t\t\t\tvar camera2 = cameras[ j ];\n\n\t\t\t\t\tif ( object.layers.test( camera2.layers ) ) {\n\n\t\t\t\t\t\tvar bounds = camera2.bounds;\n\n\t\t\t\t\t\tvar x = bounds.x * _width;\n\t\t\t\t\t\tvar y = bounds.y * _height;\n\t\t\t\t\t\tvar width = bounds.z * _width;\n\t\t\t\t\t\tvar height = bounds.w * _height;\n\n\t\t\t\t\t\tstate.viewport( _currentViewport.set( x, y, width, height ).multiplyScalar( _pixelRatio ) );\n\n\t\t\t\t\t\trenderObject( object, scene, camera2, geometry, material, group );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t_currentArrayCamera = null;\n\n\t\t\t\trenderObject( object, scene, camera, geometry, material, group );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction renderObject( object, scene, camera, geometry, material, group ) {\n\n\t\tobject.onBeforeRender( _this, scene, camera, geometry, material, group );\n\t\tcurrentRenderState = renderStates.get( scene, _currentArrayCamera || camera );\n\n\t\tobject.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, object.matrixWorld );\n\t\tobject.normalMatrix.getNormalMatrix( object.modelViewMatrix );\n\n\t\tif ( object.isImmediateRenderObject ) {\n\n\t\t\tvar frontFaceCW = ( object.isMesh && object.matrixWorld.determinant() < 0 );\n\n\t\t\tstate.setMaterial( material, frontFaceCW );\n\n\t\t\tvar program = setProgram( camera, scene.fog, material, object );\n\n\t\t\t_currentGeometryProgram = '';\n\n\t\t\trenderObjectImmediate( object, program, material );\n\n\t\t} else {\n\n\t\t\t_this.renderBufferDirect( camera, scene.fog, geometry, material, object, group );\n\n\t\t}\n\n\t\tobject.onAfterRender( _this, scene, camera, geometry, material, group );\n\t\tcurrentRenderState = renderStates.get( scene, _currentArrayCamera || camera );\n\n\t}\n\n\tfunction initMaterial( material, fog, object ) {\n\n\t\tvar materialProperties = properties.get( material );\n\n\t\tvar lights = currentRenderState.state.lights;\n\t\tvar shadowsArray = currentRenderState.state.shadowsArray;\n\n\t\tvar parameters = programCache.getParameters(\n\t\t\tmaterial, lights.state, shadowsArray, fog, _clipping.numPlanes, _clipping.numIntersection, object );\n\n\t\tvar code = programCache.getProgramCode( material, parameters );\n\n\t\tvar program = materialProperties.program;\n\t\tvar programChange = true;\n\n\t\tif ( program === undefined ) {\n\n\t\t\t// new material\n\t\t\tmaterial.addEventListener( 'dispose', onMaterialDispose );\n\n\t\t} else if ( program.code !== code ) {\n\n\t\t\t// changed glsl or parameters\n\t\t\treleaseMaterialProgramReference( material );\n\n\t\t} else if ( materialProperties.lightsHash !== lights.state.hash ) {\n\n\t\t\tproperties.update( material, 'lightsHash', lights.state.hash );\n\t\t\tprogramChange = false;\n\n\t\t} else if ( parameters.shaderID !== undefined ) {\n\n\t\t\t// same glsl and uniform list\n\t\t\treturn;\n\n\t\t} else {\n\n\t\t\t// only rebuild uniform list\n\t\t\tprogramChange = false;\n\n\t\t}\n\n\t\tif ( programChange ) {\n\n\t\t\tif ( parameters.shaderID ) {\n\n\t\t\t\tvar shader = ShaderLib[ parameters.shaderID ];\n\n\t\t\t\tmaterialProperties.shader = {\n\t\t\t\t\tname: material.type,\n\t\t\t\t\tuniforms: UniformsUtils.clone( shader.uniforms ),\n\t\t\t\t\tvertexShader: shader.vertexShader,\n\t\t\t\t\tfragmentShader: shader.fragmentShader\n\t\t\t\t};\n\n\t\t\t} else {\n\n\t\t\t\tmaterialProperties.shader = {\n\t\t\t\t\tname: material.type,\n\t\t\t\t\tuniforms: material.uniforms,\n\t\t\t\t\tvertexShader: material.vertexShader,\n\t\t\t\t\tfragmentShader: material.fragmentShader\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\tmaterial.onBeforeCompile( materialProperties.shader, _this );\n\n\t\t\tprogram = programCache.acquireProgram( material, materialProperties.shader, parameters, code );\n\n\t\t\tmaterialProperties.program = program;\n\t\t\tmaterial.program = program;\n\n\t\t}\n\n\t\tvar programAttributes = program.getAttributes();\n\n\t\tif ( material.morphTargets ) {\n\n\t\t\tmaterial.numSupportedMorphTargets = 0;\n\n\t\t\tfor ( var i = 0; i < _this.maxMorphTargets; i ++ ) {\n\n\t\t\t\tif ( programAttributes[ 'morphTarget' + i ] >= 0 ) {\n\n\t\t\t\t\tmaterial.numSupportedMorphTargets ++;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( material.morphNormals ) {\n\n\t\t\tmaterial.numSupportedMorphNormals = 0;\n\n\t\t\tfor ( var i = 0; i < _this.maxMorphNormals; i ++ ) {\n\n\t\t\t\tif ( programAttributes[ 'morphNormal' + i ] >= 0 ) {\n\n\t\t\t\t\tmaterial.numSupportedMorphNormals ++;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar uniforms = materialProperties.shader.uniforms;\n\n\t\tif ( ! material.isShaderMaterial &&\n\t\t\t! material.isRawShaderMaterial ||\n\t\t\tmaterial.clipping === true ) {\n\n\t\t\tmaterialProperties.numClippingPlanes = _clipping.numPlanes;\n\t\t\tmaterialProperties.numIntersection = _clipping.numIntersection;\n\t\t\tuniforms.clippingPlanes = _clipping.uniform;\n\n\t\t}\n\n\t\tmaterialProperties.fog = fog;\n\n\t\t// store the light setup it was created for\n\n\t\tmaterialProperties.lightsHash = lights.state.hash;\n\n\t\tif ( material.lights ) {\n\n\t\t\t// wire up the material to this renderer's lighting state\n\n\t\t\tuniforms.ambientLightColor.value = lights.state.ambient;\n\t\t\tuniforms.directionalLights.value = lights.state.directional;\n\t\t\tuniforms.spotLights.value = lights.state.spot;\n\t\t\tuniforms.rectAreaLights.value = lights.state.rectArea;\n\t\t\tuniforms.pointLights.value = lights.state.point;\n\t\t\tuniforms.hemisphereLights.value = lights.state.hemi;\n\n\t\t\tuniforms.directionalShadowMap.value = lights.state.directionalShadowMap;\n\t\t\tuniforms.directionalShadowMatrix.value = lights.state.directionalShadowMatrix;\n\t\t\tuniforms.spotShadowMap.value = lights.state.spotShadowMap;\n\t\t\tuniforms.spotShadowMatrix.value = lights.state.spotShadowMatrix;\n\t\t\tuniforms.pointShadowMap.value = lights.state.pointShadowMap;\n\t\t\tuniforms.pointShadowMatrix.value = lights.state.pointShadowMatrix;\n\t\t\t// TODO (abelnation): add area lights shadow info to uniforms\n\n\t\t}\n\n\t\tvar progUniforms = materialProperties.program.getUniforms(),\n\t\t\tuniformsList =\n\t\t\t\tWebGLUniforms.seqWithValue( progUniforms.seq, uniforms );\n\n\t\tmaterialProperties.uniformsList = uniformsList;\n\n\t}\n\n\tfunction setProgram( camera, fog, material, object ) {\n\n\t\t_usedTextureUnits = 0;\n\n\t\tvar materialProperties = properties.get( material );\n\t\tvar lights = currentRenderState.state.lights;\n\n\t\tif ( _clippingEnabled ) {\n\n\t\t\tif ( _localClippingEnabled || camera !== _currentCamera ) {\n\n\t\t\t\tvar useCache =\n\t\t\t\t\tcamera === _currentCamera &&\n\t\t\t\t\tmaterial.id === _currentMaterialId;\n\n\t\t\t\t// we might want to call this function with some ClippingGroup\n\t\t\t\t// object instead of the material, once it becomes feasible\n\t\t\t\t// (#8465, #8379)\n\t\t\t\t_clipping.setState(\n\t\t\t\t\tmaterial.clippingPlanes, material.clipIntersection, material.clipShadows,\n\t\t\t\t\tcamera, materialProperties, useCache );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( material.needsUpdate === false ) {\n\n\t\t\tif ( materialProperties.program === undefined ) {\n\n\t\t\t\tmaterial.needsUpdate = true;\n\n\t\t\t} else if ( material.fog && materialProperties.fog !== fog ) {\n\n\t\t\t\tmaterial.needsUpdate = true;\n\n\t\t\t} else if ( material.lights && materialProperties.lightsHash !== lights.state.hash ) {\n\n\t\t\t\tmaterial.needsUpdate = true;\n\n\t\t\t} else if ( materialProperties.numClippingPlanes !== undefined &&\n\t\t\t\t( materialProperties.numClippingPlanes !== _clipping.numPlanes ||\n\t\t\t\tmaterialProperties.numIntersection !== _clipping.numIntersection ) ) {\n\n\t\t\t\tmaterial.needsUpdate = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( material.needsUpdate ) {\n\n\t\t\tinitMaterial( material, fog, object );\n\t\t\tmaterial.needsUpdate = false;\n\n\t\t}\n\n\t\tvar refreshProgram = false;\n\t\tvar refreshMaterial = false;\n\t\tvar refreshLights = false;\n\n\t\tvar program = materialProperties.program,\n\t\t\tp_uniforms = program.getUniforms(),\n\t\t\tm_uniforms = materialProperties.shader.uniforms;\n\n\t\tif ( state.useProgram( program.program ) ) {\n\n\t\t\trefreshProgram = true;\n\t\t\trefreshMaterial = true;\n\t\t\trefreshLights = true;\n\n\t\t}\n\n\t\tif ( material.id !== _currentMaterialId ) {\n\n\t\t\t_currentMaterialId = material.id;\n\n\t\t\trefreshMaterial = true;\n\n\t\t}\n\n\t\tif ( refreshProgram || camera !== _currentCamera ) {\n\n\t\t\tp_uniforms.setValue( _gl, 'projectionMatrix', camera.projectionMatrix );\n\n\t\t\tif ( capabilities.logarithmicDepthBuffer ) {\n\n\t\t\t\tp_uniforms.setValue( _gl, 'logDepthBufFC',\n\t\t\t\t\t2.0 / ( Math.log( camera.far + 1.0 ) / Math.LN2 ) );\n\n\t\t\t}\n\n\t\t\t// Avoid unneeded uniform updates per ArrayCamera's sub-camera\n\n\t\t\tif ( _currentCamera !== ( _currentArrayCamera || camera ) ) {\n\n\t\t\t\t_currentCamera = ( _currentArrayCamera || camera );\n\n\t\t\t\t// lighting uniforms depend on the camera so enforce an update\n\t\t\t\t// now, in case this material supports lights - or later, when\n\t\t\t\t// the next material that does gets activated:\n\n\t\t\t\trefreshMaterial = true;\t\t// set to true on material change\n\t\t\t\trefreshLights = true;\t\t// remains set until update done\n\n\t\t\t}\n\n\t\t\t// load material specific uniforms\n\t\t\t// (shader material also gets them for the sake of genericity)\n\n\t\t\tif ( material.isShaderMaterial ||\n\t\t\t\tmaterial.isMeshPhongMaterial ||\n\t\t\t\tmaterial.isMeshStandardMaterial ||\n\t\t\t\tmaterial.envMap ) {\n\n\t\t\t\tvar uCamPos = p_uniforms.map.cameraPosition;\n\n\t\t\t\tif ( uCamPos !== undefined ) {\n\n\t\t\t\t\tuCamPos.setValue( _gl,\n\t\t\t\t\t\t_vector3.setFromMatrixPosition( camera.matrixWorld ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( material.isMeshPhongMaterial ||\n\t\t\t\tmaterial.isMeshLambertMaterial ||\n\t\t\t\tmaterial.isMeshBasicMaterial ||\n\t\t\t\tmaterial.isMeshStandardMaterial ||\n\t\t\t\tmaterial.isShaderMaterial ||\n\t\t\t\tmaterial.skinning ) {\n\n\t\t\t\tp_uniforms.setValue( _gl, 'viewMatrix', camera.matrixWorldInverse );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// skinning uniforms must be set even if material didn't change\n\t\t// auto-setting of texture unit for bone texture must go before other textures\n\t\t// not sure why, but otherwise weird things happen\n\n\t\tif ( material.skinning ) {\n\n\t\t\tp_uniforms.setOptional( _gl, object, 'bindMatrix' );\n\t\t\tp_uniforms.setOptional( _gl, object, 'bindMatrixInverse' );\n\n\t\t\tvar skeleton = object.skeleton;\n\n\t\t\tif ( skeleton ) {\n\n\t\t\t\tvar bones = skeleton.bones;\n\n\t\t\t\tif ( capabilities.floatVertexTextures ) {\n\n\t\t\t\t\tif ( skeleton.boneTexture === undefined ) {\n\n\t\t\t\t\t\t// layout (1 matrix = 4 pixels)\n\t\t\t\t\t\t// RGBA RGBA RGBA RGBA (=> column1, column2, column3, column4)\n\t\t\t\t\t\t// with 8x8 pixel texture max 16 bones * 4 pixels = (8 * 8)\n\t\t\t\t\t\t// 16x16 pixel texture max 64 bones * 4 pixels = (16 * 16)\n\t\t\t\t\t\t// 32x32 pixel texture max 256 bones * 4 pixels = (32 * 32)\n\t\t\t\t\t\t// 64x64 pixel texture max 1024 bones * 4 pixels = (64 * 64)\n\n\n\t\t\t\t\t\tvar size = Math.sqrt( bones.length * 4 ); // 4 pixels needed for 1 matrix\n\t\t\t\t\t\tsize = _Math.ceilPowerOfTwo( size );\n\t\t\t\t\t\tsize = Math.max( size, 4 );\n\n\t\t\t\t\t\tvar boneMatrices = new Float32Array( size * size * 4 ); // 4 floats per RGBA pixel\n\t\t\t\t\t\tboneMatrices.set( skeleton.boneMatrices ); // copy current values\n\n\t\t\t\t\t\tvar boneTexture = new DataTexture( boneMatrices, size, size, RGBAFormat, FloatType );\n\t\t\t\t\t\tboneTexture.needsUpdate = true;\n\n\t\t\t\t\t\tskeleton.boneMatrices = boneMatrices;\n\t\t\t\t\t\tskeleton.boneTexture = boneTexture;\n\t\t\t\t\t\tskeleton.boneTextureSize = size;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tp_uniforms.setValue( _gl, 'boneTexture', skeleton.boneTexture );\n\t\t\t\t\tp_uniforms.setValue( _gl, 'boneTextureSize', skeleton.boneTextureSize );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tp_uniforms.setOptional( _gl, skeleton, 'boneMatrices' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( refreshMaterial ) {\n\n\t\t\tp_uniforms.setValue( _gl, 'toneMappingExposure', _this.toneMappingExposure );\n\t\t\tp_uniforms.setValue( _gl, 'toneMappingWhitePoint', _this.toneMappingWhitePoint );\n\n\t\t\tif ( material.lights ) {\n\n\t\t\t\t// the current material requires lighting info\n\n\t\t\t\t// note: all lighting uniforms are always set correctly\n\t\t\t\t// they simply reference the renderer's state for their\n\t\t\t\t// values\n\t\t\t\t//\n\t\t\t\t// use the current material's .needsUpdate flags to set\n\t\t\t\t// the GL state when required\n\n\t\t\t\tmarkUniformsLightsNeedsUpdate( m_uniforms, refreshLights );\n\n\t\t\t}\n\n\t\t\t// refresh uniforms common to several materials\n\n\t\t\tif ( fog && material.fog ) {\n\n\t\t\t\trefreshUniformsFog( m_uniforms, fog );\n\n\t\t\t}\n\n\t\t\tif ( material.isMeshBasicMaterial ) {\n\n\t\t\t\trefreshUniformsCommon( m_uniforms, material );\n\n\t\t\t} else if ( material.isMeshLambertMaterial ) {\n\n\t\t\t\trefreshUniformsCommon( m_uniforms, material );\n\t\t\t\trefreshUniformsLambert( m_uniforms, material );\n\n\t\t\t} else if ( material.isMeshPhongMaterial ) {\n\n\t\t\t\trefreshUniformsCommon( m_uniforms, material );\n\n\t\t\t\tif ( material.isMeshToonMaterial ) {\n\n\t\t\t\t\trefreshUniformsToon( m_uniforms, material );\n\n\t\t\t\t} else {\n\n\t\t\t\t\trefreshUniformsPhong( m_uniforms, material );\n\n\t\t\t\t}\n\n\t\t\t} else if ( material.isMeshStandardMaterial ) {\n\n\t\t\t\trefreshUniformsCommon( m_uniforms, material );\n\n\t\t\t\tif ( material.isMeshPhysicalMaterial ) {\n\n\t\t\t\t\trefreshUniformsPhysical( m_uniforms, material );\n\n\t\t\t\t} else {\n\n\t\t\t\t\trefreshUniformsStandard( m_uniforms, material );\n\n\t\t\t\t}\n\n\t\t\t} else if ( material.isMeshDepthMaterial ) {\n\n\t\t\t\trefreshUniformsCommon( m_uniforms, material );\n\t\t\t\trefreshUniformsDepth( m_uniforms, material );\n\n\t\t\t} else if ( material.isMeshDistanceMaterial ) {\n\n\t\t\t\trefreshUniformsCommon( m_uniforms, material );\n\t\t\t\trefreshUniformsDistance( m_uniforms, material );\n\n\t\t\t} else if ( material.isMeshNormalMaterial ) {\n\n\t\t\t\trefreshUniformsCommon( m_uniforms, material );\n\t\t\t\trefreshUniformsNormal( m_uniforms, material );\n\n\t\t\t} else if ( material.isLineBasicMaterial ) {\n\n\t\t\t\trefreshUniformsLine( m_uniforms, material );\n\n\t\t\t\tif ( material.isLineDashedMaterial ) {\n\n\t\t\t\t\trefreshUniformsDash( m_uniforms, material );\n\n\t\t\t\t}\n\n\t\t\t} else if ( material.isPointsMaterial ) {\n\n\t\t\t\trefreshUniformsPoints( m_uniforms, material );\n\n\t\t\t} else if ( material.isShadowMaterial ) {\n\n\t\t\t\tm_uniforms.color.value = material.color;\n\t\t\t\tm_uniforms.opacity.value = material.opacity;\n\n\t\t\t}\n\n\t\t\t// RectAreaLight Texture\n\t\t\t// TODO (mrdoob): Find a nicer implementation\n\n\t\t\tif ( m_uniforms.ltc_1 !== undefined ) m_uniforms.ltc_1.value = UniformsLib.LTC_1;\n\t\t\tif ( m_uniforms.ltc_2 !== undefined ) m_uniforms.ltc_2.value = UniformsLib.LTC_2;\n\n\t\t\tWebGLUniforms.upload( _gl, materialProperties.uniformsList, m_uniforms, _this );\n\n\t\t}\n\n\t\tif ( material.isShaderMaterial && material.uniformsNeedUpdate === true ) {\n\n\t\t\tWebGLUniforms.upload( _gl, materialProperties.uniformsList, m_uniforms, _this );\n\t\t\tmaterial.uniformsNeedUpdate = false;\n\n\t\t}\n\n\t\t// common matrices\n\n\t\tp_uniforms.setValue( _gl, 'modelViewMatrix', object.modelViewMatrix );\n\t\tp_uniforms.setValue( _gl, 'normalMatrix', object.normalMatrix );\n\t\tp_uniforms.setValue( _gl, 'modelMatrix', object.matrixWorld );\n\n\t\treturn program;\n\n\t}\n\n\t// Uniforms (refresh uniforms objects)\n\n\tfunction refreshUniformsCommon( uniforms, material ) {\n\n\t\tuniforms.opacity.value = material.opacity;\n\n\t\tif ( material.color ) {\n\n\t\t\tuniforms.diffuse.value = material.color;\n\n\t\t}\n\n\t\tif ( material.emissive ) {\n\n\t\t\tuniforms.emissive.value.copy( material.emissive ).multiplyScalar( material.emissiveIntensity );\n\n\t\t}\n\n\t\tif ( material.map ) {\n\n\t\t\tuniforms.map.value = material.map;\n\n\t\t}\n\n\t\tif ( material.alphaMap ) {\n\n\t\t\tuniforms.alphaMap.value = material.alphaMap;\n\n\t\t}\n\n\t\tif ( material.specularMap ) {\n\n\t\t\tuniforms.specularMap.value = material.specularMap;\n\n\t\t}\n\n\t\tif ( material.envMap ) {\n\n\t\t\tuniforms.envMap.value = material.envMap;\n\n\t\t\t// don't flip CubeTexture envMaps, flip everything else:\n\t\t\t// WebGLRenderTargetCube will be flipped for backwards compatibility\n\t\t\t// WebGLRenderTargetCube.texture will be flipped because it's a Texture and NOT a CubeTexture\n\t\t\t// this check must be handled differently, or removed entirely, if WebGLRenderTargetCube uses a CubeTexture in the future\n\t\t\tuniforms.flipEnvMap.value = ( ! ( material.envMap && material.envMap.isCubeTexture ) ) ? 1 : - 1;\n\n\t\t\tuniforms.reflectivity.value = material.reflectivity;\n\t\t\tuniforms.refractionRatio.value = material.refractionRatio;\n\n\t\t\tuniforms.maxMipLevel.value = properties.get( material.envMap ).__maxMipLevel;\n\n\t\t}\n\n\t\tif ( material.lightMap ) {\n\n\t\t\tuniforms.lightMap.value = material.lightMap;\n\t\t\tuniforms.lightMapIntensity.value = material.lightMapIntensity;\n\n\t\t}\n\n\t\tif ( material.aoMap ) {\n\n\t\t\tuniforms.aoMap.value = material.aoMap;\n\t\t\tuniforms.aoMapIntensity.value = material.aoMapIntensity;\n\n\t\t}\n\n\t\t// uv repeat and offset setting priorities\n\t\t// 1. color map\n\t\t// 2. specular map\n\t\t// 3. normal map\n\t\t// 4. bump map\n\t\t// 5. alpha map\n\t\t// 6. emissive map\n\n\t\tvar uvScaleMap;\n\n\t\tif ( material.map ) {\n\n\t\t\tuvScaleMap = material.map;\n\n\t\t} else if ( material.specularMap ) {\n\n\t\t\tuvScaleMap = material.specularMap;\n\n\t\t} else if ( material.displacementMap ) {\n\n\t\t\tuvScaleMap = material.displacementMap;\n\n\t\t} else if ( material.normalMap ) {\n\n\t\t\tuvScaleMap = material.normalMap;\n\n\t\t} else if ( material.bumpMap ) {\n\n\t\t\tuvScaleMap = material.bumpMap;\n\n\t\t} else if ( material.roughnessMap ) {\n\n\t\t\tuvScaleMap = material.roughnessMap;\n\n\t\t} else if ( material.metalnessMap ) {\n\n\t\t\tuvScaleMap = material.metalnessMap;\n\n\t\t} else if ( material.alphaMap ) {\n\n\t\t\tuvScaleMap = material.alphaMap;\n\n\t\t} else if ( material.emissiveMap ) {\n\n\t\t\tuvScaleMap = material.emissiveMap;\n\n\t\t}\n\n\t\tif ( uvScaleMap !== undefined ) {\n\n\t\t\t// backwards compatibility\n\t\t\tif ( uvScaleMap.isWebGLRenderTarget ) {\n\n\t\t\t\tuvScaleMap = uvScaleMap.texture;\n\n\t\t\t}\n\n\t\t\tif ( uvScaleMap.matrixAutoUpdate === true ) {\n\n\t\t\t\tuvScaleMap.updateMatrix();\n\n\t\t\t}\n\n\t\t\tuniforms.uvTransform.value.copy( uvScaleMap.matrix );\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsLine( uniforms, material ) {\n\n\t\tuniforms.diffuse.value = material.color;\n\t\tuniforms.opacity.value = material.opacity;\n\n\t}\n\n\tfunction refreshUniformsDash( uniforms, material ) {\n\n\t\tuniforms.dashSize.value = material.dashSize;\n\t\tuniforms.totalSize.value = material.dashSize + material.gapSize;\n\t\tuniforms.scale.value = material.scale;\n\n\t}\n\n\tfunction refreshUniformsPoints( uniforms, material ) {\n\n\t\tuniforms.diffuse.value = material.color;\n\t\tuniforms.opacity.value = material.opacity;\n\t\tuniforms.size.value = material.size * _pixelRatio;\n\t\tuniforms.scale.value = _height * 0.5;\n\n\t\tuniforms.map.value = material.map;\n\n\t\tif ( material.map !== null ) {\n\n\t\t\tif ( material.map.matrixAutoUpdate === true ) {\n\n\t\t\t\tmaterial.map.updateMatrix();\n\n\t\t\t}\n\n\t\t\tuniforms.uvTransform.value.copy( material.map.matrix );\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsFog( uniforms, fog ) {\n\n\t\tuniforms.fogColor.value = fog.color;\n\n\t\tif ( fog.isFog ) {\n\n\t\t\tuniforms.fogNear.value = fog.near;\n\t\t\tuniforms.fogFar.value = fog.far;\n\n\t\t} else if ( fog.isFogExp2 ) {\n\n\t\t\tuniforms.fogDensity.value = fog.density;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsLambert( uniforms, material ) {\n\n\t\tif ( material.emissiveMap ) {\n\n\t\t\tuniforms.emissiveMap.value = material.emissiveMap;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsPhong( uniforms, material ) {\n\n\t\tuniforms.specular.value = material.specular;\n\t\tuniforms.shininess.value = Math.max( material.shininess, 1e-4 ); // to prevent pow( 0.0, 0.0 )\n\n\t\tif ( material.emissiveMap ) {\n\n\t\t\tuniforms.emissiveMap.value = material.emissiveMap;\n\n\t\t}\n\n\t\tif ( material.bumpMap ) {\n\n\t\t\tuniforms.bumpMap.value = material.bumpMap;\n\t\t\tuniforms.bumpScale.value = material.bumpScale;\n\n\t\t}\n\n\t\tif ( material.normalMap ) {\n\n\t\t\tuniforms.normalMap.value = material.normalMap;\n\t\t\tuniforms.normalScale.value.copy( material.normalScale );\n\n\t\t}\n\n\t\tif ( material.displacementMap ) {\n\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsToon( uniforms, material ) {\n\n\t\trefreshUniformsPhong( uniforms, material );\n\n\t\tif ( material.gradientMap ) {\n\n\t\t\tuniforms.gradientMap.value = material.gradientMap;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsStandard( uniforms, material ) {\n\n\t\tuniforms.roughness.value = material.roughness;\n\t\tuniforms.metalness.value = material.metalness;\n\n\t\tif ( material.roughnessMap ) {\n\n\t\t\tuniforms.roughnessMap.value = material.roughnessMap;\n\n\t\t}\n\n\t\tif ( material.metalnessMap ) {\n\n\t\t\tuniforms.metalnessMap.value = material.metalnessMap;\n\n\t\t}\n\n\t\tif ( material.emissiveMap ) {\n\n\t\t\tuniforms.emissiveMap.value = material.emissiveMap;\n\n\t\t}\n\n\t\tif ( material.bumpMap ) {\n\n\t\t\tuniforms.bumpMap.value = material.bumpMap;\n\t\t\tuniforms.bumpScale.value = material.bumpScale;\n\n\t\t}\n\n\t\tif ( material.normalMap ) {\n\n\t\t\tuniforms.normalMap.value = material.normalMap;\n\t\t\tuniforms.normalScale.value.copy( material.normalScale );\n\n\t\t}\n\n\t\tif ( material.displacementMap ) {\n\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t}\n\n\t\tif ( material.envMap ) {\n\n\t\t\t//uniforms.envMap.value = material.envMap; // part of uniforms common\n\t\t\tuniforms.envMapIntensity.value = material.envMapIntensity;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsPhysical( uniforms, material ) {\n\n\t\tuniforms.clearCoat.value = material.clearCoat;\n\t\tuniforms.clearCoatRoughness.value = material.clearCoatRoughness;\n\n\t\trefreshUniformsStandard( uniforms, material );\n\n\t}\n\n\tfunction refreshUniformsDepth( uniforms, material ) {\n\n\t\tif ( material.displacementMap ) {\n\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsDistance( uniforms, material ) {\n\n\t\tif ( material.displacementMap ) {\n\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t}\n\n\t\tuniforms.referencePosition.value.copy( material.referencePosition );\n\t\tuniforms.nearDistance.value = material.nearDistance;\n\t\tuniforms.farDistance.value = material.farDistance;\n\n\t}\n\n\tfunction refreshUniformsNormal( uniforms, material ) {\n\n\t\tif ( material.bumpMap ) {\n\n\t\t\tuniforms.bumpMap.value = material.bumpMap;\n\t\t\tuniforms.bumpScale.value = material.bumpScale;\n\n\t\t}\n\n\t\tif ( material.normalMap ) {\n\n\t\t\tuniforms.normalMap.value = material.normalMap;\n\t\t\tuniforms.normalScale.value.copy( material.normalScale );\n\n\t\t}\n\n\t\tif ( material.displacementMap ) {\n\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t}\n\n\t}\n\n\t// If uniforms are marked as clean, they don't need to be loaded to the GPU.\n\n\tfunction markUniformsLightsNeedsUpdate( uniforms, value ) {\n\n\t\tuniforms.ambientLightColor.needsUpdate = value;\n\n\t\tuniforms.directionalLights.needsUpdate = value;\n\t\tuniforms.pointLights.needsUpdate = value;\n\t\tuniforms.spotLights.needsUpdate = value;\n\t\tuniforms.rectAreaLights.needsUpdate = value;\n\t\tuniforms.hemisphereLights.needsUpdate = value;\n\n\t}\n\n\t// Textures\n\n\tfunction allocTextureUnit() {\n\n\t\tvar textureUnit = _usedTextureUnits;\n\n\t\tif ( textureUnit >= capabilities.maxTextures ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: Trying to use ' + textureUnit + ' texture units while this GPU supports only ' + capabilities.maxTextures );\n\n\t\t}\n\n\t\t_usedTextureUnits += 1;\n\n\t\treturn textureUnit;\n\n\t}\n\n\tthis.allocTextureUnit = allocTextureUnit;\n\n\t// this.setTexture2D = setTexture2D;\n\tthis.setTexture2D = ( function () {\n\n\t\tvar warned = false;\n\n\t\t// backwards compatibility: peel texture.texture\n\t\treturn function setTexture2D( texture, slot ) {\n\n\t\t\tif ( texture && texture.isWebGLRenderTarget ) {\n\n\t\t\t\tif ( ! warned ) {\n\n\t\t\t\t\tconsole.warn( \"THREE.WebGLRenderer.setTexture2D: don't use render targets as textures. Use their .texture property instead.\" );\n\t\t\t\t\twarned = true;\n\n\t\t\t\t}\n\n\t\t\t\ttexture = texture.texture;\n\n\t\t\t}\n\n\t\t\ttextures.setTexture2D( texture, slot );\n\n\t\t};\n\n\t}() );\n\n\tthis.setTexture = ( function () {\n\n\t\tvar warned = false;\n\n\t\treturn function setTexture( texture, slot ) {\n\n\t\t\tif ( ! warned ) {\n\n\t\t\t\tconsole.warn( \"THREE.WebGLRenderer: .setTexture is deprecated, use setTexture2D instead.\" );\n\t\t\t\twarned = true;\n\n\t\t\t}\n\n\t\t\ttextures.setTexture2D( texture, slot );\n\n\t\t};\n\n\t}() );\n\n\tthis.setTextureCube = ( function () {\n\n\t\tvar warned = false;\n\n\t\treturn function setTextureCube( texture, slot ) {\n\n\t\t\t// backwards compatibility: peel texture.texture\n\t\t\tif ( texture && texture.isWebGLRenderTargetCube ) {\n\n\t\t\t\tif ( ! warned ) {\n\n\t\t\t\t\tconsole.warn( \"THREE.WebGLRenderer.setTextureCube: don't use cube render targets as textures. Use their .texture property instead.\" );\n\t\t\t\t\twarned = true;\n\n\t\t\t\t}\n\n\t\t\t\ttexture = texture.texture;\n\n\t\t\t}\n\n\t\t\t// currently relying on the fact that WebGLRenderTargetCube.texture is a Texture and NOT a CubeTexture\n\t\t\t// TODO: unify these code paths\n\t\t\tif ( ( texture && texture.isCubeTexture ) ||\n\t\t\t\t( Array.isArray( texture.image ) && texture.image.length === 6 ) ) {\n\n\t\t\t\t// CompressedTexture can have Array in image :/\n\n\t\t\t\t// this function alone should take care of cube textures\n\t\t\t\ttextures.setTextureCube( texture, slot );\n\n\t\t\t} else {\n\n\t\t\t\t// assumed: texture property of THREE.WebGLRenderTargetCube\n\n\t\t\t\ttextures.setTextureCubeDynamic( texture, slot );\n\n\t\t\t}\n\n\t\t};\n\n\t}() );\n\n\tthis.getRenderTarget = function () {\n\n\t\treturn _currentRenderTarget;\n\n\t};\n\n\tthis.setRenderTarget = function ( renderTarget ) {\n\n\t\t_currentRenderTarget = renderTarget;\n\n\t\tif ( renderTarget && properties.get( renderTarget ).__webglFramebuffer === undefined ) {\n\n\t\t\ttextures.setupRenderTarget( renderTarget );\n\n\t\t}\n\n\t\tvar framebuffer = null;\n\t\tvar isCube = false;\n\n\t\tif ( renderTarget ) {\n\n\t\t\tvar __webglFramebuffer = properties.get( renderTarget ).__webglFramebuffer;\n\n\t\t\tif ( renderTarget.isWebGLRenderTargetCube ) {\n\n\t\t\t\tframebuffer = __webglFramebuffer[ renderTarget.activeCubeFace ];\n\t\t\t\tisCube = true;\n\n\t\t\t} else {\n\n\t\t\t\tframebuffer = __webglFramebuffer;\n\n\t\t\t}\n\n\t\t\t_currentViewport.copy( renderTarget.viewport );\n\t\t\t_currentScissor.copy( renderTarget.scissor );\n\t\t\t_currentScissorTest = renderTarget.scissorTest;\n\n\t\t} else {\n\n\t\t\t_currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio );\n\t\t\t_currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio );\n\t\t\t_currentScissorTest = _scissorTest;\n\n\t\t}\n\n\t\tif ( _currentFramebuffer !== framebuffer ) {\n\n\t\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\n\t\t\t_currentFramebuffer = framebuffer;\n\n\t\t}\n\n\t\tstate.viewport( _currentViewport );\n\t\tstate.scissor( _currentScissor );\n\t\tstate.setScissorTest( _currentScissorTest );\n\n\t\tif ( isCube ) {\n\n\t\t\tvar textureProperties = properties.get( renderTarget.texture );\n\t\t\t_gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + renderTarget.activeCubeFace, textureProperties.__webglTexture, renderTarget.activeMipMapLevel );\n\n\t\t}\n\n\t};\n\n\tthis.readRenderTargetPixels = function ( renderTarget, x, y, width, height, buffer ) {\n\n\t\tif ( ! ( renderTarget && renderTarget.isWebGLRenderTarget ) ) {\n\n\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tvar framebuffer = properties.get( renderTarget ).__webglFramebuffer;\n\n\t\tif ( framebuffer ) {\n\n\t\t\tvar restore = false;\n\n\t\t\tif ( framebuffer !== _currentFramebuffer ) {\n\n\t\t\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\n\n\t\t\t\trestore = true;\n\n\t\t\t}\n\n\t\t\ttry {\n\n\t\t\t\tvar texture = renderTarget.texture;\n\t\t\t\tvar textureFormat = texture.format;\n\t\t\t\tvar textureType = texture.type;\n\n\t\t\t\tif ( textureFormat !== RGBAFormat && utils.convert( textureFormat ) !== _gl.getParameter( _gl.IMPLEMENTATION_COLOR_READ_FORMAT ) ) {\n\n\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.' );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tif ( textureType !== UnsignedByteType && utils.convert( textureType ) !== _gl.getParameter( _gl.IMPLEMENTATION_COLOR_READ_TYPE ) && // IE11, Edge and Chrome Mac < 52 (#9513)\n\t\t\t\t\t! ( textureType === FloatType && ( extensions.get( 'OES_texture_float' ) || extensions.get( 'WEBGL_color_buffer_float' ) ) ) && // Chrome Mac >= 52 and Firefox\n\t\t\t\t\t! ( textureType === HalfFloatType && extensions.get( 'EXT_color_buffer_half_float' ) ) ) {\n\n\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.' );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tif ( _gl.checkFramebufferStatus( _gl.FRAMEBUFFER ) === _gl.FRAMEBUFFER_COMPLETE ) {\n\n\t\t\t\t\t// the following if statement ensures valid read requests (no out-of-bounds pixels, see #8604)\n\n\t\t\t\t\tif ( ( x >= 0 && x <= ( renderTarget.width - width ) ) && ( y >= 0 && y <= ( renderTarget.height - height ) ) ) {\n\n\t\t\t\t\t\t_gl.readPixels( x, y, width, height, utils.convert( textureFormat ), utils.convert( textureType ), buffer );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.' );\n\n\t\t\t\t}\n\n\t\t\t} finally {\n\n\t\t\t\tif ( restore ) {\n\n\t\t\t\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, _currentFramebuffer );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\tthis.copyFramebufferToTexture = function ( position, texture, level ) {\n\n\t\tvar width = texture.image.width;\n\t\tvar height = texture.image.height;\n\t\tvar glFormat = utils.convert( texture.format );\n\n\t\tthis.setTexture2D( texture, 0 );\n\n\t\t_gl.copyTexImage2D( _gl.TEXTURE_2D, level || 0, glFormat, position.x, position.y, width, height, 0 );\n\n\t};\n\n\tthis.copyTextureToTexture = function ( position, srcTexture, dstTexture, level ) {\n\n\t\tvar width = srcTexture.image.width;\n\t\tvar height = srcTexture.image.height;\n\t\tvar glFormat = utils.convert( dstTexture.format );\n\t\tvar glType = utils.convert( dstTexture.type );\n\t\tvar pixels = srcTexture.isDataTexture ? srcTexture.image.data : srcTexture.image;\n\n\t\tthis.setTexture2D( dstTexture, 0 );\n\n\t\t_gl.texSubImage2D( _gl.TEXTURE_2D, level || 0, position.x, position.y, width, height, glFormat, glType, pixels );\n\n\t};\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction FogExp2( color, density ) {\n\n\tthis.name = '';\n\n\tthis.color = new Color( color );\n\tthis.density = ( density !== undefined ) ? density : 0.00025;\n\n}\n\nFogExp2.prototype.isFogExp2 = true;\n\nFogExp2.prototype.clone = function () {\n\n\treturn new FogExp2( this.color.getHex(), this.density );\n\n};\n\nFogExp2.prototype.toJSON = function ( /* meta */ ) {\n\n\treturn {\n\t\ttype: 'FogExp2',\n\t\tcolor: this.color.getHex(),\n\t\tdensity: this.density\n\t};\n\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction Fog( color, near, far ) {\n\n\tthis.name = '';\n\n\tthis.color = new Color( color );\n\n\tthis.near = ( near !== undefined ) ? near : 1;\n\tthis.far = ( far !== undefined ) ? far : 1000;\n\n}\n\nFog.prototype.isFog = true;\n\nFog.prototype.clone = function () {\n\n\treturn new Fog( this.color.getHex(), this.near, this.far );\n\n};\n\nFog.prototype.toJSON = function ( /* meta */ ) {\n\n\treturn {\n\t\ttype: 'Fog',\n\t\tcolor: this.color.getHex(),\n\t\tnear: this.near,\n\t\tfar: this.far\n\t};\n\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction Scene() {\n\n\tObject3D.call( this );\n\n\tthis.type = 'Scene';\n\n\tthis.background = null;\n\tthis.fog = null;\n\tthis.overrideMaterial = null;\n\n\tthis.autoUpdate = true; // checked by the renderer\n\n}\n\nScene.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Scene,\n\n\tcopy: function ( source, recursive ) {\n\n\t\tObject3D.prototype.copy.call( this, source, recursive );\n\n\t\tif ( source.background !== null ) this.background = source.background.clone();\n\t\tif ( source.fog !== null ) this.fog = source.fog.clone();\n\t\tif ( source.overrideMaterial !== null ) this.overrideMaterial = source.overrideMaterial.clone();\n\n\t\tthis.autoUpdate = source.autoUpdate;\n\t\tthis.matrixAutoUpdate = source.matrixAutoUpdate;\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\tvar data = Object3D.prototype.toJSON.call( this, meta );\n\n\t\tif ( this.background !== null ) data.object.background = this.background.toJSON( meta );\n\t\tif ( this.fog !== null ) data.object.fog = this.fog.toJSON();\n\n\t\treturn data;\n\n\t}\n\n} );\n\n/**\n * @author alteredq / http://alteredqualia.com/\n *\n * parameters = {\n * color: ,\n * opacity: ,\n * map: new THREE.Texture( ),\n *\n *\tuvOffset: new THREE.Vector2(),\n *\tuvScale: new THREE.Vector2()\n * }\n */\n\nfunction SpriteMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'SpriteMaterial';\n\n\tthis.color = new Color( 0xffffff );\n\tthis.map = null;\n\n\tthis.rotation = 0;\n\n\tthis.fog = false;\n\tthis.lights = false;\n\n\tthis.setValues( parameters );\n\n}\n\nSpriteMaterial.prototype = Object.create( Material.prototype );\nSpriteMaterial.prototype.constructor = SpriteMaterial;\nSpriteMaterial.prototype.isSpriteMaterial = true;\n\nSpriteMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.color.copy( source.color );\n\tthis.map = source.map;\n\n\tthis.rotation = source.rotation;\n\n\treturn this;\n\n};\n\n/**\n * @author mikael emtinger / http://gomo.se/\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction Sprite( material ) {\n\n\tObject3D.call( this );\n\n\tthis.type = 'Sprite';\n\n\tthis.material = ( material !== undefined ) ? material : new SpriteMaterial();\n\n\tthis.center = new Vector2( 0.5, 0.5 );\n\n}\n\nSprite.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Sprite,\n\n\tisSprite: true,\n\n\traycast: ( function () {\n\n\t\tvar intersectPoint = new Vector3();\n\t\tvar worldPosition = new Vector3();\n\t\tvar worldScale = new Vector3();\n\n\t\treturn function raycast( raycaster, intersects ) {\n\n\t\t\tworldPosition.setFromMatrixPosition( this.matrixWorld );\n\t\t\traycaster.ray.closestPointToPoint( worldPosition, intersectPoint );\n\n\t\t\tworldScale.setFromMatrixScale( this.matrixWorld );\n\t\t\tvar guessSizeSq = worldScale.x * worldScale.y / 4;\n\n\t\t\tif ( worldPosition.distanceToSquared( intersectPoint ) > guessSizeSq ) return;\n\n\t\t\tvar distance = raycaster.ray.origin.distanceTo( intersectPoint );\n\n\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) return;\n\n\t\t\tintersects.push( {\n\n\t\t\t\tdistance: distance,\n\t\t\t\tpoint: intersectPoint.clone(),\n\t\t\t\tface: null,\n\t\t\t\tobject: this\n\n\t\t\t} );\n\n\t\t};\n\n\t}() ),\n\n\tclone: function () {\n\n\t\treturn new this.constructor( this.material ).copy( this );\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tObject3D.prototype.copy.call( this, source );\n\n\t\tif ( source.center !== undefined ) this.center.copy( source.center );\n\n\t\treturn this;\n\n\t}\n\n\n} );\n\n/**\n * @author mikael emtinger / http://gomo.se/\n * @author alteredq / http://alteredqualia.com/\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction LOD() {\n\n\tObject3D.call( this );\n\n\tthis.type = 'LOD';\n\n\tObject.defineProperties( this, {\n\t\tlevels: {\n\t\t\tenumerable: true,\n\t\t\tvalue: []\n\t\t}\n\t} );\n\n}\n\nLOD.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: LOD,\n\n\tcopy: function ( source ) {\n\n\t\tObject3D.prototype.copy.call( this, source, false );\n\n\t\tvar levels = source.levels;\n\n\t\tfor ( var i = 0, l = levels.length; i < l; i ++ ) {\n\n\t\t\tvar level = levels[ i ];\n\n\t\t\tthis.addLevel( level.object.clone(), level.distance );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\taddLevel: function ( object, distance ) {\n\n\t\tif ( distance === undefined ) distance = 0;\n\n\t\tdistance = Math.abs( distance );\n\n\t\tvar levels = this.levels;\n\n\t\tfor ( var l = 0; l < levels.length; l ++ ) {\n\n\t\t\tif ( distance < levels[ l ].distance ) {\n\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tlevels.splice( l, 0, { distance: distance, object: object } );\n\n\t\tthis.add( object );\n\n\t},\n\n\tgetObjectForDistance: function ( distance ) {\n\n\t\tvar levels = this.levels;\n\n\t\tfor ( var i = 1, l = levels.length; i < l; i ++ ) {\n\n\t\t\tif ( distance < levels[ i ].distance ) {\n\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn levels[ i - 1 ].object;\n\n\t},\n\n\traycast: ( function () {\n\n\t\tvar matrixPosition = new Vector3();\n\n\t\treturn function raycast( raycaster, intersects ) {\n\n\t\t\tmatrixPosition.setFromMatrixPosition( this.matrixWorld );\n\n\t\t\tvar distance = raycaster.ray.origin.distanceTo( matrixPosition );\n\n\t\t\tthis.getObjectForDistance( distance ).raycast( raycaster, intersects );\n\n\t\t};\n\n\t}() ),\n\n\tupdate: function () {\n\n\t\tvar v1 = new Vector3();\n\t\tvar v2 = new Vector3();\n\n\t\treturn function update( camera ) {\n\n\t\t\tvar levels = this.levels;\n\n\t\t\tif ( levels.length > 1 ) {\n\n\t\t\t\tv1.setFromMatrixPosition( camera.matrixWorld );\n\t\t\t\tv2.setFromMatrixPosition( this.matrixWorld );\n\n\t\t\t\tvar distance = v1.distanceTo( v2 );\n\n\t\t\t\tlevels[ 0 ].object.visible = true;\n\n\t\t\t\tfor ( var i = 1, l = levels.length; i < l; i ++ ) {\n\n\t\t\t\t\tif ( distance >= levels[ i ].distance ) {\n\n\t\t\t\t\t\tlevels[ i - 1 ].object.visible = false;\n\t\t\t\t\t\tlevels[ i ].object.visible = true;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tfor ( ; i < l; i ++ ) {\n\n\t\t\t\t\tlevels[ i ].object.visible = false;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t}(),\n\n\ttoJSON: function ( meta ) {\n\n\t\tvar data = Object3D.prototype.toJSON.call( this, meta );\n\n\t\tdata.object.levels = [];\n\n\t\tvar levels = this.levels;\n\n\t\tfor ( var i = 0, l = levels.length; i < l; i ++ ) {\n\n\t\t\tvar level = levels[ i ];\n\n\t\t\tdata.object.levels.push( {\n\t\t\t\tobject: level.object.uuid,\n\t\t\t\tdistance: level.distance\n\t\t\t} );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n} );\n\n/**\n * @author mikael emtinger / http://gomo.se/\n * @author alteredq / http://alteredqualia.com/\n * @author michael guerrero / http://realitymeltdown.com\n * @author ikerr / http://verold.com\n */\n\nfunction Skeleton( bones, boneInverses ) {\n\n\t// copy the bone array\n\n\tbones = bones || [];\n\n\tthis.bones = bones.slice( 0 );\n\tthis.boneMatrices = new Float32Array( this.bones.length * 16 );\n\n\t// use the supplied bone inverses or calculate the inverses\n\n\tif ( boneInverses === undefined ) {\n\n\t\tthis.calculateInverses();\n\n\t} else {\n\n\t\tif ( this.bones.length === boneInverses.length ) {\n\n\t\t\tthis.boneInverses = boneInverses.slice( 0 );\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.Skeleton boneInverses is the wrong length.' );\n\n\t\t\tthis.boneInverses = [];\n\n\t\t\tfor ( var i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\t\tthis.boneInverses.push( new Matrix4() );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nObject.assign( Skeleton.prototype, {\n\n\tcalculateInverses: function () {\n\n\t\tthis.boneInverses = [];\n\n\t\tfor ( var i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tvar inverse = new Matrix4();\n\n\t\t\tif ( this.bones[ i ] ) {\n\n\t\t\t\tinverse.getInverse( this.bones[ i ].matrixWorld );\n\n\t\t\t}\n\n\t\t\tthis.boneInverses.push( inverse );\n\n\t\t}\n\n\t},\n\n\tpose: function () {\n\n\t\tvar bone, i, il;\n\n\t\t// recover the bind-time world matrices\n\n\t\tfor ( i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tbone = this.bones[ i ];\n\n\t\t\tif ( bone ) {\n\n\t\t\t\tbone.matrixWorld.getInverse( this.boneInverses[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// compute the local matrices, positions, rotations and scales\n\n\t\tfor ( i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tbone = this.bones[ i ];\n\n\t\t\tif ( bone ) {\n\n\t\t\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\t\t\tbone.matrix.getInverse( bone.parent.matrixWorld );\n\t\t\t\t\tbone.matrix.multiply( bone.matrixWorld );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tbone.matrix.copy( bone.matrixWorld );\n\n\t\t\t\t}\n\n\t\t\t\tbone.matrix.decompose( bone.position, bone.quaternion, bone.scale );\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\tupdate: ( function () {\n\n\t\tvar offsetMatrix = new Matrix4();\n\t\tvar identityMatrix = new Matrix4();\n\n\t\treturn function update() {\n\n\t\t\tvar bones = this.bones;\n\t\t\tvar boneInverses = this.boneInverses;\n\t\t\tvar boneMatrices = this.boneMatrices;\n\t\t\tvar boneTexture = this.boneTexture;\n\n\t\t\t// flatten bone matrices to array\n\n\t\t\tfor ( var i = 0, il = bones.length; i < il; i ++ ) {\n\n\t\t\t\t// compute the offset between the current and the original transform\n\n\t\t\t\tvar matrix = bones[ i ] ? bones[ i ].matrixWorld : identityMatrix;\n\n\t\t\t\toffsetMatrix.multiplyMatrices( matrix, boneInverses[ i ] );\n\t\t\t\toffsetMatrix.toArray( boneMatrices, i * 16 );\n\n\t\t\t}\n\n\t\t\tif ( boneTexture !== undefined ) {\n\n\t\t\t\tboneTexture.needsUpdate = true;\n\n\t\t\t}\n\n\t\t};\n\n\t} )(),\n\n\tclone: function () {\n\n\t\treturn new Skeleton( this.bones, this.boneInverses );\n\n\t},\n\n\tgetBoneByName: function ( name ) {\n\n\t\tfor ( var i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tvar bone = this.bones[ i ];\n\n\t\t\tif ( bone.name === name ) {\n\n\t\t\t\treturn bone;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn undefined;\n\n\t}\n\n} );\n\n/**\n * @author mikael emtinger / http://gomo.se/\n * @author alteredq / http://alteredqualia.com/\n * @author ikerr / http://verold.com\n */\n\nfunction Bone() {\n\n\tObject3D.call( this );\n\n\tthis.type = 'Bone';\n\n}\n\nBone.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Bone,\n\n\tisBone: true\n\n} );\n\n/**\n * @author mikael emtinger / http://gomo.se/\n * @author alteredq / http://alteredqualia.com/\n * @author ikerr / http://verold.com\n */\n\nfunction SkinnedMesh( geometry, material ) {\n\n\tMesh.call( this, geometry, material );\n\n\tthis.type = 'SkinnedMesh';\n\n\tthis.bindMode = 'attached';\n\tthis.bindMatrix = new Matrix4();\n\tthis.bindMatrixInverse = new Matrix4();\n\n\tvar bones = this.initBones();\n\tvar skeleton = new Skeleton( bones );\n\n\tthis.bind( skeleton, this.matrixWorld );\n\n\tthis.normalizeSkinWeights();\n\n}\n\nSkinnedMesh.prototype = Object.assign( Object.create( Mesh.prototype ), {\n\n\tconstructor: SkinnedMesh,\n\n\tisSkinnedMesh: true,\n\n\tinitBones: function () {\n\n\t\tvar bones = [], bone, gbone;\n\t\tvar i, il;\n\n\t\tif ( this.geometry && this.geometry.bones !== undefined ) {\n\n\t\t\t// first, create array of 'Bone' objects from geometry data\n\n\t\t\tfor ( i = 0, il = this.geometry.bones.length; i < il; i ++ ) {\n\n\t\t\t\tgbone = this.geometry.bones[ i ];\n\n\t\t\t\t// create new 'Bone' object\n\n\t\t\t\tbone = new Bone();\n\t\t\t\tbones.push( bone );\n\n\t\t\t\t// apply values\n\n\t\t\t\tbone.name = gbone.name;\n\t\t\t\tbone.position.fromArray( gbone.pos );\n\t\t\t\tbone.quaternion.fromArray( gbone.rotq );\n\t\t\t\tif ( gbone.scl !== undefined ) bone.scale.fromArray( gbone.scl );\n\n\t\t\t}\n\n\t\t\t// second, create bone hierarchy\n\n\t\t\tfor ( i = 0, il = this.geometry.bones.length; i < il; i ++ ) {\n\n\t\t\t\tgbone = this.geometry.bones[ i ];\n\n\t\t\t\tif ( ( gbone.parent !== - 1 ) && ( gbone.parent !== null ) && ( bones[ gbone.parent ] !== undefined ) ) {\n\n\t\t\t\t\t// subsequent bones in the hierarchy\n\n\t\t\t\t\tbones[ gbone.parent ].add( bones[ i ] );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// topmost bone, immediate child of the skinned mesh\n\n\t\t\t\t\tthis.add( bones[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// now the bones are part of the scene graph and children of the skinned mesh.\n\t\t// let's update the corresponding matrices\n\n\t\tthis.updateMatrixWorld( true );\n\n\t\treturn bones;\n\n\t},\n\n\tbind: function ( skeleton, bindMatrix ) {\n\n\t\tthis.skeleton = skeleton;\n\n\t\tif ( bindMatrix === undefined ) {\n\n\t\t\tthis.updateMatrixWorld( true );\n\n\t\t\tthis.skeleton.calculateInverses();\n\n\t\t\tbindMatrix = this.matrixWorld;\n\n\t\t}\n\n\t\tthis.bindMatrix.copy( bindMatrix );\n\t\tthis.bindMatrixInverse.getInverse( bindMatrix );\n\n\t},\n\n\tpose: function () {\n\n\t\tthis.skeleton.pose();\n\n\t},\n\n\tnormalizeSkinWeights: function () {\n\n\t\tvar scale, i;\n\n\t\tif ( this.geometry && this.geometry.isGeometry ) {\n\n\t\t\tfor ( i = 0; i < this.geometry.skinWeights.length; i ++ ) {\n\n\t\t\t\tvar sw = this.geometry.skinWeights[ i ];\n\n\t\t\t\tscale = 1.0 / sw.manhattanLength();\n\n\t\t\t\tif ( scale !== Infinity ) {\n\n\t\t\t\t\tsw.multiplyScalar( scale );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tsw.set( 1, 0, 0, 0 ); // do something reasonable\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else if ( this.geometry && this.geometry.isBufferGeometry ) {\n\n\t\t\tvar vec = new Vector4();\n\n\t\t\tvar skinWeight = this.geometry.attributes.skinWeight;\n\n\t\t\tfor ( i = 0; i < skinWeight.count; i ++ ) {\n\n\t\t\t\tvec.x = skinWeight.getX( i );\n\t\t\t\tvec.y = skinWeight.getY( i );\n\t\t\t\tvec.z = skinWeight.getZ( i );\n\t\t\t\tvec.w = skinWeight.getW( i );\n\n\t\t\t\tscale = 1.0 / vec.manhattanLength();\n\n\t\t\t\tif ( scale !== Infinity ) {\n\n\t\t\t\t\tvec.multiplyScalar( scale );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tvec.set( 1, 0, 0, 0 ); // do something reasonable\n\n\t\t\t\t}\n\n\t\t\t\tskinWeight.setXYZW( i, vec.x, vec.y, vec.z, vec.w );\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\tupdateMatrixWorld: function ( force ) {\n\n\t\tMesh.prototype.updateMatrixWorld.call( this, force );\n\n\t\tif ( this.bindMode === 'attached' ) {\n\n\t\t\tthis.bindMatrixInverse.getInverse( this.matrixWorld );\n\n\t\t} else if ( this.bindMode === 'detached' ) {\n\n\t\t\tthis.bindMatrixInverse.getInverse( this.bindMatrix );\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.SkinnedMesh: Unrecognized bindMode: ' + this.bindMode );\n\n\t\t}\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor( this.geometry, this.material ).copy( this );\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n *\n * parameters = {\n * color: ,\n * opacity: ,\n *\n * linewidth: ,\n * linecap: \"round\",\n * linejoin: \"round\"\n * }\n */\n\nfunction LineBasicMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'LineBasicMaterial';\n\n\tthis.color = new Color( 0xffffff );\n\n\tthis.linewidth = 1;\n\tthis.linecap = 'round';\n\tthis.linejoin = 'round';\n\n\tthis.lights = false;\n\n\tthis.setValues( parameters );\n\n}\n\nLineBasicMaterial.prototype = Object.create( Material.prototype );\nLineBasicMaterial.prototype.constructor = LineBasicMaterial;\n\nLineBasicMaterial.prototype.isLineBasicMaterial = true;\n\nLineBasicMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.color.copy( source.color );\n\n\tthis.linewidth = source.linewidth;\n\tthis.linecap = source.linecap;\n\tthis.linejoin = source.linejoin;\n\n\treturn this;\n\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction Line( geometry, material, mode ) {\n\n\tif ( mode === 1 ) {\n\n\t\tconsole.warn( 'THREE.Line: parameter THREE.LinePieces no longer supported. Created THREE.LineSegments instead.' );\n\t\treturn new LineSegments( geometry, material );\n\n\t}\n\n\tObject3D.call( this );\n\n\tthis.type = 'Line';\n\n\tthis.geometry = geometry !== undefined ? geometry : new BufferGeometry();\n\tthis.material = material !== undefined ? material : new LineBasicMaterial( { color: Math.random() * 0xffffff } );\n\n}\n\nLine.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Line,\n\n\tisLine: true,\n\n\tcomputeLineDistances: ( function () {\n\n\t\tvar start = new Vector3();\n\t\tvar end = new Vector3();\n\n\t\treturn function computeLineDistances() {\n\n\t\t\tvar geometry = this.geometry;\n\n\t\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\t\t// we assume non-indexed geometry\n\n\t\t\t\tif ( geometry.index === null ) {\n\n\t\t\t\t\tvar positionAttribute = geometry.attributes.position;\n\t\t\t\t\tvar lineDistances = [ 0 ];\n\n\t\t\t\t\tfor ( var i = 1, l = positionAttribute.count; i < l; i ++ ) {\n\n\t\t\t\t\t\tstart.fromBufferAttribute( positionAttribute, i - 1 );\n\t\t\t\t\t\tend.fromBufferAttribute( positionAttribute, i );\n\n\t\t\t\t\t\tlineDistances[ i ] = lineDistances[ i - 1 ];\n\t\t\t\t\t\tlineDistances[ i ] += start.distanceTo( end );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tgeometry.addAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' );\n\n\t\t\t\t}\n\n\t\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\t\tvar vertices = geometry.vertices;\n\t\t\t\tvar lineDistances = geometry.lineDistances;\n\n\t\t\t\tlineDistances[ 0 ] = 0;\n\n\t\t\t\tfor ( var i = 1, l = vertices.length; i < l; i ++ ) {\n\n\t\t\t\t\tlineDistances[ i ] = lineDistances[ i - 1 ];\n\t\t\t\t\tlineDistances[ i ] += vertices[ i - 1 ].distanceTo( vertices[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}() ),\n\n\traycast: ( function () {\n\n\t\tvar inverseMatrix = new Matrix4();\n\t\tvar ray = new Ray();\n\t\tvar sphere = new Sphere();\n\n\t\treturn function raycast( raycaster, intersects ) {\n\n\t\t\tvar precision = raycaster.linePrecision;\n\t\t\tvar precisionSq = precision * precision;\n\n\t\t\tvar geometry = this.geometry;\n\t\t\tvar matrixWorld = this.matrixWorld;\n\n\t\t\t// Checking boundingSphere distance to ray\n\n\t\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t\tsphere.copy( geometry.boundingSphere );\n\t\t\tsphere.applyMatrix4( matrixWorld );\n\n\t\t\tif ( raycaster.ray.intersectsSphere( sphere ) === false ) return;\n\n\t\t\t//\n\n\t\t\tinverseMatrix.getInverse( matrixWorld );\n\t\t\tray.copy( raycaster.ray ).applyMatrix4( inverseMatrix );\n\n\t\t\tvar vStart = new Vector3();\n\t\t\tvar vEnd = new Vector3();\n\t\t\tvar interSegment = new Vector3();\n\t\t\tvar interRay = new Vector3();\n\t\t\tvar step = ( this && this.isLineSegments ) ? 2 : 1;\n\n\t\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\t\tvar index = geometry.index;\n\t\t\t\tvar attributes = geometry.attributes;\n\t\t\t\tvar positions = attributes.position.array;\n\n\t\t\t\tif ( index !== null ) {\n\n\t\t\t\t\tvar indices = index.array;\n\n\t\t\t\t\tfor ( var i = 0, l = indices.length - 1; i < l; i += step ) {\n\n\t\t\t\t\t\tvar a = indices[ i ];\n\t\t\t\t\t\tvar b = indices[ i + 1 ];\n\n\t\t\t\t\t\tvStart.fromArray( positions, a * 3 );\n\t\t\t\t\t\tvEnd.fromArray( positions, b * 3 );\n\n\t\t\t\t\t\tvar distSq = ray.distanceSqToSegment( vStart, vEnd, interRay, interSegment );\n\n\t\t\t\t\t\tif ( distSq > precisionSq ) continue;\n\n\t\t\t\t\t\tinterRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation\n\n\t\t\t\t\t\tvar distance = raycaster.ray.origin.distanceTo( interRay );\n\n\t\t\t\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) continue;\n\n\t\t\t\t\t\tintersects.push( {\n\n\t\t\t\t\t\t\tdistance: distance,\n\t\t\t\t\t\t\t// What do we want? intersection point on the ray or on the segment??\n\t\t\t\t\t\t\t// point: raycaster.ray.at( distance ),\n\t\t\t\t\t\t\tpoint: interSegment.clone().applyMatrix4( this.matrixWorld ),\n\t\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\t\tface: null,\n\t\t\t\t\t\t\tfaceIndex: null,\n\t\t\t\t\t\t\tobject: this\n\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tfor ( var i = 0, l = positions.length / 3 - 1; i < l; i += step ) {\n\n\t\t\t\t\t\tvStart.fromArray( positions, 3 * i );\n\t\t\t\t\t\tvEnd.fromArray( positions, 3 * i + 3 );\n\n\t\t\t\t\t\tvar distSq = ray.distanceSqToSegment( vStart, vEnd, interRay, interSegment );\n\n\t\t\t\t\t\tif ( distSq > precisionSq ) continue;\n\n\t\t\t\t\t\tinterRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation\n\n\t\t\t\t\t\tvar distance = raycaster.ray.origin.distanceTo( interRay );\n\n\t\t\t\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) continue;\n\n\t\t\t\t\t\tintersects.push( {\n\n\t\t\t\t\t\t\tdistance: distance,\n\t\t\t\t\t\t\t// What do we want? intersection point on the ray or on the segment??\n\t\t\t\t\t\t\t// point: raycaster.ray.at( distance ),\n\t\t\t\t\t\t\tpoint: interSegment.clone().applyMatrix4( this.matrixWorld ),\n\t\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\t\tface: null,\n\t\t\t\t\t\t\tfaceIndex: null,\n\t\t\t\t\t\t\tobject: this\n\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\t\tvar vertices = geometry.vertices;\n\t\t\t\tvar nbVertices = vertices.length;\n\n\t\t\t\tfor ( var i = 0; i < nbVertices - 1; i += step ) {\n\n\t\t\t\t\tvar distSq = ray.distanceSqToSegment( vertices[ i ], vertices[ i + 1 ], interRay, interSegment );\n\n\t\t\t\t\tif ( distSq > precisionSq ) continue;\n\n\t\t\t\t\tinterRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation\n\n\t\t\t\t\tvar distance = raycaster.ray.origin.distanceTo( interRay );\n\n\t\t\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) continue;\n\n\t\t\t\t\tintersects.push( {\n\n\t\t\t\t\t\tdistance: distance,\n\t\t\t\t\t\t// What do we want? intersection point on the ray or on the segment??\n\t\t\t\t\t\t// point: raycaster.ray.at( distance ),\n\t\t\t\t\t\tpoint: interSegment.clone().applyMatrix4( this.matrixWorld ),\n\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\tface: null,\n\t\t\t\t\t\tfaceIndex: null,\n\t\t\t\t\t\tobject: this\n\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t}() ),\n\n\tclone: function () {\n\n\t\treturn new this.constructor( this.geometry, this.material ).copy( this );\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction LineSegments( geometry, material ) {\n\n\tLine.call( this, geometry, material );\n\n\tthis.type = 'LineSegments';\n\n}\n\nLineSegments.prototype = Object.assign( Object.create( Line.prototype ), {\n\n\tconstructor: LineSegments,\n\n\tisLineSegments: true,\n\n\tcomputeLineDistances: ( function () {\n\n\t\tvar start = new Vector3();\n\t\tvar end = new Vector3();\n\n\t\treturn function computeLineDistances() {\n\n\t\t\tvar geometry = this.geometry;\n\n\t\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\t\t// we assume non-indexed geometry\n\n\t\t\t\tif ( geometry.index === null ) {\n\n\t\t\t\t\tvar positionAttribute = geometry.attributes.position;\n\t\t\t\t\tvar lineDistances = [];\n\n\t\t\t\t\tfor ( var i = 0, l = positionAttribute.count; i < l; i += 2 ) {\n\n\t\t\t\t\t\tstart.fromBufferAttribute( positionAttribute, i );\n\t\t\t\t\t\tend.fromBufferAttribute( positionAttribute, i + 1 );\n\n\t\t\t\t\t\tlineDistances[ i ] = ( i === 0 ) ? 0 : lineDistances[ i - 1 ];\n\t\t\t\t\t\tlineDistances[ i + 1 ] = lineDistances[ i ] + start.distanceTo( end );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tgeometry.addAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' );\n\n\t\t\t\t}\n\n\t\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\t\tvar vertices = geometry.vertices;\n\t\t\t\tvar lineDistances = geometry.lineDistances;\n\n\t\t\t\tfor ( var i = 0, l = vertices.length; i < l; i += 2 ) {\n\n\t\t\t\t\tstart.copy( vertices[ i ] );\n\t\t\t\t\tend.copy( vertices[ i + 1 ] );\n\n\t\t\t\t\tlineDistances[ i ] = ( i === 0 ) ? 0 : lineDistances[ i - 1 ];\n\t\t\t\t\tlineDistances[ i + 1 ] = lineDistances[ i ] + start.distanceTo( end );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}() )\n\n} );\n\n/**\n * @author mgreter / http://github.com/mgreter\n */\n\nfunction LineLoop( geometry, material ) {\n\n\tLine.call( this, geometry, material );\n\n\tthis.type = 'LineLoop';\n\n}\n\nLineLoop.prototype = Object.assign( Object.create( Line.prototype ), {\n\n\tconstructor: LineLoop,\n\n\tisLineLoop: true,\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n *\n * parameters = {\n * color: ,\n * opacity: ,\n * map: new THREE.Texture( ),\n *\n * size: ,\n * sizeAttenuation: \n * }\n */\n\nfunction PointsMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'PointsMaterial';\n\n\tthis.color = new Color( 0xffffff );\n\n\tthis.map = null;\n\n\tthis.size = 1;\n\tthis.sizeAttenuation = true;\n\n\tthis.lights = false;\n\n\tthis.setValues( parameters );\n\n}\n\nPointsMaterial.prototype = Object.create( Material.prototype );\nPointsMaterial.prototype.constructor = PointsMaterial;\n\nPointsMaterial.prototype.isPointsMaterial = true;\n\nPointsMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.color.copy( source.color );\n\n\tthis.map = source.map;\n\n\tthis.size = source.size;\n\tthis.sizeAttenuation = source.sizeAttenuation;\n\n\treturn this;\n\n};\n\n/**\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction Points( geometry, material ) {\n\n\tObject3D.call( this );\n\n\tthis.type = 'Points';\n\n\tthis.geometry = geometry !== undefined ? geometry : new BufferGeometry();\n\tthis.material = material !== undefined ? material : new PointsMaterial( { color: Math.random() * 0xffffff } );\n\n}\n\nPoints.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Points,\n\n\tisPoints: true,\n\n\traycast: ( function () {\n\n\t\tvar inverseMatrix = new Matrix4();\n\t\tvar ray = new Ray();\n\t\tvar sphere = new Sphere();\n\n\t\treturn function raycast( raycaster, intersects ) {\n\n\t\t\tvar object = this;\n\t\t\tvar geometry = this.geometry;\n\t\t\tvar matrixWorld = this.matrixWorld;\n\t\t\tvar threshold = raycaster.params.Points.threshold;\n\n\t\t\t// Checking boundingSphere distance to ray\n\n\t\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t\tsphere.copy( geometry.boundingSphere );\n\t\t\tsphere.applyMatrix4( matrixWorld );\n\t\t\tsphere.radius += threshold;\n\n\t\t\tif ( raycaster.ray.intersectsSphere( sphere ) === false ) return;\n\n\t\t\t//\n\n\t\t\tinverseMatrix.getInverse( matrixWorld );\n\t\t\tray.copy( raycaster.ray ).applyMatrix4( inverseMatrix );\n\n\t\t\tvar localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 );\n\t\t\tvar localThresholdSq = localThreshold * localThreshold;\n\t\t\tvar position = new Vector3();\n\t\t\tvar intersectPoint = new Vector3();\n\n\t\t\tfunction testPoint( point, index ) {\n\n\t\t\t\tvar rayPointDistanceSq = ray.distanceSqToPoint( point );\n\n\t\t\t\tif ( rayPointDistanceSq < localThresholdSq ) {\n\n\t\t\t\t\tray.closestPointToPoint( point, intersectPoint );\n\t\t\t\t\tintersectPoint.applyMatrix4( matrixWorld );\n\n\t\t\t\t\tvar distance = raycaster.ray.origin.distanceTo( intersectPoint );\n\n\t\t\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) return;\n\n\t\t\t\t\tintersects.push( {\n\n\t\t\t\t\t\tdistance: distance,\n\t\t\t\t\t\tdistanceToRay: Math.sqrt( rayPointDistanceSq ),\n\t\t\t\t\t\tpoint: intersectPoint.clone(),\n\t\t\t\t\t\tindex: index,\n\t\t\t\t\t\tface: null,\n\t\t\t\t\t\tobject: object\n\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\t\tvar index = geometry.index;\n\t\t\t\tvar attributes = geometry.attributes;\n\t\t\t\tvar positions = attributes.position.array;\n\n\t\t\t\tif ( index !== null ) {\n\n\t\t\t\t\tvar indices = index.array;\n\n\t\t\t\t\tfor ( var i = 0, il = indices.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tvar a = indices[ i ];\n\n\t\t\t\t\t\tposition.fromArray( positions, a * 3 );\n\n\t\t\t\t\t\ttestPoint( position, a );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tfor ( var i = 0, l = positions.length / 3; i < l; i ++ ) {\n\n\t\t\t\t\t\tposition.fromArray( positions, i * 3 );\n\n\t\t\t\t\t\ttestPoint( position, i );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tvar vertices = geometry.vertices;\n\n\t\t\t\tfor ( var i = 0, l = vertices.length; i < l; i ++ ) {\n\n\t\t\t\t\ttestPoint( vertices[ i ], i );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t}() ),\n\n\tclone: function () {\n\n\t\treturn new this.constructor( this.geometry, this.material ).copy( this );\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction Group() {\n\n\tObject3D.call( this );\n\n\tthis.type = 'Group';\n\n}\n\nGroup.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Group,\n\n\tisGroup: true\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction VideoTexture( video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) {\n\n\tTexture.call( this, video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\n\n\tthis.generateMipmaps = false;\n\n}\n\nVideoTexture.prototype = Object.assign( Object.create( Texture.prototype ), {\n\n\tconstructor: VideoTexture,\n\n\tisVideoTexture: true,\n\n\tupdate: function () {\n\n\t\tvar video = this.image;\n\n\t\tif ( video.readyState >= video.HAVE_CURRENT_DATA ) {\n\n\t\t\tthis.needsUpdate = true;\n\n\t\t}\n\n\t}\n\n} );\n\n/**\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction CompressedTexture( mipmaps, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, encoding ) {\n\n\tTexture.call( this, null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding );\n\n\tthis.image = { width: width, height: height };\n\tthis.mipmaps = mipmaps;\n\n\t// no flipping for cube textures\n\t// (also flipping doesn't work for compressed textures )\n\n\tthis.flipY = false;\n\n\t// can't generate mipmaps for compressed textures\n\t// mips must be embedded in DDS files\n\n\tthis.generateMipmaps = false;\n\n}\n\nCompressedTexture.prototype = Object.create( Texture.prototype );\nCompressedTexture.prototype.constructor = CompressedTexture;\n\nCompressedTexture.prototype.isCompressedTexture = true;\n\n/**\n * @author Matt DesLauriers / @mattdesl\n * @author atix / arthursilber.de\n */\n\nfunction DepthTexture( width, height, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, format ) {\n\n\tformat = format !== undefined ? format : DepthFormat;\n\n\tif ( format !== DepthFormat && format !== DepthStencilFormat ) {\n\n\t\tthrow new Error( 'DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat' );\n\n\t}\n\n\tif ( type === undefined && format === DepthFormat ) type = UnsignedShortType;\n\tif ( type === undefined && format === DepthStencilFormat ) type = UnsignedInt248Type;\n\n\tTexture.call( this, null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\n\n\tthis.image = { width: width, height: height };\n\n\tthis.magFilter = magFilter !== undefined ? magFilter : NearestFilter;\n\tthis.minFilter = minFilter !== undefined ? minFilter : NearestFilter;\n\n\tthis.flipY = false;\n\tthis.generateMipmaps\t= false;\n\n}\n\nDepthTexture.prototype = Object.create( Texture.prototype );\nDepthTexture.prototype.constructor = DepthTexture;\nDepthTexture.prototype.isDepthTexture = true;\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author Mugen87 / https://github.com/Mugen87\n */\n\nfunction WireframeGeometry( geometry ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'WireframeGeometry';\n\n\t// buffer\n\n\tvar vertices = [];\n\n\t// helper variables\n\n\tvar i, j, l, o, ol;\n\tvar edge = [ 0, 0 ], edges = {}, e, edge1, edge2;\n\tvar key, keys = [ 'a', 'b', 'c' ];\n\tvar vertex;\n\n\t// different logic for Geometry and BufferGeometry\n\n\tif ( geometry && geometry.isGeometry ) {\n\n\t\t// create a data structure that contains all edges without duplicates\n\n\t\tvar faces = geometry.faces;\n\n\t\tfor ( i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\t\tvar face = faces[ i ];\n\n\t\t\tfor ( j = 0; j < 3; j ++ ) {\n\n\t\t\t\tedge1 = face[ keys[ j ] ];\n\t\t\t\tedge2 = face[ keys[ ( j + 1 ) % 3 ] ];\n\t\t\t\tedge[ 0 ] = Math.min( edge1, edge2 ); // sorting prevents duplicates\n\t\t\t\tedge[ 1 ] = Math.max( edge1, edge2 );\n\n\t\t\t\tkey = edge[ 0 ] + ',' + edge[ 1 ];\n\n\t\t\t\tif ( edges[ key ] === undefined ) {\n\n\t\t\t\t\tedges[ key ] = { index1: edge[ 0 ], index2: edge[ 1 ] };\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// generate vertices\n\n\t\tfor ( key in edges ) {\n\n\t\t\te = edges[ key ];\n\n\t\t\tvertex = geometry.vertices[ e.index1 ];\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\tvertex = geometry.vertices[ e.index2 ];\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t}\n\n\t} else if ( geometry && geometry.isBufferGeometry ) {\n\n\t\tvar position, indices, groups;\n\t\tvar group, start, count;\n\t\tvar index1, index2;\n\n\t\tvertex = new Vector3();\n\n\t\tif ( geometry.index !== null ) {\n\n\t\t\t// indexed BufferGeometry\n\n\t\t\tposition = geometry.attributes.position;\n\t\t\tindices = geometry.index;\n\t\t\tgroups = geometry.groups;\n\n\t\t\tif ( groups.length === 0 ) {\n\n\t\t\t\tgroups = [ { start: 0, count: indices.count, materialIndex: 0 } ];\n\n\t\t\t}\n\n\t\t\t// create a data structure that contains all eges without duplicates\n\n\t\t\tfor ( o = 0, ol = groups.length; o < ol; ++ o ) {\n\n\t\t\t\tgroup = groups[ o ];\n\n\t\t\t\tstart = group.start;\n\t\t\t\tcount = group.count;\n\n\t\t\t\tfor ( i = start, l = ( start + count ); i < l; i += 3 ) {\n\n\t\t\t\t\tfor ( j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\t\tedge1 = indices.getX( i + j );\n\t\t\t\t\t\tedge2 = indices.getX( i + ( j + 1 ) % 3 );\n\t\t\t\t\t\tedge[ 0 ] = Math.min( edge1, edge2 ); // sorting prevents duplicates\n\t\t\t\t\t\tedge[ 1 ] = Math.max( edge1, edge2 );\n\n\t\t\t\t\t\tkey = edge[ 0 ] + ',' + edge[ 1 ];\n\n\t\t\t\t\t\tif ( edges[ key ] === undefined ) {\n\n\t\t\t\t\t\t\tedges[ key ] = { index1: edge[ 0 ], index2: edge[ 1 ] };\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// generate vertices\n\n\t\t\tfor ( key in edges ) {\n\n\t\t\t\te = edges[ key ];\n\n\t\t\t\tvertex.fromBufferAttribute( position, e.index1 );\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\tvertex.fromBufferAttribute( position, e.index2 );\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// non-indexed BufferGeometry\n\n\t\t\tposition = geometry.attributes.position;\n\n\t\t\tfor ( i = 0, l = ( position.count / 3 ); i < l; i ++ ) {\n\n\t\t\t\tfor ( j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\t// three edges per triangle, an edge is represented as (index1, index2)\n\t\t\t\t\t// e.g. the first triangle has the following edges: (0,1),(1,2),(2,0)\n\n\t\t\t\t\tindex1 = 3 * i + j;\n\t\t\t\t\tvertex.fromBufferAttribute( position, index1 );\n\t\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t\tindex2 = 3 * i + ( ( j + 1 ) % 3 );\n\t\t\t\t\tvertex.fromBufferAttribute( position, index2 );\n\t\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t// build geometry\n\n\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\n}\n\nWireframeGeometry.prototype = Object.create( BufferGeometry.prototype );\nWireframeGeometry.prototype.constructor = WireframeGeometry;\n\n/**\n * @author zz85 / https://github.com/zz85\n * @author Mugen87 / https://github.com/Mugen87\n *\n * Parametric Surfaces Geometry\n * based on the brilliant article by @prideout http://prideout.net/blog/?p=44\n */\n\n// ParametricGeometry\n\nfunction ParametricGeometry( func, slices, stacks ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'ParametricGeometry';\n\n\tthis.parameters = {\n\t\tfunc: func,\n\t\tslices: slices,\n\t\tstacks: stacks\n\t};\n\n\tthis.fromBufferGeometry( new ParametricBufferGeometry( func, slices, stacks ) );\n\tthis.mergeVertices();\n\n}\n\nParametricGeometry.prototype = Object.create( Geometry.prototype );\nParametricGeometry.prototype.constructor = ParametricGeometry;\n\n// ParametricBufferGeometry\n\nfunction ParametricBufferGeometry( func, slices, stacks ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'ParametricBufferGeometry';\n\n\tthis.parameters = {\n\t\tfunc: func,\n\t\tslices: slices,\n\t\tstacks: stacks\n\t};\n\n\t// buffers\n\n\tvar indices = [];\n\tvar vertices = [];\n\tvar normals = [];\n\tvar uvs = [];\n\n\tvar EPS = 0.00001;\n\n\tvar normal = new Vector3();\n\n\tvar p0 = new Vector3(), p1 = new Vector3();\n\tvar pu = new Vector3(), pv = new Vector3();\n\n\tvar i, j;\n\n\t// generate vertices, normals and uvs\n\n\tvar sliceCount = slices + 1;\n\n\tfor ( i = 0; i <= stacks; i ++ ) {\n\n\t\tvar v = i / stacks;\n\n\t\tfor ( j = 0; j <= slices; j ++ ) {\n\n\t\t\tvar u = j / slices;\n\n\t\t\t// vertex\n\n\t\t\tfunc( u, v, p0 );\n\t\t\tvertices.push( p0.x, p0.y, p0.z );\n\n\t\t\t// normal\n\n\t\t\t// approximate tangent vectors via finite differences\n\n\t\t\tif ( u - EPS >= 0 ) {\n\n\t\t\t\tfunc( u - EPS, v, p1 );\n\t\t\t\tpu.subVectors( p0, p1 );\n\n\t\t\t} else {\n\n\t\t\t\tfunc( u + EPS, v, p1 );\n\t\t\t\tpu.subVectors( p1, p0 );\n\n\t\t\t}\n\n\t\t\tif ( v - EPS >= 0 ) {\n\n\t\t\t\tfunc( u, v - EPS, p1 );\n\t\t\t\tpv.subVectors( p0, p1 );\n\n\t\t\t} else {\n\n\t\t\t\tfunc( u, v + EPS, p1 );\n\t\t\t\tpv.subVectors( p1, p0 );\n\n\t\t\t}\n\n\t\t\t// cross product of tangent vectors returns surface normal\n\n\t\t\tnormal.crossVectors( pu, pv ).normalize();\n\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t// uv\n\n\t\t\tuvs.push( u, v );\n\n\t\t}\n\n\t}\n\n\t// generate indices\n\n\tfor ( i = 0; i < stacks; i ++ ) {\n\n\t\tfor ( j = 0; j < slices; j ++ ) {\n\n\t\t\tvar a = i * sliceCount + j;\n\t\t\tvar b = i * sliceCount + j + 1;\n\t\t\tvar c = ( i + 1 ) * sliceCount + j + 1;\n\t\t\tvar d = ( i + 1 ) * sliceCount + j;\n\n\t\t\t// faces one and two\n\n\t\t\tindices.push( a, b, d );\n\t\t\tindices.push( b, c, d );\n\n\t\t}\n\n\t}\n\n\t// build geometry\n\n\tthis.setIndex( indices );\n\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n}\n\nParametricBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nParametricBufferGeometry.prototype.constructor = ParametricBufferGeometry;\n\n/**\n * @author clockworkgeek / https://github.com/clockworkgeek\n * @author timothypratley / https://github.com/timothypratley\n * @author WestLangley / http://github.com/WestLangley\n * @author Mugen87 / https://github.com/Mugen87\n */\n\n// PolyhedronGeometry\n\nfunction PolyhedronGeometry( vertices, indices, radius, detail ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'PolyhedronGeometry';\n\n\tthis.parameters = {\n\t\tvertices: vertices,\n\t\tindices: indices,\n\t\tradius: radius,\n\t\tdetail: detail\n\t};\n\n\tthis.fromBufferGeometry( new PolyhedronBufferGeometry( vertices, indices, radius, detail ) );\n\tthis.mergeVertices();\n\n}\n\nPolyhedronGeometry.prototype = Object.create( Geometry.prototype );\nPolyhedronGeometry.prototype.constructor = PolyhedronGeometry;\n\n// PolyhedronBufferGeometry\n\nfunction PolyhedronBufferGeometry( vertices, indices, radius, detail ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'PolyhedronBufferGeometry';\n\n\tthis.parameters = {\n\t\tvertices: vertices,\n\t\tindices: indices,\n\t\tradius: radius,\n\t\tdetail: detail\n\t};\n\n\tradius = radius || 1;\n\tdetail = detail || 0;\n\n\t// default buffer data\n\n\tvar vertexBuffer = [];\n\tvar uvBuffer = [];\n\n\t// the subdivision creates the vertex buffer data\n\n\tsubdivide( detail );\n\n\t// all vertices should lie on a conceptual sphere with a given radius\n\n\tappplyRadius( radius );\n\n\t// finally, create the uv data\n\n\tgenerateUVs();\n\n\t// build non-indexed geometry\n\n\tthis.addAttribute( 'position', new Float32BufferAttribute( vertexBuffer, 3 ) );\n\tthis.addAttribute( 'normal', new Float32BufferAttribute( vertexBuffer.slice(), 3 ) );\n\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvBuffer, 2 ) );\n\n\tif ( detail === 0 ) {\n\n\t\tthis.computeVertexNormals(); // flat normals\n\n\t} else {\n\n\t\tthis.normalizeNormals(); // smooth normals\n\n\t}\n\n\t// helper functions\n\n\tfunction subdivide( detail ) {\n\n\t\tvar a = new Vector3();\n\t\tvar b = new Vector3();\n\t\tvar c = new Vector3();\n\n\t\t// iterate over all faces and apply a subdivison with the given detail value\n\n\t\tfor ( var i = 0; i < indices.length; i += 3 ) {\n\n\t\t\t// get the vertices of the face\n\n\t\t\tgetVertexByIndex( indices[ i + 0 ], a );\n\t\t\tgetVertexByIndex( indices[ i + 1 ], b );\n\t\t\tgetVertexByIndex( indices[ i + 2 ], c );\n\n\t\t\t// perform subdivision\n\n\t\t\tsubdivideFace( a, b, c, detail );\n\n\t\t}\n\n\t}\n\n\tfunction subdivideFace( a, b, c, detail ) {\n\n\t\tvar cols = Math.pow( 2, detail );\n\n\t\t// we use this multidimensional array as a data structure for creating the subdivision\n\n\t\tvar v = [];\n\n\t\tvar i, j;\n\n\t\t// construct all of the vertices for this subdivision\n\n\t\tfor ( i = 0; i <= cols; i ++ ) {\n\n\t\t\tv[ i ] = [];\n\n\t\t\tvar aj = a.clone().lerp( c, i / cols );\n\t\t\tvar bj = b.clone().lerp( c, i / cols );\n\n\t\t\tvar rows = cols - i;\n\n\t\t\tfor ( j = 0; j <= rows; j ++ ) {\n\n\t\t\t\tif ( j === 0 && i === cols ) {\n\n\t\t\t\t\tv[ i ][ j ] = aj;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tv[ i ][ j ] = aj.clone().lerp( bj, j / rows );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// construct all of the faces\n\n\t\tfor ( i = 0; i < cols; i ++ ) {\n\n\t\t\tfor ( j = 0; j < 2 * ( cols - i ) - 1; j ++ ) {\n\n\t\t\t\tvar k = Math.floor( j / 2 );\n\n\t\t\t\tif ( j % 2 === 0 ) {\n\n\t\t\t\t\tpushVertex( v[ i ][ k + 1 ] );\n\t\t\t\t\tpushVertex( v[ i + 1 ][ k ] );\n\t\t\t\t\tpushVertex( v[ i ][ k ] );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tpushVertex( v[ i ][ k + 1 ] );\n\t\t\t\t\tpushVertex( v[ i + 1 ][ k + 1 ] );\n\t\t\t\t\tpushVertex( v[ i + 1 ][ k ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction appplyRadius( radius ) {\n\n\t\tvar vertex = new Vector3();\n\n\t\t// iterate over the entire buffer and apply the radius to each vertex\n\n\t\tfor ( var i = 0; i < vertexBuffer.length; i += 3 ) {\n\n\t\t\tvertex.x = vertexBuffer[ i + 0 ];\n\t\t\tvertex.y = vertexBuffer[ i + 1 ];\n\t\t\tvertex.z = vertexBuffer[ i + 2 ];\n\n\t\t\tvertex.normalize().multiplyScalar( radius );\n\n\t\t\tvertexBuffer[ i + 0 ] = vertex.x;\n\t\t\tvertexBuffer[ i + 1 ] = vertex.y;\n\t\t\tvertexBuffer[ i + 2 ] = vertex.z;\n\n\t\t}\n\n\t}\n\n\tfunction generateUVs() {\n\n\t\tvar vertex = new Vector3();\n\n\t\tfor ( var i = 0; i < vertexBuffer.length; i += 3 ) {\n\n\t\t\tvertex.x = vertexBuffer[ i + 0 ];\n\t\t\tvertex.y = vertexBuffer[ i + 1 ];\n\t\t\tvertex.z = vertexBuffer[ i + 2 ];\n\n\t\t\tvar u = azimuth( vertex ) / 2 / Math.PI + 0.5;\n\t\t\tvar v = inclination( vertex ) / Math.PI + 0.5;\n\t\t\tuvBuffer.push( u, 1 - v );\n\n\t\t}\n\n\t\tcorrectUVs();\n\n\t\tcorrectSeam();\n\n\t}\n\n\tfunction correctSeam() {\n\n\t\t// handle case when face straddles the seam, see #3269\n\n\t\tfor ( var i = 0; i < uvBuffer.length; i += 6 ) {\n\n\t\t\t// uv data of a single face\n\n\t\t\tvar x0 = uvBuffer[ i + 0 ];\n\t\t\tvar x1 = uvBuffer[ i + 2 ];\n\t\t\tvar x2 = uvBuffer[ i + 4 ];\n\n\t\t\tvar max = Math.max( x0, x1, x2 );\n\t\t\tvar min = Math.min( x0, x1, x2 );\n\n\t\t\t// 0.9 is somewhat arbitrary\n\n\t\t\tif ( max > 0.9 && min < 0.1 ) {\n\n\t\t\t\tif ( x0 < 0.2 ) uvBuffer[ i + 0 ] += 1;\n\t\t\t\tif ( x1 < 0.2 ) uvBuffer[ i + 2 ] += 1;\n\t\t\t\tif ( x2 < 0.2 ) uvBuffer[ i + 4 ] += 1;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction pushVertex( vertex ) {\n\n\t\tvertexBuffer.push( vertex.x, vertex.y, vertex.z );\n\n\t}\n\n\tfunction getVertexByIndex( index, vertex ) {\n\n\t\tvar stride = index * 3;\n\n\t\tvertex.x = vertices[ stride + 0 ];\n\t\tvertex.y = vertices[ stride + 1 ];\n\t\tvertex.z = vertices[ stride + 2 ];\n\n\t}\n\n\tfunction correctUVs() {\n\n\t\tvar a = new Vector3();\n\t\tvar b = new Vector3();\n\t\tvar c = new Vector3();\n\n\t\tvar centroid = new Vector3();\n\n\t\tvar uvA = new Vector2();\n\t\tvar uvB = new Vector2();\n\t\tvar uvC = new Vector2();\n\n\t\tfor ( var i = 0, j = 0; i < vertexBuffer.length; i += 9, j += 6 ) {\n\n\t\t\ta.set( vertexBuffer[ i + 0 ], vertexBuffer[ i + 1 ], vertexBuffer[ i + 2 ] );\n\t\t\tb.set( vertexBuffer[ i + 3 ], vertexBuffer[ i + 4 ], vertexBuffer[ i + 5 ] );\n\t\t\tc.set( vertexBuffer[ i + 6 ], vertexBuffer[ i + 7 ], vertexBuffer[ i + 8 ] );\n\n\t\t\tuvA.set( uvBuffer[ j + 0 ], uvBuffer[ j + 1 ] );\n\t\t\tuvB.set( uvBuffer[ j + 2 ], uvBuffer[ j + 3 ] );\n\t\t\tuvC.set( uvBuffer[ j + 4 ], uvBuffer[ j + 5 ] );\n\n\t\t\tcentroid.copy( a ).add( b ).add( c ).divideScalar( 3 );\n\n\t\t\tvar azi = azimuth( centroid );\n\n\t\t\tcorrectUV( uvA, j + 0, a, azi );\n\t\t\tcorrectUV( uvB, j + 2, b, azi );\n\t\t\tcorrectUV( uvC, j + 4, c, azi );\n\n\t\t}\n\n\t}\n\n\tfunction correctUV( uv, stride, vector, azimuth ) {\n\n\t\tif ( ( azimuth < 0 ) && ( uv.x === 1 ) ) {\n\n\t\t\tuvBuffer[ stride ] = uv.x - 1;\n\n\t\t}\n\n\t\tif ( ( vector.x === 0 ) && ( vector.z === 0 ) ) {\n\n\t\t\tuvBuffer[ stride ] = azimuth / 2 / Math.PI + 0.5;\n\n\t\t}\n\n\t}\n\n\t// Angle around the Y axis, counter-clockwise when looking from above.\n\n\tfunction azimuth( vector ) {\n\n\t\treturn Math.atan2( vector.z, - vector.x );\n\n\t}\n\n\n\t// Angle above the XZ plane.\n\n\tfunction inclination( vector ) {\n\n\t\treturn Math.atan2( - vector.y, Math.sqrt( ( vector.x * vector.x ) + ( vector.z * vector.z ) ) );\n\n\t}\n\n}\n\nPolyhedronBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nPolyhedronBufferGeometry.prototype.constructor = PolyhedronBufferGeometry;\n\n/**\n * @author timothypratley / https://github.com/timothypratley\n * @author Mugen87 / https://github.com/Mugen87\n */\n\n// TetrahedronGeometry\n\nfunction TetrahedronGeometry( radius, detail ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'TetrahedronGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\tdetail: detail\n\t};\n\n\tthis.fromBufferGeometry( new TetrahedronBufferGeometry( radius, detail ) );\n\tthis.mergeVertices();\n\n}\n\nTetrahedronGeometry.prototype = Object.create( Geometry.prototype );\nTetrahedronGeometry.prototype.constructor = TetrahedronGeometry;\n\n// TetrahedronBufferGeometry\n\nfunction TetrahedronBufferGeometry( radius, detail ) {\n\n\tvar vertices = [\n\t\t1, 1, 1, \t- 1, - 1, 1, \t- 1, 1, - 1, \t1, - 1, - 1\n\t];\n\n\tvar indices = [\n\t\t2, 1, 0, \t0, 3, 2,\t1, 3, 0,\t2, 3, 1\n\t];\n\n\tPolyhedronBufferGeometry.call( this, vertices, indices, radius, detail );\n\n\tthis.type = 'TetrahedronBufferGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\tdetail: detail\n\t};\n\n}\n\nTetrahedronBufferGeometry.prototype = Object.create( PolyhedronBufferGeometry.prototype );\nTetrahedronBufferGeometry.prototype.constructor = TetrahedronBufferGeometry;\n\n/**\n * @author timothypratley / https://github.com/timothypratley\n * @author Mugen87 / https://github.com/Mugen87\n */\n\n// OctahedronGeometry\n\nfunction OctahedronGeometry( radius, detail ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'OctahedronGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\tdetail: detail\n\t};\n\n\tthis.fromBufferGeometry( new OctahedronBufferGeometry( radius, detail ) );\n\tthis.mergeVertices();\n\n}\n\nOctahedronGeometry.prototype = Object.create( Geometry.prototype );\nOctahedronGeometry.prototype.constructor = OctahedronGeometry;\n\n// OctahedronBufferGeometry\n\nfunction OctahedronBufferGeometry( radius, detail ) {\n\n\tvar vertices = [\n\t\t1, 0, 0, \t- 1, 0, 0,\t0, 1, 0,\n\t\t0, - 1, 0, \t0, 0, 1,\t0, 0, - 1\n\t];\n\n\tvar indices = [\n\t\t0, 2, 4,\t0, 4, 3,\t0, 3, 5,\n\t\t0, 5, 2,\t1, 2, 5,\t1, 5, 3,\n\t\t1, 3, 4,\t1, 4, 2\n\t];\n\n\tPolyhedronBufferGeometry.call( this, vertices, indices, radius, detail );\n\n\tthis.type = 'OctahedronBufferGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\tdetail: detail\n\t};\n\n}\n\nOctahedronBufferGeometry.prototype = Object.create( PolyhedronBufferGeometry.prototype );\nOctahedronBufferGeometry.prototype.constructor = OctahedronBufferGeometry;\n\n/**\n * @author timothypratley / https://github.com/timothypratley\n * @author Mugen87 / https://github.com/Mugen87\n */\n\n// IcosahedronGeometry\n\nfunction IcosahedronGeometry( radius, detail ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'IcosahedronGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\tdetail: detail\n\t};\n\n\tthis.fromBufferGeometry( new IcosahedronBufferGeometry( radius, detail ) );\n\tthis.mergeVertices();\n\n}\n\nIcosahedronGeometry.prototype = Object.create( Geometry.prototype );\nIcosahedronGeometry.prototype.constructor = IcosahedronGeometry;\n\n// IcosahedronBufferGeometry\n\nfunction IcosahedronBufferGeometry( radius, detail ) {\n\n\tvar t = ( 1 + Math.sqrt( 5 ) ) / 2;\n\n\tvar vertices = [\n\t\t- 1, t, 0, \t1, t, 0, \t- 1, - t, 0, \t1, - t, 0,\n\t\t 0, - 1, t, \t0, 1, t,\t0, - 1, - t, \t0, 1, - t,\n\t\t t, 0, - 1, \tt, 0, 1, \t- t, 0, - 1, \t- t, 0, 1\n\t];\n\n\tvar indices = [\n\t\t 0, 11, 5, \t0, 5, 1, \t0, 1, 7, \t0, 7, 10, \t0, 10, 11,\n\t\t 1, 5, 9, \t5, 11, 4,\t11, 10, 2,\t10, 7, 6,\t7, 1, 8,\n\t\t 3, 9, 4, \t3, 4, 2,\t3, 2, 6,\t3, 6, 8,\t3, 8, 9,\n\t\t 4, 9, 5, \t2, 4, 11,\t6, 2, 10,\t8, 6, 7,\t9, 8, 1\n\t];\n\n\tPolyhedronBufferGeometry.call( this, vertices, indices, radius, detail );\n\n\tthis.type = 'IcosahedronBufferGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\tdetail: detail\n\t};\n\n}\n\nIcosahedronBufferGeometry.prototype = Object.create( PolyhedronBufferGeometry.prototype );\nIcosahedronBufferGeometry.prototype.constructor = IcosahedronBufferGeometry;\n\n/**\n * @author Abe Pazos / https://hamoid.com\n * @author Mugen87 / https://github.com/Mugen87\n */\n\n// DodecahedronGeometry\n\nfunction DodecahedronGeometry( radius, detail ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'DodecahedronGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\tdetail: detail\n\t};\n\n\tthis.fromBufferGeometry( new DodecahedronBufferGeometry( radius, detail ) );\n\tthis.mergeVertices();\n\n}\n\nDodecahedronGeometry.prototype = Object.create( Geometry.prototype );\nDodecahedronGeometry.prototype.constructor = DodecahedronGeometry;\n\n// DodecahedronBufferGeometry\n\nfunction DodecahedronBufferGeometry( radius, detail ) {\n\n\tvar t = ( 1 + Math.sqrt( 5 ) ) / 2;\n\tvar r = 1 / t;\n\n\tvar vertices = [\n\n\t\t// (±1, ±1, ±1)\n\t\t- 1, - 1, - 1,\t- 1, - 1, 1,\n\t\t- 1, 1, - 1, - 1, 1, 1,\n\t\t1, - 1, - 1, 1, - 1, 1,\n\t\t1, 1, - 1, 1, 1, 1,\n\n\t\t// (0, ±1/φ, ±φ)\n\t\t 0, - r, - t, 0, - r, t,\n\t\t 0, r, - t, 0, r, t,\n\n\t\t// (±1/φ, ±φ, 0)\n\t\t- r, - t, 0, - r, t, 0,\n\t\t r, - t, 0, r, t, 0,\n\n\t\t// (±φ, 0, ±1/φ)\n\t\t- t, 0, - r, t, 0, - r,\n\t\t- t, 0, r, t, 0, r\n\t];\n\n\tvar indices = [\n\t\t3, 11, 7, \t3, 7, 15, \t3, 15, 13,\n\t\t7, 19, 17, \t7, 17, 6, \t7, 6, 15,\n\t\t17, 4, 8, \t17, 8, 10, \t17, 10, 6,\n\t\t8, 0, 16, \t8, 16, 2, \t8, 2, 10,\n\t\t0, 12, 1, \t0, 1, 18, \t0, 18, 16,\n\t\t6, 10, 2, \t6, 2, 13, \t6, 13, 15,\n\t\t2, 16, 18, \t2, 18, 3, \t2, 3, 13,\n\t\t18, 1, 9, \t18, 9, 11, \t18, 11, 3,\n\t\t4, 14, 12, \t4, 12, 0, \t4, 0, 8,\n\t\t11, 9, 5, \t11, 5, 19, \t11, 19, 7,\n\t\t19, 5, 14, \t19, 14, 4, \t19, 4, 17,\n\t\t1, 12, 14, \t1, 14, 5, \t1, 5, 9\n\t];\n\n\tPolyhedronBufferGeometry.call( this, vertices, indices, radius, detail );\n\n\tthis.type = 'DodecahedronBufferGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\tdetail: detail\n\t};\n\n}\n\nDodecahedronBufferGeometry.prototype = Object.create( PolyhedronBufferGeometry.prototype );\nDodecahedronBufferGeometry.prototype.constructor = DodecahedronBufferGeometry;\n\n/**\n * @author oosmoxiecode / https://github.com/oosmoxiecode\n * @author WestLangley / https://github.com/WestLangley\n * @author zz85 / https://github.com/zz85\n * @author miningold / https://github.com/miningold\n * @author jonobr1 / https://github.com/jonobr1\n * @author Mugen87 / https://github.com/Mugen87\n *\n */\n\n// TubeGeometry\n\nfunction TubeGeometry( path, tubularSegments, radius, radialSegments, closed, taper ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'TubeGeometry';\n\n\tthis.parameters = {\n\t\tpath: path,\n\t\ttubularSegments: tubularSegments,\n\t\tradius: radius,\n\t\tradialSegments: radialSegments,\n\t\tclosed: closed\n\t};\n\n\tif ( taper !== undefined ) console.warn( 'THREE.TubeGeometry: taper has been removed.' );\n\n\tvar bufferGeometry = new TubeBufferGeometry( path, tubularSegments, radius, radialSegments, closed );\n\n\t// expose internals\n\n\tthis.tangents = bufferGeometry.tangents;\n\tthis.normals = bufferGeometry.normals;\n\tthis.binormals = bufferGeometry.binormals;\n\n\t// create geometry\n\n\tthis.fromBufferGeometry( bufferGeometry );\n\tthis.mergeVertices();\n\n}\n\nTubeGeometry.prototype = Object.create( Geometry.prototype );\nTubeGeometry.prototype.constructor = TubeGeometry;\n\n// TubeBufferGeometry\n\nfunction TubeBufferGeometry( path, tubularSegments, radius, radialSegments, closed ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'TubeBufferGeometry';\n\n\tthis.parameters = {\n\t\tpath: path,\n\t\ttubularSegments: tubularSegments,\n\t\tradius: radius,\n\t\tradialSegments: radialSegments,\n\t\tclosed: closed\n\t};\n\n\ttubularSegments = tubularSegments || 64;\n\tradius = radius || 1;\n\tradialSegments = radialSegments || 8;\n\tclosed = closed || false;\n\n\tvar frames = path.computeFrenetFrames( tubularSegments, closed );\n\n\t// expose internals\n\n\tthis.tangents = frames.tangents;\n\tthis.normals = frames.normals;\n\tthis.binormals = frames.binormals;\n\n\t// helper variables\n\n\tvar vertex = new Vector3();\n\tvar normal = new Vector3();\n\tvar uv = new Vector2();\n\tvar P = new Vector3();\n\n\tvar i, j;\n\n\t// buffer\n\n\tvar vertices = [];\n\tvar normals = [];\n\tvar uvs = [];\n\tvar indices = [];\n\n\t// create buffer data\n\n\tgenerateBufferData();\n\n\t// build geometry\n\n\tthis.setIndex( indices );\n\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t// functions\n\n\tfunction generateBufferData() {\n\n\t\tfor ( i = 0; i < tubularSegments; i ++ ) {\n\n\t\t\tgenerateSegment( i );\n\n\t\t}\n\n\t\t// if the geometry is not closed, generate the last row of vertices and normals\n\t\t// at the regular position on the given path\n\t\t//\n\t\t// if the geometry is closed, duplicate the first row of vertices and normals (uvs will differ)\n\n\t\tgenerateSegment( ( closed === false ) ? tubularSegments : 0 );\n\n\t\t// uvs are generated in a separate function.\n\t\t// this makes it easy compute correct values for closed geometries\n\n\t\tgenerateUVs();\n\n\t\t// finally create faces\n\n\t\tgenerateIndices();\n\n\t}\n\n\tfunction generateSegment( i ) {\n\n\t\t// we use getPointAt to sample evenly distributed points from the given path\n\n\t\tP = path.getPointAt( i / tubularSegments, P );\n\n\t\t// retrieve corresponding normal and binormal\n\n\t\tvar N = frames.normals[ i ];\n\t\tvar B = frames.binormals[ i ];\n\n\t\t// generate normals and vertices for the current segment\n\n\t\tfor ( j = 0; j <= radialSegments; j ++ ) {\n\n\t\t\tvar v = j / radialSegments * Math.PI * 2;\n\n\t\t\tvar sin = Math.sin( v );\n\t\t\tvar cos = - Math.cos( v );\n\n\t\t\t// normal\n\n\t\t\tnormal.x = ( cos * N.x + sin * B.x );\n\t\t\tnormal.y = ( cos * N.y + sin * B.y );\n\t\t\tnormal.z = ( cos * N.z + sin * B.z );\n\t\t\tnormal.normalize();\n\n\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t// vertex\n\n\t\t\tvertex.x = P.x + radius * normal.x;\n\t\t\tvertex.y = P.y + radius * normal.y;\n\t\t\tvertex.z = P.z + radius * normal.z;\n\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t}\n\n\t}\n\n\tfunction generateIndices() {\n\n\t\tfor ( j = 1; j <= tubularSegments; j ++ ) {\n\n\t\t\tfor ( i = 1; i <= radialSegments; i ++ ) {\n\n\t\t\t\tvar a = ( radialSegments + 1 ) * ( j - 1 ) + ( i - 1 );\n\t\t\t\tvar b = ( radialSegments + 1 ) * j + ( i - 1 );\n\t\t\t\tvar c = ( radialSegments + 1 ) * j + i;\n\t\t\t\tvar d = ( radialSegments + 1 ) * ( j - 1 ) + i;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction generateUVs() {\n\n\t\tfor ( i = 0; i <= tubularSegments; i ++ ) {\n\n\t\t\tfor ( j = 0; j <= radialSegments; j ++ ) {\n\n\t\t\t\tuv.x = i / tubularSegments;\n\t\t\t\tuv.y = j / radialSegments;\n\n\t\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nTubeBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nTubeBufferGeometry.prototype.constructor = TubeBufferGeometry;\n\n/**\n * @author oosmoxiecode\n * @author Mugen87 / https://github.com/Mugen87\n *\n * based on http://www.blackpawn.com/texts/pqtorus/\n */\n\n// TorusKnotGeometry\n\nfunction TorusKnotGeometry( radius, tube, tubularSegments, radialSegments, p, q, heightScale ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'TorusKnotGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\ttube: tube,\n\t\ttubularSegments: tubularSegments,\n\t\tradialSegments: radialSegments,\n\t\tp: p,\n\t\tq: q\n\t};\n\n\tif ( heightScale !== undefined ) console.warn( 'THREE.TorusKnotGeometry: heightScale has been deprecated. Use .scale( x, y, z ) instead.' );\n\n\tthis.fromBufferGeometry( new TorusKnotBufferGeometry( radius, tube, tubularSegments, radialSegments, p, q ) );\n\tthis.mergeVertices();\n\n}\n\nTorusKnotGeometry.prototype = Object.create( Geometry.prototype );\nTorusKnotGeometry.prototype.constructor = TorusKnotGeometry;\n\n// TorusKnotBufferGeometry\n\nfunction TorusKnotBufferGeometry( radius, tube, tubularSegments, radialSegments, p, q ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'TorusKnotBufferGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\ttube: tube,\n\t\ttubularSegments: tubularSegments,\n\t\tradialSegments: radialSegments,\n\t\tp: p,\n\t\tq: q\n\t};\n\n\tradius = radius || 1;\n\ttube = tube || 0.4;\n\ttubularSegments = Math.floor( tubularSegments ) || 64;\n\tradialSegments = Math.floor( radialSegments ) || 8;\n\tp = p || 2;\n\tq = q || 3;\n\n\t// buffers\n\n\tvar indices = [];\n\tvar vertices = [];\n\tvar normals = [];\n\tvar uvs = [];\n\n\t// helper variables\n\n\tvar i, j;\n\n\tvar vertex = new Vector3();\n\tvar normal = new Vector3();\n\n\tvar P1 = new Vector3();\n\tvar P2 = new Vector3();\n\n\tvar B = new Vector3();\n\tvar T = new Vector3();\n\tvar N = new Vector3();\n\n\t// generate vertices, normals and uvs\n\n\tfor ( i = 0; i <= tubularSegments; ++ i ) {\n\n\t\t// the radian \"u\" is used to calculate the position on the torus curve of the current tubular segement\n\n\t\tvar u = i / tubularSegments * p * Math.PI * 2;\n\n\t\t// now we calculate two points. P1 is our current position on the curve, P2 is a little farther ahead.\n\t\t// these points are used to create a special \"coordinate space\", which is necessary to calculate the correct vertex positions\n\n\t\tcalculatePositionOnCurve( u, p, q, radius, P1 );\n\t\tcalculatePositionOnCurve( u + 0.01, p, q, radius, P2 );\n\n\t\t// calculate orthonormal basis\n\n\t\tT.subVectors( P2, P1 );\n\t\tN.addVectors( P2, P1 );\n\t\tB.crossVectors( T, N );\n\t\tN.crossVectors( B, T );\n\n\t\t// normalize B, N. T can be ignored, we don't use it\n\n\t\tB.normalize();\n\t\tN.normalize();\n\n\t\tfor ( j = 0; j <= radialSegments; ++ j ) {\n\n\t\t\t// now calculate the vertices. they are nothing more than an extrusion of the torus curve.\n\t\t\t// because we extrude a shape in the xy-plane, there is no need to calculate a z-value.\n\n\t\t\tvar v = j / radialSegments * Math.PI * 2;\n\t\t\tvar cx = - tube * Math.cos( v );\n\t\t\tvar cy = tube * Math.sin( v );\n\n\t\t\t// now calculate the final vertex position.\n\t\t\t// first we orient the extrusion with our basis vectos, then we add it to the current position on the curve\n\n\t\t\tvertex.x = P1.x + ( cx * N.x + cy * B.x );\n\t\t\tvertex.y = P1.y + ( cx * N.y + cy * B.y );\n\t\t\tvertex.z = P1.z + ( cx * N.z + cy * B.z );\n\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t// normal (P1 is always the center/origin of the extrusion, thus we can use it to calculate the normal)\n\n\t\t\tnormal.subVectors( vertex, P1 ).normalize();\n\n\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t// uv\n\n\t\t\tuvs.push( i / tubularSegments );\n\t\t\tuvs.push( j / radialSegments );\n\n\t\t}\n\n\t}\n\n\t// generate indices\n\n\tfor ( j = 1; j <= tubularSegments; j ++ ) {\n\n\t\tfor ( i = 1; i <= radialSegments; i ++ ) {\n\n\t\t\t// indices\n\n\t\t\tvar a = ( radialSegments + 1 ) * ( j - 1 ) + ( i - 1 );\n\t\t\tvar b = ( radialSegments + 1 ) * j + ( i - 1 );\n\t\t\tvar c = ( radialSegments + 1 ) * j + i;\n\t\t\tvar d = ( radialSegments + 1 ) * ( j - 1 ) + i;\n\n\t\t\t// faces\n\n\t\t\tindices.push( a, b, d );\n\t\t\tindices.push( b, c, d );\n\n\t\t}\n\n\t}\n\n\t// build geometry\n\n\tthis.setIndex( indices );\n\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t// this function calculates the current position on the torus curve\n\n\tfunction calculatePositionOnCurve( u, p, q, radius, position ) {\n\n\t\tvar cu = Math.cos( u );\n\t\tvar su = Math.sin( u );\n\t\tvar quOverP = q / p * u;\n\t\tvar cs = Math.cos( quOverP );\n\n\t\tposition.x = radius * ( 2 + cs ) * 0.5 * cu;\n\t\tposition.y = radius * ( 2 + cs ) * su * 0.5;\n\t\tposition.z = radius * Math.sin( quOverP ) * 0.5;\n\n\t}\n\n}\n\nTorusKnotBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nTorusKnotBufferGeometry.prototype.constructor = TorusKnotBufferGeometry;\n\n/**\n * @author oosmoxiecode\n * @author mrdoob / http://mrdoob.com/\n * @author Mugen87 / https://github.com/Mugen87\n */\n\n// TorusGeometry\n\nfunction TorusGeometry( radius, tube, radialSegments, tubularSegments, arc ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'TorusGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\ttube: tube,\n\t\tradialSegments: radialSegments,\n\t\ttubularSegments: tubularSegments,\n\t\tarc: arc\n\t};\n\n\tthis.fromBufferGeometry( new TorusBufferGeometry( radius, tube, radialSegments, tubularSegments, arc ) );\n\tthis.mergeVertices();\n\n}\n\nTorusGeometry.prototype = Object.create( Geometry.prototype );\nTorusGeometry.prototype.constructor = TorusGeometry;\n\n// TorusBufferGeometry\n\nfunction TorusBufferGeometry( radius, tube, radialSegments, tubularSegments, arc ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'TorusBufferGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\ttube: tube,\n\t\tradialSegments: radialSegments,\n\t\ttubularSegments: tubularSegments,\n\t\tarc: arc\n\t};\n\n\tradius = radius || 1;\n\ttube = tube || 0.4;\n\tradialSegments = Math.floor( radialSegments ) || 8;\n\ttubularSegments = Math.floor( tubularSegments ) || 6;\n\tarc = arc || Math.PI * 2;\n\n\t// buffers\n\n\tvar indices = [];\n\tvar vertices = [];\n\tvar normals = [];\n\tvar uvs = [];\n\n\t// helper variables\n\n\tvar center = new Vector3();\n\tvar vertex = new Vector3();\n\tvar normal = new Vector3();\n\n\tvar j, i;\n\n\t// generate vertices, normals and uvs\n\n\tfor ( j = 0; j <= radialSegments; j ++ ) {\n\n\t\tfor ( i = 0; i <= tubularSegments; i ++ ) {\n\n\t\t\tvar u = i / tubularSegments * arc;\n\t\t\tvar v = j / radialSegments * Math.PI * 2;\n\n\t\t\t// vertex\n\n\t\t\tvertex.x = ( radius + tube * Math.cos( v ) ) * Math.cos( u );\n\t\t\tvertex.y = ( radius + tube * Math.cos( v ) ) * Math.sin( u );\n\t\t\tvertex.z = tube * Math.sin( v );\n\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t// normal\n\n\t\t\tcenter.x = radius * Math.cos( u );\n\t\t\tcenter.y = radius * Math.sin( u );\n\t\t\tnormal.subVectors( vertex, center ).normalize();\n\n\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t// uv\n\n\t\t\tuvs.push( i / tubularSegments );\n\t\t\tuvs.push( j / radialSegments );\n\n\t\t}\n\n\t}\n\n\t// generate indices\n\n\tfor ( j = 1; j <= radialSegments; j ++ ) {\n\n\t\tfor ( i = 1; i <= tubularSegments; i ++ ) {\n\n\t\t\t// indices\n\n\t\t\tvar a = ( tubularSegments + 1 ) * j + i - 1;\n\t\t\tvar b = ( tubularSegments + 1 ) * ( j - 1 ) + i - 1;\n\t\t\tvar c = ( tubularSegments + 1 ) * ( j - 1 ) + i;\n\t\t\tvar d = ( tubularSegments + 1 ) * j + i;\n\n\t\t\t// faces\n\n\t\t\tindices.push( a, b, d );\n\t\t\tindices.push( b, c, d );\n\n\t\t}\n\n\t}\n\n\t// build geometry\n\n\tthis.setIndex( indices );\n\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n}\n\nTorusBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nTorusBufferGeometry.prototype.constructor = TorusBufferGeometry;\n\n/**\n * @author Mugen87 / https://github.com/Mugen87\n * Port from https://github.com/mapbox/earcut (v2.1.2)\n */\n\nvar Earcut = {\n\n\ttriangulate: function ( data, holeIndices, dim ) {\n\n\t\tdim = dim || 2;\n\n\t\tvar hasHoles = holeIndices && holeIndices.length,\n\t\t\touterLen = hasHoles ? holeIndices[ 0 ] * dim : data.length,\n\t\t\touterNode = linkedList( data, 0, outerLen, dim, true ),\n\t\t\ttriangles = [];\n\n\t\tif ( ! outerNode ) return triangles;\n\n\t\tvar minX, minY, maxX, maxY, x, y, invSize;\n\n\t\tif ( hasHoles ) outerNode = eliminateHoles( data, holeIndices, outerNode, dim );\n\n\t\t// if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox\n\n\t\tif ( data.length > 80 * dim ) {\n\n\t\t\tminX = maxX = data[ 0 ];\n\t\t\tminY = maxY = data[ 1 ];\n\n\t\t\tfor ( var i = dim; i < outerLen; i += dim ) {\n\n\t\t\t\tx = data[ i ];\n\t\t\t\ty = data[ i + 1 ];\n\t\t\t\tif ( x < minX ) minX = x;\n\t\t\t\tif ( y < minY ) minY = y;\n\t\t\t\tif ( x > maxX ) maxX = x;\n\t\t\t\tif ( y > maxY ) maxY = y;\n\n\t\t\t}\n\n\t\t\t// minX, minY and invSize are later used to transform coords into integers for z-order calculation\n\n\t\t\tinvSize = Math.max( maxX - minX, maxY - minY );\n\t\t\tinvSize = invSize !== 0 ? 1 / invSize : 0;\n\n\t\t}\n\n\t\tearcutLinked( outerNode, triangles, dim, minX, minY, invSize );\n\n\t\treturn triangles;\n\n\t}\n\n};\n\n// create a circular doubly linked list from polygon points in the specified winding order\n\nfunction linkedList( data, start, end, dim, clockwise ) {\n\n\tvar i, last;\n\n\tif ( clockwise === ( signedArea( data, start, end, dim ) > 0 ) ) {\n\n\t\tfor ( i = start; i < end; i += dim ) last = insertNode( i, data[ i ], data[ i + 1 ], last );\n\n\t} else {\n\n\t\tfor ( i = end - dim; i >= start; i -= dim ) last = insertNode( i, data[ i ], data[ i + 1 ], last );\n\n\t}\n\n\tif ( last && equals( last, last.next ) ) {\n\n\t\tremoveNode( last );\n\t\tlast = last.next;\n\n\t}\n\n\treturn last;\n\n}\n\n// eliminate colinear or duplicate points\n\nfunction filterPoints( start, end ) {\n\n\tif ( ! start ) return start;\n\tif ( ! end ) end = start;\n\n\tvar p = start, again;\n\n\tdo {\n\n\t\tagain = false;\n\n\t\tif ( ! p.steiner && ( equals( p, p.next ) || area( p.prev, p, p.next ) === 0 ) ) {\n\n\t\t\tremoveNode( p );\n\t\t\tp = end = p.prev;\n\t\t\tif ( p === p.next ) break;\n\t\t\tagain = true;\n\n\t\t} else {\n\n\t\t\tp = p.next;\n\n\t\t}\n\n\t} while ( again || p !== end );\n\n\treturn end;\n\n}\n\n// main ear slicing loop which triangulates a polygon (given as a linked list)\n\nfunction earcutLinked( ear, triangles, dim, minX, minY, invSize, pass ) {\n\n\tif ( ! ear ) return;\n\n\t// interlink polygon nodes in z-order\n\n\tif ( ! pass && invSize ) indexCurve( ear, minX, minY, invSize );\n\n\tvar stop = ear, prev, next;\n\n\t// iterate through ears, slicing them one by one\n\n\twhile ( ear.prev !== ear.next ) {\n\n\t\tprev = ear.prev;\n\t\tnext = ear.next;\n\n\t\tif ( invSize ? isEarHashed( ear, minX, minY, invSize ) : isEar( ear ) ) {\n\n\t\t\t// cut off the triangle\n\t\t\ttriangles.push( prev.i / dim );\n\t\t\ttriangles.push( ear.i / dim );\n\t\t\ttriangles.push( next.i / dim );\n\n\t\t\tremoveNode( ear );\n\n\t\t\t// skipping the next vertice leads to less sliver triangles\n\t\t\tear = next.next;\n\t\t\tstop = next.next;\n\n\t\t\tcontinue;\n\n\t\t}\n\n\t\tear = next;\n\n\t\t// if we looped through the whole remaining polygon and can't find any more ears\n\n\t\tif ( ear === stop ) {\n\n\t\t\t// try filtering points and slicing again\n\n\t\t\tif ( ! pass ) {\n\n\t\t\t\tearcutLinked( filterPoints( ear ), triangles, dim, minX, minY, invSize, 1 );\n\n\t\t\t\t// if this didn't work, try curing all small self-intersections locally\n\n\t\t\t} else if ( pass === 1 ) {\n\n\t\t\t\tear = cureLocalIntersections( ear, triangles, dim );\n\t\t\t\tearcutLinked( ear, triangles, dim, minX, minY, invSize, 2 );\n\n\t\t\t// as a last resort, try splitting the remaining polygon into two\n\n\t\t\t} else if ( pass === 2 ) {\n\n\t\t\t\tsplitEarcut( ear, triangles, dim, minX, minY, invSize );\n\n\t\t\t}\n\n\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n}\n\n// check whether a polygon node forms a valid ear with adjacent nodes\n\nfunction isEar( ear ) {\n\n\tvar a = ear.prev,\n\t\tb = ear,\n\t\tc = ear.next;\n\n\tif ( area( a, b, c ) >= 0 ) return false; // reflex, can't be an ear\n\n\t// now make sure we don't have other points inside the potential ear\n\tvar p = ear.next.next;\n\n\twhile ( p !== ear.prev ) {\n\n\t\tif ( pointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y ) && area( p.prev, p, p.next ) >= 0 ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\tp = p.next;\n\n\t}\n\n\treturn true;\n\n}\n\nfunction isEarHashed( ear, minX, minY, invSize ) {\n\n\tvar a = ear.prev,\n\t\tb = ear,\n\t\tc = ear.next;\n\n\tif ( area( a, b, c ) >= 0 ) return false; // reflex, can't be an ear\n\n\t// triangle bbox; min & max are calculated like this for speed\n\n\tvar minTX = a.x < b.x ? ( a.x < c.x ? a.x : c.x ) : ( b.x < c.x ? b.x : c.x ),\n\t\tminTY = a.y < b.y ? ( a.y < c.y ? a.y : c.y ) : ( b.y < c.y ? b.y : c.y ),\n\t\tmaxTX = a.x > b.x ? ( a.x > c.x ? a.x : c.x ) : ( b.x > c.x ? b.x : c.x ),\n\t\tmaxTY = a.y > b.y ? ( a.y > c.y ? a.y : c.y ) : ( b.y > c.y ? b.y : c.y );\n\n\t// z-order range for the current triangle bbox;\n\n\tvar minZ = zOrder( minTX, minTY, minX, minY, invSize ),\n\t\tmaxZ = zOrder( maxTX, maxTY, minX, minY, invSize );\n\n\t// first look for points inside the triangle in increasing z-order\n\n\tvar p = ear.nextZ;\n\n\twhile ( p && p.z <= maxZ ) {\n\n\t\tif ( p !== ear.prev && p !== ear.next &&\n\t\t\t\tpointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y ) &&\n\t\t\t\tarea( p.prev, p, p.next ) >= 0 ) return false;\n\t\tp = p.nextZ;\n\n\t}\n\n\t// then look for points in decreasing z-order\n\n\tp = ear.prevZ;\n\n\twhile ( p && p.z >= minZ ) {\n\n\t\tif ( p !== ear.prev && p !== ear.next &&\n\t\t\t\tpointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y ) &&\n\t\t\t\tarea( p.prev, p, p.next ) >= 0 ) return false;\n\n\t\tp = p.prevZ;\n\n\t}\n\n\treturn true;\n\n}\n\n// go through all polygon nodes and cure small local self-intersections\n\nfunction cureLocalIntersections( start, triangles, dim ) {\n\n\tvar p = start;\n\n\tdo {\n\n\t\tvar a = p.prev, b = p.next.next;\n\n\t\tif ( ! equals( a, b ) && intersects( a, p, p.next, b ) && locallyInside( a, b ) && locallyInside( b, a ) ) {\n\n\t\t\ttriangles.push( a.i / dim );\n\t\t\ttriangles.push( p.i / dim );\n\t\t\ttriangles.push( b.i / dim );\n\n\t\t\t// remove two nodes involved\n\n\t\t\tremoveNode( p );\n\t\t\tremoveNode( p.next );\n\n\t\t\tp = start = b;\n\n\t\t}\n\n\t\tp = p.next;\n\n\t} while ( p !== start );\n\n\treturn p;\n\n}\n\n// try splitting polygon into two and triangulate them independently\n\nfunction splitEarcut( start, triangles, dim, minX, minY, invSize ) {\n\n\t// look for a valid diagonal that divides the polygon into two\n\n\tvar a = start;\n\n\tdo {\n\n\t\tvar b = a.next.next;\n\n\t\twhile ( b !== a.prev ) {\n\n\t\t\tif ( a.i !== b.i && isValidDiagonal( a, b ) ) {\n\n\t\t\t\t// split the polygon in two by the diagonal\n\n\t\t\t\tvar c = splitPolygon( a, b );\n\n\t\t\t\t// filter colinear points around the cuts\n\n\t\t\t\ta = filterPoints( a, a.next );\n\t\t\t\tc = filterPoints( c, c.next );\n\n\t\t\t\t// run earcut on each half\n\n\t\t\t\tearcutLinked( a, triangles, dim, minX, minY, invSize );\n\t\t\t\tearcutLinked( c, triangles, dim, minX, minY, invSize );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tb = b.next;\n\n\t\t}\n\n\t\ta = a.next;\n\n\t} while ( a !== start );\n\n}\n\n// link every hole into the outer loop, producing a single-ring polygon without holes\n\nfunction eliminateHoles( data, holeIndices, outerNode, dim ) {\n\n\tvar queue = [], i, len, start, end, list;\n\n\tfor ( i = 0, len = holeIndices.length; i < len; i ++ ) {\n\n\t\tstart = holeIndices[ i ] * dim;\n\t\tend = i < len - 1 ? holeIndices[ i + 1 ] * dim : data.length;\n\t\tlist = linkedList( data, start, end, dim, false );\n\t\tif ( list === list.next ) list.steiner = true;\n\t\tqueue.push( getLeftmost( list ) );\n\n\t}\n\n\tqueue.sort( compareX );\n\n\t// process holes from left to right\n\n\tfor ( i = 0; i < queue.length; i ++ ) {\n\n\t\teliminateHole( queue[ i ], outerNode );\n\t\touterNode = filterPoints( outerNode, outerNode.next );\n\n\t}\n\n\treturn outerNode;\n\n}\n\nfunction compareX( a, b ) {\n\n\treturn a.x - b.x;\n\n}\n\n// find a bridge between vertices that connects hole with an outer ring and and link it\n\nfunction eliminateHole( hole, outerNode ) {\n\n\touterNode = findHoleBridge( hole, outerNode );\n\n\tif ( outerNode ) {\n\n\t\tvar b = splitPolygon( outerNode, hole );\n\n\t\tfilterPoints( b, b.next );\n\n\t}\n\n}\n\n// David Eberly's algorithm for finding a bridge between hole and outer polygon\n\nfunction findHoleBridge( hole, outerNode ) {\n\n\tvar p = outerNode,\n\t\thx = hole.x,\n\t\thy = hole.y,\n\t\tqx = - Infinity,\n\t\tm;\n\n\t// find a segment intersected by a ray from the hole's leftmost point to the left;\n\t// segment's endpoint with lesser x will be potential connection point\n\n\tdo {\n\n\t\tif ( hy <= p.y && hy >= p.next.y && p.next.y !== p.y ) {\n\n\t\t\tvar x = p.x + ( hy - p.y ) * ( p.next.x - p.x ) / ( p.next.y - p.y );\n\n\t\t\tif ( x <= hx && x > qx ) {\n\n\t\t\t\tqx = x;\n\n\t\t\t\tif ( x === hx ) {\n\n\t\t\t\t\tif ( hy === p.y ) return p;\n\t\t\t\t\tif ( hy === p.next.y ) return p.next;\n\n\t\t\t\t}\n\n\t\t\t\tm = p.x < p.next.x ? p : p.next;\n\n\t\t\t}\n\n\t\t}\n\n\t\tp = p.next;\n\n\t} while ( p !== outerNode );\n\n\tif ( ! m ) return null;\n\n\tif ( hx === qx ) return m.prev; // hole touches outer segment; pick lower endpoint\n\n\t// look for points inside the triangle of hole point, segment intersection and endpoint;\n\t// if there are no points found, we have a valid connection;\n\t// otherwise choose the point of the minimum angle with the ray as connection point\n\n\tvar stop = m,\n\t\tmx = m.x,\n\t\tmy = m.y,\n\t\ttanMin = Infinity,\n\t\ttan;\n\n\tp = m.next;\n\n\twhile ( p !== stop ) {\n\n\t\tif ( hx >= p.x && p.x >= mx && hx !== p.x &&\n\t\t\t\t\t\tpointInTriangle( hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y ) ) {\n\n\t\t\ttan = Math.abs( hy - p.y ) / ( hx - p.x ); // tangential\n\n\t\t\tif ( ( tan < tanMin || ( tan === tanMin && p.x > m.x ) ) && locallyInside( p, hole ) ) {\n\n\t\t\t\tm = p;\n\t\t\t\ttanMin = tan;\n\n\t\t\t}\n\n\t\t}\n\n\t\tp = p.next;\n\n\t}\n\n\treturn m;\n\n}\n\n// interlink polygon nodes in z-order\n\nfunction indexCurve( start, minX, minY, invSize ) {\n\n\tvar p = start;\n\n\tdo {\n\n\t\tif ( p.z === null ) p.z = zOrder( p.x, p.y, minX, minY, invSize );\n\t\tp.prevZ = p.prev;\n\t\tp.nextZ = p.next;\n\t\tp = p.next;\n\n\t} while ( p !== start );\n\n\tp.prevZ.nextZ = null;\n\tp.prevZ = null;\n\n\tsortLinked( p );\n\n}\n\n// Simon Tatham's linked list merge sort algorithm\n// http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html\n\nfunction sortLinked( list ) {\n\n\tvar i, p, q, e, tail, numMerges, pSize, qSize, inSize = 1;\n\n\tdo {\n\n\t\tp = list;\n\t\tlist = null;\n\t\ttail = null;\n\t\tnumMerges = 0;\n\n\t\twhile ( p ) {\n\n\t\t\tnumMerges ++;\n\t\t\tq = p;\n\t\t\tpSize = 0;\n\n\t\t\tfor ( i = 0; i < inSize; i ++ ) {\n\n\t\t\t\tpSize ++;\n\t\t\t\tq = q.nextZ;\n\t\t\t\tif ( ! q ) break;\n\n\t\t\t}\n\n\t\t\tqSize = inSize;\n\n\t\t\twhile ( pSize > 0 || ( qSize > 0 && q ) ) {\n\n\t\t\t\tif ( pSize !== 0 && ( qSize === 0 || ! q || p.z <= q.z ) ) {\n\n\t\t\t\t\te = p;\n\t\t\t\t\tp = p.nextZ;\n\t\t\t\t\tpSize --;\n\n\t\t\t\t} else {\n\n\t\t\t\t\te = q;\n\t\t\t\t\tq = q.nextZ;\n\t\t\t\t\tqSize --;\n\n\t\t\t\t}\n\n\t\t\t\tif ( tail ) tail.nextZ = e;\n\t\t\t\telse list = e;\n\n\t\t\t\te.prevZ = tail;\n\t\t\t\ttail = e;\n\n\t\t\t}\n\n\t\t\tp = q;\n\n\t\t}\n\n\t\ttail.nextZ = null;\n\t\tinSize *= 2;\n\n\t} while ( numMerges > 1 );\n\n\treturn list;\n\n}\n\n// z-order of a point given coords and inverse of the longer side of data bbox\n\nfunction zOrder( x, y, minX, minY, invSize ) {\n\n\t// coords are transformed into non-negative 15-bit integer range\n\n\tx = 32767 * ( x - minX ) * invSize;\n\ty = 32767 * ( y - minY ) * invSize;\n\n\tx = ( x | ( x << 8 ) ) & 0x00FF00FF;\n\tx = ( x | ( x << 4 ) ) & 0x0F0F0F0F;\n\tx = ( x | ( x << 2 ) ) & 0x33333333;\n\tx = ( x | ( x << 1 ) ) & 0x55555555;\n\n\ty = ( y | ( y << 8 ) ) & 0x00FF00FF;\n\ty = ( y | ( y << 4 ) ) & 0x0F0F0F0F;\n\ty = ( y | ( y << 2 ) ) & 0x33333333;\n\ty = ( y | ( y << 1 ) ) & 0x55555555;\n\n\treturn x | ( y << 1 );\n\n}\n\n// find the leftmost node of a polygon ring\n\nfunction getLeftmost( start ) {\n\n\tvar p = start, leftmost = start;\n\n\tdo {\n\n\t\tif ( p.x < leftmost.x ) leftmost = p;\n\t\tp = p.next;\n\n\t} while ( p !== start );\n\n\treturn leftmost;\n\n}\n\n// check if a point lies within a convex triangle\n\nfunction pointInTriangle( ax, ay, bx, by, cx, cy, px, py ) {\n\n\treturn ( cx - px ) * ( ay - py ) - ( ax - px ) * ( cy - py ) >= 0 &&\n\t ( ax - px ) * ( by - py ) - ( bx - px ) * ( ay - py ) >= 0 &&\n\t ( bx - px ) * ( cy - py ) - ( cx - px ) * ( by - py ) >= 0;\n\n}\n\n// check if a diagonal between two polygon nodes is valid (lies in polygon interior)\n\nfunction isValidDiagonal( a, b ) {\n\n\treturn a.next.i !== b.i && a.prev.i !== b.i && ! intersectsPolygon( a, b ) &&\n\t\tlocallyInside( a, b ) && locallyInside( b, a ) && middleInside( a, b );\n\n}\n\n// signed area of a triangle\n\nfunction area( p, q, r ) {\n\n\treturn ( q.y - p.y ) * ( r.x - q.x ) - ( q.x - p.x ) * ( r.y - q.y );\n\n}\n\n// check if two points are equal\n\nfunction equals( p1, p2 ) {\n\n\treturn p1.x === p2.x && p1.y === p2.y;\n\n}\n\n// check if two segments intersect\n\nfunction intersects( p1, q1, p2, q2 ) {\n\n\tif ( ( equals( p1, q1 ) && equals( p2, q2 ) ) ||\n\t\t\t( equals( p1, q2 ) && equals( p2, q1 ) ) ) return true;\n\n\treturn area( p1, q1, p2 ) > 0 !== area( p1, q1, q2 ) > 0 &&\n\t\t\t\t area( p2, q2, p1 ) > 0 !== area( p2, q2, q1 ) > 0;\n\n}\n\n// check if a polygon diagonal intersects any polygon segments\n\nfunction intersectsPolygon( a, b ) {\n\n\tvar p = a;\n\n\tdo {\n\n\t\tif ( p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i &&\n\t\t\t\t\t\tintersects( p, p.next, a, b ) ) {\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\tp = p.next;\n\n\t} while ( p !== a );\n\n\treturn false;\n\n}\n\n// check if a polygon diagonal is locally inside the polygon\n\nfunction locallyInside( a, b ) {\n\n\treturn area( a.prev, a, a.next ) < 0 ?\n\t\tarea( a, b, a.next ) >= 0 && area( a, a.prev, b ) >= 0 :\n\t\tarea( a, b, a.prev ) < 0 || area( a, a.next, b ) < 0;\n\n}\n\n// check if the middle point of a polygon diagonal is inside the polygon\n\nfunction middleInside( a, b ) {\n\n\tvar p = a,\n\t\tinside = false,\n\t\tpx = ( a.x + b.x ) / 2,\n\t\tpy = ( a.y + b.y ) / 2;\n\n\tdo {\n\n\t\tif ( ( ( p.y > py ) !== ( p.next.y > py ) ) && p.next.y !== p.y &&\n\t\t\t\t\t\t( px < ( p.next.x - p.x ) * ( py - p.y ) / ( p.next.y - p.y ) + p.x ) ) {\n\n\t\t\tinside = ! inside;\n\n\t\t}\n\n\t\tp = p.next;\n\n\t} while ( p !== a );\n\n\treturn inside;\n\n}\n\n// link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits polygon into two;\n// if one belongs to the outer ring and another to a hole, it merges it into a single ring\n\nfunction splitPolygon( a, b ) {\n\n\tvar a2 = new Node( a.i, a.x, a.y ),\n\t\tb2 = new Node( b.i, b.x, b.y ),\n\t\tan = a.next,\n\t\tbp = b.prev;\n\n\ta.next = b;\n\tb.prev = a;\n\n\ta2.next = an;\n\tan.prev = a2;\n\n\tb2.next = a2;\n\ta2.prev = b2;\n\n\tbp.next = b2;\n\tb2.prev = bp;\n\n\treturn b2;\n\n}\n\n// create a node and optionally link it with previous one (in a circular doubly linked list)\n\nfunction insertNode( i, x, y, last ) {\n\n\tvar p = new Node( i, x, y );\n\n\tif ( ! last ) {\n\n\t\tp.prev = p;\n\t\tp.next = p;\n\n\t} else {\n\n\t\tp.next = last.next;\n\t\tp.prev = last;\n\t\tlast.next.prev = p;\n\t\tlast.next = p;\n\n\t}\n\n\treturn p;\n\n}\n\nfunction removeNode( p ) {\n\n\tp.next.prev = p.prev;\n\tp.prev.next = p.next;\n\n\tif ( p.prevZ ) p.prevZ.nextZ = p.nextZ;\n\tif ( p.nextZ ) p.nextZ.prevZ = p.prevZ;\n\n}\n\nfunction Node( i, x, y ) {\n\n\t// vertice index in coordinates array\n\tthis.i = i;\n\n\t// vertex coordinates\n\tthis.x = x;\n\tthis.y = y;\n\n\t// previous and next vertice nodes in a polygon ring\n\tthis.prev = null;\n\tthis.next = null;\n\n\t// z-order curve value\n\tthis.z = null;\n\n\t// previous and next nodes in z-order\n\tthis.prevZ = null;\n\tthis.nextZ = null;\n\n\t// indicates whether this is a steiner point\n\tthis.steiner = false;\n\n}\n\nfunction signedArea( data, start, end, dim ) {\n\n\tvar sum = 0;\n\n\tfor ( var i = start, j = end - dim; i < end; i += dim ) {\n\n\t\tsum += ( data[ j ] - data[ i ] ) * ( data[ i + 1 ] + data[ j + 1 ] );\n\t\tj = i;\n\n\t}\n\n\treturn sum;\n\n}\n\n/**\n * @author zz85 / http://www.lab4games.net/zz85/blog\n */\n\nvar ShapeUtils = {\n\n\t// calculate area of the contour polygon\n\n\tarea: function ( contour ) {\n\n\t\tvar n = contour.length;\n\t\tvar a = 0.0;\n\n\t\tfor ( var p = n - 1, q = 0; q < n; p = q ++ ) {\n\n\t\t\ta += contour[ p ].x * contour[ q ].y - contour[ q ].x * contour[ p ].y;\n\n\t\t}\n\n\t\treturn a * 0.5;\n\n\t},\n\n\tisClockWise: function ( pts ) {\n\n\t\treturn ShapeUtils.area( pts ) < 0;\n\n\t},\n\n\ttriangulateShape: function ( contour, holes ) {\n\n\t\tvar vertices = []; // flat array of vertices like [ x0,y0, x1,y1, x2,y2, ... ]\n\t\tvar holeIndices = []; // array of hole indices\n\t\tvar faces = []; // final array of vertex indices like [ [ a,b,d ], [ b,c,d ] ]\n\n\t\tremoveDupEndPts( contour );\n\t\taddContour( vertices, contour );\n\n\t\t//\n\n\t\tvar holeIndex = contour.length;\n\n\t\tholes.forEach( removeDupEndPts );\n\n\t\tfor ( var i = 0; i < holes.length; i ++ ) {\n\n\t\t\tholeIndices.push( holeIndex );\n\t\t\tholeIndex += holes[ i ].length;\n\t\t\taddContour( vertices, holes[ i ] );\n\n\t\t}\n\n\t\t//\n\n\t\tvar triangles = Earcut.triangulate( vertices, holeIndices );\n\n\t\t//\n\n\t\tfor ( var i = 0; i < triangles.length; i += 3 ) {\n\n\t\t\tfaces.push( triangles.slice( i, i + 3 ) );\n\n\t\t}\n\n\t\treturn faces;\n\n\t}\n\n};\n\nfunction removeDupEndPts( points ) {\n\n\tvar l = points.length;\n\n\tif ( l > 2 && points[ l - 1 ].equals( points[ 0 ] ) ) {\n\n\t\tpoints.pop();\n\n\t}\n\n}\n\nfunction addContour( vertices, contour ) {\n\n\tfor ( var i = 0; i < contour.length; i ++ ) {\n\n\t\tvertices.push( contour[ i ].x );\n\t\tvertices.push( contour[ i ].y );\n\n\t}\n\n}\n\n/**\n * @author zz85 / http://www.lab4games.net/zz85/blog\n *\n * Creates extruded geometry from a path shape.\n *\n * parameters = {\n *\n * curveSegments: , // number of points on the curves\n * steps: , // number of points for z-side extrusions / used for subdividing segments of extrude spline too\n * amount: , // Depth to extrude the shape\n *\n * bevelEnabled: , // turn on bevel\n * bevelThickness: , // how deep into the original shape bevel goes\n * bevelSize: , // how far from shape outline is bevel\n * bevelSegments: , // number of bevel layers\n *\n * extrudePath: // curve to extrude shape along\n *\n * UVGenerator: // object that provides UV generator functions\n *\n * }\n */\n\n// ExtrudeGeometry\n\nfunction ExtrudeGeometry( shapes, options ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'ExtrudeGeometry';\n\n\tthis.parameters = {\n\t\tshapes: shapes,\n\t\toptions: options\n\t};\n\n\tthis.fromBufferGeometry( new ExtrudeBufferGeometry( shapes, options ) );\n\tthis.mergeVertices();\n\n}\n\nExtrudeGeometry.prototype = Object.create( Geometry.prototype );\nExtrudeGeometry.prototype.constructor = ExtrudeGeometry;\n\n// ExtrudeBufferGeometry\n\nfunction ExtrudeBufferGeometry( shapes, options ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'ExtrudeBufferGeometry';\n\n\tthis.parameters = {\n\t\tshapes: shapes,\n\t\toptions: options\n\t};\n\n\tshapes = Array.isArray( shapes ) ? shapes : [ shapes ];\n\n\tvar scope = this;\n\n\tvar verticesArray = [];\n\tvar uvArray = [];\n\n\tfor ( var i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\tvar shape = shapes[ i ];\n\t\taddShape( shape, options );\n\n\t}\n\n\t// build geometry\n\n\tthis.addAttribute( 'position', new Float32BufferAttribute( verticesArray, 3 ) );\n\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvArray, 2 ) );\n\n\tthis.computeVertexNormals();\n\n\t// functions\n\n\tfunction addShape( shape ) {\n\n\t\tvar placeholder = [];\n\n\t\t// options\n\n\t\tvar curveSegments = options.curveSegments !== undefined ? options.curveSegments : 12;\n\t\tvar steps = options.steps !== undefined ? options.steps : 1;\n\t\tvar amount = options.amount !== undefined ? options.amount : 100;\n\n\t\tvar bevelEnabled = options.bevelEnabled !== undefined ? options.bevelEnabled : true;\n\t\tvar bevelThickness = options.bevelThickness !== undefined ? options.bevelThickness : 6;\n\t\tvar bevelSize = options.bevelSize !== undefined ? options.bevelSize : bevelThickness - 2;\n\t\tvar bevelSegments = options.bevelSegments !== undefined ? options.bevelSegments : 3;\n\n\t\tvar extrudePath = options.extrudePath;\n\n\t\tvar uvgen = options.UVGenerator !== undefined ? options.UVGenerator : WorldUVGenerator;\n\n\t\t//\n\n\t\tvar extrudePts, extrudeByPath = false;\n\t\tvar splineTube, binormal, normal, position2;\n\n\t\tif ( extrudePath ) {\n\n\t\t\textrudePts = extrudePath.getSpacedPoints( steps );\n\n\t\t\textrudeByPath = true;\n\t\t\tbevelEnabled = false; // bevels not supported for path extrusion\n\n\t\t\t// SETUP TNB variables\n\n\t\t\t// TODO1 - have a .isClosed in spline?\n\n\t\t\tsplineTube = extrudePath.computeFrenetFrames( steps, false );\n\n\t\t\t// console.log(splineTube, 'splineTube', splineTube.normals.length, 'steps', steps, 'extrudePts', extrudePts.length);\n\n\t\t\tbinormal = new Vector3();\n\t\t\tnormal = new Vector3();\n\t\t\tposition2 = new Vector3();\n\n\t\t}\n\n\t\t// Safeguards if bevels are not enabled\n\n\t\tif ( ! bevelEnabled ) {\n\n\t\t\tbevelSegments = 0;\n\t\t\tbevelThickness = 0;\n\t\t\tbevelSize = 0;\n\n\t\t}\n\n\t\t// Variables initialization\n\n\t\tvar ahole, h, hl; // looping of holes\n\n\t\tvar shapePoints = shape.extractPoints( curveSegments );\n\n\t\tvar vertices = shapePoints.shape;\n\t\tvar holes = shapePoints.holes;\n\n\t\tvar reverse = ! ShapeUtils.isClockWise( vertices );\n\n\t\tif ( reverse ) {\n\n\t\t\tvertices = vertices.reverse();\n\n\t\t\t// Maybe we should also check if holes are in the opposite direction, just to be safe ...\n\n\t\t\tfor ( h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\tahole = holes[ h ];\n\n\t\t\t\tif ( ShapeUtils.isClockWise( ahole ) ) {\n\n\t\t\t\t\tholes[ h ] = ahole.reverse();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\n\t\tvar faces = ShapeUtils.triangulateShape( vertices, holes );\n\n\t\t/* Vertices */\n\n\t\tvar contour = vertices; // vertices has all points but contour has only points of circumference\n\n\t\tfor ( h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\tahole = holes[ h ];\n\n\t\t\tvertices = vertices.concat( ahole );\n\n\t\t}\n\n\n\t\tfunction scalePt2( pt, vec, size ) {\n\n\t\t\tif ( ! vec ) console.error( \"THREE.ExtrudeGeometry: vec does not exist\" );\n\n\t\t\treturn vec.clone().multiplyScalar( size ).add( pt );\n\n\t\t}\n\n\t\tvar b, bs, t, z,\n\t\t\tvert, vlen = vertices.length,\n\t\t\tface, flen = faces.length;\n\n\n\t\t// Find directions for point movement\n\n\n\t\tfunction getBevelVec( inPt, inPrev, inNext ) {\n\n\t\t\t// computes for inPt the corresponding point inPt' on a new contour\n\t\t\t// shifted by 1 unit (length of normalized vector) to the left\n\t\t\t// if we walk along contour clockwise, this new contour is outside the old one\n\t\t\t//\n\t\t\t// inPt' is the intersection of the two lines parallel to the two\n\t\t\t// adjacent edges of inPt at a distance of 1 unit on the left side.\n\n\t\t\tvar v_trans_x, v_trans_y, shrink_by; // resulting translation vector for inPt\n\n\t\t\t// good reading for geometry algorithms (here: line-line intersection)\n\t\t\t// http://geomalgorithms.com/a05-_intersect-1.html\n\n\t\t\tvar v_prev_x = inPt.x - inPrev.x,\n\t\t\t\tv_prev_y = inPt.y - inPrev.y;\n\t\t\tvar v_next_x = inNext.x - inPt.x,\n\t\t\t\tv_next_y = inNext.y - inPt.y;\n\n\t\t\tvar v_prev_lensq = ( v_prev_x * v_prev_x + v_prev_y * v_prev_y );\n\n\t\t\t// check for collinear edges\n\t\t\tvar collinear0 = ( v_prev_x * v_next_y - v_prev_y * v_next_x );\n\n\t\t\tif ( Math.abs( collinear0 ) > Number.EPSILON ) {\n\n\t\t\t\t// not collinear\n\n\t\t\t\t// length of vectors for normalizing\n\n\t\t\t\tvar v_prev_len = Math.sqrt( v_prev_lensq );\n\t\t\t\tvar v_next_len = Math.sqrt( v_next_x * v_next_x + v_next_y * v_next_y );\n\n\t\t\t\t// shift adjacent points by unit vectors to the left\n\n\t\t\t\tvar ptPrevShift_x = ( inPrev.x - v_prev_y / v_prev_len );\n\t\t\t\tvar ptPrevShift_y = ( inPrev.y + v_prev_x / v_prev_len );\n\n\t\t\t\tvar ptNextShift_x = ( inNext.x - v_next_y / v_next_len );\n\t\t\t\tvar ptNextShift_y = ( inNext.y + v_next_x / v_next_len );\n\n\t\t\t\t// scaling factor for v_prev to intersection point\n\n\t\t\t\tvar sf = ( ( ptNextShift_x - ptPrevShift_x ) * v_next_y -\n\t\t\t\t\t\t( ptNextShift_y - ptPrevShift_y ) * v_next_x ) /\n\t\t\t\t\t( v_prev_x * v_next_y - v_prev_y * v_next_x );\n\n\t\t\t\t// vector from inPt to intersection point\n\n\t\t\t\tv_trans_x = ( ptPrevShift_x + v_prev_x * sf - inPt.x );\n\t\t\t\tv_trans_y = ( ptPrevShift_y + v_prev_y * sf - inPt.y );\n\n\t\t\t\t// Don't normalize!, otherwise sharp corners become ugly\n\t\t\t\t// but prevent crazy spikes\n\t\t\t\tvar v_trans_lensq = ( v_trans_x * v_trans_x + v_trans_y * v_trans_y );\n\t\t\t\tif ( v_trans_lensq <= 2 ) {\n\n\t\t\t\t\treturn new Vector2( v_trans_x, v_trans_y );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tshrink_by = Math.sqrt( v_trans_lensq / 2 );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// handle special case of collinear edges\n\n\t\t\t\tvar direction_eq = false; // assumes: opposite\n\t\t\t\tif ( v_prev_x > Number.EPSILON ) {\n\n\t\t\t\t\tif ( v_next_x > Number.EPSILON ) {\n\n\t\t\t\t\t\tdirection_eq = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( v_prev_x < - Number.EPSILON ) {\n\n\t\t\t\t\t\tif ( v_next_x < - Number.EPSILON ) {\n\n\t\t\t\t\t\t\tdirection_eq = true;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( Math.sign( v_prev_y ) === Math.sign( v_next_y ) ) {\n\n\t\t\t\t\t\t\tdirection_eq = true;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( direction_eq ) {\n\n\t\t\t\t\t// console.log(\"Warning: lines are a straight sequence\");\n\t\t\t\t\tv_trans_x = - v_prev_y;\n\t\t\t\t\tv_trans_y = v_prev_x;\n\t\t\t\t\tshrink_by = Math.sqrt( v_prev_lensq );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// console.log(\"Warning: lines are a straight spike\");\n\t\t\t\t\tv_trans_x = v_prev_x;\n\t\t\t\t\tv_trans_y = v_prev_y;\n\t\t\t\t\tshrink_by = Math.sqrt( v_prev_lensq / 2 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn new Vector2( v_trans_x / shrink_by, v_trans_y / shrink_by );\n\n\t\t}\n\n\n\t\tvar contourMovements = [];\n\n\t\tfor ( var i = 0, il = contour.length, j = il - 1, k = i + 1; i < il; i ++, j ++, k ++ ) {\n\n\t\t\tif ( j === il ) j = 0;\n\t\t\tif ( k === il ) k = 0;\n\n\t\t\t// (j)---(i)---(k)\n\t\t\t// console.log('i,j,k', i, j , k)\n\n\t\t\tcontourMovements[ i ] = getBevelVec( contour[ i ], contour[ j ], contour[ k ] );\n\n\t\t}\n\n\t\tvar holesMovements = [],\n\t\t\toneHoleMovements, verticesMovements = contourMovements.concat();\n\n\t\tfor ( h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\tahole = holes[ h ];\n\n\t\t\toneHoleMovements = [];\n\n\t\t\tfor ( i = 0, il = ahole.length, j = il - 1, k = i + 1; i < il; i ++, j ++, k ++ ) {\n\n\t\t\t\tif ( j === il ) j = 0;\n\t\t\t\tif ( k === il ) k = 0;\n\n\t\t\t\t// (j)---(i)---(k)\n\t\t\t\toneHoleMovements[ i ] = getBevelVec( ahole[ i ], ahole[ j ], ahole[ k ] );\n\n\t\t\t}\n\n\t\t\tholesMovements.push( oneHoleMovements );\n\t\t\tverticesMovements = verticesMovements.concat( oneHoleMovements );\n\n\t\t}\n\n\n\t\t// Loop bevelSegments, 1 for the front, 1 for the back\n\n\t\tfor ( b = 0; b < bevelSegments; b ++ ) {\n\n\t\t\t//for ( b = bevelSegments; b > 0; b -- ) {\n\n\t\t\tt = b / bevelSegments;\n\t\t\tz = bevelThickness * Math.cos( t * Math.PI / 2 );\n\t\t\tbs = bevelSize * Math.sin( t * Math.PI / 2 );\n\n\t\t\t// contract shape\n\n\t\t\tfor ( i = 0, il = contour.length; i < il; i ++ ) {\n\n\t\t\t\tvert = scalePt2( contour[ i ], contourMovements[ i ], bs );\n\n\t\t\t\tv( vert.x, vert.y, - z );\n\n\t\t\t}\n\n\t\t\t// expand holes\n\n\t\t\tfor ( h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\tahole = holes[ h ];\n\t\t\t\toneHoleMovements = holesMovements[ h ];\n\n\t\t\t\tfor ( i = 0, il = ahole.length; i < il; i ++ ) {\n\n\t\t\t\t\tvert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs );\n\n\t\t\t\t\tv( vert.x, vert.y, - z );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tbs = bevelSize;\n\n\t\t// Back facing vertices\n\n\t\tfor ( i = 0; i < vlen; i ++ ) {\n\n\t\t\tvert = bevelEnabled ? scalePt2( vertices[ i ], verticesMovements[ i ], bs ) : vertices[ i ];\n\n\t\t\tif ( ! extrudeByPath ) {\n\n\t\t\t\tv( vert.x, vert.y, 0 );\n\n\t\t\t} else {\n\n\t\t\t\t// v( vert.x, vert.y + extrudePts[ 0 ].y, extrudePts[ 0 ].x );\n\n\t\t\t\tnormal.copy( splineTube.normals[ 0 ] ).multiplyScalar( vert.x );\n\t\t\t\tbinormal.copy( splineTube.binormals[ 0 ] ).multiplyScalar( vert.y );\n\n\t\t\t\tposition2.copy( extrudePts[ 0 ] ).add( normal ).add( binormal );\n\n\t\t\t\tv( position2.x, position2.y, position2.z );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Add stepped vertices...\n\t\t// Including front facing vertices\n\n\t\tvar s;\n\n\t\tfor ( s = 1; s <= steps; s ++ ) {\n\n\t\t\tfor ( i = 0; i < vlen; i ++ ) {\n\n\t\t\t\tvert = bevelEnabled ? scalePt2( vertices[ i ], verticesMovements[ i ], bs ) : vertices[ i ];\n\n\t\t\t\tif ( ! extrudeByPath ) {\n\n\t\t\t\t\tv( vert.x, vert.y, amount / steps * s );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// v( vert.x, vert.y + extrudePts[ s - 1 ].y, extrudePts[ s - 1 ].x );\n\n\t\t\t\t\tnormal.copy( splineTube.normals[ s ] ).multiplyScalar( vert.x );\n\t\t\t\t\tbinormal.copy( splineTube.binormals[ s ] ).multiplyScalar( vert.y );\n\n\t\t\t\t\tposition2.copy( extrudePts[ s ] ).add( normal ).add( binormal );\n\n\t\t\t\t\tv( position2.x, position2.y, position2.z );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\n\t\t// Add bevel segments planes\n\n\t\t//for ( b = 1; b <= bevelSegments; b ++ ) {\n\t\tfor ( b = bevelSegments - 1; b >= 0; b -- ) {\n\n\t\t\tt = b / bevelSegments;\n\t\t\tz = bevelThickness * Math.cos( t * Math.PI / 2 );\n\t\t\tbs = bevelSize * Math.sin( t * Math.PI / 2 );\n\n\t\t\t// contract shape\n\n\t\t\tfor ( i = 0, il = contour.length; i < il; i ++ ) {\n\n\t\t\t\tvert = scalePt2( contour[ i ], contourMovements[ i ], bs );\n\t\t\t\tv( vert.x, vert.y, amount + z );\n\n\t\t\t}\n\n\t\t\t// expand holes\n\n\t\t\tfor ( h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\tahole = holes[ h ];\n\t\t\t\toneHoleMovements = holesMovements[ h ];\n\n\t\t\t\tfor ( i = 0, il = ahole.length; i < il; i ++ ) {\n\n\t\t\t\t\tvert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs );\n\n\t\t\t\t\tif ( ! extrudeByPath ) {\n\n\t\t\t\t\t\tv( vert.x, vert.y, amount + z );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tv( vert.x, vert.y + extrudePts[ steps - 1 ].y, extrudePts[ steps - 1 ].x + z );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t/* Faces */\n\n\t\t// Top and bottom faces\n\n\t\tbuildLidFaces();\n\n\t\t// Sides faces\n\n\t\tbuildSideFaces();\n\n\n\t\t///// Internal functions\n\n\t\tfunction buildLidFaces() {\n\n\t\t\tvar start = verticesArray.length / 3;\n\n\t\t\tif ( bevelEnabled ) {\n\n\t\t\t\tvar layer = 0; // steps + 1\n\t\t\t\tvar offset = vlen * layer;\n\n\t\t\t\t// Bottom faces\n\n\t\t\t\tfor ( i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\tface = faces[ i ];\n\t\t\t\t\tf3( face[ 2 ] + offset, face[ 1 ] + offset, face[ 0 ] + offset );\n\n\t\t\t\t}\n\n\t\t\t\tlayer = steps + bevelSegments * 2;\n\t\t\t\toffset = vlen * layer;\n\n\t\t\t\t// Top faces\n\n\t\t\t\tfor ( i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\tface = faces[ i ];\n\t\t\t\t\tf3( face[ 0 ] + offset, face[ 1 ] + offset, face[ 2 ] + offset );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// Bottom faces\n\n\t\t\t\tfor ( i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\tface = faces[ i ];\n\t\t\t\t\tf3( face[ 2 ], face[ 1 ], face[ 0 ] );\n\n\t\t\t\t}\n\n\t\t\t\t// Top faces\n\n\t\t\t\tfor ( i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\tface = faces[ i ];\n\t\t\t\t\tf3( face[ 0 ] + vlen * steps, face[ 1 ] + vlen * steps, face[ 2 ] + vlen * steps );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tscope.addGroup( start, verticesArray.length / 3 - start, 0 );\n\n\t\t}\n\n\t\t// Create faces for the z-sides of the shape\n\n\t\tfunction buildSideFaces() {\n\n\t\t\tvar start = verticesArray.length / 3;\n\t\t\tvar layeroffset = 0;\n\t\t\tsidewalls( contour, layeroffset );\n\t\t\tlayeroffset += contour.length;\n\n\t\t\tfor ( h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\tahole = holes[ h ];\n\t\t\t\tsidewalls( ahole, layeroffset );\n\n\t\t\t\t//, true\n\t\t\t\tlayeroffset += ahole.length;\n\n\t\t\t}\n\n\n\t\t\tscope.addGroup( start, verticesArray.length / 3 - start, 1 );\n\n\n\t\t}\n\n\t\tfunction sidewalls( contour, layeroffset ) {\n\n\t\t\tvar j, k;\n\t\t\ti = contour.length;\n\n\t\t\twhile ( -- i >= 0 ) {\n\n\t\t\t\tj = i;\n\t\t\t\tk = i - 1;\n\t\t\t\tif ( k < 0 ) k = contour.length - 1;\n\n\t\t\t\t//console.log('b', i,j, i-1, k,vertices.length);\n\n\t\t\t\tvar s = 0,\n\t\t\t\t\tsl = steps + bevelSegments * 2;\n\n\t\t\t\tfor ( s = 0; s < sl; s ++ ) {\n\n\t\t\t\t\tvar slen1 = vlen * s;\n\t\t\t\t\tvar slen2 = vlen * ( s + 1 );\n\n\t\t\t\t\tvar a = layeroffset + j + slen1,\n\t\t\t\t\t\tb = layeroffset + k + slen1,\n\t\t\t\t\t\tc = layeroffset + k + slen2,\n\t\t\t\t\t\td = layeroffset + j + slen2;\n\n\t\t\t\t\tf4( a, b, c, d );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction v( x, y, z ) {\n\n\t\t\tplaceholder.push( x );\n\t\t\tplaceholder.push( y );\n\t\t\tplaceholder.push( z );\n\n\t\t}\n\n\n\t\tfunction f3( a, b, c ) {\n\n\t\t\taddVertex( a );\n\t\t\taddVertex( b );\n\t\t\taddVertex( c );\n\n\t\t\tvar nextIndex = verticesArray.length / 3;\n\t\t\tvar uvs = uvgen.generateTopUV( scope, verticesArray, nextIndex - 3, nextIndex - 2, nextIndex - 1 );\n\n\t\t\taddUV( uvs[ 0 ] );\n\t\t\taddUV( uvs[ 1 ] );\n\t\t\taddUV( uvs[ 2 ] );\n\n\t\t}\n\n\t\tfunction f4( a, b, c, d ) {\n\n\t\t\taddVertex( a );\n\t\t\taddVertex( b );\n\t\t\taddVertex( d );\n\n\t\t\taddVertex( b );\n\t\t\taddVertex( c );\n\t\t\taddVertex( d );\n\n\n\t\t\tvar nextIndex = verticesArray.length / 3;\n\t\t\tvar uvs = uvgen.generateSideWallUV( scope, verticesArray, nextIndex - 6, nextIndex - 3, nextIndex - 2, nextIndex - 1 );\n\n\t\t\taddUV( uvs[ 0 ] );\n\t\t\taddUV( uvs[ 1 ] );\n\t\t\taddUV( uvs[ 3 ] );\n\n\t\t\taddUV( uvs[ 1 ] );\n\t\t\taddUV( uvs[ 2 ] );\n\t\t\taddUV( uvs[ 3 ] );\n\n\t\t}\n\n\t\tfunction addVertex( index ) {\n\n\t\t\tverticesArray.push( placeholder[ index * 3 + 0 ] );\n\t\t\tverticesArray.push( placeholder[ index * 3 + 1 ] );\n\t\t\tverticesArray.push( placeholder[ index * 3 + 2 ] );\n\n\t\t}\n\n\n\t\tfunction addUV( vector2 ) {\n\n\t\t\tuvArray.push( vector2.x );\n\t\t\tuvArray.push( vector2.y );\n\n\t\t}\n\n\t}\n\n}\n\nExtrudeBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nExtrudeBufferGeometry.prototype.constructor = ExtrudeBufferGeometry;\n\nvar WorldUVGenerator = {\n\n\tgenerateTopUV: function ( geometry, vertices, indexA, indexB, indexC ) {\n\n\t\tvar a_x = vertices[ indexA * 3 ];\n\t\tvar a_y = vertices[ indexA * 3 + 1 ];\n\t\tvar b_x = vertices[ indexB * 3 ];\n\t\tvar b_y = vertices[ indexB * 3 + 1 ];\n\t\tvar c_x = vertices[ indexC * 3 ];\n\t\tvar c_y = vertices[ indexC * 3 + 1 ];\n\n\t\treturn [\n\t\t\tnew Vector2( a_x, a_y ),\n\t\t\tnew Vector2( b_x, b_y ),\n\t\t\tnew Vector2( c_x, c_y )\n\t\t];\n\n\t},\n\n\tgenerateSideWallUV: function ( geometry, vertices, indexA, indexB, indexC, indexD ) {\n\n\t\tvar a_x = vertices[ indexA * 3 ];\n\t\tvar a_y = vertices[ indexA * 3 + 1 ];\n\t\tvar a_z = vertices[ indexA * 3 + 2 ];\n\t\tvar b_x = vertices[ indexB * 3 ];\n\t\tvar b_y = vertices[ indexB * 3 + 1 ];\n\t\tvar b_z = vertices[ indexB * 3 + 2 ];\n\t\tvar c_x = vertices[ indexC * 3 ];\n\t\tvar c_y = vertices[ indexC * 3 + 1 ];\n\t\tvar c_z = vertices[ indexC * 3 + 2 ];\n\t\tvar d_x = vertices[ indexD * 3 ];\n\t\tvar d_y = vertices[ indexD * 3 + 1 ];\n\t\tvar d_z = vertices[ indexD * 3 + 2 ];\n\n\t\tif ( Math.abs( a_y - b_y ) < 0.01 ) {\n\n\t\t\treturn [\n\t\t\t\tnew Vector2( a_x, 1 - a_z ),\n\t\t\t\tnew Vector2( b_x, 1 - b_z ),\n\t\t\t\tnew Vector2( c_x, 1 - c_z ),\n\t\t\t\tnew Vector2( d_x, 1 - d_z )\n\t\t\t];\n\n\t\t} else {\n\n\t\t\treturn [\n\t\t\t\tnew Vector2( a_y, 1 - a_z ),\n\t\t\t\tnew Vector2( b_y, 1 - b_z ),\n\t\t\t\tnew Vector2( c_y, 1 - c_z ),\n\t\t\t\tnew Vector2( d_y, 1 - d_z )\n\t\t\t];\n\n\t\t}\n\n\t}\n};\n\n/**\n * @author zz85 / http://www.lab4games.net/zz85/blog\n * @author alteredq / http://alteredqualia.com/\n *\n * Text = 3D Text\n *\n * parameters = {\n * font: , // font\n *\n * size: , // size of the text\n * height: , // thickness to extrude text\n * curveSegments: , // number of points on the curves\n *\n * bevelEnabled: , // turn on bevel\n * bevelThickness: , // how deep into text bevel goes\n * bevelSize: // how far from text outline is bevel\n * }\n */\n\n// TextGeometry\n\nfunction TextGeometry( text, parameters ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'TextGeometry';\n\n\tthis.parameters = {\n\t\ttext: text,\n\t\tparameters: parameters\n\t};\n\n\tthis.fromBufferGeometry( new TextBufferGeometry( text, parameters ) );\n\tthis.mergeVertices();\n\n}\n\nTextGeometry.prototype = Object.create( Geometry.prototype );\nTextGeometry.prototype.constructor = TextGeometry;\n\n// TextBufferGeometry\n\nfunction TextBufferGeometry( text, parameters ) {\n\n\tparameters = parameters || {};\n\n\tvar font = parameters.font;\n\n\tif ( ! ( font && font.isFont ) ) {\n\n\t\tconsole.error( 'THREE.TextGeometry: font parameter is not an instance of THREE.Font.' );\n\t\treturn new Geometry();\n\n\t}\n\n\tvar shapes = font.generateShapes( text, parameters.size, parameters.curveSegments );\n\n\t// translate parameters to ExtrudeGeometry API\n\n\tparameters.amount = parameters.height !== undefined ? parameters.height : 50;\n\n\t// defaults\n\n\tif ( parameters.bevelThickness === undefined ) parameters.bevelThickness = 10;\n\tif ( parameters.bevelSize === undefined ) parameters.bevelSize = 8;\n\tif ( parameters.bevelEnabled === undefined ) parameters.bevelEnabled = false;\n\n\tExtrudeBufferGeometry.call( this, shapes, parameters );\n\n\tthis.type = 'TextBufferGeometry';\n\n}\n\nTextBufferGeometry.prototype = Object.create( ExtrudeBufferGeometry.prototype );\nTextBufferGeometry.prototype.constructor = TextBufferGeometry;\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author benaadams / https://twitter.com/ben_a_adams\n * @author Mugen87 / https://github.com/Mugen87\n */\n\n// SphereGeometry\n\nfunction SphereGeometry( radius, widthSegments, heightSegments, phiStart, phiLength, thetaStart, thetaLength ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'SphereGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\twidthSegments: widthSegments,\n\t\theightSegments: heightSegments,\n\t\tphiStart: phiStart,\n\t\tphiLength: phiLength,\n\t\tthetaStart: thetaStart,\n\t\tthetaLength: thetaLength\n\t};\n\n\tthis.fromBufferGeometry( new SphereBufferGeometry( radius, widthSegments, heightSegments, phiStart, phiLength, thetaStart, thetaLength ) );\n\tthis.mergeVertices();\n\n}\n\nSphereGeometry.prototype = Object.create( Geometry.prototype );\nSphereGeometry.prototype.constructor = SphereGeometry;\n\n// SphereBufferGeometry\n\nfunction SphereBufferGeometry( radius, widthSegments, heightSegments, phiStart, phiLength, thetaStart, thetaLength ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'SphereBufferGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\twidthSegments: widthSegments,\n\t\theightSegments: heightSegments,\n\t\tphiStart: phiStart,\n\t\tphiLength: phiLength,\n\t\tthetaStart: thetaStart,\n\t\tthetaLength: thetaLength\n\t};\n\n\tradius = radius || 1;\n\n\twidthSegments = Math.max( 3, Math.floor( widthSegments ) || 8 );\n\theightSegments = Math.max( 2, Math.floor( heightSegments ) || 6 );\n\n\tphiStart = phiStart !== undefined ? phiStart : 0;\n\tphiLength = phiLength !== undefined ? phiLength : Math.PI * 2;\n\n\tthetaStart = thetaStart !== undefined ? thetaStart : 0;\n\tthetaLength = thetaLength !== undefined ? thetaLength : Math.PI;\n\n\tvar thetaEnd = thetaStart + thetaLength;\n\n\tvar ix, iy;\n\n\tvar index = 0;\n\tvar grid = [];\n\n\tvar vertex = new Vector3();\n\tvar normal = new Vector3();\n\n\t// buffers\n\n\tvar indices = [];\n\tvar vertices = [];\n\tvar normals = [];\n\tvar uvs = [];\n\n\t// generate vertices, normals and uvs\n\n\tfor ( iy = 0; iy <= heightSegments; iy ++ ) {\n\n\t\tvar verticesRow = [];\n\n\t\tvar v = iy / heightSegments;\n\n\t\tfor ( ix = 0; ix <= widthSegments; ix ++ ) {\n\n\t\t\tvar u = ix / widthSegments;\n\n\t\t\t// vertex\n\n\t\t\tvertex.x = - radius * Math.cos( phiStart + u * phiLength ) * Math.sin( thetaStart + v * thetaLength );\n\t\t\tvertex.y = radius * Math.cos( thetaStart + v * thetaLength );\n\t\t\tvertex.z = radius * Math.sin( phiStart + u * phiLength ) * Math.sin( thetaStart + v * thetaLength );\n\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t// normal\n\n\t\t\tnormal.set( vertex.x, vertex.y, vertex.z ).normalize();\n\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t// uv\n\n\t\t\tuvs.push( u, 1 - v );\n\n\t\t\tverticesRow.push( index ++ );\n\n\t\t}\n\n\t\tgrid.push( verticesRow );\n\n\t}\n\n\t// indices\n\n\tfor ( iy = 0; iy < heightSegments; iy ++ ) {\n\n\t\tfor ( ix = 0; ix < widthSegments; ix ++ ) {\n\n\t\t\tvar a = grid[ iy ][ ix + 1 ];\n\t\t\tvar b = grid[ iy ][ ix ];\n\t\t\tvar c = grid[ iy + 1 ][ ix ];\n\t\t\tvar d = grid[ iy + 1 ][ ix + 1 ];\n\n\t\t\tif ( iy !== 0 || thetaStart > 0 ) indices.push( a, b, d );\n\t\t\tif ( iy !== heightSegments - 1 || thetaEnd < Math.PI ) indices.push( b, c, d );\n\n\t\t}\n\n\t}\n\n\t// build geometry\n\n\tthis.setIndex( indices );\n\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n}\n\nSphereBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nSphereBufferGeometry.prototype.constructor = SphereBufferGeometry;\n\n/**\n * @author Kaleb Murphy\n * @author Mugen87 / https://github.com/Mugen87\n */\n\n// RingGeometry\n\nfunction RingGeometry( innerRadius, outerRadius, thetaSegments, phiSegments, thetaStart, thetaLength ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'RingGeometry';\n\n\tthis.parameters = {\n\t\tinnerRadius: innerRadius,\n\t\touterRadius: outerRadius,\n\t\tthetaSegments: thetaSegments,\n\t\tphiSegments: phiSegments,\n\t\tthetaStart: thetaStart,\n\t\tthetaLength: thetaLength\n\t};\n\n\tthis.fromBufferGeometry( new RingBufferGeometry( innerRadius, outerRadius, thetaSegments, phiSegments, thetaStart, thetaLength ) );\n\tthis.mergeVertices();\n\n}\n\nRingGeometry.prototype = Object.create( Geometry.prototype );\nRingGeometry.prototype.constructor = RingGeometry;\n\n// RingBufferGeometry\n\nfunction RingBufferGeometry( innerRadius, outerRadius, thetaSegments, phiSegments, thetaStart, thetaLength ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'RingBufferGeometry';\n\n\tthis.parameters = {\n\t\tinnerRadius: innerRadius,\n\t\touterRadius: outerRadius,\n\t\tthetaSegments: thetaSegments,\n\t\tphiSegments: phiSegments,\n\t\tthetaStart: thetaStart,\n\t\tthetaLength: thetaLength\n\t};\n\n\tinnerRadius = innerRadius || 0.5;\n\touterRadius = outerRadius || 1;\n\n\tthetaStart = thetaStart !== undefined ? thetaStart : 0;\n\tthetaLength = thetaLength !== undefined ? thetaLength : Math.PI * 2;\n\n\tthetaSegments = thetaSegments !== undefined ? Math.max( 3, thetaSegments ) : 8;\n\tphiSegments = phiSegments !== undefined ? Math.max( 1, phiSegments ) : 1;\n\n\t// buffers\n\n\tvar indices = [];\n\tvar vertices = [];\n\tvar normals = [];\n\tvar uvs = [];\n\n\t// some helper variables\n\n\tvar segment;\n\tvar radius = innerRadius;\n\tvar radiusStep = ( ( outerRadius - innerRadius ) / phiSegments );\n\tvar vertex = new Vector3();\n\tvar uv = new Vector2();\n\tvar j, i;\n\n\t// generate vertices, normals and uvs\n\n\tfor ( j = 0; j <= phiSegments; j ++ ) {\n\n\t\tfor ( i = 0; i <= thetaSegments; i ++ ) {\n\n\t\t\t// values are generate from the inside of the ring to the outside\n\n\t\t\tsegment = thetaStart + i / thetaSegments * thetaLength;\n\n\t\t\t// vertex\n\n\t\t\tvertex.x = radius * Math.cos( segment );\n\t\t\tvertex.y = radius * Math.sin( segment );\n\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t// normal\n\n\t\t\tnormals.push( 0, 0, 1 );\n\n\t\t\t// uv\n\n\t\t\tuv.x = ( vertex.x / outerRadius + 1 ) / 2;\n\t\t\tuv.y = ( vertex.y / outerRadius + 1 ) / 2;\n\n\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t}\n\n\t\t// increase the radius for next row of vertices\n\n\t\tradius += radiusStep;\n\n\t}\n\n\t// indices\n\n\tfor ( j = 0; j < phiSegments; j ++ ) {\n\n\t\tvar thetaSegmentLevel = j * ( thetaSegments + 1 );\n\n\t\tfor ( i = 0; i < thetaSegments; i ++ ) {\n\n\t\t\tsegment = i + thetaSegmentLevel;\n\n\t\t\tvar a = segment;\n\t\t\tvar b = segment + thetaSegments + 1;\n\t\t\tvar c = segment + thetaSegments + 2;\n\t\t\tvar d = segment + 1;\n\n\t\t\t// faces\n\n\t\t\tindices.push( a, b, d );\n\t\t\tindices.push( b, c, d );\n\n\t\t}\n\n\t}\n\n\t// build geometry\n\n\tthis.setIndex( indices );\n\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n}\n\nRingBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nRingBufferGeometry.prototype.constructor = RingBufferGeometry;\n\n/**\n * @author astrodud / http://astrodud.isgreat.org/\n * @author zz85 / https://github.com/zz85\n * @author bhouston / http://clara.io\n * @author Mugen87 / https://github.com/Mugen87\n */\n\n// LatheGeometry\n\nfunction LatheGeometry( points, segments, phiStart, phiLength ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'LatheGeometry';\n\n\tthis.parameters = {\n\t\tpoints: points,\n\t\tsegments: segments,\n\t\tphiStart: phiStart,\n\t\tphiLength: phiLength\n\t};\n\n\tthis.fromBufferGeometry( new LatheBufferGeometry( points, segments, phiStart, phiLength ) );\n\tthis.mergeVertices();\n\n}\n\nLatheGeometry.prototype = Object.create( Geometry.prototype );\nLatheGeometry.prototype.constructor = LatheGeometry;\n\n// LatheBufferGeometry\n\nfunction LatheBufferGeometry( points, segments, phiStart, phiLength ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'LatheBufferGeometry';\n\n\tthis.parameters = {\n\t\tpoints: points,\n\t\tsegments: segments,\n\t\tphiStart: phiStart,\n\t\tphiLength: phiLength\n\t};\n\n\tsegments = Math.floor( segments ) || 12;\n\tphiStart = phiStart || 0;\n\tphiLength = phiLength || Math.PI * 2;\n\n\t// clamp phiLength so it's in range of [ 0, 2PI ]\n\n\tphiLength = _Math.clamp( phiLength, 0, Math.PI * 2 );\n\n\n\t// buffers\n\n\tvar indices = [];\n\tvar vertices = [];\n\tvar uvs = [];\n\n\t// helper variables\n\n\tvar base;\n\tvar inverseSegments = 1.0 / segments;\n\tvar vertex = new Vector3();\n\tvar uv = new Vector2();\n\tvar i, j;\n\n\t// generate vertices and uvs\n\n\tfor ( i = 0; i <= segments; i ++ ) {\n\n\t\tvar phi = phiStart + i * inverseSegments * phiLength;\n\n\t\tvar sin = Math.sin( phi );\n\t\tvar cos = Math.cos( phi );\n\n\t\tfor ( j = 0; j <= ( points.length - 1 ); j ++ ) {\n\n\t\t\t// vertex\n\n\t\t\tvertex.x = points[ j ].x * sin;\n\t\t\tvertex.y = points[ j ].y;\n\t\t\tvertex.z = points[ j ].x * cos;\n\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t// uv\n\n\t\t\tuv.x = i / segments;\n\t\t\tuv.y = j / ( points.length - 1 );\n\n\t\t\tuvs.push( uv.x, uv.y );\n\n\n\t\t}\n\n\t}\n\n\t// indices\n\n\tfor ( i = 0; i < segments; i ++ ) {\n\n\t\tfor ( j = 0; j < ( points.length - 1 ); j ++ ) {\n\n\t\t\tbase = j + i * points.length;\n\n\t\t\tvar a = base;\n\t\t\tvar b = base + points.length;\n\t\t\tvar c = base + points.length + 1;\n\t\t\tvar d = base + 1;\n\n\t\t\t// faces\n\n\t\t\tindices.push( a, b, d );\n\t\t\tindices.push( b, c, d );\n\n\t\t}\n\n\t}\n\n\t// build geometry\n\n\tthis.setIndex( indices );\n\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t// generate normals\n\n\tthis.computeVertexNormals();\n\n\t// if the geometry is closed, we need to average the normals along the seam.\n\t// because the corresponding vertices are identical (but still have different UVs).\n\n\tif ( phiLength === Math.PI * 2 ) {\n\n\t\tvar normals = this.attributes.normal.array;\n\t\tvar n1 = new Vector3();\n\t\tvar n2 = new Vector3();\n\t\tvar n = new Vector3();\n\n\t\t// this is the buffer offset for the last line of vertices\n\n\t\tbase = segments * points.length * 3;\n\n\t\tfor ( i = 0, j = 0; i < points.length; i ++, j += 3 ) {\n\n\t\t\t// select the normal of the vertex in the first line\n\n\t\t\tn1.x = normals[ j + 0 ];\n\t\t\tn1.y = normals[ j + 1 ];\n\t\t\tn1.z = normals[ j + 2 ];\n\n\t\t\t// select the normal of the vertex in the last line\n\n\t\t\tn2.x = normals[ base + j + 0 ];\n\t\t\tn2.y = normals[ base + j + 1 ];\n\t\t\tn2.z = normals[ base + j + 2 ];\n\n\t\t\t// average normals\n\n\t\t\tn.addVectors( n1, n2 ).normalize();\n\n\t\t\t// assign the new values to both normals\n\n\t\t\tnormals[ j + 0 ] = normals[ base + j + 0 ] = n.x;\n\t\t\tnormals[ j + 1 ] = normals[ base + j + 1 ] = n.y;\n\t\t\tnormals[ j + 2 ] = normals[ base + j + 2 ] = n.z;\n\n\t\t}\n\n\t}\n\n}\n\nLatheBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nLatheBufferGeometry.prototype.constructor = LatheBufferGeometry;\n\n/**\n * @author jonobr1 / http://jonobr1.com\n * @author Mugen87 / https://github.com/Mugen87\n */\n\n// ShapeGeometry\n\nfunction ShapeGeometry( shapes, curveSegments ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'ShapeGeometry';\n\n\tif ( typeof curveSegments === 'object' ) {\n\n\t\tconsole.warn( 'THREE.ShapeGeometry: Options parameter has been removed.' );\n\n\t\tcurveSegments = curveSegments.curveSegments;\n\n\t}\n\n\tthis.parameters = {\n\t\tshapes: shapes,\n\t\tcurveSegments: curveSegments\n\t};\n\n\tthis.fromBufferGeometry( new ShapeBufferGeometry( shapes, curveSegments ) );\n\tthis.mergeVertices();\n\n}\n\nShapeGeometry.prototype = Object.create( Geometry.prototype );\nShapeGeometry.prototype.constructor = ShapeGeometry;\n\nShapeGeometry.prototype.toJSON = function () {\n\n\tvar data = Geometry.prototype.toJSON.call( this );\n\n\tvar shapes = this.parameters.shapes;\n\n\treturn toJSON( shapes, data );\n\n};\n\n// ShapeBufferGeometry\n\nfunction ShapeBufferGeometry( shapes, curveSegments ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'ShapeBufferGeometry';\n\n\tthis.parameters = {\n\t\tshapes: shapes,\n\t\tcurveSegments: curveSegments\n\t};\n\n\tcurveSegments = curveSegments || 12;\n\n\t// buffers\n\n\tvar indices = [];\n\tvar vertices = [];\n\tvar normals = [];\n\tvar uvs = [];\n\n\t// helper variables\n\n\tvar groupStart = 0;\n\tvar groupCount = 0;\n\n\t// allow single and array values for \"shapes\" parameter\n\n\tif ( Array.isArray( shapes ) === false ) {\n\n\t\taddShape( shapes );\n\n\t} else {\n\n\t\tfor ( var i = 0; i < shapes.length; i ++ ) {\n\n\t\t\taddShape( shapes[ i ] );\n\n\t\t\tthis.addGroup( groupStart, groupCount, i ); // enables MultiMaterial support\n\n\t\t\tgroupStart += groupCount;\n\t\t\tgroupCount = 0;\n\n\t\t}\n\n\t}\n\n\t// build geometry\n\n\tthis.setIndex( indices );\n\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\n\t// helper functions\n\n\tfunction addShape( shape ) {\n\n\t\tvar i, l, shapeHole;\n\n\t\tvar indexOffset = vertices.length / 3;\n\t\tvar points = shape.extractPoints( curveSegments );\n\n\t\tvar shapeVertices = points.shape;\n\t\tvar shapeHoles = points.holes;\n\n\t\t// check direction of vertices\n\n\t\tif ( ShapeUtils.isClockWise( shapeVertices ) === false ) {\n\n\t\t\tshapeVertices = shapeVertices.reverse();\n\n\t\t\t// also check if holes are in the opposite direction\n\n\t\t\tfor ( i = 0, l = shapeHoles.length; i < l; i ++ ) {\n\n\t\t\t\tshapeHole = shapeHoles[ i ];\n\n\t\t\t\tif ( ShapeUtils.isClockWise( shapeHole ) === true ) {\n\n\t\t\t\t\tshapeHoles[ i ] = shapeHole.reverse();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar faces = ShapeUtils.triangulateShape( shapeVertices, shapeHoles );\n\n\t\t// join vertices of inner and outer paths to a single array\n\n\t\tfor ( i = 0, l = shapeHoles.length; i < l; i ++ ) {\n\n\t\t\tshapeHole = shapeHoles[ i ];\n\t\t\tshapeVertices = shapeVertices.concat( shapeHole );\n\n\t\t}\n\n\t\t// vertices, normals, uvs\n\n\t\tfor ( i = 0, l = shapeVertices.length; i < l; i ++ ) {\n\n\t\t\tvar vertex = shapeVertices[ i ];\n\n\t\t\tvertices.push( vertex.x, vertex.y, 0 );\n\t\t\tnormals.push( 0, 0, 1 );\n\t\t\tuvs.push( vertex.x, vertex.y ); // world uvs\n\n\t\t}\n\n\t\t// incides\n\n\t\tfor ( i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\t\tvar face = faces[ i ];\n\n\t\t\tvar a = face[ 0 ] + indexOffset;\n\t\t\tvar b = face[ 1 ] + indexOffset;\n\t\t\tvar c = face[ 2 ] + indexOffset;\n\n\t\t\tindices.push( a, b, c );\n\t\t\tgroupCount += 3;\n\n\t\t}\n\n\t}\n\n}\n\nShapeBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nShapeBufferGeometry.prototype.constructor = ShapeBufferGeometry;\n\nShapeBufferGeometry.prototype.toJSON = function () {\n\n\tvar data = BufferGeometry.prototype.toJSON.call( this );\n\n\tvar shapes = this.parameters.shapes;\n\n\treturn toJSON( shapes, data );\n\n};\n\n//\n\nfunction toJSON( shapes, data ) {\n\n\tdata.shapes = [];\n\n\tif ( Array.isArray( shapes ) ) {\n\n\t\tfor ( var i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\tvar shape = shapes[ i ];\n\n\t\t\tdata.shapes.push( shape.uuid );\n\n\t\t}\n\n\t} else {\n\n\t\tdata.shapes.push( shapes.uuid );\n\n\t}\n\n\treturn data;\n\n}\n\n/**\n * @author WestLangley / http://github.com/WestLangley\n * @author Mugen87 / https://github.com/Mugen87\n */\n\nfunction EdgesGeometry( geometry, thresholdAngle ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'EdgesGeometry';\n\n\tthis.parameters = {\n\t\tthresholdAngle: thresholdAngle\n\t};\n\n\tthresholdAngle = ( thresholdAngle !== undefined ) ? thresholdAngle : 1;\n\n\t// buffer\n\n\tvar vertices = [];\n\n\t// helper variables\n\n\tvar thresholdDot = Math.cos( _Math.DEG2RAD * thresholdAngle );\n\tvar edge = [ 0, 0 ], edges = {}, edge1, edge2;\n\tvar key, keys = [ 'a', 'b', 'c' ];\n\n\t// prepare source geometry\n\n\tvar geometry2;\n\n\tif ( geometry.isBufferGeometry ) {\n\n\t\tgeometry2 = new Geometry();\n\t\tgeometry2.fromBufferGeometry( geometry );\n\n\t} else {\n\n\t\tgeometry2 = geometry.clone();\n\n\t}\n\n\tgeometry2.mergeVertices();\n\tgeometry2.computeFaceNormals();\n\n\tvar sourceVertices = geometry2.vertices;\n\tvar faces = geometry2.faces;\n\n\t// now create a data structure where each entry represents an edge with its adjoining faces\n\n\tfor ( var i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\tvar face = faces[ i ];\n\n\t\tfor ( var j = 0; j < 3; j ++ ) {\n\n\t\t\tedge1 = face[ keys[ j ] ];\n\t\t\tedge2 = face[ keys[ ( j + 1 ) % 3 ] ];\n\t\t\tedge[ 0 ] = Math.min( edge1, edge2 );\n\t\t\tedge[ 1 ] = Math.max( edge1, edge2 );\n\n\t\t\tkey = edge[ 0 ] + ',' + edge[ 1 ];\n\n\t\t\tif ( edges[ key ] === undefined ) {\n\n\t\t\t\tedges[ key ] = { index1: edge[ 0 ], index2: edge[ 1 ], face1: i, face2: undefined };\n\n\t\t\t} else {\n\n\t\t\t\tedges[ key ].face2 = i;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t// generate vertices\n\n\tfor ( key in edges ) {\n\n\t\tvar e = edges[ key ];\n\n\t\t// an edge is only rendered if the angle (in degrees) between the face normals of the adjoining faces exceeds this value. default = 1 degree.\n\n\t\tif ( e.face2 === undefined || faces[ e.face1 ].normal.dot( faces[ e.face2 ].normal ) <= thresholdDot ) {\n\n\t\t\tvar vertex = sourceVertices[ e.index1 ];\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\tvertex = sourceVertices[ e.index2 ];\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t}\n\n\t}\n\n\t// build geometry\n\n\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\n}\n\nEdgesGeometry.prototype = Object.create( BufferGeometry.prototype );\nEdgesGeometry.prototype.constructor = EdgesGeometry;\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author Mugen87 / https://github.com/Mugen87\n */\n\n// CylinderGeometry\n\nfunction CylinderGeometry( radiusTop, radiusBottom, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'CylinderGeometry';\n\n\tthis.parameters = {\n\t\tradiusTop: radiusTop,\n\t\tradiusBottom: radiusBottom,\n\t\theight: height,\n\t\tradialSegments: radialSegments,\n\t\theightSegments: heightSegments,\n\t\topenEnded: openEnded,\n\t\tthetaStart: thetaStart,\n\t\tthetaLength: thetaLength\n\t};\n\n\tthis.fromBufferGeometry( new CylinderBufferGeometry( radiusTop, radiusBottom, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) );\n\tthis.mergeVertices();\n\n}\n\nCylinderGeometry.prototype = Object.create( Geometry.prototype );\nCylinderGeometry.prototype.constructor = CylinderGeometry;\n\n// CylinderBufferGeometry\n\nfunction CylinderBufferGeometry( radiusTop, radiusBottom, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'CylinderBufferGeometry';\n\n\tthis.parameters = {\n\t\tradiusTop: radiusTop,\n\t\tradiusBottom: radiusBottom,\n\t\theight: height,\n\t\tradialSegments: radialSegments,\n\t\theightSegments: heightSegments,\n\t\topenEnded: openEnded,\n\t\tthetaStart: thetaStart,\n\t\tthetaLength: thetaLength\n\t};\n\n\tvar scope = this;\n\n\tradiusTop = radiusTop !== undefined ? radiusTop : 1;\n\tradiusBottom = radiusBottom !== undefined ? radiusBottom : 1;\n\theight = height || 1;\n\n\tradialSegments = Math.floor( radialSegments ) || 8;\n\theightSegments = Math.floor( heightSegments ) || 1;\n\n\topenEnded = openEnded !== undefined ? openEnded : false;\n\tthetaStart = thetaStart !== undefined ? thetaStart : 0.0;\n\tthetaLength = thetaLength !== undefined ? thetaLength : Math.PI * 2;\n\n\t// buffers\n\n\tvar indices = [];\n\tvar vertices = [];\n\tvar normals = [];\n\tvar uvs = [];\n\n\t// helper variables\n\n\tvar index = 0;\n\tvar indexArray = [];\n\tvar halfHeight = height / 2;\n\tvar groupStart = 0;\n\n\t// generate geometry\n\n\tgenerateTorso();\n\n\tif ( openEnded === false ) {\n\n\t\tif ( radiusTop > 0 ) generateCap( true );\n\t\tif ( radiusBottom > 0 ) generateCap( false );\n\n\t}\n\n\t// build geometry\n\n\tthis.setIndex( indices );\n\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\tfunction generateTorso() {\n\n\t\tvar x, y;\n\t\tvar normal = new Vector3();\n\t\tvar vertex = new Vector3();\n\n\t\tvar groupCount = 0;\n\n\t\t// this will be used to calculate the normal\n\t\tvar slope = ( radiusBottom - radiusTop ) / height;\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( y = 0; y <= heightSegments; y ++ ) {\n\n\t\t\tvar indexRow = [];\n\n\t\t\tvar v = y / heightSegments;\n\n\t\t\t// calculate the radius of the current row\n\n\t\t\tvar radius = v * ( radiusBottom - radiusTop ) + radiusTop;\n\n\t\t\tfor ( x = 0; x <= radialSegments; x ++ ) {\n\n\t\t\t\tvar u = x / radialSegments;\n\n\t\t\t\tvar theta = u * thetaLength + thetaStart;\n\n\t\t\t\tvar sinTheta = Math.sin( theta );\n\t\t\t\tvar cosTheta = Math.cos( theta );\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = radius * sinTheta;\n\t\t\t\tvertex.y = - v * height + halfHeight;\n\t\t\t\tvertex.z = radius * cosTheta;\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormal.set( sinTheta, slope, cosTheta ).normalize();\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t// uv\n\n\t\t\t\tuvs.push( u, 1 - v );\n\n\t\t\t\t// save index of vertex in respective row\n\n\t\t\t\tindexRow.push( index ++ );\n\n\t\t\t}\n\n\t\t\t// now save vertices of the row in our index array\n\n\t\t\tindexArray.push( indexRow );\n\n\t\t}\n\n\t\t// generate indices\n\n\t\tfor ( x = 0; x < radialSegments; x ++ ) {\n\n\t\t\tfor ( y = 0; y < heightSegments; y ++ ) {\n\n\t\t\t\t// we use the index array to access the correct indices\n\n\t\t\t\tvar a = indexArray[ y ][ x ];\n\t\t\t\tvar b = indexArray[ y + 1 ][ x ];\n\t\t\t\tvar c = indexArray[ y + 1 ][ x + 1 ];\n\t\t\t\tvar d = indexArray[ y ][ x + 1 ];\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t\t// update group counter\n\n\t\t\t\tgroupCount += 6;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// add a group to the geometry. this will ensure multi material support\n\n\t\tscope.addGroup( groupStart, groupCount, 0 );\n\n\t\t// calculate new start value for groups\n\n\t\tgroupStart += groupCount;\n\n\t}\n\n\tfunction generateCap( top ) {\n\n\t\tvar x, centerIndexStart, centerIndexEnd;\n\n\t\tvar uv = new Vector2();\n\t\tvar vertex = new Vector3();\n\n\t\tvar groupCount = 0;\n\n\t\tvar radius = ( top === true ) ? radiusTop : radiusBottom;\n\t\tvar sign = ( top === true ) ? 1 : - 1;\n\n\t\t// save the index of the first center vertex\n\t\tcenterIndexStart = index;\n\n\t\t// first we generate the center vertex data of the cap.\n\t\t// because the geometry needs one set of uvs per face,\n\t\t// we must generate a center vertex per face/segment\n\n\t\tfor ( x = 1; x <= radialSegments; x ++ ) {\n\n\t\t\t// vertex\n\n\t\t\tvertices.push( 0, halfHeight * sign, 0 );\n\n\t\t\t// normal\n\n\t\t\tnormals.push( 0, sign, 0 );\n\n\t\t\t// uv\n\n\t\t\tuvs.push( 0.5, 0.5 );\n\n\t\t\t// increase index\n\n\t\t\tindex ++;\n\n\t\t}\n\n\t\t// save the index of the last center vertex\n\n\t\tcenterIndexEnd = index;\n\n\t\t// now we generate the surrounding vertices, normals and uvs\n\n\t\tfor ( x = 0; x <= radialSegments; x ++ ) {\n\n\t\t\tvar u = x / radialSegments;\n\t\t\tvar theta = u * thetaLength + thetaStart;\n\n\t\t\tvar cosTheta = Math.cos( theta );\n\t\t\tvar sinTheta = Math.sin( theta );\n\n\t\t\t// vertex\n\n\t\t\tvertex.x = radius * sinTheta;\n\t\t\tvertex.y = halfHeight * sign;\n\t\t\tvertex.z = radius * cosTheta;\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t// normal\n\n\t\t\tnormals.push( 0, sign, 0 );\n\n\t\t\t// uv\n\n\t\t\tuv.x = ( cosTheta * 0.5 ) + 0.5;\n\t\t\tuv.y = ( sinTheta * 0.5 * sign ) + 0.5;\n\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\t// increase index\n\n\t\t\tindex ++;\n\n\t\t}\n\n\t\t// generate indices\n\n\t\tfor ( x = 0; x < radialSegments; x ++ ) {\n\n\t\t\tvar c = centerIndexStart + x;\n\t\t\tvar i = centerIndexEnd + x;\n\n\t\t\tif ( top === true ) {\n\n\t\t\t\t// face top\n\n\t\t\t\tindices.push( i, i + 1, c );\n\n\t\t\t} else {\n\n\t\t\t\t// face bottom\n\n\t\t\t\tindices.push( i + 1, i, c );\n\n\t\t\t}\n\n\t\t\tgroupCount += 3;\n\n\t\t}\n\n\t\t// add a group to the geometry. this will ensure multi material support\n\n\t\tscope.addGroup( groupStart, groupCount, top === true ? 1 : 2 );\n\n\t\t// calculate new start value for groups\n\n\t\tgroupStart += groupCount;\n\n\t}\n\n}\n\nCylinderBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nCylinderBufferGeometry.prototype.constructor = CylinderBufferGeometry;\n\n/**\n * @author abelnation / http://github.com/abelnation\n */\n\n// ConeGeometry\n\nfunction ConeGeometry( radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) {\n\n\tCylinderGeometry.call( this, 0, radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength );\n\n\tthis.type = 'ConeGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\theight: height,\n\t\tradialSegments: radialSegments,\n\t\theightSegments: heightSegments,\n\t\topenEnded: openEnded,\n\t\tthetaStart: thetaStart,\n\t\tthetaLength: thetaLength\n\t};\n\n}\n\nConeGeometry.prototype = Object.create( CylinderGeometry.prototype );\nConeGeometry.prototype.constructor = ConeGeometry;\n\n// ConeBufferGeometry\n\nfunction ConeBufferGeometry( radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) {\n\n\tCylinderBufferGeometry.call( this, 0, radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength );\n\n\tthis.type = 'ConeBufferGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\theight: height,\n\t\tradialSegments: radialSegments,\n\t\theightSegments: heightSegments,\n\t\topenEnded: openEnded,\n\t\tthetaStart: thetaStart,\n\t\tthetaLength: thetaLength\n\t};\n\n}\n\nConeBufferGeometry.prototype = Object.create( CylinderBufferGeometry.prototype );\nConeBufferGeometry.prototype.constructor = ConeBufferGeometry;\n\n/**\n * @author benaadams / https://twitter.com/ben_a_adams\n * @author Mugen87 / https://github.com/Mugen87\n * @author hughes\n */\n\n// CircleGeometry\n\nfunction CircleGeometry( radius, segments, thetaStart, thetaLength ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'CircleGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\tsegments: segments,\n\t\tthetaStart: thetaStart,\n\t\tthetaLength: thetaLength\n\t};\n\n\tthis.fromBufferGeometry( new CircleBufferGeometry( radius, segments, thetaStart, thetaLength ) );\n\tthis.mergeVertices();\n\n}\n\nCircleGeometry.prototype = Object.create( Geometry.prototype );\nCircleGeometry.prototype.constructor = CircleGeometry;\n\n// CircleBufferGeometry\n\nfunction CircleBufferGeometry( radius, segments, thetaStart, thetaLength ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'CircleBufferGeometry';\n\n\tthis.parameters = {\n\t\tradius: radius,\n\t\tsegments: segments,\n\t\tthetaStart: thetaStart,\n\t\tthetaLength: thetaLength\n\t};\n\n\tradius = radius || 1;\n\tsegments = segments !== undefined ? Math.max( 3, segments ) : 8;\n\n\tthetaStart = thetaStart !== undefined ? thetaStart : 0;\n\tthetaLength = thetaLength !== undefined ? thetaLength : Math.PI * 2;\n\n\t// buffers\n\n\tvar indices = [];\n\tvar vertices = [];\n\tvar normals = [];\n\tvar uvs = [];\n\n\t// helper variables\n\n\tvar i, s;\n\tvar vertex = new Vector3();\n\tvar uv = new Vector2();\n\n\t// center point\n\n\tvertices.push( 0, 0, 0 );\n\tnormals.push( 0, 0, 1 );\n\tuvs.push( 0.5, 0.5 );\n\n\tfor ( s = 0, i = 3; s <= segments; s ++, i += 3 ) {\n\n\t\tvar segment = thetaStart + s / segments * thetaLength;\n\n\t\t// vertex\n\n\t\tvertex.x = radius * Math.cos( segment );\n\t\tvertex.y = radius * Math.sin( segment );\n\n\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t// normal\n\n\t\tnormals.push( 0, 0, 1 );\n\n\t\t// uvs\n\n\t\tuv.x = ( vertices[ i ] / radius + 1 ) / 2;\n\t\tuv.y = ( vertices[ i + 1 ] / radius + 1 ) / 2;\n\n\t\tuvs.push( uv.x, uv.y );\n\n\t}\n\n\t// indices\n\n\tfor ( i = 1; i <= segments; i ++ ) {\n\n\t\tindices.push( i, i + 1, 0 );\n\n\t}\n\n\t// build geometry\n\n\tthis.setIndex( indices );\n\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n}\n\nCircleBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nCircleBufferGeometry.prototype.constructor = CircleBufferGeometry;\n\n\n\nvar Geometries = Object.freeze({\n\tWireframeGeometry: WireframeGeometry,\n\tParametricGeometry: ParametricGeometry,\n\tParametricBufferGeometry: ParametricBufferGeometry,\n\tTetrahedronGeometry: TetrahedronGeometry,\n\tTetrahedronBufferGeometry: TetrahedronBufferGeometry,\n\tOctahedronGeometry: OctahedronGeometry,\n\tOctahedronBufferGeometry: OctahedronBufferGeometry,\n\tIcosahedronGeometry: IcosahedronGeometry,\n\tIcosahedronBufferGeometry: IcosahedronBufferGeometry,\n\tDodecahedronGeometry: DodecahedronGeometry,\n\tDodecahedronBufferGeometry: DodecahedronBufferGeometry,\n\tPolyhedronGeometry: PolyhedronGeometry,\n\tPolyhedronBufferGeometry: PolyhedronBufferGeometry,\n\tTubeGeometry: TubeGeometry,\n\tTubeBufferGeometry: TubeBufferGeometry,\n\tTorusKnotGeometry: TorusKnotGeometry,\n\tTorusKnotBufferGeometry: TorusKnotBufferGeometry,\n\tTorusGeometry: TorusGeometry,\n\tTorusBufferGeometry: TorusBufferGeometry,\n\tTextGeometry: TextGeometry,\n\tTextBufferGeometry: TextBufferGeometry,\n\tSphereGeometry: SphereGeometry,\n\tSphereBufferGeometry: SphereBufferGeometry,\n\tRingGeometry: RingGeometry,\n\tRingBufferGeometry: RingBufferGeometry,\n\tPlaneGeometry: PlaneGeometry,\n\tPlaneBufferGeometry: PlaneBufferGeometry,\n\tLatheGeometry: LatheGeometry,\n\tLatheBufferGeometry: LatheBufferGeometry,\n\tShapeGeometry: ShapeGeometry,\n\tShapeBufferGeometry: ShapeBufferGeometry,\n\tExtrudeGeometry: ExtrudeGeometry,\n\tExtrudeBufferGeometry: ExtrudeBufferGeometry,\n\tEdgesGeometry: EdgesGeometry,\n\tConeGeometry: ConeGeometry,\n\tConeBufferGeometry: ConeBufferGeometry,\n\tCylinderGeometry: CylinderGeometry,\n\tCylinderBufferGeometry: CylinderBufferGeometry,\n\tCircleGeometry: CircleGeometry,\n\tCircleBufferGeometry: CircleBufferGeometry,\n\tBoxGeometry: BoxGeometry,\n\tBoxBufferGeometry: BoxBufferGeometry\n});\n\n/**\n * @author mrdoob / http://mrdoob.com/\n *\n * parameters = {\n * color: \n * }\n */\n\nfunction ShadowMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'ShadowMaterial';\n\n\tthis.color = new Color( 0x000000 );\n\tthis.transparent = true;\n\n\tthis.setValues( parameters );\n\n}\n\nShadowMaterial.prototype = Object.create( Material.prototype );\nShadowMaterial.prototype.constructor = ShadowMaterial;\n\nShadowMaterial.prototype.isShadowMaterial = true;\n\nShadowMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.color.copy( source.color );\n\n\treturn this;\n\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction RawShaderMaterial( parameters ) {\n\n\tShaderMaterial.call( this, parameters );\n\n\tthis.type = 'RawShaderMaterial';\n\n}\n\nRawShaderMaterial.prototype = Object.create( ShaderMaterial.prototype );\nRawShaderMaterial.prototype.constructor = RawShaderMaterial;\n\nRawShaderMaterial.prototype.isRawShaderMaterial = true;\n\n/**\n * @author WestLangley / http://github.com/WestLangley\n *\n * parameters = {\n * color: ,\n * roughness: ,\n * metalness: ,\n * opacity: ,\n *\n * map: new THREE.Texture( ),\n *\n * lightMap: new THREE.Texture( ),\n * lightMapIntensity: \n *\n * aoMap: new THREE.Texture( ),\n * aoMapIntensity: \n *\n * emissive: ,\n * emissiveIntensity: \n * emissiveMap: new THREE.Texture( ),\n *\n * bumpMap: new THREE.Texture( ),\n * bumpScale: ,\n *\n * normalMap: new THREE.Texture( ),\n * normalScale: ,\n *\n * displacementMap: new THREE.Texture( ),\n * displacementScale: ,\n * displacementBias: ,\n *\n * roughnessMap: new THREE.Texture( ),\n *\n * metalnessMap: new THREE.Texture( ),\n *\n * alphaMap: new THREE.Texture( ),\n *\n * envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),\n * envMapIntensity: \n *\n * refractionRatio: ,\n *\n * wireframe: ,\n * wireframeLinewidth: ,\n *\n * skinning: ,\n * morphTargets: ,\n * morphNormals: \n * }\n */\n\nfunction MeshStandardMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.defines = { 'STANDARD': '' };\n\n\tthis.type = 'MeshStandardMaterial';\n\n\tthis.color = new Color( 0xffffff ); // diffuse\n\tthis.roughness = 0.5;\n\tthis.metalness = 0.5;\n\n\tthis.map = null;\n\n\tthis.lightMap = null;\n\tthis.lightMapIntensity = 1.0;\n\n\tthis.aoMap = null;\n\tthis.aoMapIntensity = 1.0;\n\n\tthis.emissive = new Color( 0x000000 );\n\tthis.emissiveIntensity = 1.0;\n\tthis.emissiveMap = null;\n\n\tthis.bumpMap = null;\n\tthis.bumpScale = 1;\n\n\tthis.normalMap = null;\n\tthis.normalScale = new Vector2( 1, 1 );\n\n\tthis.displacementMap = null;\n\tthis.displacementScale = 1;\n\tthis.displacementBias = 0;\n\n\tthis.roughnessMap = null;\n\n\tthis.metalnessMap = null;\n\n\tthis.alphaMap = null;\n\n\tthis.envMap = null;\n\tthis.envMapIntensity = 1.0;\n\n\tthis.refractionRatio = 0.98;\n\n\tthis.wireframe = false;\n\tthis.wireframeLinewidth = 1;\n\tthis.wireframeLinecap = 'round';\n\tthis.wireframeLinejoin = 'round';\n\n\tthis.skinning = false;\n\tthis.morphTargets = false;\n\tthis.morphNormals = false;\n\n\tthis.setValues( parameters );\n\n}\n\nMeshStandardMaterial.prototype = Object.create( Material.prototype );\nMeshStandardMaterial.prototype.constructor = MeshStandardMaterial;\n\nMeshStandardMaterial.prototype.isMeshStandardMaterial = true;\n\nMeshStandardMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.defines = { 'STANDARD': '' };\n\n\tthis.color.copy( source.color );\n\tthis.roughness = source.roughness;\n\tthis.metalness = source.metalness;\n\n\tthis.map = source.map;\n\n\tthis.lightMap = source.lightMap;\n\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\tthis.aoMap = source.aoMap;\n\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\tthis.emissive.copy( source.emissive );\n\tthis.emissiveMap = source.emissiveMap;\n\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\tthis.bumpMap = source.bumpMap;\n\tthis.bumpScale = source.bumpScale;\n\n\tthis.normalMap = source.normalMap;\n\tthis.normalScale.copy( source.normalScale );\n\n\tthis.displacementMap = source.displacementMap;\n\tthis.displacementScale = source.displacementScale;\n\tthis.displacementBias = source.displacementBias;\n\n\tthis.roughnessMap = source.roughnessMap;\n\n\tthis.metalnessMap = source.metalnessMap;\n\n\tthis.alphaMap = source.alphaMap;\n\n\tthis.envMap = source.envMap;\n\tthis.envMapIntensity = source.envMapIntensity;\n\n\tthis.refractionRatio = source.refractionRatio;\n\n\tthis.wireframe = source.wireframe;\n\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\tthis.wireframeLinecap = source.wireframeLinecap;\n\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\tthis.skinning = source.skinning;\n\tthis.morphTargets = source.morphTargets;\n\tthis.morphNormals = source.morphNormals;\n\n\treturn this;\n\n};\n\n/**\n * @author WestLangley / http://github.com/WestLangley\n *\n * parameters = {\n * reflectivity: \n * }\n */\n\nfunction MeshPhysicalMaterial( parameters ) {\n\n\tMeshStandardMaterial.call( this );\n\n\tthis.defines = { 'PHYSICAL': '' };\n\n\tthis.type = 'MeshPhysicalMaterial';\n\n\tthis.reflectivity = 0.5; // maps to F0 = 0.04\n\n\tthis.clearCoat = 0.0;\n\tthis.clearCoatRoughness = 0.0;\n\n\tthis.setValues( parameters );\n\n}\n\nMeshPhysicalMaterial.prototype = Object.create( MeshStandardMaterial.prototype );\nMeshPhysicalMaterial.prototype.constructor = MeshPhysicalMaterial;\n\nMeshPhysicalMaterial.prototype.isMeshPhysicalMaterial = true;\n\nMeshPhysicalMaterial.prototype.copy = function ( source ) {\n\n\tMeshStandardMaterial.prototype.copy.call( this, source );\n\n\tthis.defines = { 'PHYSICAL': '' };\n\n\tthis.reflectivity = source.reflectivity;\n\n\tthis.clearCoat = source.clearCoat;\n\tthis.clearCoatRoughness = source.clearCoatRoughness;\n\n\treturn this;\n\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n *\n * parameters = {\n * color: ,\n * specular: ,\n * shininess: ,\n * opacity: ,\n *\n * map: new THREE.Texture( ),\n *\n * lightMap: new THREE.Texture( ),\n * lightMapIntensity: \n *\n * aoMap: new THREE.Texture( ),\n * aoMapIntensity: \n *\n * emissive: ,\n * emissiveIntensity: \n * emissiveMap: new THREE.Texture( ),\n *\n * bumpMap: new THREE.Texture( ),\n * bumpScale: ,\n *\n * normalMap: new THREE.Texture( ),\n * normalScale: ,\n *\n * displacementMap: new THREE.Texture( ),\n * displacementScale: ,\n * displacementBias: ,\n *\n * specularMap: new THREE.Texture( ),\n *\n * alphaMap: new THREE.Texture( ),\n *\n * envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),\n * combine: THREE.Multiply,\n * reflectivity: ,\n * refractionRatio: ,\n *\n * wireframe: ,\n * wireframeLinewidth: ,\n *\n * skinning: ,\n * morphTargets: ,\n * morphNormals: \n * }\n */\n\nfunction MeshPhongMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'MeshPhongMaterial';\n\n\tthis.color = new Color( 0xffffff ); // diffuse\n\tthis.specular = new Color( 0x111111 );\n\tthis.shininess = 30;\n\n\tthis.map = null;\n\n\tthis.lightMap = null;\n\tthis.lightMapIntensity = 1.0;\n\n\tthis.aoMap = null;\n\tthis.aoMapIntensity = 1.0;\n\n\tthis.emissive = new Color( 0x000000 );\n\tthis.emissiveIntensity = 1.0;\n\tthis.emissiveMap = null;\n\n\tthis.bumpMap = null;\n\tthis.bumpScale = 1;\n\n\tthis.normalMap = null;\n\tthis.normalScale = new Vector2( 1, 1 );\n\n\tthis.displacementMap = null;\n\tthis.displacementScale = 1;\n\tthis.displacementBias = 0;\n\n\tthis.specularMap = null;\n\n\tthis.alphaMap = null;\n\n\tthis.envMap = null;\n\tthis.combine = MultiplyOperation;\n\tthis.reflectivity = 1;\n\tthis.refractionRatio = 0.98;\n\n\tthis.wireframe = false;\n\tthis.wireframeLinewidth = 1;\n\tthis.wireframeLinecap = 'round';\n\tthis.wireframeLinejoin = 'round';\n\n\tthis.skinning = false;\n\tthis.morphTargets = false;\n\tthis.morphNormals = false;\n\n\tthis.setValues( parameters );\n\n}\n\nMeshPhongMaterial.prototype = Object.create( Material.prototype );\nMeshPhongMaterial.prototype.constructor = MeshPhongMaterial;\n\nMeshPhongMaterial.prototype.isMeshPhongMaterial = true;\n\nMeshPhongMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.color.copy( source.color );\n\tthis.specular.copy( source.specular );\n\tthis.shininess = source.shininess;\n\n\tthis.map = source.map;\n\n\tthis.lightMap = source.lightMap;\n\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\tthis.aoMap = source.aoMap;\n\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\tthis.emissive.copy( source.emissive );\n\tthis.emissiveMap = source.emissiveMap;\n\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\tthis.bumpMap = source.bumpMap;\n\tthis.bumpScale = source.bumpScale;\n\n\tthis.normalMap = source.normalMap;\n\tthis.normalScale.copy( source.normalScale );\n\n\tthis.displacementMap = source.displacementMap;\n\tthis.displacementScale = source.displacementScale;\n\tthis.displacementBias = source.displacementBias;\n\n\tthis.specularMap = source.specularMap;\n\n\tthis.alphaMap = source.alphaMap;\n\n\tthis.envMap = source.envMap;\n\tthis.combine = source.combine;\n\tthis.reflectivity = source.reflectivity;\n\tthis.refractionRatio = source.refractionRatio;\n\n\tthis.wireframe = source.wireframe;\n\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\tthis.wireframeLinecap = source.wireframeLinecap;\n\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\tthis.skinning = source.skinning;\n\tthis.morphTargets = source.morphTargets;\n\tthis.morphNormals = source.morphNormals;\n\n\treturn this;\n\n};\n\n/**\n * @author takahirox / http://github.com/takahirox\n *\n * parameters = {\n * gradientMap: new THREE.Texture( )\n * }\n */\n\nfunction MeshToonMaterial( parameters ) {\n\n\tMeshPhongMaterial.call( this );\n\n\tthis.defines = { 'TOON': '' };\n\n\tthis.type = 'MeshToonMaterial';\n\n\tthis.gradientMap = null;\n\n\tthis.setValues( parameters );\n\n}\n\nMeshToonMaterial.prototype = Object.create( MeshPhongMaterial.prototype );\nMeshToonMaterial.prototype.constructor = MeshToonMaterial;\n\nMeshToonMaterial.prototype.isMeshToonMaterial = true;\n\nMeshToonMaterial.prototype.copy = function ( source ) {\n\n\tMeshPhongMaterial.prototype.copy.call( this, source );\n\n\tthis.gradientMap = source.gradientMap;\n\n\treturn this;\n\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author WestLangley / http://github.com/WestLangley\n *\n * parameters = {\n * opacity: ,\n *\n * bumpMap: new THREE.Texture( ),\n * bumpScale: ,\n *\n * normalMap: new THREE.Texture( ),\n * normalScale: ,\n *\n * displacementMap: new THREE.Texture( ),\n * displacementScale: ,\n * displacementBias: ,\n *\n * wireframe: ,\n * wireframeLinewidth: \n *\n * skinning: ,\n * morphTargets: ,\n * morphNormals: \n * }\n */\n\nfunction MeshNormalMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'MeshNormalMaterial';\n\n\tthis.bumpMap = null;\n\tthis.bumpScale = 1;\n\n\tthis.normalMap = null;\n\tthis.normalScale = new Vector2( 1, 1 );\n\n\tthis.displacementMap = null;\n\tthis.displacementScale = 1;\n\tthis.displacementBias = 0;\n\n\tthis.wireframe = false;\n\tthis.wireframeLinewidth = 1;\n\n\tthis.fog = false;\n\tthis.lights = false;\n\n\tthis.skinning = false;\n\tthis.morphTargets = false;\n\tthis.morphNormals = false;\n\n\tthis.setValues( parameters );\n\n}\n\nMeshNormalMaterial.prototype = Object.create( Material.prototype );\nMeshNormalMaterial.prototype.constructor = MeshNormalMaterial;\n\nMeshNormalMaterial.prototype.isMeshNormalMaterial = true;\n\nMeshNormalMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.bumpMap = source.bumpMap;\n\tthis.bumpScale = source.bumpScale;\n\n\tthis.normalMap = source.normalMap;\n\tthis.normalScale.copy( source.normalScale );\n\n\tthis.displacementMap = source.displacementMap;\n\tthis.displacementScale = source.displacementScale;\n\tthis.displacementBias = source.displacementBias;\n\n\tthis.wireframe = source.wireframe;\n\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\n\tthis.skinning = source.skinning;\n\tthis.morphTargets = source.morphTargets;\n\tthis.morphNormals = source.morphNormals;\n\n\treturn this;\n\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n *\n * parameters = {\n * color: ,\n * opacity: ,\n *\n * map: new THREE.Texture( ),\n *\n * lightMap: new THREE.Texture( ),\n * lightMapIntensity: \n *\n * aoMap: new THREE.Texture( ),\n * aoMapIntensity: \n *\n * emissive: ,\n * emissiveIntensity: \n * emissiveMap: new THREE.Texture( ),\n *\n * specularMap: new THREE.Texture( ),\n *\n * alphaMap: new THREE.Texture( ),\n *\n * envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),\n * combine: THREE.Multiply,\n * reflectivity: ,\n * refractionRatio: ,\n *\n * wireframe: ,\n * wireframeLinewidth: ,\n *\n * skinning: ,\n * morphTargets: ,\n * morphNormals: \n * }\n */\n\nfunction MeshLambertMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'MeshLambertMaterial';\n\n\tthis.color = new Color( 0xffffff ); // diffuse\n\n\tthis.map = null;\n\n\tthis.lightMap = null;\n\tthis.lightMapIntensity = 1.0;\n\n\tthis.aoMap = null;\n\tthis.aoMapIntensity = 1.0;\n\n\tthis.emissive = new Color( 0x000000 );\n\tthis.emissiveIntensity = 1.0;\n\tthis.emissiveMap = null;\n\n\tthis.specularMap = null;\n\n\tthis.alphaMap = null;\n\n\tthis.envMap = null;\n\tthis.combine = MultiplyOperation;\n\tthis.reflectivity = 1;\n\tthis.refractionRatio = 0.98;\n\n\tthis.wireframe = false;\n\tthis.wireframeLinewidth = 1;\n\tthis.wireframeLinecap = 'round';\n\tthis.wireframeLinejoin = 'round';\n\n\tthis.skinning = false;\n\tthis.morphTargets = false;\n\tthis.morphNormals = false;\n\n\tthis.setValues( parameters );\n\n}\n\nMeshLambertMaterial.prototype = Object.create( Material.prototype );\nMeshLambertMaterial.prototype.constructor = MeshLambertMaterial;\n\nMeshLambertMaterial.prototype.isMeshLambertMaterial = true;\n\nMeshLambertMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.color.copy( source.color );\n\n\tthis.map = source.map;\n\n\tthis.lightMap = source.lightMap;\n\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\tthis.aoMap = source.aoMap;\n\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\tthis.emissive.copy( source.emissive );\n\tthis.emissiveMap = source.emissiveMap;\n\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\tthis.specularMap = source.specularMap;\n\n\tthis.alphaMap = source.alphaMap;\n\n\tthis.envMap = source.envMap;\n\tthis.combine = source.combine;\n\tthis.reflectivity = source.reflectivity;\n\tthis.refractionRatio = source.refractionRatio;\n\n\tthis.wireframe = source.wireframe;\n\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\tthis.wireframeLinecap = source.wireframeLinecap;\n\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\tthis.skinning = source.skinning;\n\tthis.morphTargets = source.morphTargets;\n\tthis.morphNormals = source.morphNormals;\n\n\treturn this;\n\n};\n\n/**\n * @author alteredq / http://alteredqualia.com/\n *\n * parameters = {\n * color: ,\n * opacity: ,\n *\n * linewidth: ,\n *\n * scale: ,\n * dashSize: ,\n * gapSize: \n * }\n */\n\nfunction LineDashedMaterial( parameters ) {\n\n\tLineBasicMaterial.call( this );\n\n\tthis.type = 'LineDashedMaterial';\n\n\tthis.scale = 1;\n\tthis.dashSize = 3;\n\tthis.gapSize = 1;\n\n\tthis.setValues( parameters );\n\n}\n\nLineDashedMaterial.prototype = Object.create( LineBasicMaterial.prototype );\nLineDashedMaterial.prototype.constructor = LineDashedMaterial;\n\nLineDashedMaterial.prototype.isLineDashedMaterial = true;\n\nLineDashedMaterial.prototype.copy = function ( source ) {\n\n\tLineBasicMaterial.prototype.copy.call( this, source );\n\n\tthis.scale = source.scale;\n\tthis.dashSize = source.dashSize;\n\tthis.gapSize = source.gapSize;\n\n\treturn this;\n\n};\n\n\n\nvar Materials = Object.freeze({\n\tShadowMaterial: ShadowMaterial,\n\tSpriteMaterial: SpriteMaterial,\n\tRawShaderMaterial: RawShaderMaterial,\n\tShaderMaterial: ShaderMaterial,\n\tPointsMaterial: PointsMaterial,\n\tMeshPhysicalMaterial: MeshPhysicalMaterial,\n\tMeshStandardMaterial: MeshStandardMaterial,\n\tMeshPhongMaterial: MeshPhongMaterial,\n\tMeshToonMaterial: MeshToonMaterial,\n\tMeshNormalMaterial: MeshNormalMaterial,\n\tMeshLambertMaterial: MeshLambertMaterial,\n\tMeshDepthMaterial: MeshDepthMaterial,\n\tMeshDistanceMaterial: MeshDistanceMaterial,\n\tMeshBasicMaterial: MeshBasicMaterial,\n\tLineDashedMaterial: LineDashedMaterial,\n\tLineBasicMaterial: LineBasicMaterial,\n\tMaterial: Material\n});\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nvar Cache = {\n\n\tenabled: false,\n\n\tfiles: {},\n\n\tadd: function ( key, file ) {\n\n\t\tif ( this.enabled === false ) return;\n\n\t\t// console.log( 'THREE.Cache', 'Adding key:', key );\n\n\t\tthis.files[ key ] = file;\n\n\t},\n\n\tget: function ( key ) {\n\n\t\tif ( this.enabled === false ) return;\n\n\t\t// console.log( 'THREE.Cache', 'Checking key:', key );\n\n\t\treturn this.files[ key ];\n\n\t},\n\n\tremove: function ( key ) {\n\n\t\tdelete this.files[ key ];\n\n\t},\n\n\tclear: function () {\n\n\t\tthis.files = {};\n\n\t}\n\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction LoadingManager( onLoad, onProgress, onError ) {\n\n\tvar scope = this;\n\n\tvar isLoading = false;\n\tvar itemsLoaded = 0;\n\tvar itemsTotal = 0;\n\tvar urlModifier = undefined;\n\n\tthis.onStart = undefined;\n\tthis.onLoad = onLoad;\n\tthis.onProgress = onProgress;\n\tthis.onError = onError;\n\n\tthis.itemStart = function ( url ) {\n\n\t\titemsTotal ++;\n\n\t\tif ( isLoading === false ) {\n\n\t\t\tif ( scope.onStart !== undefined ) {\n\n\t\t\t\tscope.onStart( url, itemsLoaded, itemsTotal );\n\n\t\t\t}\n\n\t\t}\n\n\t\tisLoading = true;\n\n\t};\n\n\tthis.itemEnd = function ( url ) {\n\n\t\titemsLoaded ++;\n\n\t\tif ( scope.onProgress !== undefined ) {\n\n\t\t\tscope.onProgress( url, itemsLoaded, itemsTotal );\n\n\t\t}\n\n\t\tif ( itemsLoaded === itemsTotal ) {\n\n\t\t\tisLoading = false;\n\n\t\t\tif ( scope.onLoad !== undefined ) {\n\n\t\t\t\tscope.onLoad();\n\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\tthis.itemError = function ( url ) {\n\n\t\tif ( scope.onError !== undefined ) {\n\n\t\t\tscope.onError( url );\n\n\t\t}\n\n\t};\n\n\tthis.resolveURL = function ( url ) {\n\n\t\tif ( urlModifier ) {\n\n\t\t\treturn urlModifier( url );\n\n\t\t}\n\n\t\treturn url;\n\n\t};\n\n\tthis.setURLModifier = function ( transform ) {\n\n\t\turlModifier = transform;\n\t\treturn this;\n\n\t};\n\n}\n\nvar DefaultLoadingManager = new LoadingManager();\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nvar loading = {};\n\nfunction FileLoader( manager ) {\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n}\n\nObject.assign( FileLoader.prototype, {\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tif ( url === undefined ) url = '';\n\n\t\tif ( this.path !== undefined ) url = this.path + url;\n\n\t\turl = this.manager.resolveURL( url );\n\n\t\tvar scope = this;\n\n\t\tvar cached = Cache.get( url );\n\n\t\tif ( cached !== undefined ) {\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\tsetTimeout( function () {\n\n\t\t\t\tif ( onLoad ) onLoad( cached );\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, 0 );\n\n\t\t\treturn cached;\n\n\t\t}\n\n\t\t// Check if request is duplicate\n\n\t\tif ( loading[ url ] !== undefined ) {\n\n\t\t\tloading[ url ].push( {\n\n\t\t\t\tonLoad: onLoad,\n\t\t\t\tonProgress: onProgress,\n\t\t\t\tonError: onError\n\n\t\t\t} );\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t// Check for data: URI\n\t\tvar dataUriRegex = /^data:(.*?)(;base64)?,(.*)$/;\n\t\tvar dataUriRegexResult = url.match( dataUriRegex );\n\n\t\t// Safari can not handle Data URIs through XMLHttpRequest so process manually\n\t\tif ( dataUriRegexResult ) {\n\n\t\t\tvar mimeType = dataUriRegexResult[ 1 ];\n\t\t\tvar isBase64 = !! dataUriRegexResult[ 2 ];\n\t\t\tvar data = dataUriRegexResult[ 3 ];\n\n\t\t\tdata = window.decodeURIComponent( data );\n\n\t\t\tif ( isBase64 ) data = window.atob( data );\n\n\t\t\ttry {\n\n\t\t\t\tvar response;\n\t\t\t\tvar responseType = ( this.responseType || '' ).toLowerCase();\n\n\t\t\t\tswitch ( responseType ) {\n\n\t\t\t\t\tcase 'arraybuffer':\n\t\t\t\t\tcase 'blob':\n\n\t\t\t\t\t\tvar view = new Uint8Array( data.length );\n\n\t\t\t\t\t\tfor ( var i = 0; i < data.length; i ++ ) {\n\n\t\t\t\t\t\t\tview[ i ] = data.charCodeAt( i );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( responseType === 'blob' ) {\n\n\t\t\t\t\t\t\tresponse = new Blob( [ view.buffer ], { type: mimeType } );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tresponse = view.buffer;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'document':\n\n\t\t\t\t\t\tvar parser = new DOMParser();\n\t\t\t\t\t\tresponse = parser.parseFromString( data, mimeType );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'json':\n\n\t\t\t\t\t\tresponse = JSON.parse( data );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault: // 'text' or other\n\n\t\t\t\t\t\tresponse = data;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\t// Wait for next browser tick like standard XMLHttpRequest event dispatching does\n\t\t\t\twindow.setTimeout( function () {\n\n\t\t\t\t\tif ( onLoad ) onLoad( response );\n\n\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t}, 0 );\n\n\t\t\t} catch ( error ) {\n\n\t\t\t\t// Wait for next browser tick like standard XMLHttpRequest event dispatching does\n\t\t\t\twindow.setTimeout( function () {\n\n\t\t\t\t\tif ( onError ) onError( error );\n\n\t\t\t\t\tscope.manager.itemEnd( url );\n\t\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t\t}, 0 );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// Initialise array for duplicate requests\n\n\t\t\tloading[ url ] = [];\n\n\t\t\tloading[ url ].push( {\n\n\t\t\t\tonLoad: onLoad,\n\t\t\t\tonProgress: onProgress,\n\t\t\t\tonError: onError\n\n\t\t\t} );\n\n\t\t\tvar request = new XMLHttpRequest();\n\n\t\t\trequest.open( 'GET', url, true );\n\n\t\t\trequest.addEventListener( 'load', function ( event ) {\n\n\t\t\t\tvar response = this.response;\n\n\t\t\t\tCache.add( url, response );\n\n\t\t\t\tvar callbacks = loading[ url ];\n\n\t\t\t\tdelete loading[ url ];\n\n\t\t\t\tif ( this.status === 200 ) {\n\n\t\t\t\t\tfor ( var i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tvar callback = callbacks[ i ];\n\t\t\t\t\t\tif ( callback.onLoad ) callback.onLoad( response );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t} else if ( this.status === 0 ) {\n\n\t\t\t\t\t// Some browsers return HTTP Status 0 when using non-http protocol\n\t\t\t\t\t// e.g. 'file://' or 'data://'. Handle as success.\n\n\t\t\t\t\tconsole.warn( 'THREE.FileLoader: HTTP Status 0 received.' );\n\n\t\t\t\t\tfor ( var i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tvar callback = callbacks[ i ];\n\t\t\t\t\t\tif ( callback.onLoad ) callback.onLoad( response );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tfor ( var i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tvar callback = callbacks[ i ];\n\t\t\t\t\t\tif ( callback.onError ) callback.onError( event );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tscope.manager.itemEnd( url );\n\t\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t\t}\n\n\t\t\t}, false );\n\n\t\t\trequest.addEventListener( 'progress', function ( event ) {\n\n\t\t\t\tvar callbacks = loading[ url ];\n\n\t\t\t\tfor ( var i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\tvar callback = callbacks[ i ];\n\t\t\t\t\tif ( callback.onProgress ) callback.onProgress( event );\n\n\t\t\t\t}\n\n\t\t\t}, false );\n\n\t\t\trequest.addEventListener( 'error', function ( event ) {\n\n\t\t\t\tvar callbacks = loading[ url ];\n\n\t\t\t\tdelete loading[ url ];\n\n\t\t\t\tfor ( var i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\tvar callback = callbacks[ i ];\n\t\t\t\t\tif ( callback.onError ) callback.onError( event );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemEnd( url );\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}, false );\n\n\t\t\tif ( this.responseType !== undefined ) request.responseType = this.responseType;\n\t\t\tif ( this.withCredentials !== undefined ) request.withCredentials = this.withCredentials;\n\n\t\t\tif ( request.overrideMimeType ) request.overrideMimeType( this.mimeType !== undefined ? this.mimeType : 'text/plain' );\n\n\t\t\tfor ( var header in this.requestHeader ) {\n\n\t\t\t\trequest.setRequestHeader( header, this.requestHeader[ header ] );\n\n\t\t\t}\n\n\t\t\trequest.send( null );\n\n\t\t}\n\n\t\tscope.manager.itemStart( url );\n\n\t\treturn request;\n\n\t},\n\n\tsetPath: function ( value ) {\n\n\t\tthis.path = value;\n\t\treturn this;\n\n\t},\n\n\tsetResponseType: function ( value ) {\n\n\t\tthis.responseType = value;\n\t\treturn this;\n\n\t},\n\n\tsetWithCredentials: function ( value ) {\n\n\t\tthis.withCredentials = value;\n\t\treturn this;\n\n\t},\n\n\tsetMimeType: function ( value ) {\n\n\t\tthis.mimeType = value;\n\t\treturn this;\n\n\t},\n\n\tsetRequestHeader: function ( value ) {\n\n\t\tthis.requestHeader = value;\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n *\n * Abstract Base class to block based textures loader (dds, pvr, ...)\n */\n\nfunction CompressedTextureLoader( manager ) {\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n\t// override in sub classes\n\tthis._parser = null;\n\n}\n\nObject.assign( CompressedTextureLoader.prototype, {\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar scope = this;\n\n\t\tvar images = [];\n\n\t\tvar texture = new CompressedTexture();\n\t\ttexture.image = images;\n\n\t\tvar loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\n\t\tfunction loadTexture( i ) {\n\n\t\t\tloader.load( url[ i ], function ( buffer ) {\n\n\t\t\t\tvar texDatas = scope._parser( buffer, true );\n\n\t\t\t\timages[ i ] = {\n\t\t\t\t\twidth: texDatas.width,\n\t\t\t\t\theight: texDatas.height,\n\t\t\t\t\tformat: texDatas.format,\n\t\t\t\t\tmipmaps: texDatas.mipmaps\n\t\t\t\t};\n\n\t\t\t\tloaded += 1;\n\n\t\t\t\tif ( loaded === 6 ) {\n\n\t\t\t\t\tif ( texDatas.mipmapCount === 1 )\n\t\t\t\t\t\ttexture.minFilter = LinearFilter;\n\n\t\t\t\t\ttexture.format = texDatas.format;\n\t\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t\t}\n\n\t\t\t}, onProgress, onError );\n\n\t\t}\n\n\t\tif ( Array.isArray( url ) ) {\n\n\t\t\tvar loaded = 0;\n\n\t\t\tfor ( var i = 0, il = url.length; i < il; ++ i ) {\n\n\t\t\t\tloadTexture( i );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// compressed cubemap texture stored in a single DDS file\n\n\t\t\tloader.load( url, function ( buffer ) {\n\n\t\t\t\tvar texDatas = scope._parser( buffer, true );\n\n\t\t\t\tif ( texDatas.isCubemap ) {\n\n\t\t\t\t\tvar faces = texDatas.mipmaps.length / texDatas.mipmapCount;\n\n\t\t\t\t\tfor ( var f = 0; f < faces; f ++ ) {\n\n\t\t\t\t\t\timages[ f ] = { mipmaps: [] };\n\n\t\t\t\t\t\tfor ( var i = 0; i < texDatas.mipmapCount; i ++ ) {\n\n\t\t\t\t\t\t\timages[ f ].mipmaps.push( texDatas.mipmaps[ f * texDatas.mipmapCount + i ] );\n\t\t\t\t\t\t\timages[ f ].format = texDatas.format;\n\t\t\t\t\t\t\timages[ f ].width = texDatas.width;\n\t\t\t\t\t\t\timages[ f ].height = texDatas.height;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttexture.image.width = texDatas.width;\n\t\t\t\t\ttexture.image.height = texDatas.height;\n\t\t\t\t\ttexture.mipmaps = texDatas.mipmaps;\n\n\t\t\t\t}\n\n\t\t\t\tif ( texDatas.mipmapCount === 1 ) {\n\n\t\t\t\t\ttexture.minFilter = LinearFilter;\n\n\t\t\t\t}\n\n\t\t\t\ttexture.format = texDatas.format;\n\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t}, onProgress, onError );\n\n\t\t}\n\n\t\treturn texture;\n\n\t},\n\n\tsetPath: function ( value ) {\n\n\t\tthis.path = value;\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author Nikos M. / https://github.com/foo123/\n *\n * Abstract Base class to load generic binary textures formats (rgbe, hdr, ...)\n */\n\nfunction DataTextureLoader( manager ) {\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n\t// override in sub classes\n\tthis._parser = null;\n\n}\n\nObject.assign( DataTextureLoader.prototype, {\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar scope = this;\n\n\t\tvar texture = new DataTexture();\n\n\t\tvar loader = new FileLoader( this.manager );\n\t\tloader.setResponseType( 'arraybuffer' );\n\n\t\tloader.load( url, function ( buffer ) {\n\n\t\t\tvar texData = scope._parser( buffer );\n\n\t\t\tif ( ! texData ) return;\n\n\t\t\tif ( undefined !== texData.image ) {\n\n\t\t\t\ttexture.image = texData.image;\n\n\t\t\t} else if ( undefined !== texData.data ) {\n\n\t\t\t\ttexture.image.width = texData.width;\n\t\t\t\ttexture.image.height = texData.height;\n\t\t\t\ttexture.image.data = texData.data;\n\n\t\t\t}\n\n\t\t\ttexture.wrapS = undefined !== texData.wrapS ? texData.wrapS : ClampToEdgeWrapping;\n\t\t\ttexture.wrapT = undefined !== texData.wrapT ? texData.wrapT : ClampToEdgeWrapping;\n\n\t\t\ttexture.magFilter = undefined !== texData.magFilter ? texData.magFilter : LinearFilter;\n\t\t\ttexture.minFilter = undefined !== texData.minFilter ? texData.minFilter : LinearMipMapLinearFilter;\n\n\t\t\ttexture.anisotropy = undefined !== texData.anisotropy ? texData.anisotropy : 1;\n\n\t\t\tif ( undefined !== texData.format ) {\n\n\t\t\t\ttexture.format = texData.format;\n\n\t\t\t}\n\t\t\tif ( undefined !== texData.type ) {\n\n\t\t\t\ttexture.type = texData.type;\n\n\t\t\t}\n\n\t\t\tif ( undefined !== texData.mipmaps ) {\n\n\t\t\t\ttexture.mipmaps = texData.mipmaps;\n\n\t\t\t}\n\n\t\t\tif ( 1 === texData.mipmapCount ) {\n\n\t\t\t\ttexture.minFilter = LinearFilter;\n\n\t\t\t}\n\n\t\t\ttexture.needsUpdate = true;\n\n\t\t\tif ( onLoad ) onLoad( texture, texData );\n\n\t\t}, onProgress, onError );\n\n\n\t\treturn texture;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction ImageLoader( manager ) {\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n}\n\nObject.assign( ImageLoader.prototype, {\n\n\tcrossOrigin: 'Anonymous',\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tif ( url === undefined ) url = '';\n\n\t\tif ( this.path !== undefined ) url = this.path + url;\n\n\t\turl = this.manager.resolveURL( url );\n\n\t\tvar scope = this;\n\n\t\tvar cached = Cache.get( url );\n\n\t\tif ( cached !== undefined ) {\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\tsetTimeout( function () {\n\n\t\t\t\tif ( onLoad ) onLoad( cached );\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, 0 );\n\n\t\t\treturn cached;\n\n\t\t}\n\n\t\tvar image = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'img' );\n\n\t\timage.addEventListener( 'load', function () {\n\n\t\t\tCache.add( url, this );\n\n\t\t\tif ( onLoad ) onLoad( this );\n\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t}, false );\n\n\t\t/*\n\t\timage.addEventListener( 'progress', function ( event ) {\n\n\t\t\tif ( onProgress ) onProgress( event );\n\n\t\t}, false );\n\t\t*/\n\n\t\timage.addEventListener( 'error', function ( event ) {\n\n\t\t\tif ( onError ) onError( event );\n\n\t\t\tscope.manager.itemEnd( url );\n\t\t\tscope.manager.itemError( url );\n\n\t\t}, false );\n\n\t\tif ( url.substr( 0, 5 ) !== 'data:' ) {\n\n\t\t\tif ( this.crossOrigin !== undefined ) image.crossOrigin = this.crossOrigin;\n\n\t\t}\n\n\t\tscope.manager.itemStart( url );\n\n\t\timage.src = url;\n\n\t\treturn image;\n\n\t},\n\n\tsetCrossOrigin: function ( value ) {\n\n\t\tthis.crossOrigin = value;\n\t\treturn this;\n\n\t},\n\n\tsetPath: function ( value ) {\n\n\t\tthis.path = value;\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction CubeTextureLoader( manager ) {\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n}\n\nObject.assign( CubeTextureLoader.prototype, {\n\n\tcrossOrigin: 'Anonymous',\n\n\tload: function ( urls, onLoad, onProgress, onError ) {\n\n\t\tvar texture = new CubeTexture();\n\n\t\tvar loader = new ImageLoader( this.manager );\n\t\tloader.setCrossOrigin( this.crossOrigin );\n\t\tloader.setPath( this.path );\n\n\t\tvar loaded = 0;\n\n\t\tfunction loadTexture( i ) {\n\n\t\t\tloader.load( urls[ i ], function ( image ) {\n\n\t\t\t\ttexture.images[ i ] = image;\n\n\t\t\t\tloaded ++;\n\n\t\t\t\tif ( loaded === 6 ) {\n\n\t\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t\t}\n\n\t\t\t}, undefined, onError );\n\n\t\t}\n\n\t\tfor ( var i = 0; i < urls.length; ++ i ) {\n\n\t\t\tloadTexture( i );\n\n\t\t}\n\n\t\treturn texture;\n\n\t},\n\n\tsetCrossOrigin: function ( value ) {\n\n\t\tthis.crossOrigin = value;\n\t\treturn this;\n\n\t},\n\n\tsetPath: function ( value ) {\n\n\t\tthis.path = value;\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction TextureLoader( manager ) {\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n}\n\nObject.assign( TextureLoader.prototype, {\n\n\tcrossOrigin: 'Anonymous',\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar texture = new Texture();\n\n\t\tvar loader = new ImageLoader( this.manager );\n\t\tloader.setCrossOrigin( this.crossOrigin );\n\t\tloader.setPath( this.path );\n\n\t\tloader.load( url, function ( image ) {\n\n\t\t\ttexture.image = image;\n\n\t\t\t// JPEGs can't have an alpha channel, so memory can be saved by storing them as RGB.\n\t\t\tvar isJPEG = url.search( /\\.(jpg|jpeg)$/ ) > 0 || url.search( /^data\\:image\\/jpeg/ ) === 0;\n\n\t\t\ttexture.format = isJPEG ? RGBFormat : RGBAFormat;\n\t\t\ttexture.needsUpdate = true;\n\n\t\t\tif ( onLoad !== undefined ) {\n\n\t\t\t\tonLoad( texture );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t\treturn texture;\n\n\t},\n\n\tsetCrossOrigin: function ( value ) {\n\n\t\tthis.crossOrigin = value;\n\t\treturn this;\n\n\t},\n\n\tsetPath: function ( value ) {\n\n\t\tthis.path = value;\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author zz85 / http://www.lab4games.net/zz85/blog\n * Extensible curve object\n *\n * Some common of curve methods:\n * .getPoint( t, optionalTarget ), .getTangent( t )\n * .getPointAt( u, optionalTarget ), .getTangentAt( u )\n * .getPoints(), .getSpacedPoints()\n * .getLength()\n * .updateArcLengths()\n *\n * This following curves inherit from THREE.Curve:\n *\n * -- 2D curves --\n * THREE.ArcCurve\n * THREE.CubicBezierCurve\n * THREE.EllipseCurve\n * THREE.LineCurve\n * THREE.QuadraticBezierCurve\n * THREE.SplineCurve\n *\n * -- 3D curves --\n * THREE.CatmullRomCurve3\n * THREE.CubicBezierCurve3\n * THREE.LineCurve3\n * THREE.QuadraticBezierCurve3\n *\n * A series of curves can be represented as a THREE.CurvePath.\n *\n **/\n\n/**************************************************************\n *\tAbstract Curve base class\n **************************************************************/\n\nfunction Curve() {\n\n\tthis.type = 'Curve';\n\n\tthis.arcLengthDivisions = 200;\n\n}\n\nObject.assign( Curve.prototype, {\n\n\t// Virtual base class method to overwrite and implement in subclasses\n\t//\t- t [0 .. 1]\n\n\tgetPoint: function ( /* t, optionalTarget */ ) {\n\n\t\tconsole.warn( 'THREE.Curve: .getPoint() not implemented.' );\n\t\treturn null;\n\n\t},\n\n\t// Get point at relative position in curve according to arc length\n\t// - u [0 .. 1]\n\n\tgetPointAt: function ( u, optionalTarget ) {\n\n\t\tvar t = this.getUtoTmapping( u );\n\t\treturn this.getPoint( t, optionalTarget );\n\n\t},\n\n\t// Get sequence of points using getPoint( t )\n\n\tgetPoints: function ( divisions ) {\n\n\t\tif ( divisions === undefined ) divisions = 5;\n\n\t\tvar points = [];\n\n\t\tfor ( var d = 0; d <= divisions; d ++ ) {\n\n\t\t\tpoints.push( this.getPoint( d / divisions ) );\n\n\t\t}\n\n\t\treturn points;\n\n\t},\n\n\t// Get sequence of points using getPointAt( u )\n\n\tgetSpacedPoints: function ( divisions ) {\n\n\t\tif ( divisions === undefined ) divisions = 5;\n\n\t\tvar points = [];\n\n\t\tfor ( var d = 0; d <= divisions; d ++ ) {\n\n\t\t\tpoints.push( this.getPointAt( d / divisions ) );\n\n\t\t}\n\n\t\treturn points;\n\n\t},\n\n\t// Get total curve arc length\n\n\tgetLength: function () {\n\n\t\tvar lengths = this.getLengths();\n\t\treturn lengths[ lengths.length - 1 ];\n\n\t},\n\n\t// Get list of cumulative segment lengths\n\n\tgetLengths: function ( divisions ) {\n\n\t\tif ( divisions === undefined ) divisions = this.arcLengthDivisions;\n\n\t\tif ( this.cacheArcLengths &&\n\t\t\t( this.cacheArcLengths.length === divisions + 1 ) &&\n\t\t\t! this.needsUpdate ) {\n\n\t\t\treturn this.cacheArcLengths;\n\n\t\t}\n\n\t\tthis.needsUpdate = false;\n\n\t\tvar cache = [];\n\t\tvar current, last = this.getPoint( 0 );\n\t\tvar p, sum = 0;\n\n\t\tcache.push( 0 );\n\n\t\tfor ( p = 1; p <= divisions; p ++ ) {\n\n\t\t\tcurrent = this.getPoint( p / divisions );\n\t\t\tsum += current.distanceTo( last );\n\t\t\tcache.push( sum );\n\t\t\tlast = current;\n\n\t\t}\n\n\t\tthis.cacheArcLengths = cache;\n\n\t\treturn cache; // { sums: cache, sum: sum }; Sum is in the last element.\n\n\t},\n\n\tupdateArcLengths: function () {\n\n\t\tthis.needsUpdate = true;\n\t\tthis.getLengths();\n\n\t},\n\n\t// Given u ( 0 .. 1 ), get a t to find p. This gives you points which are equidistant\n\n\tgetUtoTmapping: function ( u, distance ) {\n\n\t\tvar arcLengths = this.getLengths();\n\n\t\tvar i = 0, il = arcLengths.length;\n\n\t\tvar targetArcLength; // The targeted u distance value to get\n\n\t\tif ( distance ) {\n\n\t\t\ttargetArcLength = distance;\n\n\t\t} else {\n\n\t\t\ttargetArcLength = u * arcLengths[ il - 1 ];\n\n\t\t}\n\n\t\t// binary search for the index with largest value smaller than target u distance\n\n\t\tvar low = 0, high = il - 1, comparison;\n\n\t\twhile ( low <= high ) {\n\n\t\t\ti = Math.floor( low + ( high - low ) / 2 ); // less likely to overflow, though probably not issue here, JS doesn't really have integers, all numbers are floats\n\n\t\t\tcomparison = arcLengths[ i ] - targetArcLength;\n\n\t\t\tif ( comparison < 0 ) {\n\n\t\t\t\tlow = i + 1;\n\n\t\t\t} else if ( comparison > 0 ) {\n\n\t\t\t\thigh = i - 1;\n\n\t\t\t} else {\n\n\t\t\t\thigh = i;\n\t\t\t\tbreak;\n\n\t\t\t\t// DONE\n\n\t\t\t}\n\n\t\t}\n\n\t\ti = high;\n\n\t\tif ( arcLengths[ i ] === targetArcLength ) {\n\n\t\t\treturn i / ( il - 1 );\n\n\t\t}\n\n\t\t// we could get finer grain at lengths, or use simple interpolation between two points\n\n\t\tvar lengthBefore = arcLengths[ i ];\n\t\tvar lengthAfter = arcLengths[ i + 1 ];\n\n\t\tvar segmentLength = lengthAfter - lengthBefore;\n\n\t\t// determine where we are between the 'before' and 'after' points\n\n\t\tvar segmentFraction = ( targetArcLength - lengthBefore ) / segmentLength;\n\n\t\t// add that fractional amount to t\n\n\t\tvar t = ( i + segmentFraction ) / ( il - 1 );\n\n\t\treturn t;\n\n\t},\n\n\t// Returns a unit vector tangent at t\n\t// In case any sub curve does not implement its tangent derivation,\n\t// 2 points a small delta apart will be used to find its gradient\n\t// which seems to give a reasonable approximation\n\n\tgetTangent: function ( t ) {\n\n\t\tvar delta = 0.0001;\n\t\tvar t1 = t - delta;\n\t\tvar t2 = t + delta;\n\n\t\t// Capping in case of danger\n\n\t\tif ( t1 < 0 ) t1 = 0;\n\t\tif ( t2 > 1 ) t2 = 1;\n\n\t\tvar pt1 = this.getPoint( t1 );\n\t\tvar pt2 = this.getPoint( t2 );\n\n\t\tvar vec = pt2.clone().sub( pt1 );\n\t\treturn vec.normalize();\n\n\t},\n\n\tgetTangentAt: function ( u ) {\n\n\t\tvar t = this.getUtoTmapping( u );\n\t\treturn this.getTangent( t );\n\n\t},\n\n\tcomputeFrenetFrames: function ( segments, closed ) {\n\n\t\t// see http://www.cs.indiana.edu/pub/techreports/TR425.pdf\n\n\t\tvar normal = new Vector3();\n\n\t\tvar tangents = [];\n\t\tvar normals = [];\n\t\tvar binormals = [];\n\n\t\tvar vec = new Vector3();\n\t\tvar mat = new Matrix4();\n\n\t\tvar i, u, theta;\n\n\t\t// compute the tangent vectors for each segment on the curve\n\n\t\tfor ( i = 0; i <= segments; i ++ ) {\n\n\t\t\tu = i / segments;\n\n\t\t\ttangents[ i ] = this.getTangentAt( u );\n\t\t\ttangents[ i ].normalize();\n\n\t\t}\n\n\t\t// select an initial normal vector perpendicular to the first tangent vector,\n\t\t// and in the direction of the minimum tangent xyz component\n\n\t\tnormals[ 0 ] = new Vector3();\n\t\tbinormals[ 0 ] = new Vector3();\n\t\tvar min = Number.MAX_VALUE;\n\t\tvar tx = Math.abs( tangents[ 0 ].x );\n\t\tvar ty = Math.abs( tangents[ 0 ].y );\n\t\tvar tz = Math.abs( tangents[ 0 ].z );\n\n\t\tif ( tx <= min ) {\n\n\t\t\tmin = tx;\n\t\t\tnormal.set( 1, 0, 0 );\n\n\t\t}\n\n\t\tif ( ty <= min ) {\n\n\t\t\tmin = ty;\n\t\t\tnormal.set( 0, 1, 0 );\n\n\t\t}\n\n\t\tif ( tz <= min ) {\n\n\t\t\tnormal.set( 0, 0, 1 );\n\n\t\t}\n\n\t\tvec.crossVectors( tangents[ 0 ], normal ).normalize();\n\n\t\tnormals[ 0 ].crossVectors( tangents[ 0 ], vec );\n\t\tbinormals[ 0 ].crossVectors( tangents[ 0 ], normals[ 0 ] );\n\n\n\t\t// compute the slowly-varying normal and binormal vectors for each segment on the curve\n\n\t\tfor ( i = 1; i <= segments; i ++ ) {\n\n\t\t\tnormals[ i ] = normals[ i - 1 ].clone();\n\n\t\t\tbinormals[ i ] = binormals[ i - 1 ].clone();\n\n\t\t\tvec.crossVectors( tangents[ i - 1 ], tangents[ i ] );\n\n\t\t\tif ( vec.length() > Number.EPSILON ) {\n\n\t\t\t\tvec.normalize();\n\n\t\t\t\ttheta = Math.acos( _Math.clamp( tangents[ i - 1 ].dot( tangents[ i ] ), - 1, 1 ) ); // clamp for floating pt errors\n\n\t\t\t\tnormals[ i ].applyMatrix4( mat.makeRotationAxis( vec, theta ) );\n\n\t\t\t}\n\n\t\t\tbinormals[ i ].crossVectors( tangents[ i ], normals[ i ] );\n\n\t\t}\n\n\t\t// if the curve is closed, postprocess the vectors so the first and last normal vectors are the same\n\n\t\tif ( closed === true ) {\n\n\t\t\ttheta = Math.acos( _Math.clamp( normals[ 0 ].dot( normals[ segments ] ), - 1, 1 ) );\n\t\t\ttheta /= segments;\n\n\t\t\tif ( tangents[ 0 ].dot( vec.crossVectors( normals[ 0 ], normals[ segments ] ) ) > 0 ) {\n\n\t\t\t\ttheta = - theta;\n\n\t\t\t}\n\n\t\t\tfor ( i = 1; i <= segments; i ++ ) {\n\n\t\t\t\t// twist a little...\n\t\t\t\tnormals[ i ].applyMatrix4( mat.makeRotationAxis( tangents[ i ], theta * i ) );\n\t\t\t\tbinormals[ i ].crossVectors( tangents[ i ], normals[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn {\n\t\t\ttangents: tangents,\n\t\t\tnormals: normals,\n\t\t\tbinormals: binormals\n\t\t};\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tthis.arcLengthDivisions = source.arcLengthDivisions;\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function () {\n\n\t\tvar data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Curve',\n\t\t\t\tgenerator: 'Curve.toJSON'\n\t\t\t}\n\t\t};\n\n\t\tdata.arcLengthDivisions = this.arcLengthDivisions;\n\t\tdata.type = this.type;\n\n\t\treturn data;\n\n\t},\n\n\tfromJSON: function ( json ) {\n\n\t\tthis.arcLengthDivisions = json.arcLengthDivisions;\n\n\t\treturn this;\n\n\t}\n\n} );\n\nfunction EllipseCurve( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) {\n\n\tCurve.call( this );\n\n\tthis.type = 'EllipseCurve';\n\n\tthis.aX = aX || 0;\n\tthis.aY = aY || 0;\n\n\tthis.xRadius = xRadius || 1;\n\tthis.yRadius = yRadius || 1;\n\n\tthis.aStartAngle = aStartAngle || 0;\n\tthis.aEndAngle = aEndAngle || 2 * Math.PI;\n\n\tthis.aClockwise = aClockwise || false;\n\n\tthis.aRotation = aRotation || 0;\n\n}\n\nEllipseCurve.prototype = Object.create( Curve.prototype );\nEllipseCurve.prototype.constructor = EllipseCurve;\n\nEllipseCurve.prototype.isEllipseCurve = true;\n\nEllipseCurve.prototype.getPoint = function ( t, optionalTarget ) {\n\n\tvar point = optionalTarget || new Vector2();\n\n\tvar twoPi = Math.PI * 2;\n\tvar deltaAngle = this.aEndAngle - this.aStartAngle;\n\tvar samePoints = Math.abs( deltaAngle ) < Number.EPSILON;\n\n\t// ensures that deltaAngle is 0 .. 2 PI\n\twhile ( deltaAngle < 0 ) deltaAngle += twoPi;\n\twhile ( deltaAngle > twoPi ) deltaAngle -= twoPi;\n\n\tif ( deltaAngle < Number.EPSILON ) {\n\n\t\tif ( samePoints ) {\n\n\t\t\tdeltaAngle = 0;\n\n\t\t} else {\n\n\t\t\tdeltaAngle = twoPi;\n\n\t\t}\n\n\t}\n\n\tif ( this.aClockwise === true && ! samePoints ) {\n\n\t\tif ( deltaAngle === twoPi ) {\n\n\t\t\tdeltaAngle = - twoPi;\n\n\t\t} else {\n\n\t\t\tdeltaAngle = deltaAngle - twoPi;\n\n\t\t}\n\n\t}\n\n\tvar angle = this.aStartAngle + t * deltaAngle;\n\tvar x = this.aX + this.xRadius * Math.cos( angle );\n\tvar y = this.aY + this.yRadius * Math.sin( angle );\n\n\tif ( this.aRotation !== 0 ) {\n\n\t\tvar cos = Math.cos( this.aRotation );\n\t\tvar sin = Math.sin( this.aRotation );\n\n\t\tvar tx = x - this.aX;\n\t\tvar ty = y - this.aY;\n\n\t\t// Rotate the point about the center of the ellipse.\n\t\tx = tx * cos - ty * sin + this.aX;\n\t\ty = tx * sin + ty * cos + this.aY;\n\n\t}\n\n\treturn point.set( x, y );\n\n};\n\nEllipseCurve.prototype.copy = function ( source ) {\n\n\tCurve.prototype.copy.call( this, source );\n\n\tthis.aX = source.aX;\n\tthis.aY = source.aY;\n\n\tthis.xRadius = source.xRadius;\n\tthis.yRadius = source.yRadius;\n\n\tthis.aStartAngle = source.aStartAngle;\n\tthis.aEndAngle = source.aEndAngle;\n\n\tthis.aClockwise = source.aClockwise;\n\n\tthis.aRotation = source.aRotation;\n\n\treturn this;\n\n};\n\n\nEllipseCurve.prototype.toJSON = function () {\n\n\tvar data = Curve.prototype.toJSON.call( this );\n\n\tdata.aX = this.aX;\n\tdata.aY = this.aY;\n\n\tdata.xRadius = this.xRadius;\n\tdata.yRadius = this.yRadius;\n\n\tdata.aStartAngle = this.aStartAngle;\n\tdata.aEndAngle = this.aEndAngle;\n\n\tdata.aClockwise = this.aClockwise;\n\n\tdata.aRotation = this.aRotation;\n\n\treturn data;\n\n};\n\nEllipseCurve.prototype.fromJSON = function ( json ) {\n\n\tCurve.prototype.fromJSON.call( this, json );\n\n\tthis.aX = json.aX;\n\tthis.aY = json.aY;\n\n\tthis.xRadius = json.xRadius;\n\tthis.yRadius = json.yRadius;\n\n\tthis.aStartAngle = json.aStartAngle;\n\tthis.aEndAngle = json.aEndAngle;\n\n\tthis.aClockwise = json.aClockwise;\n\n\tthis.aRotation = json.aRotation;\n\n\treturn this;\n\n};\n\nfunction ArcCurve( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {\n\n\tEllipseCurve.call( this, aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise );\n\n\tthis.type = 'ArcCurve';\n\n}\n\nArcCurve.prototype = Object.create( EllipseCurve.prototype );\nArcCurve.prototype.constructor = ArcCurve;\n\nArcCurve.prototype.isArcCurve = true;\n\n/**\n * @author zz85 https://github.com/zz85\n *\n * Centripetal CatmullRom Curve - which is useful for avoiding\n * cusps and self-intersections in non-uniform catmull rom curves.\n * http://www.cemyuksel.com/research/catmullrom_param/catmullrom.pdf\n *\n * curve.type accepts centripetal(default), chordal and catmullrom\n * curve.tension is used for catmullrom which defaults to 0.5\n */\n\n\n/*\nBased on an optimized c++ solution in\n - http://stackoverflow.com/questions/9489736/catmull-rom-curve-with-no-cusps-and-no-self-intersections/\n - http://ideone.com/NoEbVM\n\nThis CubicPoly class could be used for reusing some variables and calculations,\nbut for three.js curve use, it could be possible inlined and flatten into a single function call\nwhich can be placed in CurveUtils.\n*/\n\nfunction CubicPoly() {\n\n\tvar c0 = 0, c1 = 0, c2 = 0, c3 = 0;\n\n\t/*\n\t * Compute coefficients for a cubic polynomial\n\t * p(s) = c0 + c1*s + c2*s^2 + c3*s^3\n\t * such that\n\t * p(0) = x0, p(1) = x1\n\t * and\n\t * p'(0) = t0, p'(1) = t1.\n\t */\n\tfunction init( x0, x1, t0, t1 ) {\n\n\t\tc0 = x0;\n\t\tc1 = t0;\n\t\tc2 = - 3 * x0 + 3 * x1 - 2 * t0 - t1;\n\t\tc3 = 2 * x0 - 2 * x1 + t0 + t1;\n\n\t}\n\n\treturn {\n\n\t\tinitCatmullRom: function ( x0, x1, x2, x3, tension ) {\n\n\t\t\tinit( x1, x2, tension * ( x2 - x0 ), tension * ( x3 - x1 ) );\n\n\t\t},\n\n\t\tinitNonuniformCatmullRom: function ( x0, x1, x2, x3, dt0, dt1, dt2 ) {\n\n\t\t\t// compute tangents when parameterized in [t1,t2]\n\t\t\tvar t1 = ( x1 - x0 ) / dt0 - ( x2 - x0 ) / ( dt0 + dt1 ) + ( x2 - x1 ) / dt1;\n\t\t\tvar t2 = ( x2 - x1 ) / dt1 - ( x3 - x1 ) / ( dt1 + dt2 ) + ( x3 - x2 ) / dt2;\n\n\t\t\t// rescale tangents for parametrization in [0,1]\n\t\t\tt1 *= dt1;\n\t\t\tt2 *= dt1;\n\n\t\t\tinit( x1, x2, t1, t2 );\n\n\t\t},\n\n\t\tcalc: function ( t ) {\n\n\t\t\tvar t2 = t * t;\n\t\t\tvar t3 = t2 * t;\n\t\t\treturn c0 + c1 * t + c2 * t2 + c3 * t3;\n\n\t\t}\n\n\t};\n\n}\n\n//\n\nvar tmp = new Vector3();\nvar px = new CubicPoly();\nvar py = new CubicPoly();\nvar pz = new CubicPoly();\n\nfunction CatmullRomCurve3( points, closed, curveType, tension ) {\n\n\tCurve.call( this );\n\n\tthis.type = 'CatmullRomCurve3';\n\n\tthis.points = points || [];\n\tthis.closed = closed || false;\n\tthis.curveType = curveType || 'centripetal';\n\tthis.tension = tension || 0.5;\n\n}\n\nCatmullRomCurve3.prototype = Object.create( Curve.prototype );\nCatmullRomCurve3.prototype.constructor = CatmullRomCurve3;\n\nCatmullRomCurve3.prototype.isCatmullRomCurve3 = true;\n\nCatmullRomCurve3.prototype.getPoint = function ( t, optionalTarget ) {\n\n\tvar point = optionalTarget || new Vector3();\n\n\tvar points = this.points;\n\tvar l = points.length;\n\n\tvar p = ( l - ( this.closed ? 0 : 1 ) ) * t;\n\tvar intPoint = Math.floor( p );\n\tvar weight = p - intPoint;\n\n\tif ( this.closed ) {\n\n\t\tintPoint += intPoint > 0 ? 0 : ( Math.floor( Math.abs( intPoint ) / l ) + 1 ) * l;\n\n\t} else if ( weight === 0 && intPoint === l - 1 ) {\n\n\t\tintPoint = l - 2;\n\t\tweight = 1;\n\n\t}\n\n\tvar p0, p1, p2, p3; // 4 points\n\n\tif ( this.closed || intPoint > 0 ) {\n\n\t\tp0 = points[ ( intPoint - 1 ) % l ];\n\n\t} else {\n\n\t\t// extrapolate first point\n\t\ttmp.subVectors( points[ 0 ], points[ 1 ] ).add( points[ 0 ] );\n\t\tp0 = tmp;\n\n\t}\n\n\tp1 = points[ intPoint % l ];\n\tp2 = points[ ( intPoint + 1 ) % l ];\n\n\tif ( this.closed || intPoint + 2 < l ) {\n\n\t\tp3 = points[ ( intPoint + 2 ) % l ];\n\n\t} else {\n\n\t\t// extrapolate last point\n\t\ttmp.subVectors( points[ l - 1 ], points[ l - 2 ] ).add( points[ l - 1 ] );\n\t\tp3 = tmp;\n\n\t}\n\n\tif ( this.curveType === 'centripetal' || this.curveType === 'chordal' ) {\n\n\t\t// init Centripetal / Chordal Catmull-Rom\n\t\tvar pow = this.curveType === 'chordal' ? 0.5 : 0.25;\n\t\tvar dt0 = Math.pow( p0.distanceToSquared( p1 ), pow );\n\t\tvar dt1 = Math.pow( p1.distanceToSquared( p2 ), pow );\n\t\tvar dt2 = Math.pow( p2.distanceToSquared( p3 ), pow );\n\n\t\t// safety check for repeated points\n\t\tif ( dt1 < 1e-4 ) dt1 = 1.0;\n\t\tif ( dt0 < 1e-4 ) dt0 = dt1;\n\t\tif ( dt2 < 1e-4 ) dt2 = dt1;\n\n\t\tpx.initNonuniformCatmullRom( p0.x, p1.x, p2.x, p3.x, dt0, dt1, dt2 );\n\t\tpy.initNonuniformCatmullRom( p0.y, p1.y, p2.y, p3.y, dt0, dt1, dt2 );\n\t\tpz.initNonuniformCatmullRom( p0.z, p1.z, p2.z, p3.z, dt0, dt1, dt2 );\n\n\t} else if ( this.curveType === 'catmullrom' ) {\n\n\t\tpx.initCatmullRom( p0.x, p1.x, p2.x, p3.x, this.tension );\n\t\tpy.initCatmullRom( p0.y, p1.y, p2.y, p3.y, this.tension );\n\t\tpz.initCatmullRom( p0.z, p1.z, p2.z, p3.z, this.tension );\n\n\t}\n\n\tpoint.set(\n\t\tpx.calc( weight ),\n\t\tpy.calc( weight ),\n\t\tpz.calc( weight )\n\t);\n\n\treturn point;\n\n};\n\nCatmullRomCurve3.prototype.copy = function ( source ) {\n\n\tCurve.prototype.copy.call( this, source );\n\n\tthis.points = [];\n\n\tfor ( var i = 0, l = source.points.length; i < l; i ++ ) {\n\n\t\tvar point = source.points[ i ];\n\n\t\tthis.points.push( point.clone() );\n\n\t}\n\n\tthis.closed = source.closed;\n\tthis.curveType = source.curveType;\n\tthis.tension = source.tension;\n\n\treturn this;\n\n};\n\nCatmullRomCurve3.prototype.toJSON = function () {\n\n\tvar data = Curve.prototype.toJSON.call( this );\n\n\tdata.points = [];\n\n\tfor ( var i = 0, l = this.points.length; i < l; i ++ ) {\n\n\t\tvar point = this.points[ i ];\n\t\tdata.points.push( point.toArray() );\n\n\t}\n\n\tdata.closed = this.closed;\n\tdata.curveType = this.curveType;\n\tdata.tension = this.tension;\n\n\treturn data;\n\n};\n\nCatmullRomCurve3.prototype.fromJSON = function ( json ) {\n\n\tCurve.prototype.fromJSON.call( this, json );\n\n\tthis.points = [];\n\n\tfor ( var i = 0, l = json.points.length; i < l; i ++ ) {\n\n\t\tvar point = json.points[ i ];\n\t\tthis.points.push( new Vector3().fromArray( point ) );\n\n\t}\n\n\tthis.closed = json.closed;\n\tthis.curveType = json.curveType;\n\tthis.tension = json.tension;\n\n\treturn this;\n\n};\n\n/**\n * @author zz85 / http://www.lab4games.net/zz85/blog\n *\n * Bezier Curves formulas obtained from\n * http://en.wikipedia.org/wiki/Bézier_curve\n */\n\nfunction CatmullRom( t, p0, p1, p2, p3 ) {\n\n\tvar v0 = ( p2 - p0 ) * 0.5;\n\tvar v1 = ( p3 - p1 ) * 0.5;\n\tvar t2 = t * t;\n\tvar t3 = t * t2;\n\treturn ( 2 * p1 - 2 * p2 + v0 + v1 ) * t3 + ( - 3 * p1 + 3 * p2 - 2 * v0 - v1 ) * t2 + v0 * t + p1;\n\n}\n\n//\n\nfunction QuadraticBezierP0( t, p ) {\n\n\tvar k = 1 - t;\n\treturn k * k * p;\n\n}\n\nfunction QuadraticBezierP1( t, p ) {\n\n\treturn 2 * ( 1 - t ) * t * p;\n\n}\n\nfunction QuadraticBezierP2( t, p ) {\n\n\treturn t * t * p;\n\n}\n\nfunction QuadraticBezier( t, p0, p1, p2 ) {\n\n\treturn QuadraticBezierP0( t, p0 ) + QuadraticBezierP1( t, p1 ) +\n\t\tQuadraticBezierP2( t, p2 );\n\n}\n\n//\n\nfunction CubicBezierP0( t, p ) {\n\n\tvar k = 1 - t;\n\treturn k * k * k * p;\n\n}\n\nfunction CubicBezierP1( t, p ) {\n\n\tvar k = 1 - t;\n\treturn 3 * k * k * t * p;\n\n}\n\nfunction CubicBezierP2( t, p ) {\n\n\treturn 3 * ( 1 - t ) * t * t * p;\n\n}\n\nfunction CubicBezierP3( t, p ) {\n\n\treturn t * t * t * p;\n\n}\n\nfunction CubicBezier( t, p0, p1, p2, p3 ) {\n\n\treturn CubicBezierP0( t, p0 ) + CubicBezierP1( t, p1 ) + CubicBezierP2( t, p2 ) +\n\t\tCubicBezierP3( t, p3 );\n\n}\n\nfunction CubicBezierCurve( v0, v1, v2, v3 ) {\n\n\tCurve.call( this );\n\n\tthis.type = 'CubicBezierCurve';\n\n\tthis.v0 = v0 || new Vector2();\n\tthis.v1 = v1 || new Vector2();\n\tthis.v2 = v2 || new Vector2();\n\tthis.v3 = v3 || new Vector2();\n\n}\n\nCubicBezierCurve.prototype = Object.create( Curve.prototype );\nCubicBezierCurve.prototype.constructor = CubicBezierCurve;\n\nCubicBezierCurve.prototype.isCubicBezierCurve = true;\n\nCubicBezierCurve.prototype.getPoint = function ( t, optionalTarget ) {\n\n\tvar point = optionalTarget || new Vector2();\n\n\tvar v0 = this.v0, v1 = this.v1, v2 = this.v2, v3 = this.v3;\n\n\tpoint.set(\n\t\tCubicBezier( t, v0.x, v1.x, v2.x, v3.x ),\n\t\tCubicBezier( t, v0.y, v1.y, v2.y, v3.y )\n\t);\n\n\treturn point;\n\n};\n\nCubicBezierCurve.prototype.copy = function ( source ) {\n\n\tCurve.prototype.copy.call( this, source );\n\n\tthis.v0.copy( source.v0 );\n\tthis.v1.copy( source.v1 );\n\tthis.v2.copy( source.v2 );\n\tthis.v3.copy( source.v3 );\n\n\treturn this;\n\n};\n\nCubicBezierCurve.prototype.toJSON = function () {\n\n\tvar data = Curve.prototype.toJSON.call( this );\n\n\tdata.v0 = this.v0.toArray();\n\tdata.v1 = this.v1.toArray();\n\tdata.v2 = this.v2.toArray();\n\tdata.v3 = this.v3.toArray();\n\n\treturn data;\n\n};\n\nCubicBezierCurve.prototype.fromJSON = function ( json ) {\n\n\tCurve.prototype.fromJSON.call( this, json );\n\n\tthis.v0.fromArray( json.v0 );\n\tthis.v1.fromArray( json.v1 );\n\tthis.v2.fromArray( json.v2 );\n\tthis.v3.fromArray( json.v3 );\n\n\treturn this;\n\n};\n\nfunction CubicBezierCurve3( v0, v1, v2, v3 ) {\n\n\tCurve.call( this );\n\n\tthis.type = 'CubicBezierCurve3';\n\n\tthis.v0 = v0 || new Vector3();\n\tthis.v1 = v1 || new Vector3();\n\tthis.v2 = v2 || new Vector3();\n\tthis.v3 = v3 || new Vector3();\n\n}\n\nCubicBezierCurve3.prototype = Object.create( Curve.prototype );\nCubicBezierCurve3.prototype.constructor = CubicBezierCurve3;\n\nCubicBezierCurve3.prototype.isCubicBezierCurve3 = true;\n\nCubicBezierCurve3.prototype.getPoint = function ( t, optionalTarget ) {\n\n\tvar point = optionalTarget || new Vector3();\n\n\tvar v0 = this.v0, v1 = this.v1, v2 = this.v2, v3 = this.v3;\n\n\tpoint.set(\n\t\tCubicBezier( t, v0.x, v1.x, v2.x, v3.x ),\n\t\tCubicBezier( t, v0.y, v1.y, v2.y, v3.y ),\n\t\tCubicBezier( t, v0.z, v1.z, v2.z, v3.z )\n\t);\n\n\treturn point;\n\n};\n\nCubicBezierCurve3.prototype.copy = function ( source ) {\n\n\tCurve.prototype.copy.call( this, source );\n\n\tthis.v0.copy( source.v0 );\n\tthis.v1.copy( source.v1 );\n\tthis.v2.copy( source.v2 );\n\tthis.v3.copy( source.v3 );\n\n\treturn this;\n\n};\n\nCubicBezierCurve3.prototype.toJSON = function () {\n\n\tvar data = Curve.prototype.toJSON.call( this );\n\n\tdata.v0 = this.v0.toArray();\n\tdata.v1 = this.v1.toArray();\n\tdata.v2 = this.v2.toArray();\n\tdata.v3 = this.v3.toArray();\n\n\treturn data;\n\n};\n\nCubicBezierCurve3.prototype.fromJSON = function ( json ) {\n\n\tCurve.prototype.fromJSON.call( this, json );\n\n\tthis.v0.fromArray( json.v0 );\n\tthis.v1.fromArray( json.v1 );\n\tthis.v2.fromArray( json.v2 );\n\tthis.v3.fromArray( json.v3 );\n\n\treturn this;\n\n};\n\nfunction LineCurve( v1, v2 ) {\n\n\tCurve.call( this );\n\n\tthis.type = 'LineCurve';\n\n\tthis.v1 = v1 || new Vector2();\n\tthis.v2 = v2 || new Vector2();\n\n}\n\nLineCurve.prototype = Object.create( Curve.prototype );\nLineCurve.prototype.constructor = LineCurve;\n\nLineCurve.prototype.isLineCurve = true;\n\nLineCurve.prototype.getPoint = function ( t, optionalTarget ) {\n\n\tvar point = optionalTarget || new Vector2();\n\n\tif ( t === 1 ) {\n\n\t\tpoint.copy( this.v2 );\n\n\t} else {\n\n\t\tpoint.copy( this.v2 ).sub( this.v1 );\n\t\tpoint.multiplyScalar( t ).add( this.v1 );\n\n\t}\n\n\treturn point;\n\n};\n\n// Line curve is linear, so we can overwrite default getPointAt\n\nLineCurve.prototype.getPointAt = function ( u, optionalTarget ) {\n\n\treturn this.getPoint( u, optionalTarget );\n\n};\n\nLineCurve.prototype.getTangent = function ( /* t */ ) {\n\n\tvar tangent = this.v2.clone().sub( this.v1 );\n\n\treturn tangent.normalize();\n\n};\n\nLineCurve.prototype.copy = function ( source ) {\n\n\tCurve.prototype.copy.call( this, source );\n\n\tthis.v1.copy( source.v1 );\n\tthis.v2.copy( source.v2 );\n\n\treturn this;\n\n};\n\nLineCurve.prototype.toJSON = function () {\n\n\tvar data = Curve.prototype.toJSON.call( this );\n\n\tdata.v1 = this.v1.toArray();\n\tdata.v2 = this.v2.toArray();\n\n\treturn data;\n\n};\n\nLineCurve.prototype.fromJSON = function ( json ) {\n\n\tCurve.prototype.fromJSON.call( this, json );\n\n\tthis.v1.fromArray( json.v1 );\n\tthis.v2.fromArray( json.v2 );\n\n\treturn this;\n\n};\n\nfunction LineCurve3( v1, v2 ) {\n\n\tCurve.call( this );\n\n\tthis.type = 'LineCurve3';\n\n\tthis.v1 = v1 || new Vector3();\n\tthis.v2 = v2 || new Vector3();\n\n}\n\nLineCurve3.prototype = Object.create( Curve.prototype );\nLineCurve3.prototype.constructor = LineCurve3;\n\nLineCurve3.prototype.isLineCurve3 = true;\n\nLineCurve3.prototype.getPoint = function ( t, optionalTarget ) {\n\n\tvar point = optionalTarget || new Vector3();\n\n\tif ( t === 1 ) {\n\n\t\tpoint.copy( this.v2 );\n\n\t} else {\n\n\t\tpoint.copy( this.v2 ).sub( this.v1 );\n\t\tpoint.multiplyScalar( t ).add( this.v1 );\n\n\t}\n\n\treturn point;\n\n};\n\n// Line curve is linear, so we can overwrite default getPointAt\n\nLineCurve3.prototype.getPointAt = function ( u, optionalTarget ) {\n\n\treturn this.getPoint( u, optionalTarget );\n\n};\n\nLineCurve3.prototype.copy = function ( source ) {\n\n\tCurve.prototype.copy.call( this, source );\n\n\tthis.v1.copy( source.v1 );\n\tthis.v2.copy( source.v2 );\n\n\treturn this;\n\n};\n\nLineCurve3.prototype.toJSON = function () {\n\n\tvar data = Curve.prototype.toJSON.call( this );\n\n\tdata.v1 = this.v1.toArray();\n\tdata.v2 = this.v2.toArray();\n\n\treturn data;\n\n};\n\nLineCurve3.prototype.fromJSON = function ( json ) {\n\n\tCurve.prototype.fromJSON.call( this, json );\n\n\tthis.v1.fromArray( json.v1 );\n\tthis.v2.fromArray( json.v2 );\n\n\treturn this;\n\n};\n\nfunction QuadraticBezierCurve( v0, v1, v2 ) {\n\n\tCurve.call( this );\n\n\tthis.type = 'QuadraticBezierCurve';\n\n\tthis.v0 = v0 || new Vector2();\n\tthis.v1 = v1 || new Vector2();\n\tthis.v2 = v2 || new Vector2();\n\n}\n\nQuadraticBezierCurve.prototype = Object.create( Curve.prototype );\nQuadraticBezierCurve.prototype.constructor = QuadraticBezierCurve;\n\nQuadraticBezierCurve.prototype.isQuadraticBezierCurve = true;\n\nQuadraticBezierCurve.prototype.getPoint = function ( t, optionalTarget ) {\n\n\tvar point = optionalTarget || new Vector2();\n\n\tvar v0 = this.v0, v1 = this.v1, v2 = this.v2;\n\n\tpoint.set(\n\t\tQuadraticBezier( t, v0.x, v1.x, v2.x ),\n\t\tQuadraticBezier( t, v0.y, v1.y, v2.y )\n\t);\n\n\treturn point;\n\n};\n\nQuadraticBezierCurve.prototype.copy = function ( source ) {\n\n\tCurve.prototype.copy.call( this, source );\n\n\tthis.v0.copy( source.v0 );\n\tthis.v1.copy( source.v1 );\n\tthis.v2.copy( source.v2 );\n\n\treturn this;\n\n};\n\nQuadraticBezierCurve.prototype.toJSON = function () {\n\n\tvar data = Curve.prototype.toJSON.call( this );\n\n\tdata.v0 = this.v0.toArray();\n\tdata.v1 = this.v1.toArray();\n\tdata.v2 = this.v2.toArray();\n\n\treturn data;\n\n};\n\nQuadraticBezierCurve.prototype.fromJSON = function ( json ) {\n\n\tCurve.prototype.fromJSON.call( this, json );\n\n\tthis.v0.fromArray( json.v0 );\n\tthis.v1.fromArray( json.v1 );\n\tthis.v2.fromArray( json.v2 );\n\n\treturn this;\n\n};\n\nfunction QuadraticBezierCurve3( v0, v1, v2 ) {\n\n\tCurve.call( this );\n\n\tthis.type = 'QuadraticBezierCurve3';\n\n\tthis.v0 = v0 || new Vector3();\n\tthis.v1 = v1 || new Vector3();\n\tthis.v2 = v2 || new Vector3();\n\n}\n\nQuadraticBezierCurve3.prototype = Object.create( Curve.prototype );\nQuadraticBezierCurve3.prototype.constructor = QuadraticBezierCurve3;\n\nQuadraticBezierCurve3.prototype.isQuadraticBezierCurve3 = true;\n\nQuadraticBezierCurve3.prototype.getPoint = function ( t, optionalTarget ) {\n\n\tvar point = optionalTarget || new Vector3();\n\n\tvar v0 = this.v0, v1 = this.v1, v2 = this.v2;\n\n\tpoint.set(\n\t\tQuadraticBezier( t, v0.x, v1.x, v2.x ),\n\t\tQuadraticBezier( t, v0.y, v1.y, v2.y ),\n\t\tQuadraticBezier( t, v0.z, v1.z, v2.z )\n\t);\n\n\treturn point;\n\n};\n\nQuadraticBezierCurve3.prototype.copy = function ( source ) {\n\n\tCurve.prototype.copy.call( this, source );\n\n\tthis.v0.copy( source.v0 );\n\tthis.v1.copy( source.v1 );\n\tthis.v2.copy( source.v2 );\n\n\treturn this;\n\n};\n\nQuadraticBezierCurve3.prototype.toJSON = function () {\n\n\tvar data = Curve.prototype.toJSON.call( this );\n\n\tdata.v0 = this.v0.toArray();\n\tdata.v1 = this.v1.toArray();\n\tdata.v2 = this.v2.toArray();\n\n\treturn data;\n\n};\n\nQuadraticBezierCurve3.prototype.fromJSON = function ( json ) {\n\n\tCurve.prototype.fromJSON.call( this, json );\n\n\tthis.v0.fromArray( json.v0 );\n\tthis.v1.fromArray( json.v1 );\n\tthis.v2.fromArray( json.v2 );\n\n\treturn this;\n\n};\n\nfunction SplineCurve( points /* array of Vector2 */ ) {\n\n\tCurve.call( this );\n\n\tthis.type = 'SplineCurve';\n\n\tthis.points = points || [];\n\n}\n\nSplineCurve.prototype = Object.create( Curve.prototype );\nSplineCurve.prototype.constructor = SplineCurve;\n\nSplineCurve.prototype.isSplineCurve = true;\n\nSplineCurve.prototype.getPoint = function ( t, optionalTarget ) {\n\n\tvar point = optionalTarget || new Vector2();\n\n\tvar points = this.points;\n\tvar p = ( points.length - 1 ) * t;\n\n\tvar intPoint = Math.floor( p );\n\tvar weight = p - intPoint;\n\n\tvar p0 = points[ intPoint === 0 ? intPoint : intPoint - 1 ];\n\tvar p1 = points[ intPoint ];\n\tvar p2 = points[ intPoint > points.length - 2 ? points.length - 1 : intPoint + 1 ];\n\tvar p3 = points[ intPoint > points.length - 3 ? points.length - 1 : intPoint + 2 ];\n\n\tpoint.set(\n\t\tCatmullRom( weight, p0.x, p1.x, p2.x, p3.x ),\n\t\tCatmullRom( weight, p0.y, p1.y, p2.y, p3.y )\n\t);\n\n\treturn point;\n\n};\n\nSplineCurve.prototype.copy = function ( source ) {\n\n\tCurve.prototype.copy.call( this, source );\n\n\tthis.points = [];\n\n\tfor ( var i = 0, l = source.points.length; i < l; i ++ ) {\n\n\t\tvar point = source.points[ i ];\n\n\t\tthis.points.push( point.clone() );\n\n\t}\n\n\treturn this;\n\n};\n\nSplineCurve.prototype.toJSON = function () {\n\n\tvar data = Curve.prototype.toJSON.call( this );\n\n\tdata.points = [];\n\n\tfor ( var i = 0, l = this.points.length; i < l; i ++ ) {\n\n\t\tvar point = this.points[ i ];\n\t\tdata.points.push( point.toArray() );\n\n\t}\n\n\treturn data;\n\n};\n\nSplineCurve.prototype.fromJSON = function ( json ) {\n\n\tCurve.prototype.fromJSON.call( this, json );\n\n\tthis.points = [];\n\n\tfor ( var i = 0, l = json.points.length; i < l; i ++ ) {\n\n\t\tvar point = json.points[ i ];\n\t\tthis.points.push( new Vector2().fromArray( point ) );\n\n\t}\n\n\treturn this;\n\n};\n\n\n\nvar Curves = Object.freeze({\n\tArcCurve: ArcCurve,\n\tCatmullRomCurve3: CatmullRomCurve3,\n\tCubicBezierCurve: CubicBezierCurve,\n\tCubicBezierCurve3: CubicBezierCurve3,\n\tEllipseCurve: EllipseCurve,\n\tLineCurve: LineCurve,\n\tLineCurve3: LineCurve3,\n\tQuadraticBezierCurve: QuadraticBezierCurve,\n\tQuadraticBezierCurve3: QuadraticBezierCurve3,\n\tSplineCurve: SplineCurve\n});\n\n/**\n * @author zz85 / http://www.lab4games.net/zz85/blog\n *\n **/\n\n/**************************************************************\n *\tCurved Path - a curve path is simply a array of connected\n * curves, but retains the api of a curve\n **************************************************************/\n\nfunction CurvePath() {\n\n\tCurve.call( this );\n\n\tthis.type = 'CurvePath';\n\n\tthis.curves = [];\n\tthis.autoClose = false; // Automatically closes the path\n\n}\n\nCurvePath.prototype = Object.assign( Object.create( Curve.prototype ), {\n\n\tconstructor: CurvePath,\n\n\tadd: function ( curve ) {\n\n\t\tthis.curves.push( curve );\n\n\t},\n\n\tclosePath: function () {\n\n\t\t// Add a line curve if start and end of lines are not connected\n\t\tvar startPoint = this.curves[ 0 ].getPoint( 0 );\n\t\tvar endPoint = this.curves[ this.curves.length - 1 ].getPoint( 1 );\n\n\t\tif ( ! startPoint.equals( endPoint ) ) {\n\n\t\t\tthis.curves.push( new LineCurve( endPoint, startPoint ) );\n\n\t\t}\n\n\t},\n\n\t// To get accurate point with reference to\n\t// entire path distance at time t,\n\t// following has to be done:\n\n\t// 1. Length of each sub path have to be known\n\t// 2. Locate and identify type of curve\n\t// 3. Get t for the curve\n\t// 4. Return curve.getPointAt(t')\n\n\tgetPoint: function ( t ) {\n\n\t\tvar d = t * this.getLength();\n\t\tvar curveLengths = this.getCurveLengths();\n\t\tvar i = 0;\n\n\t\t// To think about boundaries points.\n\n\t\twhile ( i < curveLengths.length ) {\n\n\t\t\tif ( curveLengths[ i ] >= d ) {\n\n\t\t\t\tvar diff = curveLengths[ i ] - d;\n\t\t\t\tvar curve = this.curves[ i ];\n\n\t\t\t\tvar segmentLength = curve.getLength();\n\t\t\t\tvar u = segmentLength === 0 ? 0 : 1 - diff / segmentLength;\n\n\t\t\t\treturn curve.getPointAt( u );\n\n\t\t\t}\n\n\t\t\ti ++;\n\n\t\t}\n\n\t\treturn null;\n\n\t\t// loop where sum != 0, sum > d , sum+1 1 && ! points[ points.length - 1 ].equals( points[ 0 ] ) ) {\n\n\t\t\tpoints.push( points[ 0 ] );\n\n\t\t}\n\n\t\treturn points;\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tCurve.prototype.copy.call( this, source );\n\n\t\tthis.curves = [];\n\n\t\tfor ( var i = 0, l = source.curves.length; i < l; i ++ ) {\n\n\t\t\tvar curve = source.curves[ i ];\n\n\t\t\tthis.curves.push( curve.clone() );\n\n\t\t}\n\n\t\tthis.autoClose = source.autoClose;\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function () {\n\n\t\tvar data = Curve.prototype.toJSON.call( this );\n\n\t\tdata.autoClose = this.autoClose;\n\t\tdata.curves = [];\n\n\t\tfor ( var i = 0, l = this.curves.length; i < l; i ++ ) {\n\n\t\t\tvar curve = this.curves[ i ];\n\t\t\tdata.curves.push( curve.toJSON() );\n\n\t\t}\n\n\t\treturn data;\n\n\t},\n\n\tfromJSON: function ( json ) {\n\n\t\tCurve.prototype.fromJSON.call( this, json );\n\n\t\tthis.autoClose = json.autoClose;\n\t\tthis.curves = [];\n\n\t\tfor ( var i = 0, l = json.curves.length; i < l; i ++ ) {\n\n\t\t\tvar curve = json.curves[ i ];\n\t\t\tthis.curves.push( new Curves[ curve.type ]().fromJSON( curve ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author zz85 / http://www.lab4games.net/zz85/blog\n * Creates free form 2d path using series of points, lines or curves.\n **/\n\nfunction Path( points ) {\n\n\tCurvePath.call( this );\n\n\tthis.type = 'Path';\n\n\tthis.currentPoint = new Vector2();\n\n\tif ( points ) {\n\n\t\tthis.setFromPoints( points );\n\n\t}\n\n}\n\nPath.prototype = Object.assign( Object.create( CurvePath.prototype ), {\n\n\tconstructor: Path,\n\n\tsetFromPoints: function ( points ) {\n\n\t\tthis.moveTo( points[ 0 ].x, points[ 0 ].y );\n\n\t\tfor ( var i = 1, l = points.length; i < l; i ++ ) {\n\n\t\t\tthis.lineTo( points[ i ].x, points[ i ].y );\n\n\t\t}\n\n\t},\n\n\tmoveTo: function ( x, y ) {\n\n\t\tthis.currentPoint.set( x, y ); // TODO consider referencing vectors instead of copying?\n\n\t},\n\n\tlineTo: function ( x, y ) {\n\n\t\tvar curve = new LineCurve( this.currentPoint.clone(), new Vector2( x, y ) );\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.set( x, y );\n\n\t},\n\n\tquadraticCurveTo: function ( aCPx, aCPy, aX, aY ) {\n\n\t\tvar curve = new QuadraticBezierCurve(\n\t\t\tthis.currentPoint.clone(),\n\t\t\tnew Vector2( aCPx, aCPy ),\n\t\t\tnew Vector2( aX, aY )\n\t\t);\n\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.set( aX, aY );\n\n\t},\n\n\tbezierCurveTo: function ( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ) {\n\n\t\tvar curve = new CubicBezierCurve(\n\t\t\tthis.currentPoint.clone(),\n\t\t\tnew Vector2( aCP1x, aCP1y ),\n\t\t\tnew Vector2( aCP2x, aCP2y ),\n\t\t\tnew Vector2( aX, aY )\n\t\t);\n\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.set( aX, aY );\n\n\t},\n\n\tsplineThru: function ( pts /*Array of Vector*/ ) {\n\n\t\tvar npts = [ this.currentPoint.clone() ].concat( pts );\n\n\t\tvar curve = new SplineCurve( npts );\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.copy( pts[ pts.length - 1 ] );\n\n\t},\n\n\tarc: function ( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {\n\n\t\tvar x0 = this.currentPoint.x;\n\t\tvar y0 = this.currentPoint.y;\n\n\t\tthis.absarc( aX + x0, aY + y0, aRadius,\n\t\t\taStartAngle, aEndAngle, aClockwise );\n\n\t},\n\n\tabsarc: function ( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {\n\n\t\tthis.absellipse( aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise );\n\n\t},\n\n\tellipse: function ( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) {\n\n\t\tvar x0 = this.currentPoint.x;\n\t\tvar y0 = this.currentPoint.y;\n\n\t\tthis.absellipse( aX + x0, aY + y0, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation );\n\n\t},\n\n\tabsellipse: function ( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) {\n\n\t\tvar curve = new EllipseCurve( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation );\n\n\t\tif ( this.curves.length > 0 ) {\n\n\t\t\t// if a previous curve is present, attempt to join\n\t\t\tvar firstPoint = curve.getPoint( 0 );\n\n\t\t\tif ( ! firstPoint.equals( this.currentPoint ) ) {\n\n\t\t\t\tthis.lineTo( firstPoint.x, firstPoint.y );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.curves.push( curve );\n\n\t\tvar lastPoint = curve.getPoint( 1 );\n\t\tthis.currentPoint.copy( lastPoint );\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tCurvePath.prototype.copy.call( this, source );\n\n\t\tthis.currentPoint.copy( source.currentPoint );\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function () {\n\n\t\tvar data = CurvePath.prototype.toJSON.call( this );\n\n\t\tdata.currentPoint = this.currentPoint.toArray();\n\n\t\treturn data;\n\n\t},\n\n\tfromJSON: function ( json ) {\n\n\t\tCurvePath.prototype.fromJSON.call( this, json );\n\n\t\tthis.currentPoint.fromArray( json.currentPoint );\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author zz85 / http://www.lab4games.net/zz85/blog\n * Defines a 2d shape plane using paths.\n **/\n\n// STEP 1 Create a path.\n// STEP 2 Turn path into shape.\n// STEP 3 ExtrudeGeometry takes in Shape/Shapes\n// STEP 3a - Extract points from each shape, turn to vertices\n// STEP 3b - Triangulate each shape, add faces.\n\nfunction Shape( points ) {\n\n\tPath.call( this, points );\n\n\tthis.uuid = _Math.generateUUID();\n\n\tthis.type = 'Shape';\n\n\tthis.holes = [];\n\n}\n\nShape.prototype = Object.assign( Object.create( Path.prototype ), {\n\n\tconstructor: Shape,\n\n\tgetPointsHoles: function ( divisions ) {\n\n\t\tvar holesPts = [];\n\n\t\tfor ( var i = 0, l = this.holes.length; i < l; i ++ ) {\n\n\t\t\tholesPts[ i ] = this.holes[ i ].getPoints( divisions );\n\n\t\t}\n\n\t\treturn holesPts;\n\n\t},\n\n\t// get points of shape and holes (keypoints based on segments parameter)\n\n\textractPoints: function ( divisions ) {\n\n\t\treturn {\n\n\t\t\tshape: this.getPoints( divisions ),\n\t\t\tholes: this.getPointsHoles( divisions )\n\n\t\t};\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tPath.prototype.copy.call( this, source );\n\n\t\tthis.holes = [];\n\n\t\tfor ( var i = 0, l = source.holes.length; i < l; i ++ ) {\n\n\t\t\tvar hole = source.holes[ i ];\n\n\t\t\tthis.holes.push( hole.clone() );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function () {\n\n\t\tvar data = Path.prototype.toJSON.call( this );\n\n\t\tdata.uuid = this.uuid;\n\t\tdata.holes = [];\n\n\t\tfor ( var i = 0, l = this.holes.length; i < l; i ++ ) {\n\n\t\t\tvar hole = this.holes[ i ];\n\t\t\tdata.holes.push( hole.toJSON() );\n\n\t\t}\n\n\t\treturn data;\n\n\t},\n\n\tfromJSON: function ( json ) {\n\n\t\tPath.prototype.fromJSON.call( this, json );\n\n\t\tthis.uuid = json.uuid;\n\t\tthis.holes = [];\n\n\t\tfor ( var i = 0, l = json.holes.length; i < l; i ++ ) {\n\n\t\t\tvar hole = json.holes[ i ];\n\t\t\tthis.holes.push( new Path().fromJSON( hole ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction Light( color, intensity ) {\n\n\tObject3D.call( this );\n\n\tthis.type = 'Light';\n\n\tthis.color = new Color( color );\n\tthis.intensity = intensity !== undefined ? intensity : 1;\n\n\tthis.receiveShadow = undefined;\n\n}\n\nLight.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Light,\n\n\tisLight: true,\n\n\tcopy: function ( source ) {\n\n\t\tObject3D.prototype.copy.call( this, source );\n\n\t\tthis.color.copy( source.color );\n\t\tthis.intensity = source.intensity;\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\tvar data = Object3D.prototype.toJSON.call( this, meta );\n\n\t\tdata.object.color = this.color.getHex();\n\t\tdata.object.intensity = this.intensity;\n\n\t\tif ( this.groundColor !== undefined ) data.object.groundColor = this.groundColor.getHex();\n\n\t\tif ( this.distance !== undefined ) data.object.distance = this.distance;\n\t\tif ( this.angle !== undefined ) data.object.angle = this.angle;\n\t\tif ( this.decay !== undefined ) data.object.decay = this.decay;\n\t\tif ( this.penumbra !== undefined ) data.object.penumbra = this.penumbra;\n\n\t\tif ( this.shadow !== undefined ) data.object.shadow = this.shadow.toJSON();\n\n\t\treturn data;\n\n\t}\n\n} );\n\n/**\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction HemisphereLight( skyColor, groundColor, intensity ) {\n\n\tLight.call( this, skyColor, intensity );\n\n\tthis.type = 'HemisphereLight';\n\n\tthis.castShadow = undefined;\n\n\tthis.position.copy( Object3D.DefaultUp );\n\tthis.updateMatrix();\n\n\tthis.groundColor = new Color( groundColor );\n\n}\n\nHemisphereLight.prototype = Object.assign( Object.create( Light.prototype ), {\n\n\tconstructor: HemisphereLight,\n\n\tisHemisphereLight: true,\n\n\tcopy: function ( source ) {\n\n\t\tLight.prototype.copy.call( this, source );\n\n\t\tthis.groundColor.copy( source.groundColor );\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction LightShadow( camera ) {\n\n\tthis.camera = camera;\n\n\tthis.bias = 0;\n\tthis.radius = 1;\n\n\tthis.mapSize = new Vector2( 512, 512 );\n\n\tthis.map = null;\n\tthis.matrix = new Matrix4();\n\n}\n\nObject.assign( LightShadow.prototype, {\n\n\tcopy: function ( source ) {\n\n\t\tthis.camera = source.camera.clone();\n\n\t\tthis.bias = source.bias;\n\t\tthis.radius = source.radius;\n\n\t\tthis.mapSize.copy( source.mapSize );\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\ttoJSON: function () {\n\n\t\tvar object = {};\n\n\t\tif ( this.bias !== 0 ) object.bias = this.bias;\n\t\tif ( this.radius !== 1 ) object.radius = this.radius;\n\t\tif ( this.mapSize.x !== 512 || this.mapSize.y !== 512 ) object.mapSize = this.mapSize.toArray();\n\n\t\tobject.camera = this.camera.toJSON( false ).object;\n\t\tdelete object.camera.matrix;\n\n\t\treturn object;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction SpotLightShadow() {\n\n\tLightShadow.call( this, new PerspectiveCamera( 50, 1, 0.5, 500 ) );\n\n}\n\nSpotLightShadow.prototype = Object.assign( Object.create( LightShadow.prototype ), {\n\n\tconstructor: SpotLightShadow,\n\n\tisSpotLightShadow: true,\n\n\tupdate: function ( light ) {\n\n\t\tvar camera = this.camera;\n\n\t\tvar fov = _Math.RAD2DEG * 2 * light.angle;\n\t\tvar aspect = this.mapSize.width / this.mapSize.height;\n\t\tvar far = light.distance || camera.far;\n\n\t\tif ( fov !== camera.fov || aspect !== camera.aspect || far !== camera.far ) {\n\n\t\t\tcamera.fov = fov;\n\t\t\tcamera.aspect = aspect;\n\t\t\tcamera.far = far;\n\t\t\tcamera.updateProjectionMatrix();\n\n\t\t}\n\n\t}\n\n} );\n\n/**\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction SpotLight( color, intensity, distance, angle, penumbra, decay ) {\n\n\tLight.call( this, color, intensity );\n\n\tthis.type = 'SpotLight';\n\n\tthis.position.copy( Object3D.DefaultUp );\n\tthis.updateMatrix();\n\n\tthis.target = new Object3D();\n\n\tObject.defineProperty( this, 'power', {\n\t\tget: function () {\n\n\t\t\t// intensity = power per solid angle.\n\t\t\t// ref: equation (17) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\n\t\t\treturn this.intensity * Math.PI;\n\n\t\t},\n\t\tset: function ( power ) {\n\n\t\t\t// intensity = power per solid angle.\n\t\t\t// ref: equation (17) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\n\t\t\tthis.intensity = power / Math.PI;\n\n\t\t}\n\t} );\n\n\tthis.distance = ( distance !== undefined ) ? distance : 0;\n\tthis.angle = ( angle !== undefined ) ? angle : Math.PI / 3;\n\tthis.penumbra = ( penumbra !== undefined ) ? penumbra : 0;\n\tthis.decay = ( decay !== undefined ) ? decay : 1;\t// for physically correct lights, should be 2.\n\n\tthis.shadow = new SpotLightShadow();\n\n}\n\nSpotLight.prototype = Object.assign( Object.create( Light.prototype ), {\n\n\tconstructor: SpotLight,\n\n\tisSpotLight: true,\n\n\tcopy: function ( source ) {\n\n\t\tLight.prototype.copy.call( this, source );\n\n\t\tthis.distance = source.distance;\n\t\tthis.angle = source.angle;\n\t\tthis.penumbra = source.penumbra;\n\t\tthis.decay = source.decay;\n\n\t\tthis.target = source.target.clone();\n\n\t\tthis.shadow = source.shadow.clone();\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\n\nfunction PointLight( color, intensity, distance, decay ) {\n\n\tLight.call( this, color, intensity );\n\n\tthis.type = 'PointLight';\n\n\tObject.defineProperty( this, 'power', {\n\t\tget: function () {\n\n\t\t\t// intensity = power per solid angle.\n\t\t\t// ref: equation (15) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\n\t\t\treturn this.intensity * 4 * Math.PI;\n\n\t\t},\n\t\tset: function ( power ) {\n\n\t\t\t// intensity = power per solid angle.\n\t\t\t// ref: equation (15) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\n\t\t\tthis.intensity = power / ( 4 * Math.PI );\n\n\t\t}\n\t} );\n\n\tthis.distance = ( distance !== undefined ) ? distance : 0;\n\tthis.decay = ( decay !== undefined ) ? decay : 1;\t// for physically correct lights, should be 2.\n\n\tthis.shadow = new LightShadow( new PerspectiveCamera( 90, 1, 0.5, 500 ) );\n\n}\n\nPointLight.prototype = Object.assign( Object.create( Light.prototype ), {\n\n\tconstructor: PointLight,\n\n\tisPointLight: true,\n\n\tcopy: function ( source ) {\n\n\t\tLight.prototype.copy.call( this, source );\n\n\t\tthis.distance = source.distance;\n\t\tthis.decay = source.decay;\n\n\t\tthis.shadow = source.shadow.clone();\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction DirectionalLightShadow( ) {\n\n\tLightShadow.call( this, new OrthographicCamera( - 5, 5, 5, - 5, 0.5, 500 ) );\n\n}\n\nDirectionalLightShadow.prototype = Object.assign( Object.create( LightShadow.prototype ), {\n\n\tconstructor: DirectionalLightShadow\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction DirectionalLight( color, intensity ) {\n\n\tLight.call( this, color, intensity );\n\n\tthis.type = 'DirectionalLight';\n\n\tthis.position.copy( Object3D.DefaultUp );\n\tthis.updateMatrix();\n\n\tthis.target = new Object3D();\n\n\tthis.shadow = new DirectionalLightShadow();\n\n}\n\nDirectionalLight.prototype = Object.assign( Object.create( Light.prototype ), {\n\n\tconstructor: DirectionalLight,\n\n\tisDirectionalLight: true,\n\n\tcopy: function ( source ) {\n\n\t\tLight.prototype.copy.call( this, source );\n\n\t\tthis.target = source.target.clone();\n\n\t\tthis.shadow = source.shadow.clone();\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction AmbientLight( color, intensity ) {\n\n\tLight.call( this, color, intensity );\n\n\tthis.type = 'AmbientLight';\n\n\tthis.castShadow = undefined;\n\n}\n\nAmbientLight.prototype = Object.assign( Object.create( Light.prototype ), {\n\n\tconstructor: AmbientLight,\n\n\tisAmbientLight: true\n\n} );\n\n/**\n * @author abelnation / http://github.com/abelnation\n */\n\nfunction RectAreaLight( color, intensity, width, height ) {\n\n\tLight.call( this, color, intensity );\n\n\tthis.type = 'RectAreaLight';\n\n\tthis.width = ( width !== undefined ) ? width : 10;\n\tthis.height = ( height !== undefined ) ? height : 10;\n\n}\n\nRectAreaLight.prototype = Object.assign( Object.create( Light.prototype ), {\n\n\tconstructor: RectAreaLight,\n\n\tisRectAreaLight: true,\n\n\tcopy: function ( source ) {\n\n\t\tLight.prototype.copy.call( this, source );\n\n\t\tthis.width = source.width;\n\t\tthis.height = source.height;\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\tvar data = Light.prototype.toJSON.call( this, meta );\n\n\t\tdata.object.width = this.width;\n\t\tdata.object.height = this.height;\n\n\t\treturn data;\n\n\t}\n\n} );\n\n/**\n *\n * A Track that interpolates Strings\n *\n *\n * @author Ben Houston / http://clara.io/\n * @author David Sarno / http://lighthaus.us/\n * @author tschw\n */\n\nfunction StringKeyframeTrack( name, times, values, interpolation ) {\n\n\tKeyframeTrack.call( this, name, times, values, interpolation );\n\n}\n\nStringKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), {\n\n\tconstructor: StringKeyframeTrack,\n\n\tValueTypeName: 'string',\n\tValueBufferType: Array,\n\n\tDefaultInterpolation: InterpolateDiscrete,\n\n\tInterpolantFactoryMethodLinear: undefined,\n\n\tInterpolantFactoryMethodSmooth: undefined\n\n} );\n\n/**\n *\n * A Track of Boolean keyframe values.\n *\n *\n * @author Ben Houston / http://clara.io/\n * @author David Sarno / http://lighthaus.us/\n * @author tschw\n */\n\nfunction BooleanKeyframeTrack( name, times, values ) {\n\n\tKeyframeTrack.call( this, name, times, values );\n\n}\n\nBooleanKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), {\n\n\tconstructor: BooleanKeyframeTrack,\n\n\tValueTypeName: 'bool',\n\tValueBufferType: Array,\n\n\tDefaultInterpolation: InterpolateDiscrete,\n\n\tInterpolantFactoryMethodLinear: undefined,\n\tInterpolantFactoryMethodSmooth: undefined\n\n\t// Note: Actually this track could have a optimized / compressed\n\t// representation of a single value and a custom interpolant that\n\t// computes \"firstValue ^ isOdd( index )\".\n\n} );\n\n/**\n * Abstract base class of interpolants over parametric samples.\n *\n * The parameter domain is one dimensional, typically the time or a path\n * along a curve defined by the data.\n *\n * The sample values can have any dimensionality and derived classes may\n * apply special interpretations to the data.\n *\n * This class provides the interval seek in a Template Method, deferring\n * the actual interpolation to derived classes.\n *\n * Time complexity is O(1) for linear access crossing at most two points\n * and O(log N) for random access, where N is the number of positions.\n *\n * References:\n *\n * \t\thttp://www.oodesign.com/template-method-pattern.html\n *\n * @author tschw\n */\n\nfunction Interpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\tthis.parameterPositions = parameterPositions;\n\tthis._cachedIndex = 0;\n\n\tthis.resultBuffer = resultBuffer !== undefined ?\n\t\tresultBuffer : new sampleValues.constructor( sampleSize );\n\tthis.sampleValues = sampleValues;\n\tthis.valueSize = sampleSize;\n\n}\n\nObject.assign( Interpolant.prototype, {\n\n\tevaluate: function ( t ) {\n\n\t\tvar pp = this.parameterPositions,\n\t\t\ti1 = this._cachedIndex,\n\n\t\t\tt1 = pp[ i1 ],\n\t\t\tt0 = pp[ i1 - 1 ];\n\n\t\tvalidate_interval: {\n\n\t\t\tseek: {\n\n\t\t\t\tvar right;\n\n\t\t\t\tlinear_scan: {\n\n\t\t\t\t\t//- See http://jsperf.com/comparison-to-undefined/3\n\t\t\t\t\t//- slower code:\n\t\t\t\t\t//-\n\t\t\t\t\t//- \t\t\t\tif ( t >= t1 || t1 === undefined ) {\n\t\t\t\t\tforward_scan: if ( ! ( t < t1 ) ) {\n\n\t\t\t\t\t\tfor ( var giveUpAt = i1 + 2; ; ) {\n\n\t\t\t\t\t\t\tif ( t1 === undefined ) {\n\n\t\t\t\t\t\t\t\tif ( t < t0 ) break forward_scan;\n\n\t\t\t\t\t\t\t\t// after end\n\n\t\t\t\t\t\t\t\ti1 = pp.length;\n\t\t\t\t\t\t\t\tthis._cachedIndex = i1;\n\t\t\t\t\t\t\t\treturn this.afterEnd_( i1 - 1, t, t0 );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( i1 === giveUpAt ) break; // this loop\n\n\t\t\t\t\t\t\tt0 = t1;\n\t\t\t\t\t\t\tt1 = pp[ ++ i1 ];\n\n\t\t\t\t\t\t\tif ( t < t1 ) {\n\n\t\t\t\t\t\t\t\t// we have arrived at the sought interval\n\t\t\t\t\t\t\t\tbreak seek;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// prepare binary search on the right side of the index\n\t\t\t\t\t\tright = pp.length;\n\t\t\t\t\t\tbreak linear_scan;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t//- slower code:\n\t\t\t\t\t//-\t\t\t\t\tif ( t < t0 || t0 === undefined ) {\n\t\t\t\t\tif ( ! ( t >= t0 ) ) {\n\n\t\t\t\t\t\t// looping?\n\n\t\t\t\t\t\tvar t1global = pp[ 1 ];\n\n\t\t\t\t\t\tif ( t < t1global ) {\n\n\t\t\t\t\t\t\ti1 = 2; // + 1, using the scan for the details\n\t\t\t\t\t\t\tt0 = t1global;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// linear reverse scan\n\n\t\t\t\t\t\tfor ( var giveUpAt = i1 - 2; ; ) {\n\n\t\t\t\t\t\t\tif ( t0 === undefined ) {\n\n\t\t\t\t\t\t\t\t// before start\n\n\t\t\t\t\t\t\t\tthis._cachedIndex = 0;\n\t\t\t\t\t\t\t\treturn this.beforeStart_( 0, t, t1 );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( i1 === giveUpAt ) break; // this loop\n\n\t\t\t\t\t\t\tt1 = t0;\n\t\t\t\t\t\t\tt0 = pp[ -- i1 - 1 ];\n\n\t\t\t\t\t\t\tif ( t >= t0 ) {\n\n\t\t\t\t\t\t\t\t// we have arrived at the sought interval\n\t\t\t\t\t\t\t\tbreak seek;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// prepare binary search on the left side of the index\n\t\t\t\t\t\tright = i1;\n\t\t\t\t\t\ti1 = 0;\n\t\t\t\t\t\tbreak linear_scan;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// the interval is valid\n\n\t\t\t\t\tbreak validate_interval;\n\n\t\t\t\t} // linear scan\n\n\t\t\t\t// binary search\n\n\t\t\t\twhile ( i1 < right ) {\n\n\t\t\t\t\tvar mid = ( i1 + right ) >>> 1;\n\n\t\t\t\t\tif ( t < pp[ mid ] ) {\n\n\t\t\t\t\t\tright = mid;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ti1 = mid + 1;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tt1 = pp[ i1 ];\n\t\t\t\tt0 = pp[ i1 - 1 ];\n\n\t\t\t\t// check boundary cases, again\n\n\t\t\t\tif ( t0 === undefined ) {\n\n\t\t\t\t\tthis._cachedIndex = 0;\n\t\t\t\t\treturn this.beforeStart_( 0, t, t1 );\n\n\t\t\t\t}\n\n\t\t\t\tif ( t1 === undefined ) {\n\n\t\t\t\t\ti1 = pp.length;\n\t\t\t\t\tthis._cachedIndex = i1;\n\t\t\t\t\treturn this.afterEnd_( i1 - 1, t0, t );\n\n\t\t\t\t}\n\n\t\t\t} // seek\n\n\t\t\tthis._cachedIndex = i1;\n\n\t\t\tthis.intervalChanged_( i1, t0, t1 );\n\n\t\t} // validate_interval\n\n\t\treturn this.interpolate_( i1, t0, t, t1 );\n\n\t},\n\n\tsettings: null, // optional, subclass-specific settings structure\n\t// Note: The indirection allows central control of many interpolants.\n\n\t// --- Protected interface\n\n\tDefaultSettings_: {},\n\n\tgetSettings_: function () {\n\n\t\treturn this.settings || this.DefaultSettings_;\n\n\t},\n\n\tcopySampleValue_: function ( index ) {\n\n\t\t// copies a sample value to the result buffer\n\n\t\tvar result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\t\t\toffset = index * stride;\n\n\t\tfor ( var i = 0; i !== stride; ++ i ) {\n\n\t\t\tresult[ i ] = values[ offset + i ];\n\n\t\t}\n\n\t\treturn result;\n\n\t},\n\n\t// Template methods for derived classes:\n\n\tinterpolate_: function ( /* i1, t0, t, t1 */ ) {\n\n\t\tthrow new Error( 'call to abstract method' );\n\t\t// implementations shall return this.resultBuffer\n\n\t},\n\n\tintervalChanged_: function ( /* i1, t0, t1 */ ) {\n\n\t\t// empty\n\n\t}\n\n} );\n\n//!\\ DECLARE ALIAS AFTER assign prototype !\nObject.assign( Interpolant.prototype, {\n\n\t//( 0, t, t0 ), returns this.resultBuffer\n\tbeforeStart_: Interpolant.prototype.copySampleValue_,\n\n\t//( N-1, tN-1, t ), returns this.resultBuffer\n\tafterEnd_: Interpolant.prototype.copySampleValue_,\n\n} );\n\n/**\n * Spherical linear unit quaternion interpolant.\n *\n * @author tschw\n */\n\nfunction QuaternionLinearInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\tInterpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n}\n\nQuaternionLinearInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), {\n\n\tconstructor: QuaternionLinearInterpolant,\n\n\tinterpolate_: function ( i1, t0, t, t1 ) {\n\n\t\tvar result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\n\t\t\toffset = i1 * stride,\n\n\t\t\talpha = ( t - t0 ) / ( t1 - t0 );\n\n\t\tfor ( var end = offset + stride; offset !== end; offset += 4 ) {\n\n\t\t\tQuaternion.slerpFlat( result, 0, values, offset - stride, values, offset, alpha );\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n} );\n\n/**\n *\n * A Track of quaternion keyframe values.\n *\n * @author Ben Houston / http://clara.io/\n * @author David Sarno / http://lighthaus.us/\n * @author tschw\n */\n\nfunction QuaternionKeyframeTrack( name, times, values, interpolation ) {\n\n\tKeyframeTrack.call( this, name, times, values, interpolation );\n\n}\n\nQuaternionKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), {\n\n\tconstructor: QuaternionKeyframeTrack,\n\n\tValueTypeName: 'quaternion',\n\n\t// ValueBufferType is inherited\n\n\tDefaultInterpolation: InterpolateLinear,\n\n\tInterpolantFactoryMethodLinear: function ( result ) {\n\n\t\treturn new QuaternionLinearInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t},\n\n\tInterpolantFactoryMethodSmooth: undefined // not yet implemented\n\n} );\n\n/**\n *\n * A Track of keyframe values that represent color.\n *\n *\n * @author Ben Houston / http://clara.io/\n * @author David Sarno / http://lighthaus.us/\n * @author tschw\n */\n\nfunction ColorKeyframeTrack( name, times, values, interpolation ) {\n\n\tKeyframeTrack.call( this, name, times, values, interpolation );\n\n}\n\nColorKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), {\n\n\tconstructor: ColorKeyframeTrack,\n\n\tValueTypeName: 'color'\n\n\t// ValueBufferType is inherited\n\n\t// DefaultInterpolation is inherited\n\n\t// Note: Very basic implementation and nothing special yet.\n\t// However, this is the place for color space parameterization.\n\n} );\n\n/**\n *\n * A Track of numeric keyframe values.\n *\n * @author Ben Houston / http://clara.io/\n * @author David Sarno / http://lighthaus.us/\n * @author tschw\n */\n\nfunction NumberKeyframeTrack( name, times, values, interpolation ) {\n\n\tKeyframeTrack.call( this, name, times, values, interpolation );\n\n}\n\nNumberKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), {\n\n\tconstructor: NumberKeyframeTrack,\n\n\tValueTypeName: 'number'\n\n\t// ValueBufferType is inherited\n\n\t// DefaultInterpolation is inherited\n\n} );\n\n/**\n * Fast and simple cubic spline interpolant.\n *\n * It was derived from a Hermitian construction setting the first derivative\n * at each sample position to the linear slope between neighboring positions\n * over their parameter interval.\n *\n * @author tschw\n */\n\nfunction CubicInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\tInterpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\tthis._weightPrev = - 0;\n\tthis._offsetPrev = - 0;\n\tthis._weightNext = - 0;\n\tthis._offsetNext = - 0;\n\n}\n\nCubicInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), {\n\n\tconstructor: CubicInterpolant,\n\n\tDefaultSettings_: {\n\n\t\tendingStart: ZeroCurvatureEnding,\n\t\tendingEnd: ZeroCurvatureEnding\n\n\t},\n\n\tintervalChanged_: function ( i1, t0, t1 ) {\n\n\t\tvar pp = this.parameterPositions,\n\t\t\tiPrev = i1 - 2,\n\t\t\tiNext = i1 + 1,\n\n\t\t\ttPrev = pp[ iPrev ],\n\t\t\ttNext = pp[ iNext ];\n\n\t\tif ( tPrev === undefined ) {\n\n\t\t\tswitch ( this.getSettings_().endingStart ) {\n\n\t\t\t\tcase ZeroSlopeEnding:\n\n\t\t\t\t\t// f'(t0) = 0\n\t\t\t\t\tiPrev = i1;\n\t\t\t\t\ttPrev = 2 * t0 - t1;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase WrapAroundEnding:\n\n\t\t\t\t\t// use the other end of the curve\n\t\t\t\t\tiPrev = pp.length - 2;\n\t\t\t\t\ttPrev = t0 + pp[ iPrev ] - pp[ iPrev + 1 ];\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault: // ZeroCurvatureEnding\n\n\t\t\t\t\t// f''(t0) = 0 a.k.a. Natural Spline\n\t\t\t\t\tiPrev = i1;\n\t\t\t\t\ttPrev = t1;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( tNext === undefined ) {\n\n\t\t\tswitch ( this.getSettings_().endingEnd ) {\n\n\t\t\t\tcase ZeroSlopeEnding:\n\n\t\t\t\t\t// f'(tN) = 0\n\t\t\t\t\tiNext = i1;\n\t\t\t\t\ttNext = 2 * t1 - t0;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase WrapAroundEnding:\n\n\t\t\t\t\t// use the other end of the curve\n\t\t\t\t\tiNext = 1;\n\t\t\t\t\ttNext = t1 + pp[ 1 ] - pp[ 0 ];\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault: // ZeroCurvatureEnding\n\n\t\t\t\t\t// f''(tN) = 0, a.k.a. Natural Spline\n\t\t\t\t\tiNext = i1 - 1;\n\t\t\t\t\ttNext = t0;\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar halfDt = ( t1 - t0 ) * 0.5,\n\t\t\tstride = this.valueSize;\n\n\t\tthis._weightPrev = halfDt / ( t0 - tPrev );\n\t\tthis._weightNext = halfDt / ( tNext - t1 );\n\t\tthis._offsetPrev = iPrev * stride;\n\t\tthis._offsetNext = iNext * stride;\n\n\t},\n\n\tinterpolate_: function ( i1, t0, t, t1 ) {\n\n\t\tvar result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\n\t\t\to1 = i1 * stride,\t\to0 = o1 - stride,\n\t\t\toP = this._offsetPrev, \toN = this._offsetNext,\n\t\t\twP = this._weightPrev,\twN = this._weightNext,\n\n\t\t\tp = ( t - t0 ) / ( t1 - t0 ),\n\t\t\tpp = p * p,\n\t\t\tppp = pp * p;\n\n\t\t// evaluate polynomials\n\n\t\tvar sP = - wP * ppp + 2 * wP * pp - wP * p;\n\t\tvar s0 = ( 1 + wP ) * ppp + ( - 1.5 - 2 * wP ) * pp + ( - 0.5 + wP ) * p + 1;\n\t\tvar s1 = ( - 1 - wN ) * ppp + ( 1.5 + wN ) * pp + 0.5 * p;\n\t\tvar sN = wN * ppp - wN * pp;\n\n\t\t// combine data linearly\n\n\t\tfor ( var i = 0; i !== stride; ++ i ) {\n\n\t\t\tresult[ i ] =\n\t\t\t\t\tsP * values[ oP + i ] +\n\t\t\t\t\ts0 * values[ o0 + i ] +\n\t\t\t\t\ts1 * values[ o1 + i ] +\n\t\t\t\t\tsN * values[ oN + i ];\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n} );\n\n/**\n * @author tschw\n */\n\nfunction LinearInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\tInterpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n}\n\nLinearInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), {\n\n\tconstructor: LinearInterpolant,\n\n\tinterpolate_: function ( i1, t0, t, t1 ) {\n\n\t\tvar result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\n\t\t\toffset1 = i1 * stride,\n\t\t\toffset0 = offset1 - stride,\n\n\t\t\tweight1 = ( t - t0 ) / ( t1 - t0 ),\n\t\t\tweight0 = 1 - weight1;\n\n\t\tfor ( var i = 0; i !== stride; ++ i ) {\n\n\t\t\tresult[ i ] =\n\t\t\t\t\tvalues[ offset0 + i ] * weight0 +\n\t\t\t\t\tvalues[ offset1 + i ] * weight1;\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n} );\n\n/**\n *\n * Interpolant that evaluates to the sample value at the position preceeding\n * the parameter.\n *\n * @author tschw\n */\n\nfunction DiscreteInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\tInterpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n}\n\nDiscreteInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), {\n\n\tconstructor: DiscreteInterpolant,\n\n\tinterpolate_: function ( i1 /*, t0, t, t1 */ ) {\n\n\t\treturn this.copySampleValue_( i1 - 1 );\n\n\t}\n\n} );\n\n/**\n * @author tschw\n * @author Ben Houston / http://clara.io/\n * @author David Sarno / http://lighthaus.us/\n */\n\nvar AnimationUtils = {\n\n\t// same as Array.prototype.slice, but also works on typed arrays\n\tarraySlice: function ( array, from, to ) {\n\n\t\tif ( AnimationUtils.isTypedArray( array ) ) {\n\n\t\t\t// in ios9 array.subarray(from, undefined) will return empty array\n\t\t\t// but array.subarray(from) or array.subarray(from, len) is correct\n\t\t\treturn new array.constructor( array.subarray( from, to !== undefined ? to : array.length ) );\n\n\t\t}\n\n\t\treturn array.slice( from, to );\n\n\t},\n\n\t// converts an array to a specific type\n\tconvertArray: function ( array, type, forceClone ) {\n\n\t\tif ( ! array || // let 'undefined' and 'null' pass\n\t\t\t\t! forceClone && array.constructor === type ) return array;\n\n\t\tif ( typeof type.BYTES_PER_ELEMENT === 'number' ) {\n\n\t\t\treturn new type( array ); // create typed array\n\n\t\t}\n\n\t\treturn Array.prototype.slice.call( array ); // create Array\n\n\t},\n\n\tisTypedArray: function ( object ) {\n\n\t\treturn ArrayBuffer.isView( object ) &&\n\t\t\t\t! ( object instanceof DataView );\n\n\t},\n\n\t// returns an array by which times and values can be sorted\n\tgetKeyframeOrder: function ( times ) {\n\n\t\tfunction compareTime( i, j ) {\n\n\t\t\treturn times[ i ] - times[ j ];\n\n\t\t}\n\n\t\tvar n = times.length;\n\t\tvar result = new Array( n );\n\t\tfor ( var i = 0; i !== n; ++ i ) result[ i ] = i;\n\n\t\tresult.sort( compareTime );\n\n\t\treturn result;\n\n\t},\n\n\t// uses the array previously returned by 'getKeyframeOrder' to sort data\n\tsortedArray: function ( values, stride, order ) {\n\n\t\tvar nValues = values.length;\n\t\tvar result = new values.constructor( nValues );\n\n\t\tfor ( var i = 0, dstOffset = 0; dstOffset !== nValues; ++ i ) {\n\n\t\t\tvar srcOffset = order[ i ] * stride;\n\n\t\t\tfor ( var j = 0; j !== stride; ++ j ) {\n\n\t\t\t\tresult[ dstOffset ++ ] = values[ srcOffset + j ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn result;\n\n\t},\n\n\t// function for parsing AOS keyframe formats\n\tflattenJSON: function ( jsonKeys, times, values, valuePropertyName ) {\n\n\t\tvar i = 1, key = jsonKeys[ 0 ];\n\n\t\twhile ( key !== undefined && key[ valuePropertyName ] === undefined ) {\n\n\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t}\n\n\t\tif ( key === undefined ) return; // no data\n\n\t\tvar value = key[ valuePropertyName ];\n\t\tif ( value === undefined ) return; // no data\n\n\t\tif ( Array.isArray( value ) ) {\n\n\t\t\tdo {\n\n\t\t\t\tvalue = key[ valuePropertyName ];\n\n\t\t\t\tif ( value !== undefined ) {\n\n\t\t\t\t\ttimes.push( key.time );\n\t\t\t\t\tvalues.push.apply( values, value ); // push all elements\n\n\t\t\t\t}\n\n\t\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t\t} while ( key !== undefined );\n\n\t\t} else if ( value.toArray !== undefined ) {\n\n\t\t\t// ...assume THREE.Math-ish\n\n\t\t\tdo {\n\n\t\t\t\tvalue = key[ valuePropertyName ];\n\n\t\t\t\tif ( value !== undefined ) {\n\n\t\t\t\t\ttimes.push( key.time );\n\t\t\t\t\tvalue.toArray( values, values.length );\n\n\t\t\t\t}\n\n\t\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t\t} while ( key !== undefined );\n\n\t\t} else {\n\n\t\t\t// otherwise push as-is\n\n\t\t\tdo {\n\n\t\t\t\tvalue = key[ valuePropertyName ];\n\n\t\t\t\tif ( value !== undefined ) {\n\n\t\t\t\t\ttimes.push( key.time );\n\t\t\t\t\tvalues.push( value );\n\n\t\t\t\t}\n\n\t\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t\t} while ( key !== undefined );\n\n\t\t}\n\n\t}\n\n};\n\n/**\n *\n * A timed sequence of keyframes for a specific property.\n *\n *\n * @author Ben Houston / http://clara.io/\n * @author David Sarno / http://lighthaus.us/\n * @author tschw\n */\n\nfunction KeyframeTrack( name, times, values, interpolation ) {\n\n\tif ( name === undefined ) throw new Error( 'THREE.KeyframeTrack: track name is undefined' );\n\tif ( times === undefined || times.length === 0 ) throw new Error( 'THREE.KeyframeTrack: no keyframes in track named ' + name );\n\n\tthis.name = name;\n\n\tthis.times = AnimationUtils.convertArray( times, this.TimeBufferType );\n\tthis.values = AnimationUtils.convertArray( values, this.ValueBufferType );\n\n\tthis.setInterpolation( interpolation || this.DefaultInterpolation );\n\n\tthis.validate();\n\tthis.optimize();\n\n}\n\n// Static methods:\n\nObject.assign( KeyframeTrack, {\n\n\t// Serialization (in static context, because of constructor invocation\n\t// and automatic invocation of .toJSON):\n\n\tparse: function ( json ) {\n\n\t\tif ( json.type === undefined ) {\n\n\t\t\tthrow new Error( 'THREE.KeyframeTrack: track type undefined, can not parse' );\n\n\t\t}\n\n\t\tvar trackType = KeyframeTrack._getTrackTypeForValueTypeName( json.type );\n\n\t\tif ( json.times === undefined ) {\n\n\t\t\tvar times = [], values = [];\n\n\t\t\tAnimationUtils.flattenJSON( json.keys, times, values, 'value' );\n\n\t\t\tjson.times = times;\n\t\t\tjson.values = values;\n\n\t\t}\n\n\t\t// derived classes can define a static parse method\n\t\tif ( trackType.parse !== undefined ) {\n\n\t\t\treturn trackType.parse( json );\n\n\t\t} else {\n\n\t\t\t// by default, we assume a constructor compatible with the base\n\t\t\treturn new trackType( json.name, json.times, json.values, json.interpolation );\n\n\t\t}\n\n\t},\n\n\ttoJSON: function ( track ) {\n\n\t\tvar trackType = track.constructor;\n\n\t\tvar json;\n\n\t\t// derived classes can define a static toJSON method\n\t\tif ( trackType.toJSON !== undefined ) {\n\n\t\t\tjson = trackType.toJSON( track );\n\n\t\t} else {\n\n\t\t\t// by default, we assume the data can be serialized as-is\n\t\t\tjson = {\n\n\t\t\t\t'name': track.name,\n\t\t\t\t'times': AnimationUtils.convertArray( track.times, Array ),\n\t\t\t\t'values': AnimationUtils.convertArray( track.values, Array )\n\n\t\t\t};\n\n\t\t\tvar interpolation = track.getInterpolation();\n\n\t\t\tif ( interpolation !== track.DefaultInterpolation ) {\n\n\t\t\t\tjson.interpolation = interpolation;\n\n\t\t\t}\n\n\t\t}\n\n\t\tjson.type = track.ValueTypeName; // mandatory\n\n\t\treturn json;\n\n\t},\n\n\t_getTrackTypeForValueTypeName: function ( typeName ) {\n\n\t\tswitch ( typeName.toLowerCase() ) {\n\n\t\t\tcase 'scalar':\n\t\t\tcase 'double':\n\t\t\tcase 'float':\n\t\t\tcase 'number':\n\t\t\tcase 'integer':\n\n\t\t\t\treturn NumberKeyframeTrack;\n\n\t\t\tcase 'vector':\n\t\t\tcase 'vector2':\n\t\t\tcase 'vector3':\n\t\t\tcase 'vector4':\n\n\t\t\t\treturn VectorKeyframeTrack;\n\n\t\t\tcase 'color':\n\n\t\t\t\treturn ColorKeyframeTrack;\n\n\t\t\tcase 'quaternion':\n\n\t\t\t\treturn QuaternionKeyframeTrack;\n\n\t\t\tcase 'bool':\n\t\t\tcase 'boolean':\n\n\t\t\t\treturn BooleanKeyframeTrack;\n\n\t\t\tcase 'string':\n\n\t\t\t\treturn StringKeyframeTrack;\n\n\t\t}\n\n\t\tthrow new Error( 'THREE.KeyframeTrack: Unsupported typeName: ' + typeName );\n\n\t}\n\n} );\n\nObject.assign( KeyframeTrack.prototype, {\n\n\tconstructor: KeyframeTrack,\n\n\tTimeBufferType: Float32Array,\n\n\tValueBufferType: Float32Array,\n\n\tDefaultInterpolation: InterpolateLinear,\n\n\tInterpolantFactoryMethodDiscrete: function ( result ) {\n\n\t\treturn new DiscreteInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t},\n\n\tInterpolantFactoryMethodLinear: function ( result ) {\n\n\t\treturn new LinearInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t},\n\n\tInterpolantFactoryMethodSmooth: function ( result ) {\n\n\t\treturn new CubicInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t},\n\n\tsetInterpolation: function ( interpolation ) {\n\n\t\tvar factoryMethod;\n\n\t\tswitch ( interpolation ) {\n\n\t\t\tcase InterpolateDiscrete:\n\n\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodDiscrete;\n\n\t\t\t\tbreak;\n\n\t\t\tcase InterpolateLinear:\n\n\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodLinear;\n\n\t\t\t\tbreak;\n\n\t\t\tcase InterpolateSmooth:\n\n\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodSmooth;\n\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tif ( factoryMethod === undefined ) {\n\n\t\t\tvar message = \"unsupported interpolation for \" +\n\t\t\t\tthis.ValueTypeName + \" keyframe track named \" + this.name;\n\n\t\t\tif ( this.createInterpolant === undefined ) {\n\n\t\t\t\t// fall back to default, unless the default itself is messed up\n\t\t\t\tif ( interpolation !== this.DefaultInterpolation ) {\n\n\t\t\t\t\tthis.setInterpolation( this.DefaultInterpolation );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthrow new Error( message ); // fatal, in this case\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconsole.warn( 'THREE.KeyframeTrack:', message );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis.createInterpolant = factoryMethod;\n\n\t},\n\n\tgetInterpolation: function () {\n\n\t\tswitch ( this.createInterpolant ) {\n\n\t\t\tcase this.InterpolantFactoryMethodDiscrete:\n\n\t\t\t\treturn InterpolateDiscrete;\n\n\t\t\tcase this.InterpolantFactoryMethodLinear:\n\n\t\t\t\treturn InterpolateLinear;\n\n\t\t\tcase this.InterpolantFactoryMethodSmooth:\n\n\t\t\t\treturn InterpolateSmooth;\n\n\t\t}\n\n\t},\n\n\tgetValueSize: function () {\n\n\t\treturn this.values.length / this.times.length;\n\n\t},\n\n\t// move all keyframes either forwards or backwards in time\n\tshift: function ( timeOffset ) {\n\n\t\tif ( timeOffset !== 0.0 ) {\n\n\t\t\tvar times = this.times;\n\n\t\t\tfor ( var i = 0, n = times.length; i !== n; ++ i ) {\n\n\t\t\t\ttimes[ i ] += timeOffset;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\t// scale all keyframe times by a factor (useful for frame <-> seconds conversions)\n\tscale: function ( timeScale ) {\n\n\t\tif ( timeScale !== 1.0 ) {\n\n\t\t\tvar times = this.times;\n\n\t\t\tfor ( var i = 0, n = times.length; i !== n; ++ i ) {\n\n\t\t\t\ttimes[ i ] *= timeScale;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\t// removes keyframes before and after animation without changing any values within the range [startTime, endTime].\n\t// IMPORTANT: We do not shift around keys to the start of the track time, because for interpolated keys this will change their values\n\ttrim: function ( startTime, endTime ) {\n\n\t\tvar times = this.times,\n\t\t\tnKeys = times.length,\n\t\t\tfrom = 0,\n\t\t\tto = nKeys - 1;\n\n\t\twhile ( from !== nKeys && times[ from ] < startTime ) {\n\n\t\t\t++ from;\n\n\t\t}\n\n\t\twhile ( to !== - 1 && times[ to ] > endTime ) {\n\n\t\t\t-- to;\n\n\t\t}\n\n\t\t++ to; // inclusive -> exclusive bound\n\n\t\tif ( from !== 0 || to !== nKeys ) {\n\n\t\t\t// empty tracks are forbidden, so keep at least one keyframe\n\t\t\tif ( from >= to ) to = Math.max( to, 1 ), from = to - 1;\n\n\t\t\tvar stride = this.getValueSize();\n\t\t\tthis.times = AnimationUtils.arraySlice( times, from, to );\n\t\t\tthis.values = AnimationUtils.arraySlice( this.values, from * stride, to * stride );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\t// ensure we do not get a GarbageInGarbageOut situation, make sure tracks are at least minimally viable\n\tvalidate: function () {\n\n\t\tvar valid = true;\n\n\t\tvar valueSize = this.getValueSize();\n\t\tif ( valueSize - Math.floor( valueSize ) !== 0 ) {\n\n\t\t\tconsole.error( 'THREE.KeyframeTrack: Invalid value size in track.', this );\n\t\t\tvalid = false;\n\n\t\t}\n\n\t\tvar times = this.times,\n\t\t\tvalues = this.values,\n\n\t\t\tnKeys = times.length;\n\n\t\tif ( nKeys === 0 ) {\n\n\t\t\tconsole.error( 'THREE.KeyframeTrack: Track is empty.', this );\n\t\t\tvalid = false;\n\n\t\t}\n\n\t\tvar prevTime = null;\n\n\t\tfor ( var i = 0; i !== nKeys; i ++ ) {\n\n\t\t\tvar currTime = times[ i ];\n\n\t\t\tif ( typeof currTime === 'number' && isNaN( currTime ) ) {\n\n\t\t\t\tconsole.error( 'THREE.KeyframeTrack: Time is not a valid number.', this, i, currTime );\n\t\t\t\tvalid = false;\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tif ( prevTime !== null && prevTime > currTime ) {\n\n\t\t\t\tconsole.error( 'THREE.KeyframeTrack: Out of order keys.', this, i, currTime, prevTime );\n\t\t\t\tvalid = false;\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tprevTime = currTime;\n\n\t\t}\n\n\t\tif ( values !== undefined ) {\n\n\t\t\tif ( AnimationUtils.isTypedArray( values ) ) {\n\n\t\t\t\tfor ( var i = 0, n = values.length; i !== n; ++ i ) {\n\n\t\t\t\t\tvar value = values[ i ];\n\n\t\t\t\t\tif ( isNaN( value ) ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.KeyframeTrack: Value is not a valid number.', this, i, value );\n\t\t\t\t\t\tvalid = false;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn valid;\n\n\t},\n\n\t// removes equivalent sequential keys as common in morph target sequences\n\t// (0,0,0,0,1,1,1,0,0,0,0,0,0,0) --> (0,0,1,1,0,0)\n\toptimize: function () {\n\n\t\tvar times = this.times,\n\t\t\tvalues = this.values,\n\t\t\tstride = this.getValueSize(),\n\n\t\t\tsmoothInterpolation = this.getInterpolation() === InterpolateSmooth,\n\n\t\t\twriteIndex = 1,\n\t\t\tlastIndex = times.length - 1;\n\n\t\tfor ( var i = 1; i < lastIndex; ++ i ) {\n\n\t\t\tvar keep = false;\n\n\t\t\tvar time = times[ i ];\n\t\t\tvar timeNext = times[ i + 1 ];\n\n\t\t\t// remove adjacent keyframes scheduled at the same time\n\n\t\t\tif ( time !== timeNext && ( i !== 1 || time !== time[ 0 ] ) ) {\n\n\t\t\t\tif ( ! smoothInterpolation ) {\n\n\t\t\t\t\t// remove unnecessary keyframes same as their neighbors\n\n\t\t\t\t\tvar offset = i * stride,\n\t\t\t\t\t\toffsetP = offset - stride,\n\t\t\t\t\t\toffsetN = offset + stride;\n\n\t\t\t\t\tfor ( var j = 0; j !== stride; ++ j ) {\n\n\t\t\t\t\t\tvar value = values[ offset + j ];\n\n\t\t\t\t\t\tif ( value !== values[ offsetP + j ] ||\n\t\t\t\t\t\t\tvalue !== values[ offsetN + j ] ) {\n\n\t\t\t\t\t\t\tkeep = true;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tkeep = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// in-place compaction\n\n\t\t\tif ( keep ) {\n\n\t\t\t\tif ( i !== writeIndex ) {\n\n\t\t\t\t\ttimes[ writeIndex ] = times[ i ];\n\n\t\t\t\t\tvar readOffset = i * stride,\n\t\t\t\t\t\twriteOffset = writeIndex * stride;\n\n\t\t\t\t\tfor ( var j = 0; j !== stride; ++ j ) {\n\n\t\t\t\t\t\tvalues[ writeOffset + j ] = values[ readOffset + j ];\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t++ writeIndex;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// flush last keyframe (compaction looks ahead)\n\n\t\tif ( lastIndex > 0 ) {\n\n\t\t\ttimes[ writeIndex ] = times[ lastIndex ];\n\n\t\t\tfor ( var readOffset = lastIndex * stride, writeOffset = writeIndex * stride, j = 0; j !== stride; ++ j ) {\n\n\t\t\t\tvalues[ writeOffset + j ] = values[ readOffset + j ];\n\n\t\t\t}\n\n\t\t\t++ writeIndex;\n\n\t\t}\n\n\t\tif ( writeIndex !== times.length ) {\n\n\t\t\tthis.times = AnimationUtils.arraySlice( times, 0, writeIndex );\n\t\t\tthis.values = AnimationUtils.arraySlice( values, 0, writeIndex * stride );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n *\n * A Track of vectored keyframe values.\n *\n *\n * @author Ben Houston / http://clara.io/\n * @author David Sarno / http://lighthaus.us/\n * @author tschw\n */\n\nfunction VectorKeyframeTrack( name, times, values, interpolation ) {\n\n\tKeyframeTrack.call( this, name, times, values, interpolation );\n\n}\n\nVectorKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), {\n\n\tconstructor: VectorKeyframeTrack,\n\n\tValueTypeName: 'vector'\n\n\t// ValueBufferType is inherited\n\n\t// DefaultInterpolation is inherited\n\n} );\n\n/**\n *\n * Reusable set of Tracks that represent an animation.\n *\n * @author Ben Houston / http://clara.io/\n * @author David Sarno / http://lighthaus.us/\n */\n\nfunction AnimationClip( name, duration, tracks ) {\n\n\tthis.name = name;\n\tthis.tracks = tracks;\n\tthis.duration = ( duration !== undefined ) ? duration : - 1;\n\n\tthis.uuid = _Math.generateUUID();\n\n\t// this means it should figure out its duration by scanning the tracks\n\tif ( this.duration < 0 ) {\n\n\t\tthis.resetDuration();\n\n\t}\n\n\tthis.optimize();\n\n}\n\nObject.assign( AnimationClip, {\n\n\tparse: function ( json ) {\n\n\t\tvar tracks = [],\n\t\t\tjsonTracks = json.tracks,\n\t\t\tframeTime = 1.0 / ( json.fps || 1.0 );\n\n\t\tfor ( var i = 0, n = jsonTracks.length; i !== n; ++ i ) {\n\n\t\t\ttracks.push( KeyframeTrack.parse( jsonTracks[ i ] ).scale( frameTime ) );\n\n\t\t}\n\n\t\treturn new AnimationClip( json.name, json.duration, tracks );\n\n\t},\n\n\ttoJSON: function ( clip ) {\n\n\t\tvar tracks = [],\n\t\t\tclipTracks = clip.tracks;\n\n\t\tvar json = {\n\n\t\t\t'name': clip.name,\n\t\t\t'duration': clip.duration,\n\t\t\t'tracks': tracks\n\n\t\t};\n\n\t\tfor ( var i = 0, n = clipTracks.length; i !== n; ++ i ) {\n\n\t\t\ttracks.push( KeyframeTrack.toJSON( clipTracks[ i ] ) );\n\n\t\t}\n\n\t\treturn json;\n\n\t},\n\n\tCreateFromMorphTargetSequence: function ( name, morphTargetSequence, fps, noLoop ) {\n\n\t\tvar numMorphTargets = morphTargetSequence.length;\n\t\tvar tracks = [];\n\n\t\tfor ( var i = 0; i < numMorphTargets; i ++ ) {\n\n\t\t\tvar times = [];\n\t\t\tvar values = [];\n\n\t\t\ttimes.push(\n\t\t\t\t( i + numMorphTargets - 1 ) % numMorphTargets,\n\t\t\t\ti,\n\t\t\t\t( i + 1 ) % numMorphTargets );\n\n\t\t\tvalues.push( 0, 1, 0 );\n\n\t\t\tvar order = AnimationUtils.getKeyframeOrder( times );\n\t\t\ttimes = AnimationUtils.sortedArray( times, 1, order );\n\t\t\tvalues = AnimationUtils.sortedArray( values, 1, order );\n\n\t\t\t// if there is a key at the first frame, duplicate it as the\n\t\t\t// last frame as well for perfect loop.\n\t\t\tif ( ! noLoop && times[ 0 ] === 0 ) {\n\n\t\t\t\ttimes.push( numMorphTargets );\n\t\t\t\tvalues.push( values[ 0 ] );\n\n\t\t\t}\n\n\t\t\ttracks.push(\n\t\t\t\tnew NumberKeyframeTrack(\n\t\t\t\t\t'.morphTargetInfluences[' + morphTargetSequence[ i ].name + ']',\n\t\t\t\t\ttimes, values\n\t\t\t\t).scale( 1.0 / fps ) );\n\n\t\t}\n\n\t\treturn new AnimationClip( name, - 1, tracks );\n\n\t},\n\n\tfindByName: function ( objectOrClipArray, name ) {\n\n\t\tvar clipArray = objectOrClipArray;\n\n\t\tif ( ! Array.isArray( objectOrClipArray ) ) {\n\n\t\t\tvar o = objectOrClipArray;\n\t\t\tclipArray = o.geometry && o.geometry.animations || o.animations;\n\n\t\t}\n\n\t\tfor ( var i = 0; i < clipArray.length; i ++ ) {\n\n\t\t\tif ( clipArray[ i ].name === name ) {\n\n\t\t\t\treturn clipArray[ i ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn null;\n\n\t},\n\n\tCreateClipsFromMorphTargetSequences: function ( morphTargets, fps, noLoop ) {\n\n\t\tvar animationToMorphTargets = {};\n\n\t\t// tested with https://regex101.com/ on trick sequences\n\t\t// such flamingo_flyA_003, flamingo_run1_003, crdeath0059\n\t\tvar pattern = /^([\\w-]*?)([\\d]+)$/;\n\n\t\t// sort morph target names into animation groups based\n\t\t// patterns like Walk_001, Walk_002, Run_001, Run_002\n\t\tfor ( var i = 0, il = morphTargets.length; i < il; i ++ ) {\n\n\t\t\tvar morphTarget = morphTargets[ i ];\n\t\t\tvar parts = morphTarget.name.match( pattern );\n\n\t\t\tif ( parts && parts.length > 1 ) {\n\n\t\t\t\tvar name = parts[ 1 ];\n\n\t\t\t\tvar animationMorphTargets = animationToMorphTargets[ name ];\n\t\t\t\tif ( ! animationMorphTargets ) {\n\n\t\t\t\t\tanimationToMorphTargets[ name ] = animationMorphTargets = [];\n\n\t\t\t\t}\n\n\t\t\t\tanimationMorphTargets.push( morphTarget );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar clips = [];\n\n\t\tfor ( var name in animationToMorphTargets ) {\n\n\t\t\tclips.push( AnimationClip.CreateFromMorphTargetSequence( name, animationToMorphTargets[ name ], fps, noLoop ) );\n\n\t\t}\n\n\t\treturn clips;\n\n\t},\n\n\t// parse the animation.hierarchy format\n\tparseAnimation: function ( animation, bones ) {\n\n\t\tif ( ! animation ) {\n\n\t\t\tconsole.error( 'THREE.AnimationClip: No animation in JSONLoader data.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tvar addNonemptyTrack = function ( trackType, trackName, animationKeys, propertyName, destTracks ) {\n\n\t\t\t// only return track if there are actually keys.\n\t\t\tif ( animationKeys.length !== 0 ) {\n\n\t\t\t\tvar times = [];\n\t\t\t\tvar values = [];\n\n\t\t\t\tAnimationUtils.flattenJSON( animationKeys, times, values, propertyName );\n\n\t\t\t\t// empty keys are filtered out, so check again\n\t\t\t\tif ( times.length !== 0 ) {\n\n\t\t\t\t\tdestTracks.push( new trackType( trackName, times, values ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tvar tracks = [];\n\n\t\tvar clipName = animation.name || 'default';\n\t\t// automatic length determination in AnimationClip.\n\t\tvar duration = animation.length || - 1;\n\t\tvar fps = animation.fps || 30;\n\n\t\tvar hierarchyTracks = animation.hierarchy || [];\n\n\t\tfor ( var h = 0; h < hierarchyTracks.length; h ++ ) {\n\n\t\t\tvar animationKeys = hierarchyTracks[ h ].keys;\n\n\t\t\t// skip empty tracks\n\t\t\tif ( ! animationKeys || animationKeys.length === 0 ) continue;\n\n\t\t\t// process morph targets\n\t\t\tif ( animationKeys[ 0 ].morphTargets ) {\n\n\t\t\t\t// figure out all morph targets used in this track\n\t\t\t\tvar morphTargetNames = {};\n\n\t\t\t\tfor ( var k = 0; k < animationKeys.length; k ++ ) {\n\n\t\t\t\t\tif ( animationKeys[ k ].morphTargets ) {\n\n\t\t\t\t\t\tfor ( var m = 0; m < animationKeys[ k ].morphTargets.length; m ++ ) {\n\n\t\t\t\t\t\t\tmorphTargetNames[ animationKeys[ k ].morphTargets[ m ] ] = - 1;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// create a track for each morph target with all zero\n\t\t\t\t// morphTargetInfluences except for the keys in which\n\t\t\t\t// the morphTarget is named.\n\t\t\t\tfor ( var morphTargetName in morphTargetNames ) {\n\n\t\t\t\t\tvar times = [];\n\t\t\t\t\tvar values = [];\n\n\t\t\t\t\tfor ( var m = 0; m !== animationKeys[ k ].morphTargets.length; ++ m ) {\n\n\t\t\t\t\t\tvar animationKey = animationKeys[ k ];\n\n\t\t\t\t\t\ttimes.push( animationKey.time );\n\t\t\t\t\t\tvalues.push( ( animationKey.morphTarget === morphTargetName ) ? 1 : 0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttracks.push( new NumberKeyframeTrack( '.morphTargetInfluence[' + morphTargetName + ']', times, values ) );\n\n\t\t\t\t}\n\n\t\t\t\tduration = morphTargetNames.length * ( fps || 1.0 );\n\n\t\t\t} else {\n\n\t\t\t\t// ...assume skeletal animation\n\n\t\t\t\tvar boneName = '.bones[' + bones[ h ].name + ']';\n\n\t\t\t\taddNonemptyTrack(\n\t\t\t\t\tVectorKeyframeTrack, boneName + '.position',\n\t\t\t\t\tanimationKeys, 'pos', tracks );\n\n\t\t\t\taddNonemptyTrack(\n\t\t\t\t\tQuaternionKeyframeTrack, boneName + '.quaternion',\n\t\t\t\t\tanimationKeys, 'rot', tracks );\n\n\t\t\t\taddNonemptyTrack(\n\t\t\t\t\tVectorKeyframeTrack, boneName + '.scale',\n\t\t\t\t\tanimationKeys, 'scl', tracks );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( tracks.length === 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tvar clip = new AnimationClip( clipName, duration, tracks );\n\n\t\treturn clip;\n\n\t}\n\n} );\n\nObject.assign( AnimationClip.prototype, {\n\n\tresetDuration: function () {\n\n\t\tvar tracks = this.tracks, duration = 0;\n\n\t\tfor ( var i = 0, n = tracks.length; i !== n; ++ i ) {\n\n\t\t\tvar track = this.tracks[ i ];\n\n\t\t\tduration = Math.max( duration, track.times[ track.times.length - 1 ] );\n\n\t\t}\n\n\t\tthis.duration = duration;\n\n\t},\n\n\ttrim: function () {\n\n\t\tfor ( var i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\tthis.tracks[ i ].trim( 0, this.duration );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\toptimize: function () {\n\n\t\tfor ( var i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\tthis.tracks[ i ].optimize();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction MaterialLoader( manager ) {\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\tthis.textures = {};\n\n}\n\nObject.assign( MaterialLoader.prototype, {\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar scope = this;\n\n\t\tvar loader = new FileLoader( scope.manager );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\tonLoad( scope.parse( JSON.parse( text ) ) );\n\n\t\t}, onProgress, onError );\n\n\t},\n\n\tsetTextures: function ( value ) {\n\n\t\tthis.textures = value;\n\n\t},\n\n\tparse: function ( json ) {\n\n\t\tvar textures = this.textures;\n\n\t\tfunction getTexture( name ) {\n\n\t\t\tif ( textures[ name ] === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.MaterialLoader: Undefined texture', name );\n\n\t\t\t}\n\n\t\t\treturn textures[ name ];\n\n\t\t}\n\n\t\tvar material = new Materials[ json.type ]();\n\n\t\tif ( json.uuid !== undefined ) material.uuid = json.uuid;\n\t\tif ( json.name !== undefined ) material.name = json.name;\n\t\tif ( json.color !== undefined ) material.color.setHex( json.color );\n\t\tif ( json.roughness !== undefined ) material.roughness = json.roughness;\n\t\tif ( json.metalness !== undefined ) material.metalness = json.metalness;\n\t\tif ( json.emissive !== undefined ) material.emissive.setHex( json.emissive );\n\t\tif ( json.specular !== undefined ) material.specular.setHex( json.specular );\n\t\tif ( json.shininess !== undefined ) material.shininess = json.shininess;\n\t\tif ( json.clearCoat !== undefined ) material.clearCoat = json.clearCoat;\n\t\tif ( json.clearCoatRoughness !== undefined ) material.clearCoatRoughness = json.clearCoatRoughness;\n\t\tif ( json.uniforms !== undefined ) material.uniforms = json.uniforms;\n\t\tif ( json.vertexShader !== undefined ) material.vertexShader = json.vertexShader;\n\t\tif ( json.fragmentShader !== undefined ) material.fragmentShader = json.fragmentShader;\n\t\tif ( json.vertexColors !== undefined ) material.vertexColors = json.vertexColors;\n\t\tif ( json.fog !== undefined ) material.fog = json.fog;\n\t\tif ( json.flatShading !== undefined ) material.flatShading = json.flatShading;\n\t\tif ( json.blending !== undefined ) material.blending = json.blending;\n\t\tif ( json.side !== undefined ) material.side = json.side;\n\t\tif ( json.opacity !== undefined ) material.opacity = json.opacity;\n\t\tif ( json.transparent !== undefined ) material.transparent = json.transparent;\n\t\tif ( json.alphaTest !== undefined ) material.alphaTest = json.alphaTest;\n\t\tif ( json.depthTest !== undefined ) material.depthTest = json.depthTest;\n\t\tif ( json.depthWrite !== undefined ) material.depthWrite = json.depthWrite;\n\t\tif ( json.colorWrite !== undefined ) material.colorWrite = json.colorWrite;\n\t\tif ( json.wireframe !== undefined ) material.wireframe = json.wireframe;\n\t\tif ( json.wireframeLinewidth !== undefined ) material.wireframeLinewidth = json.wireframeLinewidth;\n\t\tif ( json.wireframeLinecap !== undefined ) material.wireframeLinecap = json.wireframeLinecap;\n\t\tif ( json.wireframeLinejoin !== undefined ) material.wireframeLinejoin = json.wireframeLinejoin;\n\n\t\tif ( json.rotation !== undefined ) material.rotation = json.rotation;\n\n\t\tif ( json.linewidth !== 1 ) material.linewidth = json.linewidth;\n\t\tif ( json.dashSize !== undefined ) material.dashSize = json.dashSize;\n\t\tif ( json.gapSize !== undefined ) material.gapSize = json.gapSize;\n\t\tif ( json.scale !== undefined ) material.scale = json.scale;\n\n\t\tif ( json.polygonOffset !== undefined ) material.polygonOffset = json.polygonOffset;\n\t\tif ( json.polygonOffsetFactor !== undefined ) material.polygonOffsetFactor = json.polygonOffsetFactor;\n\t\tif ( json.polygonOffsetUnits !== undefined ) material.polygonOffsetUnits = json.polygonOffsetUnits;\n\n\t\tif ( json.skinning !== undefined ) material.skinning = json.skinning;\n\t\tif ( json.morphTargets !== undefined ) material.morphTargets = json.morphTargets;\n\t\tif ( json.dithering !== undefined ) material.dithering = json.dithering;\n\n\t\tif ( json.visible !== undefined ) material.visible = json.visible;\n\t\tif ( json.userData !== undefined ) material.userData = json.userData;\n\n\t\t// Deprecated\n\n\t\tif ( json.shading !== undefined ) material.flatShading = json.shading === 1; // THREE.FlatShading\n\n\t\t// for PointsMaterial\n\n\t\tif ( json.size !== undefined ) material.size = json.size;\n\t\tif ( json.sizeAttenuation !== undefined ) material.sizeAttenuation = json.sizeAttenuation;\n\n\t\t// maps\n\n\t\tif ( json.map !== undefined ) material.map = getTexture( json.map );\n\n\t\tif ( json.alphaMap !== undefined ) {\n\n\t\t\tmaterial.alphaMap = getTexture( json.alphaMap );\n\t\t\tmaterial.transparent = true;\n\n\t\t}\n\n\t\tif ( json.bumpMap !== undefined ) material.bumpMap = getTexture( json.bumpMap );\n\t\tif ( json.bumpScale !== undefined ) material.bumpScale = json.bumpScale;\n\n\t\tif ( json.normalMap !== undefined ) material.normalMap = getTexture( json.normalMap );\n\t\tif ( json.normalScale !== undefined ) {\n\n\t\t\tvar normalScale = json.normalScale;\n\n\t\t\tif ( Array.isArray( normalScale ) === false ) {\n\n\t\t\t\t// Blender exporter used to export a scalar. See #7459\n\n\t\t\t\tnormalScale = [ normalScale, normalScale ];\n\n\t\t\t}\n\n\t\t\tmaterial.normalScale = new Vector2().fromArray( normalScale );\n\n\t\t}\n\n\t\tif ( json.displacementMap !== undefined ) material.displacementMap = getTexture( json.displacementMap );\n\t\tif ( json.displacementScale !== undefined ) material.displacementScale = json.displacementScale;\n\t\tif ( json.displacementBias !== undefined ) material.displacementBias = json.displacementBias;\n\n\t\tif ( json.roughnessMap !== undefined ) material.roughnessMap = getTexture( json.roughnessMap );\n\t\tif ( json.metalnessMap !== undefined ) material.metalnessMap = getTexture( json.metalnessMap );\n\n\t\tif ( json.emissiveMap !== undefined ) material.emissiveMap = getTexture( json.emissiveMap );\n\t\tif ( json.emissiveIntensity !== undefined ) material.emissiveIntensity = json.emissiveIntensity;\n\n\t\tif ( json.specularMap !== undefined ) material.specularMap = getTexture( json.specularMap );\n\n\t\tif ( json.envMap !== undefined ) material.envMap = getTexture( json.envMap );\n\n\t\tif ( json.reflectivity !== undefined ) material.reflectivity = json.reflectivity;\n\n\t\tif ( json.lightMap !== undefined ) material.lightMap = getTexture( json.lightMap );\n\t\tif ( json.lightMapIntensity !== undefined ) material.lightMapIntensity = json.lightMapIntensity;\n\n\t\tif ( json.aoMap !== undefined ) material.aoMap = getTexture( json.aoMap );\n\t\tif ( json.aoMapIntensity !== undefined ) material.aoMapIntensity = json.aoMapIntensity;\n\n\t\tif ( json.gradientMap !== undefined ) material.gradientMap = getTexture( json.gradientMap );\n\n\t\treturn material;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction BufferGeometryLoader( manager ) {\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n}\n\nObject.assign( BufferGeometryLoader.prototype, {\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar scope = this;\n\n\t\tvar loader = new FileLoader( scope.manager );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\tonLoad( scope.parse( JSON.parse( text ) ) );\n\n\t\t}, onProgress, onError );\n\n\t},\n\n\tparse: function ( json ) {\n\n\t\tvar geometry = new BufferGeometry();\n\n\t\tvar index = json.data.index;\n\n\t\tif ( index !== undefined ) {\n\n\t\t\tvar typedArray = new TYPED_ARRAYS[ index.type ]( index.array );\n\t\t\tgeometry.setIndex( new BufferAttribute( typedArray, 1 ) );\n\n\t\t}\n\n\t\tvar attributes = json.data.attributes;\n\n\t\tfor ( var key in attributes ) {\n\n\t\t\tvar attribute = attributes[ key ];\n\t\t\tvar typedArray = new TYPED_ARRAYS[ attribute.type ]( attribute.array );\n\n\t\t\tgeometry.addAttribute( key, new BufferAttribute( typedArray, attribute.itemSize, attribute.normalized ) );\n\n\t\t}\n\n\t\tvar groups = json.data.groups || json.data.drawcalls || json.data.offsets;\n\n\t\tif ( groups !== undefined ) {\n\n\t\t\tfor ( var i = 0, n = groups.length; i !== n; ++ i ) {\n\n\t\t\t\tvar group = groups[ i ];\n\n\t\t\t\tgeometry.addGroup( group.start, group.count, group.materialIndex );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar boundingSphere = json.data.boundingSphere;\n\n\t\tif ( boundingSphere !== undefined ) {\n\n\t\t\tvar center = new Vector3();\n\n\t\t\tif ( boundingSphere.center !== undefined ) {\n\n\t\t\t\tcenter.fromArray( boundingSphere.center );\n\n\t\t\t}\n\n\t\t\tgeometry.boundingSphere = new Sphere( center, boundingSphere.radius );\n\n\t\t}\n\n\t\treturn geometry;\n\n\t}\n\n} );\n\nvar TYPED_ARRAYS = {\n\tInt8Array: Int8Array,\n\tUint8Array: Uint8Array,\n\t// Workaround for IE11 pre KB2929437. See #11440\n\tUint8ClampedArray: typeof Uint8ClampedArray !== 'undefined' ? Uint8ClampedArray : Uint8Array,\n\tInt16Array: Int16Array,\n\tUint16Array: Uint16Array,\n\tInt32Array: Int32Array,\n\tUint32Array: Uint32Array,\n\tFloat32Array: Float32Array,\n\tFloat64Array: Float64Array\n};\n\n/**\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction Loader() {}\n\nLoader.Handlers = {\n\n\thandlers: [],\n\n\tadd: function ( regex, loader ) {\n\n\t\tthis.handlers.push( regex, loader );\n\n\t},\n\n\tget: function ( file ) {\n\n\t\tvar handlers = this.handlers;\n\n\t\tfor ( var i = 0, l = handlers.length; i < l; i += 2 ) {\n\n\t\t\tvar regex = handlers[ i ];\n\t\t\tvar loader = handlers[ i + 1 ];\n\n\t\t\tif ( regex.test( file ) ) {\n\n\t\t\t\treturn loader;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n};\n\nObject.assign( Loader.prototype, {\n\n\tcrossOrigin: undefined,\n\n\tonLoadStart: function () {},\n\n\tonLoadProgress: function () {},\n\n\tonLoadComplete: function () {},\n\n\tinitMaterials: function ( materials, texturePath, crossOrigin ) {\n\n\t\tvar array = [];\n\n\t\tfor ( var i = 0; i < materials.length; ++ i ) {\n\n\t\t\tarray[ i ] = this.createMaterial( materials[ i ], texturePath, crossOrigin );\n\n\t\t}\n\n\t\treturn array;\n\n\t},\n\n\tcreateMaterial: ( function () {\n\n\t\tvar BlendingMode = {\n\t\t\tNoBlending: NoBlending,\n\t\t\tNormalBlending: NormalBlending,\n\t\t\tAdditiveBlending: AdditiveBlending,\n\t\t\tSubtractiveBlending: SubtractiveBlending,\n\t\t\tMultiplyBlending: MultiplyBlending,\n\t\t\tCustomBlending: CustomBlending\n\t\t};\n\n\t\tvar color = new Color();\n\t\tvar textureLoader = new TextureLoader();\n\t\tvar materialLoader = new MaterialLoader();\n\n\t\treturn function createMaterial( m, texturePath, crossOrigin ) {\n\n\t\t\t// convert from old material format\n\n\t\t\tvar textures = {};\n\n\t\t\tfunction loadTexture( path, repeat, offset, wrap, anisotropy ) {\n\n\t\t\t\tvar fullPath = texturePath + path;\n\t\t\t\tvar loader = Loader.Handlers.get( fullPath );\n\n\t\t\t\tvar texture;\n\n\t\t\t\tif ( loader !== null ) {\n\n\t\t\t\t\ttexture = loader.load( fullPath );\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttextureLoader.setCrossOrigin( crossOrigin );\n\t\t\t\t\ttexture = textureLoader.load( fullPath );\n\n\t\t\t\t}\n\n\t\t\t\tif ( repeat !== undefined ) {\n\n\t\t\t\t\ttexture.repeat.fromArray( repeat );\n\n\t\t\t\t\tif ( repeat[ 0 ] !== 1 ) texture.wrapS = RepeatWrapping;\n\t\t\t\t\tif ( repeat[ 1 ] !== 1 ) texture.wrapT = RepeatWrapping;\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset !== undefined ) {\n\n\t\t\t\t\ttexture.offset.fromArray( offset );\n\n\t\t\t\t}\n\n\t\t\t\tif ( wrap !== undefined ) {\n\n\t\t\t\t\tif ( wrap[ 0 ] === 'repeat' ) texture.wrapS = RepeatWrapping;\n\t\t\t\t\tif ( wrap[ 0 ] === 'mirror' ) texture.wrapS = MirroredRepeatWrapping;\n\n\t\t\t\t\tif ( wrap[ 1 ] === 'repeat' ) texture.wrapT = RepeatWrapping;\n\t\t\t\t\tif ( wrap[ 1 ] === 'mirror' ) texture.wrapT = MirroredRepeatWrapping;\n\n\t\t\t\t}\n\n\t\t\t\tif ( anisotropy !== undefined ) {\n\n\t\t\t\t\ttexture.anisotropy = anisotropy;\n\n\t\t\t\t}\n\n\t\t\t\tvar uuid = _Math.generateUUID();\n\n\t\t\t\ttextures[ uuid ] = texture;\n\n\t\t\t\treturn uuid;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tvar json = {\n\t\t\t\tuuid: _Math.generateUUID(),\n\t\t\t\ttype: 'MeshLambertMaterial'\n\t\t\t};\n\n\t\t\tfor ( var name in m ) {\n\n\t\t\t\tvar value = m[ name ];\n\n\t\t\t\tswitch ( name ) {\n\n\t\t\t\t\tcase 'DbgColor':\n\t\t\t\t\tcase 'DbgIndex':\n\t\t\t\t\tcase 'opticalDensity':\n\t\t\t\t\tcase 'illumination':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'DbgName':\n\t\t\t\t\t\tjson.name = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'blending':\n\t\t\t\t\t\tjson.blending = BlendingMode[ value ];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'colorAmbient':\n\t\t\t\t\tcase 'mapAmbient':\n\t\t\t\t\t\tconsole.warn( 'THREE.Loader.createMaterial:', name, 'is no longer supported.' );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'colorDiffuse':\n\t\t\t\t\t\tjson.color = color.fromArray( value ).getHex();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'colorSpecular':\n\t\t\t\t\t\tjson.specular = color.fromArray( value ).getHex();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'colorEmissive':\n\t\t\t\t\t\tjson.emissive = color.fromArray( value ).getHex();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'specularCoef':\n\t\t\t\t\t\tjson.shininess = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'shading':\n\t\t\t\t\t\tif ( value.toLowerCase() === 'basic' ) json.type = 'MeshBasicMaterial';\n\t\t\t\t\t\tif ( value.toLowerCase() === 'phong' ) json.type = 'MeshPhongMaterial';\n\t\t\t\t\t\tif ( value.toLowerCase() === 'standard' ) json.type = 'MeshStandardMaterial';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapDiffuse':\n\t\t\t\t\t\tjson.map = loadTexture( value, m.mapDiffuseRepeat, m.mapDiffuseOffset, m.mapDiffuseWrap, m.mapDiffuseAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapDiffuseRepeat':\n\t\t\t\t\tcase 'mapDiffuseOffset':\n\t\t\t\t\tcase 'mapDiffuseWrap':\n\t\t\t\t\tcase 'mapDiffuseAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapEmissive':\n\t\t\t\t\t\tjson.emissiveMap = loadTexture( value, m.mapEmissiveRepeat, m.mapEmissiveOffset, m.mapEmissiveWrap, m.mapEmissiveAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapEmissiveRepeat':\n\t\t\t\t\tcase 'mapEmissiveOffset':\n\t\t\t\t\tcase 'mapEmissiveWrap':\n\t\t\t\t\tcase 'mapEmissiveAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapLight':\n\t\t\t\t\t\tjson.lightMap = loadTexture( value, m.mapLightRepeat, m.mapLightOffset, m.mapLightWrap, m.mapLightAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapLightRepeat':\n\t\t\t\t\tcase 'mapLightOffset':\n\t\t\t\t\tcase 'mapLightWrap':\n\t\t\t\t\tcase 'mapLightAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapAO':\n\t\t\t\t\t\tjson.aoMap = loadTexture( value, m.mapAORepeat, m.mapAOOffset, m.mapAOWrap, m.mapAOAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapAORepeat':\n\t\t\t\t\tcase 'mapAOOffset':\n\t\t\t\t\tcase 'mapAOWrap':\n\t\t\t\t\tcase 'mapAOAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapBump':\n\t\t\t\t\t\tjson.bumpMap = loadTexture( value, m.mapBumpRepeat, m.mapBumpOffset, m.mapBumpWrap, m.mapBumpAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapBumpScale':\n\t\t\t\t\t\tjson.bumpScale = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapBumpRepeat':\n\t\t\t\t\tcase 'mapBumpOffset':\n\t\t\t\t\tcase 'mapBumpWrap':\n\t\t\t\t\tcase 'mapBumpAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapNormal':\n\t\t\t\t\t\tjson.normalMap = loadTexture( value, m.mapNormalRepeat, m.mapNormalOffset, m.mapNormalWrap, m.mapNormalAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapNormalFactor':\n\t\t\t\t\t\tjson.normalScale = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapNormalRepeat':\n\t\t\t\t\tcase 'mapNormalOffset':\n\t\t\t\t\tcase 'mapNormalWrap':\n\t\t\t\t\tcase 'mapNormalAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapSpecular':\n\t\t\t\t\t\tjson.specularMap = loadTexture( value, m.mapSpecularRepeat, m.mapSpecularOffset, m.mapSpecularWrap, m.mapSpecularAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapSpecularRepeat':\n\t\t\t\t\tcase 'mapSpecularOffset':\n\t\t\t\t\tcase 'mapSpecularWrap':\n\t\t\t\t\tcase 'mapSpecularAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapMetalness':\n\t\t\t\t\t\tjson.metalnessMap = loadTexture( value, m.mapMetalnessRepeat, m.mapMetalnessOffset, m.mapMetalnessWrap, m.mapMetalnessAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapMetalnessRepeat':\n\t\t\t\t\tcase 'mapMetalnessOffset':\n\t\t\t\t\tcase 'mapMetalnessWrap':\n\t\t\t\t\tcase 'mapMetalnessAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapRoughness':\n\t\t\t\t\t\tjson.roughnessMap = loadTexture( value, m.mapRoughnessRepeat, m.mapRoughnessOffset, m.mapRoughnessWrap, m.mapRoughnessAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapRoughnessRepeat':\n\t\t\t\t\tcase 'mapRoughnessOffset':\n\t\t\t\t\tcase 'mapRoughnessWrap':\n\t\t\t\t\tcase 'mapRoughnessAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapAlpha':\n\t\t\t\t\t\tjson.alphaMap = loadTexture( value, m.mapAlphaRepeat, m.mapAlphaOffset, m.mapAlphaWrap, m.mapAlphaAnisotropy );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'mapAlphaRepeat':\n\t\t\t\t\tcase 'mapAlphaOffset':\n\t\t\t\t\tcase 'mapAlphaWrap':\n\t\t\t\t\tcase 'mapAlphaAnisotropy':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'flipSided':\n\t\t\t\t\t\tjson.side = BackSide;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'doubleSided':\n\t\t\t\t\t\tjson.side = DoubleSide;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'transparency':\n\t\t\t\t\t\tconsole.warn( 'THREE.Loader.createMaterial: transparency has been renamed to opacity' );\n\t\t\t\t\t\tjson.opacity = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'depthTest':\n\t\t\t\t\tcase 'depthWrite':\n\t\t\t\t\tcase 'colorWrite':\n\t\t\t\t\tcase 'opacity':\n\t\t\t\t\tcase 'reflectivity':\n\t\t\t\t\tcase 'transparent':\n\t\t\t\t\tcase 'visible':\n\t\t\t\t\tcase 'wireframe':\n\t\t\t\t\t\tjson[ name ] = value;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'vertexColors':\n\t\t\t\t\t\tif ( value === true ) json.vertexColors = VertexColors;\n\t\t\t\t\t\tif ( value === 'face' ) json.vertexColors = FaceColors;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.error( 'THREE.Loader.createMaterial: Unsupported', name, value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( json.type === 'MeshBasicMaterial' ) delete json.emissive;\n\t\t\tif ( json.type !== 'MeshPhongMaterial' ) delete json.specular;\n\n\t\t\tif ( json.opacity < 1 ) json.transparent = true;\n\n\t\t\tmaterialLoader.setTextures( textures );\n\n\t\t\treturn materialLoader.parse( json );\n\n\t\t};\n\n\t} )()\n\n} );\n\n/**\n * @author Don McCurdy / https://www.donmccurdy.com\n */\n\nvar LoaderUtils = {\n\n\tdecodeText: function ( array ) {\n\n\t\tif ( typeof TextDecoder !== 'undefined' ) {\n\n\t\t\treturn new TextDecoder().decode( array );\n\n\t\t}\n\n\t\t// Avoid the String.fromCharCode.apply(null, array) shortcut, which\n\t\t// throws a \"maximum call stack size exceeded\" error for large arrays.\n\n\t\tvar s = '';\n\n\t\tfor ( var i = 0, il = array.length; i < il; i ++ ) {\n\n\t\t\t// Implicitly assumes little-endian.\n\t\t\ts += String.fromCharCode( array[ i ] );\n\n\t\t}\n\n\t\t// Merges multi-byte utf-8 characters.\n\t\treturn decodeURIComponent( escape( s ) );\n\n\t},\n\n\textractUrlBase: function ( url ) {\n\n\t\tvar index = url.lastIndexOf( '/' );\n\n\t\tif ( index === - 1 ) return './';\n\n\t\treturn url.substr( 0, index + 1 );\n\n\t}\n\n};\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction JSONLoader( manager ) {\n\n\tif ( typeof manager === 'boolean' ) {\n\n\t\tconsole.warn( 'THREE.JSONLoader: showStatus parameter has been removed from constructor.' );\n\t\tmanager = undefined;\n\n\t}\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n\tthis.withCredentials = false;\n\n}\n\nObject.assign( JSONLoader.prototype, {\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar scope = this;\n\n\t\tvar texturePath = this.texturePath && ( typeof this.texturePath === 'string' ) ? this.texturePath : LoaderUtils.extractUrlBase( url );\n\n\t\tvar loader = new FileLoader( this.manager );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\tvar json = JSON.parse( text );\n\t\t\tvar metadata = json.metadata;\n\n\t\t\tif ( metadata !== undefined ) {\n\n\t\t\t\tvar type = metadata.type;\n\n\t\t\t\tif ( type !== undefined ) {\n\n\t\t\t\t\tif ( type.toLowerCase() === 'object' ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.JSONLoader: ' + url + ' should be loaded with THREE.ObjectLoader instead.' );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tvar object = scope.parse( json, texturePath );\n\t\t\tonLoad( object.geometry, object.materials );\n\n\t\t}, onProgress, onError );\n\n\t},\n\n\tsetTexturePath: function ( value ) {\n\n\t\tthis.texturePath = value;\n\n\t},\n\n\tparse: ( function () {\n\n\t\tfunction parseModel( json, geometry ) {\n\n\t\t\tfunction isBitSet( value, position ) {\n\n\t\t\t\treturn value & ( 1 << position );\n\n\t\t\t}\n\n\t\t\tvar i, j, fi,\n\n\t\t\t\toffset, zLength,\n\n\t\t\t\tcolorIndex, normalIndex, uvIndex, materialIndex,\n\n\t\t\t\ttype,\n\t\t\t\tisQuad,\n\t\t\t\thasMaterial,\n\t\t\t\thasFaceVertexUv,\n\t\t\t\thasFaceNormal, hasFaceVertexNormal,\n\t\t\t\thasFaceColor, hasFaceVertexColor,\n\n\t\t\t\tvertex, face, faceA, faceB, hex, normal,\n\n\t\t\t\tuvLayer, uv, u, v,\n\n\t\t\t\tfaces = json.faces,\n\t\t\t\tvertices = json.vertices,\n\t\t\t\tnormals = json.normals,\n\t\t\t\tcolors = json.colors,\n\n\t\t\t\tscale = json.scale,\n\n\t\t\t\tnUvLayers = 0;\n\n\n\t\t\tif ( json.uvs !== undefined ) {\n\n\t\t\t\t// disregard empty arrays\n\n\t\t\t\tfor ( i = 0; i < json.uvs.length; i ++ ) {\n\n\t\t\t\t\tif ( json.uvs[ i ].length ) nUvLayers ++;\n\n\t\t\t\t}\n\n\t\t\t\tfor ( i = 0; i < nUvLayers; i ++ ) {\n\n\t\t\t\t\tgeometry.faceVertexUvs[ i ] = [];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\toffset = 0;\n\t\t\tzLength = vertices.length;\n\n\t\t\twhile ( offset < zLength ) {\n\n\t\t\t\tvertex = new Vector3();\n\n\t\t\t\tvertex.x = vertices[ offset ++ ] * scale;\n\t\t\t\tvertex.y = vertices[ offset ++ ] * scale;\n\t\t\t\tvertex.z = vertices[ offset ++ ] * scale;\n\n\t\t\t\tgeometry.vertices.push( vertex );\n\n\t\t\t}\n\n\t\t\toffset = 0;\n\t\t\tzLength = faces.length;\n\n\t\t\twhile ( offset < zLength ) {\n\n\t\t\t\ttype = faces[ offset ++ ];\n\n\t\t\t\tisQuad = isBitSet( type, 0 );\n\t\t\t\thasMaterial = isBitSet( type, 1 );\n\t\t\t\thasFaceVertexUv = isBitSet( type, 3 );\n\t\t\t\thasFaceNormal = isBitSet( type, 4 );\n\t\t\t\thasFaceVertexNormal = isBitSet( type, 5 );\n\t\t\t\thasFaceColor = isBitSet( type, 6 );\n\t\t\t\thasFaceVertexColor = isBitSet( type, 7 );\n\n\t\t\t\t// console.log(\"type\", type, \"bits\", isQuad, hasMaterial, hasFaceVertexUv, hasFaceNormal, hasFaceVertexNormal, hasFaceColor, hasFaceVertexColor);\n\n\t\t\t\tif ( isQuad ) {\n\n\t\t\t\t\tfaceA = new Face3();\n\t\t\t\t\tfaceA.a = faces[ offset ];\n\t\t\t\t\tfaceA.b = faces[ offset + 1 ];\n\t\t\t\t\tfaceA.c = faces[ offset + 3 ];\n\n\t\t\t\t\tfaceB = new Face3();\n\t\t\t\t\tfaceB.a = faces[ offset + 1 ];\n\t\t\t\t\tfaceB.b = faces[ offset + 2 ];\n\t\t\t\t\tfaceB.c = faces[ offset + 3 ];\n\n\t\t\t\t\toffset += 4;\n\n\t\t\t\t\tif ( hasMaterial ) {\n\n\t\t\t\t\t\tmaterialIndex = faces[ offset ++ ];\n\t\t\t\t\t\tfaceA.materialIndex = materialIndex;\n\t\t\t\t\t\tfaceB.materialIndex = materialIndex;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// to get face <=> uv index correspondence\n\n\t\t\t\t\tfi = geometry.faces.length;\n\n\t\t\t\t\tif ( hasFaceVertexUv ) {\n\n\t\t\t\t\t\tfor ( i = 0; i < nUvLayers; i ++ ) {\n\n\t\t\t\t\t\t\tuvLayer = json.uvs[ i ];\n\n\t\t\t\t\t\t\tgeometry.faceVertexUvs[ i ][ fi ] = [];\n\t\t\t\t\t\t\tgeometry.faceVertexUvs[ i ][ fi + 1 ] = [];\n\n\t\t\t\t\t\t\tfor ( j = 0; j < 4; j ++ ) {\n\n\t\t\t\t\t\t\t\tuvIndex = faces[ offset ++ ];\n\n\t\t\t\t\t\t\t\tu = uvLayer[ uvIndex * 2 ];\n\t\t\t\t\t\t\t\tv = uvLayer[ uvIndex * 2 + 1 ];\n\n\t\t\t\t\t\t\t\tuv = new Vector2( u, v );\n\n\t\t\t\t\t\t\t\tif ( j !== 2 ) geometry.faceVertexUvs[ i ][ fi ].push( uv );\n\t\t\t\t\t\t\t\tif ( j !== 0 ) geometry.faceVertexUvs[ i ][ fi + 1 ].push( uv );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( hasFaceNormal ) {\n\n\t\t\t\t\t\tnormalIndex = faces[ offset ++ ] * 3;\n\n\t\t\t\t\t\tfaceA.normal.set(\n\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\tnormals[ normalIndex ]\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tfaceB.normal.copy( faceA.normal );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( hasFaceVertexNormal ) {\n\n\t\t\t\t\t\tfor ( i = 0; i < 4; i ++ ) {\n\n\t\t\t\t\t\t\tnormalIndex = faces[ offset ++ ] * 3;\n\n\t\t\t\t\t\t\tnormal = new Vector3(\n\t\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\t\tnormals[ normalIndex ]\n\t\t\t\t\t\t\t);\n\n\n\t\t\t\t\t\t\tif ( i !== 2 ) faceA.vertexNormals.push( normal );\n\t\t\t\t\t\t\tif ( i !== 0 ) faceB.vertexNormals.push( normal );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\n\t\t\t\t\tif ( hasFaceColor ) {\n\n\t\t\t\t\t\tcolorIndex = faces[ offset ++ ];\n\t\t\t\t\t\thex = colors[ colorIndex ];\n\n\t\t\t\t\t\tfaceA.color.setHex( hex );\n\t\t\t\t\t\tfaceB.color.setHex( hex );\n\n\t\t\t\t\t}\n\n\n\t\t\t\t\tif ( hasFaceVertexColor ) {\n\n\t\t\t\t\t\tfor ( i = 0; i < 4; i ++ ) {\n\n\t\t\t\t\t\t\tcolorIndex = faces[ offset ++ ];\n\t\t\t\t\t\t\thex = colors[ colorIndex ];\n\n\t\t\t\t\t\t\tif ( i !== 2 ) faceA.vertexColors.push( new Color( hex ) );\n\t\t\t\t\t\t\tif ( i !== 0 ) faceB.vertexColors.push( new Color( hex ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tgeometry.faces.push( faceA );\n\t\t\t\t\tgeometry.faces.push( faceB );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tface = new Face3();\n\t\t\t\t\tface.a = faces[ offset ++ ];\n\t\t\t\t\tface.b = faces[ offset ++ ];\n\t\t\t\t\tface.c = faces[ offset ++ ];\n\n\t\t\t\t\tif ( hasMaterial ) {\n\n\t\t\t\t\t\tmaterialIndex = faces[ offset ++ ];\n\t\t\t\t\t\tface.materialIndex = materialIndex;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// to get face <=> uv index correspondence\n\n\t\t\t\t\tfi = geometry.faces.length;\n\n\t\t\t\t\tif ( hasFaceVertexUv ) {\n\n\t\t\t\t\t\tfor ( i = 0; i < nUvLayers; i ++ ) {\n\n\t\t\t\t\t\t\tuvLayer = json.uvs[ i ];\n\n\t\t\t\t\t\t\tgeometry.faceVertexUvs[ i ][ fi ] = [];\n\n\t\t\t\t\t\t\tfor ( j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\t\t\t\tuvIndex = faces[ offset ++ ];\n\n\t\t\t\t\t\t\t\tu = uvLayer[ uvIndex * 2 ];\n\t\t\t\t\t\t\t\tv = uvLayer[ uvIndex * 2 + 1 ];\n\n\t\t\t\t\t\t\t\tuv = new Vector2( u, v );\n\n\t\t\t\t\t\t\t\tgeometry.faceVertexUvs[ i ][ fi ].push( uv );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( hasFaceNormal ) {\n\n\t\t\t\t\t\tnormalIndex = faces[ offset ++ ] * 3;\n\n\t\t\t\t\t\tface.normal.set(\n\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\tnormals[ normalIndex ]\n\t\t\t\t\t\t);\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( hasFaceVertexNormal ) {\n\n\t\t\t\t\t\tfor ( i = 0; i < 3; i ++ ) {\n\n\t\t\t\t\t\t\tnormalIndex = faces[ offset ++ ] * 3;\n\n\t\t\t\t\t\t\tnormal = new Vector3(\n\t\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\t\tnormals[ normalIndex ]\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tface.vertexNormals.push( normal );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\n\t\t\t\t\tif ( hasFaceColor ) {\n\n\t\t\t\t\t\tcolorIndex = faces[ offset ++ ];\n\t\t\t\t\t\tface.color.setHex( colors[ colorIndex ] );\n\n\t\t\t\t\t}\n\n\n\t\t\t\t\tif ( hasFaceVertexColor ) {\n\n\t\t\t\t\t\tfor ( i = 0; i < 3; i ++ ) {\n\n\t\t\t\t\t\t\tcolorIndex = faces[ offset ++ ];\n\t\t\t\t\t\t\tface.vertexColors.push( new Color( colors[ colorIndex ] ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tgeometry.faces.push( face );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction parseSkin( json, geometry ) {\n\n\t\t\tvar influencesPerVertex = ( json.influencesPerVertex !== undefined ) ? json.influencesPerVertex : 2;\n\n\t\t\tif ( json.skinWeights ) {\n\n\t\t\t\tfor ( var i = 0, l = json.skinWeights.length; i < l; i += influencesPerVertex ) {\n\n\t\t\t\t\tvar x = json.skinWeights[ i ];\n\t\t\t\t\tvar y = ( influencesPerVertex > 1 ) ? json.skinWeights[ i + 1 ] : 0;\n\t\t\t\t\tvar z = ( influencesPerVertex > 2 ) ? json.skinWeights[ i + 2 ] : 0;\n\t\t\t\t\tvar w = ( influencesPerVertex > 3 ) ? json.skinWeights[ i + 3 ] : 0;\n\n\t\t\t\t\tgeometry.skinWeights.push( new Vector4( x, y, z, w ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( json.skinIndices ) {\n\n\t\t\t\tfor ( var i = 0, l = json.skinIndices.length; i < l; i += influencesPerVertex ) {\n\n\t\t\t\t\tvar a = json.skinIndices[ i ];\n\t\t\t\t\tvar b = ( influencesPerVertex > 1 ) ? json.skinIndices[ i + 1 ] : 0;\n\t\t\t\t\tvar c = ( influencesPerVertex > 2 ) ? json.skinIndices[ i + 2 ] : 0;\n\t\t\t\t\tvar d = ( influencesPerVertex > 3 ) ? json.skinIndices[ i + 3 ] : 0;\n\n\t\t\t\t\tgeometry.skinIndices.push( new Vector4( a, b, c, d ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tgeometry.bones = json.bones;\n\n\t\t\tif ( geometry.bones && geometry.bones.length > 0 && ( geometry.skinWeights.length !== geometry.skinIndices.length || geometry.skinIndices.length !== geometry.vertices.length ) ) {\n\n\t\t\t\tconsole.warn( 'When skinning, number of vertices (' + geometry.vertices.length + '), skinIndices (' +\n\t\t\t\t\tgeometry.skinIndices.length + '), and skinWeights (' + geometry.skinWeights.length + ') should match.' );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction parseMorphing( json, geometry ) {\n\n\t\t\tvar scale = json.scale;\n\n\t\t\tif ( json.morphTargets !== undefined ) {\n\n\t\t\t\tfor ( var i = 0, l = json.morphTargets.length; i < l; i ++ ) {\n\n\t\t\t\t\tgeometry.morphTargets[ i ] = {};\n\t\t\t\t\tgeometry.morphTargets[ i ].name = json.morphTargets[ i ].name;\n\t\t\t\t\tgeometry.morphTargets[ i ].vertices = [];\n\n\t\t\t\t\tvar dstVertices = geometry.morphTargets[ i ].vertices;\n\t\t\t\t\tvar srcVertices = json.morphTargets[ i ].vertices;\n\n\t\t\t\t\tfor ( var v = 0, vl = srcVertices.length; v < vl; v += 3 ) {\n\n\t\t\t\t\t\tvar vertex = new Vector3();\n\t\t\t\t\t\tvertex.x = srcVertices[ v ] * scale;\n\t\t\t\t\t\tvertex.y = srcVertices[ v + 1 ] * scale;\n\t\t\t\t\t\tvertex.z = srcVertices[ v + 2 ] * scale;\n\n\t\t\t\t\t\tdstVertices.push( vertex );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( json.morphColors !== undefined && json.morphColors.length > 0 ) {\n\n\t\t\t\tconsole.warn( 'THREE.JSONLoader: \"morphColors\" no longer supported. Using them as face colors.' );\n\n\t\t\t\tvar faces = geometry.faces;\n\t\t\t\tvar morphColors = json.morphColors[ 0 ].colors;\n\n\t\t\t\tfor ( var i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\t\t\t\tfaces[ i ].color.fromArray( morphColors, i * 3 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction parseAnimations( json, geometry ) {\n\n\t\t\tvar outputAnimations = [];\n\n\t\t\t// parse old style Bone/Hierarchy animations\n\t\t\tvar animations = [];\n\n\t\t\tif ( json.animation !== undefined ) {\n\n\t\t\t\tanimations.push( json.animation );\n\n\t\t\t}\n\n\t\t\tif ( json.animations !== undefined ) {\n\n\t\t\t\tif ( json.animations.length ) {\n\n\t\t\t\t\tanimations = animations.concat( json.animations );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tanimations.push( json.animations );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfor ( var i = 0; i < animations.length; i ++ ) {\n\n\t\t\t\tvar clip = AnimationClip.parseAnimation( animations[ i ], geometry.bones );\n\t\t\t\tif ( clip ) outputAnimations.push( clip );\n\n\t\t\t}\n\n\t\t\t// parse implicit morph animations\n\t\t\tif ( geometry.morphTargets ) {\n\n\t\t\t\t// TODO: Figure out what an appropraite FPS is for morph target animations -- defaulting to 10, but really it is completely arbitrary.\n\t\t\t\tvar morphAnimationClips = AnimationClip.CreateClipsFromMorphTargetSequences( geometry.morphTargets, 10 );\n\t\t\t\toutputAnimations = outputAnimations.concat( morphAnimationClips );\n\n\t\t\t}\n\n\t\t\tif ( outputAnimations.length > 0 ) geometry.animations = outputAnimations;\n\n\t\t}\n\n\t\treturn function parse( json, texturePath ) {\n\n\t\t\tif ( json.data !== undefined ) {\n\n\t\t\t\t// Geometry 4.0 spec\n\t\t\t\tjson = json.data;\n\n\t\t\t}\n\n\t\t\tif ( json.scale !== undefined ) {\n\n\t\t\t\tjson.scale = 1.0 / json.scale;\n\n\t\t\t} else {\n\n\t\t\t\tjson.scale = 1.0;\n\n\t\t\t}\n\n\t\t\tvar geometry = new Geometry();\n\n\t\t\tparseModel( json, geometry );\n\t\t\tparseSkin( json, geometry );\n\t\t\tparseMorphing( json, geometry );\n\t\t\tparseAnimations( json, geometry );\n\n\t\t\tgeometry.computeFaceNormals();\n\t\t\tgeometry.computeBoundingSphere();\n\n\t\t\tif ( json.materials === undefined || json.materials.length === 0 ) {\n\n\t\t\t\treturn { geometry: geometry };\n\n\t\t\t} else {\n\n\t\t\t\tvar materials = Loader.prototype.initMaterials( json.materials, texturePath, this.crossOrigin );\n\n\t\t\t\treturn { geometry: geometry, materials: materials };\n\n\t\t\t}\n\n\t\t};\n\n\t} )()\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction ObjectLoader( manager ) {\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\tthis.texturePath = '';\n\n}\n\nObject.assign( ObjectLoader.prototype, {\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tif ( this.texturePath === '' ) {\n\n\t\t\tthis.texturePath = url.substring( 0, url.lastIndexOf( '/' ) + 1 );\n\n\t\t}\n\n\t\tvar scope = this;\n\n\t\tvar loader = new FileLoader( scope.manager );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\tvar json = null;\n\n\t\t\ttry {\n\n\t\t\t\tjson = JSON.parse( text );\n\n\t\t\t} catch ( error ) {\n\n\t\t\t\tif ( onError !== undefined ) onError( error );\n\n\t\t\t\tconsole.error( 'THREE:ObjectLoader: Can\\'t parse ' + url + '.', error.message );\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tvar metadata = json.metadata;\n\n\t\t\tif ( metadata === undefined || metadata.type === undefined || metadata.type.toLowerCase() === 'geometry' ) {\n\n\t\t\t\tconsole.error( 'THREE.ObjectLoader: Can\\'t load ' + url + '. Use THREE.JSONLoader instead.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tscope.parse( json, onLoad );\n\n\t\t}, onProgress, onError );\n\n\t},\n\n\tsetTexturePath: function ( value ) {\n\n\t\tthis.texturePath = value;\n\n\t},\n\n\tsetCrossOrigin: function ( value ) {\n\n\t\tthis.crossOrigin = value;\n\n\t},\n\n\tparse: function ( json, onLoad ) {\n\n\t\tvar shapes = this.parseShape( json.shapes );\n\t\tvar geometries = this.parseGeometries( json.geometries, shapes );\n\n\t\tvar images = this.parseImages( json.images, function () {\n\n\t\t\tif ( onLoad !== undefined ) onLoad( object );\n\n\t\t} );\n\n\t\tvar textures = this.parseTextures( json.textures, images );\n\t\tvar materials = this.parseMaterials( json.materials, textures );\n\n\t\tvar object = this.parseObject( json.object, geometries, materials );\n\n\t\tif ( json.animations ) {\n\n\t\t\tobject.animations = this.parseAnimations( json.animations );\n\n\t\t}\n\n\t\tif ( json.images === undefined || json.images.length === 0 ) {\n\n\t\t\tif ( onLoad !== undefined ) onLoad( object );\n\n\t\t}\n\n\t\treturn object;\n\n\t},\n\n\tparseShape: function ( json ) {\n\n\t\tvar shapes = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tfor ( var i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tvar shape = new Shape().fromJSON( json[ i ] );\n\n\t\t\t\tshapes[ shape.uuid ] = shape;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn shapes;\n\n\t},\n\n\tparseGeometries: function ( json, shapes ) {\n\n\t\tvar geometries = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tvar geometryLoader = new JSONLoader();\n\t\t\tvar bufferGeometryLoader = new BufferGeometryLoader();\n\n\t\t\tfor ( var i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tvar geometry;\n\t\t\t\tvar data = json[ i ];\n\n\t\t\t\tswitch ( data.type ) {\n\n\t\t\t\t\tcase 'PlaneGeometry':\n\t\t\t\t\tcase 'PlaneBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.width,\n\t\t\t\t\t\t\tdata.height,\n\t\t\t\t\t\t\tdata.widthSegments,\n\t\t\t\t\t\t\tdata.heightSegments\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'BoxGeometry':\n\t\t\t\t\tcase 'BoxBufferGeometry':\n\t\t\t\t\tcase 'CubeGeometry': // backwards compatible\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.width,\n\t\t\t\t\t\t\tdata.height,\n\t\t\t\t\t\t\tdata.depth,\n\t\t\t\t\t\t\tdata.widthSegments,\n\t\t\t\t\t\t\tdata.heightSegments,\n\t\t\t\t\t\t\tdata.depthSegments\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'CircleGeometry':\n\t\t\t\t\tcase 'CircleBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.segments,\n\t\t\t\t\t\t\tdata.thetaStart,\n\t\t\t\t\t\t\tdata.thetaLength\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'CylinderGeometry':\n\t\t\t\t\tcase 'CylinderBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.radiusTop,\n\t\t\t\t\t\t\tdata.radiusBottom,\n\t\t\t\t\t\t\tdata.height,\n\t\t\t\t\t\t\tdata.radialSegments,\n\t\t\t\t\t\t\tdata.heightSegments,\n\t\t\t\t\t\t\tdata.openEnded,\n\t\t\t\t\t\t\tdata.thetaStart,\n\t\t\t\t\t\t\tdata.thetaLength\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'ConeGeometry':\n\t\t\t\t\tcase 'ConeBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.height,\n\t\t\t\t\t\t\tdata.radialSegments,\n\t\t\t\t\t\t\tdata.heightSegments,\n\t\t\t\t\t\t\tdata.openEnded,\n\t\t\t\t\t\t\tdata.thetaStart,\n\t\t\t\t\t\t\tdata.thetaLength\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'SphereGeometry':\n\t\t\t\t\tcase 'SphereBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.widthSegments,\n\t\t\t\t\t\t\tdata.heightSegments,\n\t\t\t\t\t\t\tdata.phiStart,\n\t\t\t\t\t\t\tdata.phiLength,\n\t\t\t\t\t\t\tdata.thetaStart,\n\t\t\t\t\t\t\tdata.thetaLength\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'DodecahedronGeometry':\n\t\t\t\t\tcase 'DodecahedronBufferGeometry':\n\t\t\t\t\tcase 'IcosahedronGeometry':\n\t\t\t\t\tcase 'IcosahedronBufferGeometry':\n\t\t\t\t\tcase 'OctahedronGeometry':\n\t\t\t\t\tcase 'OctahedronBufferGeometry':\n\t\t\t\t\tcase 'TetrahedronGeometry':\n\t\t\t\t\tcase 'TetrahedronBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.detail\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'RingGeometry':\n\t\t\t\t\tcase 'RingBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.innerRadius,\n\t\t\t\t\t\t\tdata.outerRadius,\n\t\t\t\t\t\t\tdata.thetaSegments,\n\t\t\t\t\t\t\tdata.phiSegments,\n\t\t\t\t\t\t\tdata.thetaStart,\n\t\t\t\t\t\t\tdata.thetaLength\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'TorusGeometry':\n\t\t\t\t\tcase 'TorusBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.tube,\n\t\t\t\t\t\t\tdata.radialSegments,\n\t\t\t\t\t\t\tdata.tubularSegments,\n\t\t\t\t\t\t\tdata.arc\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'TorusKnotGeometry':\n\t\t\t\t\tcase 'TorusKnotBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.tube,\n\t\t\t\t\t\t\tdata.tubularSegments,\n\t\t\t\t\t\t\tdata.radialSegments,\n\t\t\t\t\t\t\tdata.p,\n\t\t\t\t\t\t\tdata.q\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'LatheGeometry':\n\t\t\t\t\tcase 'LatheBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.points,\n\t\t\t\t\t\t\tdata.segments,\n\t\t\t\t\t\t\tdata.phiStart,\n\t\t\t\t\t\t\tdata.phiLength\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'PolyhedronGeometry':\n\t\t\t\t\tcase 'PolyhedronBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.vertices,\n\t\t\t\t\t\t\tdata.indices,\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.details\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'ShapeGeometry':\n\t\t\t\t\tcase 'ShapeBufferGeometry':\n\n\t\t\t\t\t\tvar geometryShapes = [];\n\n\t\t\t\t\t\tfor ( var j = 0, jl = data.shapes.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\t\tvar shape = shapes[ data.shapes[ j ] ];\n\n\t\t\t\t\t\t\tgeometryShapes.push( shape );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tgeometryShapes,\n\t\t\t\t\t\t\tdata.curveSegments\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'BufferGeometry':\n\n\t\t\t\t\t\tgeometry = bufferGeometryLoader.parse( data );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'Geometry':\n\n\t\t\t\t\t\tgeometry = geometryLoader.parse( data, this.texturePath ).geometry;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Unsupported geometry type \"' + data.type + '\"' );\n\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.uuid = data.uuid;\n\n\t\t\t\tif ( data.name !== undefined ) geometry.name = data.name;\n\n\t\t\t\tgeometries[ data.uuid ] = geometry;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn geometries;\n\n\t},\n\n\tparseMaterials: function ( json, textures ) {\n\n\t\tvar materials = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tvar loader = new MaterialLoader();\n\t\t\tloader.setTextures( textures );\n\n\t\t\tfor ( var i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tvar data = json[ i ];\n\n\t\t\t\tif ( data.type === 'MultiMaterial' ) {\n\n\t\t\t\t\t// Deprecated\n\n\t\t\t\t\tvar array = [];\n\n\t\t\t\t\tfor ( var j = 0; j < data.materials.length; j ++ ) {\n\n\t\t\t\t\t\tarray.push( loader.parse( data.materials[ j ] ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tmaterials[ data.uuid ] = array;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tmaterials[ data.uuid ] = loader.parse( data );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn materials;\n\n\t},\n\n\tparseAnimations: function ( json ) {\n\n\t\tvar animations = [];\n\n\t\tfor ( var i = 0; i < json.length; i ++ ) {\n\n\t\t\tvar clip = AnimationClip.parse( json[ i ] );\n\n\t\t\tanimations.push( clip );\n\n\t\t}\n\n\t\treturn animations;\n\n\t},\n\n\tparseImages: function ( json, onLoad ) {\n\n\t\tvar scope = this;\n\t\tvar images = {};\n\n\t\tfunction loadImage( url ) {\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\treturn loader.load( url, function () {\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, undefined, function () {\n\n\t\t\t\tscope.manager.itemEnd( url );\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t} );\n\n\t\t}\n\n\t\tif ( json !== undefined && json.length > 0 ) {\n\n\t\t\tvar manager = new LoadingManager( onLoad );\n\n\t\t\tvar loader = new ImageLoader( manager );\n\t\t\tloader.setCrossOrigin( this.crossOrigin );\n\n\t\t\tfor ( var i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tvar image = json[ i ];\n\t\t\t\tvar path = /^(\\/\\/)|([a-z]+:(\\/\\/)?)/i.test( image.url ) ? image.url : scope.texturePath + image.url;\n\n\t\t\t\timages[ image.uuid ] = loadImage( path );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn images;\n\n\t},\n\n\tparseTextures: function ( json, images ) {\n\n\t\tfunction parseConstant( value, type ) {\n\n\t\t\tif ( typeof value === 'number' ) return value;\n\n\t\t\tconsole.warn( 'THREE.ObjectLoader.parseTexture: Constant should be in numeric form.', value );\n\n\t\t\treturn type[ value ];\n\n\t\t}\n\n\t\tvar textures = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tfor ( var i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tvar data = json[ i ];\n\n\t\t\t\tif ( data.image === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: No \"image\" specified for', data.uuid );\n\n\t\t\t\t}\n\n\t\t\t\tif ( images[ data.image ] === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined image', data.image );\n\n\t\t\t\t}\n\n\t\t\t\tvar texture = new Texture( images[ data.image ] );\n\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\ttexture.uuid = data.uuid;\n\n\t\t\t\tif ( data.name !== undefined ) texture.name = data.name;\n\n\t\t\t\tif ( data.mapping !== undefined ) texture.mapping = parseConstant( data.mapping, TEXTURE_MAPPING );\n\n\t\t\t\tif ( data.offset !== undefined ) texture.offset.fromArray( data.offset );\n\t\t\t\tif ( data.repeat !== undefined ) texture.repeat.fromArray( data.repeat );\n\t\t\t\tif ( data.center !== undefined ) texture.center.fromArray( data.center );\n\t\t\t\tif ( data.rotation !== undefined ) texture.rotation = data.rotation;\n\n\t\t\t\tif ( data.wrap !== undefined ) {\n\n\t\t\t\t\ttexture.wrapS = parseConstant( data.wrap[ 0 ], TEXTURE_WRAPPING );\n\t\t\t\t\ttexture.wrapT = parseConstant( data.wrap[ 1 ], TEXTURE_WRAPPING );\n\n\t\t\t\t}\n\n\t\t\t\tif ( data.format !== undefined ) texture.format = data.format;\n\n\t\t\t\tif ( data.minFilter !== undefined ) texture.minFilter = parseConstant( data.minFilter, TEXTURE_FILTER );\n\t\t\t\tif ( data.magFilter !== undefined ) texture.magFilter = parseConstant( data.magFilter, TEXTURE_FILTER );\n\t\t\t\tif ( data.anisotropy !== undefined ) texture.anisotropy = data.anisotropy;\n\n\t\t\t\tif ( data.flipY !== undefined ) texture.flipY = data.flipY;\n\n\t\t\t\ttextures[ data.uuid ] = texture;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn textures;\n\n\t},\n\n\tparseObject: function ( data, geometries, materials ) {\n\n\t\tvar object;\n\n\t\tfunction getGeometry( name ) {\n\n\t\t\tif ( geometries[ name ] === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined geometry', name );\n\n\t\t\t}\n\n\t\t\treturn geometries[ name ];\n\n\t\t}\n\n\t\tfunction getMaterial( name ) {\n\n\t\t\tif ( name === undefined ) return undefined;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\n\t\t\t\tvar array = [];\n\n\t\t\t\tfor ( var i = 0, l = name.length; i < l; i ++ ) {\n\n\t\t\t\t\tvar uuid = name[ i ];\n\n\t\t\t\t\tif ( materials[ uuid ] === undefined ) {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined material', uuid );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tarray.push( materials[ uuid ] );\n\n\t\t\t\t}\n\n\t\t\t\treturn array;\n\n\t\t\t}\n\n\t\t\tif ( materials[ name ] === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined material', name );\n\n\t\t\t}\n\n\t\t\treturn materials[ name ];\n\n\t\t}\n\n\t\tswitch ( data.type ) {\n\n\t\t\tcase 'Scene':\n\n\t\t\t\tobject = new Scene();\n\n\t\t\t\tif ( data.background !== undefined ) {\n\n\t\t\t\t\tif ( Number.isInteger( data.background ) ) {\n\n\t\t\t\t\t\tobject.background = new Color( data.background );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( data.fog !== undefined ) {\n\n\t\t\t\t\tif ( data.fog.type === 'Fog' ) {\n\n\t\t\t\t\t\tobject.fog = new Fog( data.fog.color, data.fog.near, data.fog.far );\n\n\t\t\t\t\t} else if ( data.fog.type === 'FogExp2' ) {\n\n\t\t\t\t\t\tobject.fog = new FogExp2( data.fog.color, data.fog.density );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'PerspectiveCamera':\n\n\t\t\t\tobject = new PerspectiveCamera( data.fov, data.aspect, data.near, data.far );\n\n\t\t\t\tif ( data.focus !== undefined ) object.focus = data.focus;\n\t\t\t\tif ( data.zoom !== undefined ) object.zoom = data.zoom;\n\t\t\t\tif ( data.filmGauge !== undefined ) object.filmGauge = data.filmGauge;\n\t\t\t\tif ( data.filmOffset !== undefined ) object.filmOffset = data.filmOffset;\n\t\t\t\tif ( data.view !== undefined ) object.view = Object.assign( {}, data.view );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'OrthographicCamera':\n\n\t\t\t\tobject = new OrthographicCamera( data.left, data.right, data.top, data.bottom, data.near, data.far );\n\n\t\t\t\tif ( data.zoom !== undefined ) object.zoom = data.zoom;\n\t\t\t\tif ( data.view !== undefined ) object.view = Object.assign( {}, data.view );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'AmbientLight':\n\n\t\t\t\tobject = new AmbientLight( data.color, data.intensity );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'DirectionalLight':\n\n\t\t\t\tobject = new DirectionalLight( data.color, data.intensity );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'PointLight':\n\n\t\t\t\tobject = new PointLight( data.color, data.intensity, data.distance, data.decay );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'RectAreaLight':\n\n\t\t\t\tobject = new RectAreaLight( data.color, data.intensity, data.width, data.height );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'SpotLight':\n\n\t\t\t\tobject = new SpotLight( data.color, data.intensity, data.distance, data.angle, data.penumbra, data.decay );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'HemisphereLight':\n\n\t\t\t\tobject = new HemisphereLight( data.color, data.groundColor, data.intensity );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'SkinnedMesh':\n\n\t\t\t\tconsole.warn( 'THREE.ObjectLoader.parseObject() does not support SkinnedMesh yet.' );\n\n\t\t\tcase 'Mesh':\n\n\t\t\t\tvar geometry = getGeometry( data.geometry );\n\t\t\t\tvar material = getMaterial( data.material );\n\n\t\t\t\tif ( geometry.bones && geometry.bones.length > 0 ) {\n\n\t\t\t\t\tobject = new SkinnedMesh( geometry, material );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tobject = new Mesh( geometry, material );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LOD':\n\n\t\t\t\tobject = new LOD();\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Line':\n\n\t\t\t\tobject = new Line( getGeometry( data.geometry ), getMaterial( data.material ), data.mode );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LineLoop':\n\n\t\t\t\tobject = new LineLoop( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LineSegments':\n\n\t\t\t\tobject = new LineSegments( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'PointCloud':\n\t\t\tcase 'Points':\n\n\t\t\t\tobject = new Points( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Sprite':\n\n\t\t\t\tobject = new Sprite( getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Group':\n\n\t\t\t\tobject = new Group();\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tobject = new Object3D();\n\n\t\t}\n\n\t\tobject.uuid = data.uuid;\n\n\t\tif ( data.name !== undefined ) object.name = data.name;\n\n\t\tif ( data.matrix !== undefined ) {\n\n\t\t\tobject.matrix.fromArray( data.matrix );\n\n\t\t\tif ( data.matrixAutoUpdate !== undefined ) object.matrixAutoUpdate = data.matrixAutoUpdate;\n\t\t\tif ( object.matrixAutoUpdate ) object.matrix.decompose( object.position, object.quaternion, object.scale );\n\n\t\t} else {\n\n\t\t\tif ( data.position !== undefined ) object.position.fromArray( data.position );\n\t\t\tif ( data.rotation !== undefined ) object.rotation.fromArray( data.rotation );\n\t\t\tif ( data.quaternion !== undefined ) object.quaternion.fromArray( data.quaternion );\n\t\t\tif ( data.scale !== undefined ) object.scale.fromArray( data.scale );\n\n\t\t}\n\n\t\tif ( data.castShadow !== undefined ) object.castShadow = data.castShadow;\n\t\tif ( data.receiveShadow !== undefined ) object.receiveShadow = data.receiveShadow;\n\n\t\tif ( data.shadow ) {\n\n\t\t\tif ( data.shadow.bias !== undefined ) object.shadow.bias = data.shadow.bias;\n\t\t\tif ( data.shadow.radius !== undefined ) object.shadow.radius = data.shadow.radius;\n\t\t\tif ( data.shadow.mapSize !== undefined ) object.shadow.mapSize.fromArray( data.shadow.mapSize );\n\t\t\tif ( data.shadow.camera !== undefined ) object.shadow.camera = this.parseObject( data.shadow.camera );\n\n\t\t}\n\n\t\tif ( data.visible !== undefined ) object.visible = data.visible;\n\t\tif ( data.frustumCulled !== undefined ) object.frustumCulled = data.frustumCulled;\n\t\tif ( data.renderOrder !== undefined ) object.renderOrder = data.renderOrder;\n\t\tif ( data.userData !== undefined ) object.userData = data.userData;\n\n\t\tif ( data.children !== undefined ) {\n\n\t\t\tvar children = data.children;\n\n\t\t\tfor ( var i = 0; i < children.length; i ++ ) {\n\n\t\t\t\tobject.add( this.parseObject( children[ i ], geometries, materials ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( data.type === 'LOD' ) {\n\n\t\t\tvar levels = data.levels;\n\n\t\t\tfor ( var l = 0; l < levels.length; l ++ ) {\n\n\t\t\t\tvar level = levels[ l ];\n\t\t\t\tvar child = object.getObjectByProperty( 'uuid', level.object );\n\n\t\t\t\tif ( child !== undefined ) {\n\n\t\t\t\t\tobject.addLevel( child, level.distance );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn object;\n\n\t}\n\n} );\n\nvar TEXTURE_MAPPING = {\n\tUVMapping: UVMapping,\n\tCubeReflectionMapping: CubeReflectionMapping,\n\tCubeRefractionMapping: CubeRefractionMapping,\n\tEquirectangularReflectionMapping: EquirectangularReflectionMapping,\n\tEquirectangularRefractionMapping: EquirectangularRefractionMapping,\n\tSphericalReflectionMapping: SphericalReflectionMapping,\n\tCubeUVReflectionMapping: CubeUVReflectionMapping,\n\tCubeUVRefractionMapping: CubeUVRefractionMapping\n};\n\nvar TEXTURE_WRAPPING = {\n\tRepeatWrapping: RepeatWrapping,\n\tClampToEdgeWrapping: ClampToEdgeWrapping,\n\tMirroredRepeatWrapping: MirroredRepeatWrapping\n};\n\nvar TEXTURE_FILTER = {\n\tNearestFilter: NearestFilter,\n\tNearestMipMapNearestFilter: NearestMipMapNearestFilter,\n\tNearestMipMapLinearFilter: NearestMipMapLinearFilter,\n\tLinearFilter: LinearFilter,\n\tLinearMipMapNearestFilter: LinearMipMapNearestFilter,\n\tLinearMipMapLinearFilter: LinearMipMapLinearFilter\n};\n\n/**\n * @author thespite / http://clicktorelease.com/\n */\n\nfunction ImageBitmapLoader( manager ) {\n\n\tif ( typeof createImageBitmap === 'undefined' ) {\n\n\t\tconsole.warn( 'THREE.ImageBitmapLoader: createImageBitmap() not supported.' );\n\n\t}\n\n\tif ( typeof fetch === 'undefined' ) {\n\n\t\tconsole.warn( 'THREE.ImageBitmapLoader: fetch() not supported.' );\n\n\t}\n\n\tthis.manager = manager !== undefined ? manager : DefaultLoadingManager;\n\tthis.options = undefined;\n\n}\n\nImageBitmapLoader.prototype = {\n\n\tconstructor: ImageBitmapLoader,\n\n\tsetOptions: function setOptions( options ) {\n\n\t\tthis.options = options;\n\n\t\treturn this;\n\n\t},\n\n\tload: function load( url, onLoad, onProgress, onError ) {\n\n\t\tif ( url === undefined ) url = '';\n\n\t\tif ( this.path !== undefined ) url = this.path + url;\n\n\t\tvar scope = this;\n\n\t\tvar cached = Cache.get( url );\n\n\t\tif ( cached !== undefined ) {\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\tsetTimeout( function () {\n\n\t\t\t\tif ( onLoad ) onLoad( cached );\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, 0 );\n\n\t\t\treturn cached;\n\n\t\t}\n\n\t\tfetch( url ).then( function ( res ) {\n\n\t\t\treturn res.blob();\n\n\t\t} ).then( function ( blob ) {\n\n\t\t\treturn createImageBitmap( blob, scope.options );\n\n\t\t} ).then( function ( imageBitmap ) {\n\n\t\t\tCache.add( url, imageBitmap );\n\n\t\t\tif ( onLoad ) onLoad( imageBitmap );\n\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t} ).catch( function ( e ) {\n\n\t\t\tif ( onError ) onError( e );\n\n\t\t\tscope.manager.itemEnd( url );\n\t\t\tscope.manager.itemError( url );\n\n\t\t} );\n\n\t},\n\n\tsetCrossOrigin: function ( /* value */ ) {\n\n\t\treturn this;\n\n\t},\n\n\tsetPath: function ( value ) {\n\n\t\tthis.path = value;\n\t\treturn this;\n\n\t}\n\n};\n\n/**\n * @author zz85 / http://www.lab4games.net/zz85/blog\n * minimal class for proxing functions to Path. Replaces old \"extractSubpaths()\"\n **/\n\nfunction ShapePath() {\n\n\tthis.type = 'ShapePath';\n\n\tthis.color = new Color();\n\n\tthis.subPaths = [];\n\tthis.currentPath = null;\n\n}\n\nObject.assign( ShapePath.prototype, {\n\n\tmoveTo: function ( x, y ) {\n\n\t\tthis.currentPath = new Path();\n\t\tthis.subPaths.push( this.currentPath );\n\t\tthis.currentPath.moveTo( x, y );\n\n\t},\n\n\tlineTo: function ( x, y ) {\n\n\t\tthis.currentPath.lineTo( x, y );\n\n\t},\n\n\tquadraticCurveTo: function ( aCPx, aCPy, aX, aY ) {\n\n\t\tthis.currentPath.quadraticCurveTo( aCPx, aCPy, aX, aY );\n\n\t},\n\n\tbezierCurveTo: function ( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ) {\n\n\t\tthis.currentPath.bezierCurveTo( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY );\n\n\t},\n\n\tsplineThru: function ( pts ) {\n\n\t\tthis.currentPath.splineThru( pts );\n\n\t},\n\n\ttoShapes: function ( isCCW, noHoles ) {\n\n\t\tfunction toShapesNoHoles( inSubpaths ) {\n\n\t\t\tvar shapes = [];\n\n\t\t\tfor ( var i = 0, l = inSubpaths.length; i < l; i ++ ) {\n\n\t\t\t\tvar tmpPath = inSubpaths[ i ];\n\n\t\t\t\tvar tmpShape = new Shape();\n\t\t\t\ttmpShape.curves = tmpPath.curves;\n\n\t\t\t\tshapes.push( tmpShape );\n\n\t\t\t}\n\n\t\t\treturn shapes;\n\n\t\t}\n\n\t\tfunction isPointInsidePolygon( inPt, inPolygon ) {\n\n\t\t\tvar polyLen = inPolygon.length;\n\n\t\t\t// inPt on polygon contour => immediate success or\n\t\t\t// toggling of inside/outside at every single! intersection point of an edge\n\t\t\t// with the horizontal line through inPt, left of inPt\n\t\t\t// not counting lowerY endpoints of edges and whole edges on that line\n\t\t\tvar inside = false;\n\t\t\tfor ( var p = polyLen - 1, q = 0; q < polyLen; p = q ++ ) {\n\n\t\t\t\tvar edgeLowPt = inPolygon[ p ];\n\t\t\t\tvar edgeHighPt = inPolygon[ q ];\n\n\t\t\t\tvar edgeDx = edgeHighPt.x - edgeLowPt.x;\n\t\t\t\tvar edgeDy = edgeHighPt.y - edgeLowPt.y;\n\n\t\t\t\tif ( Math.abs( edgeDy ) > Number.EPSILON ) {\n\n\t\t\t\t\t// not parallel\n\t\t\t\t\tif ( edgeDy < 0 ) {\n\n\t\t\t\t\t\tedgeLowPt = inPolygon[ q ]; edgeDx = - edgeDx;\n\t\t\t\t\t\tedgeHighPt = inPolygon[ p ]; edgeDy = - edgeDy;\n\n\t\t\t\t\t}\n\t\t\t\t\tif ( ( inPt.y < edgeLowPt.y ) || ( inPt.y > edgeHighPt.y ) ) \t\tcontinue;\n\n\t\t\t\t\tif ( inPt.y === edgeLowPt.y ) {\n\n\t\t\t\t\t\tif ( inPt.x === edgeLowPt.x )\t\treturn\ttrue;\t\t// inPt is on contour ?\n\t\t\t\t\t\t// continue;\t\t\t\t// no intersection or edgeLowPt => doesn't count !!!\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tvar perpEdge = edgeDy * ( inPt.x - edgeLowPt.x ) - edgeDx * ( inPt.y - edgeLowPt.y );\n\t\t\t\t\t\tif ( perpEdge === 0 )\t\t\t\treturn\ttrue;\t\t// inPt is on contour ?\n\t\t\t\t\t\tif ( perpEdge < 0 ) \t\t\t\tcontinue;\n\t\t\t\t\t\tinside = ! inside;\t\t// true intersection left of inPt\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// parallel or collinear\n\t\t\t\t\tif ( inPt.y !== edgeLowPt.y ) \t\tcontinue;\t\t\t// parallel\n\t\t\t\t\t// edge lies on the same horizontal line as inPt\n\t\t\t\t\tif ( ( ( edgeHighPt.x <= inPt.x ) && ( inPt.x <= edgeLowPt.x ) ) ||\n\t\t\t\t\t\t ( ( edgeLowPt.x <= inPt.x ) && ( inPt.x <= edgeHighPt.x ) ) )\t\treturn\ttrue;\t// inPt: Point on contour !\n\t\t\t\t\t// continue;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn\tinside;\n\n\t\t}\n\n\t\tvar isClockWise = ShapeUtils.isClockWise;\n\n\t\tvar subPaths = this.subPaths;\n\t\tif ( subPaths.length === 0 ) return [];\n\n\t\tif ( noHoles === true )\treturn\ttoShapesNoHoles( subPaths );\n\n\n\t\tvar solid, tmpPath, tmpShape, shapes = [];\n\n\t\tif ( subPaths.length === 1 ) {\n\n\t\t\ttmpPath = subPaths[ 0 ];\n\t\t\ttmpShape = new Shape();\n\t\t\ttmpShape.curves = tmpPath.curves;\n\t\t\tshapes.push( tmpShape );\n\t\t\treturn shapes;\n\n\t\t}\n\n\t\tvar holesFirst = ! isClockWise( subPaths[ 0 ].getPoints() );\n\t\tholesFirst = isCCW ? ! holesFirst : holesFirst;\n\n\t\t// console.log(\"Holes first\", holesFirst);\n\n\t\tvar betterShapeHoles = [];\n\t\tvar newShapes = [];\n\t\tvar newShapeHoles = [];\n\t\tvar mainIdx = 0;\n\t\tvar tmpPoints;\n\n\t\tnewShapes[ mainIdx ] = undefined;\n\t\tnewShapeHoles[ mainIdx ] = [];\n\n\t\tfor ( var i = 0, l = subPaths.length; i < l; i ++ ) {\n\n\t\t\ttmpPath = subPaths[ i ];\n\t\t\ttmpPoints = tmpPath.getPoints();\n\t\t\tsolid = isClockWise( tmpPoints );\n\t\t\tsolid = isCCW ? ! solid : solid;\n\n\t\t\tif ( solid ) {\n\n\t\t\t\tif ( ( ! holesFirst ) && ( newShapes[ mainIdx ] ) )\tmainIdx ++;\n\n\t\t\t\tnewShapes[ mainIdx ] = { s: new Shape(), p: tmpPoints };\n\t\t\t\tnewShapes[ mainIdx ].s.curves = tmpPath.curves;\n\n\t\t\t\tif ( holesFirst )\tmainIdx ++;\n\t\t\t\tnewShapeHoles[ mainIdx ] = [];\n\n\t\t\t\t//console.log('cw', i);\n\n\t\t\t} else {\n\n\t\t\t\tnewShapeHoles[ mainIdx ].push( { h: tmpPath, p: tmpPoints[ 0 ] } );\n\n\t\t\t\t//console.log('ccw', i);\n\n\t\t\t}\n\n\t\t}\n\n\t\t// only Holes? -> probably all Shapes with wrong orientation\n\t\tif ( ! newShapes[ 0 ] )\treturn\ttoShapesNoHoles( subPaths );\n\n\n\t\tif ( newShapes.length > 1 ) {\n\n\t\t\tvar ambiguous = false;\n\t\t\tvar toChange = [];\n\n\t\t\tfor ( var sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) {\n\n\t\t\t\tbetterShapeHoles[ sIdx ] = [];\n\n\t\t\t}\n\n\t\t\tfor ( var sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) {\n\n\t\t\t\tvar sho = newShapeHoles[ sIdx ];\n\n\t\t\t\tfor ( var hIdx = 0; hIdx < sho.length; hIdx ++ ) {\n\n\t\t\t\t\tvar ho = sho[ hIdx ];\n\t\t\t\t\tvar hole_unassigned = true;\n\n\t\t\t\t\tfor ( var s2Idx = 0; s2Idx < newShapes.length; s2Idx ++ ) {\n\n\t\t\t\t\t\tif ( isPointInsidePolygon( ho.p, newShapes[ s2Idx ].p ) ) {\n\n\t\t\t\t\t\t\tif ( sIdx !== s2Idx )\ttoChange.push( { froms: sIdx, tos: s2Idx, hole: hIdx } );\n\t\t\t\t\t\t\tif ( hole_unassigned ) {\n\n\t\t\t\t\t\t\t\thole_unassigned = false;\n\t\t\t\t\t\t\t\tbetterShapeHoles[ s2Idx ].push( ho );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tambiguous = true;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\t\t\t\t\tif ( hole_unassigned ) {\n\n\t\t\t\t\t\tbetterShapeHoles[ sIdx ].push( ho );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\t\t\t// console.log(\"ambiguous: \", ambiguous);\n\t\t\tif ( toChange.length > 0 ) {\n\n\t\t\t\t// console.log(\"to change: \", toChange);\n\t\t\t\tif ( ! ambiguous )\tnewShapeHoles = betterShapeHoles;\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar tmpHoles;\n\n\t\tfor ( var i = 0, il = newShapes.length; i < il; i ++ ) {\n\n\t\t\ttmpShape = newShapes[ i ].s;\n\t\t\tshapes.push( tmpShape );\n\t\t\ttmpHoles = newShapeHoles[ i ];\n\n\t\t\tfor ( var j = 0, jl = tmpHoles.length; j < jl; j ++ ) {\n\n\t\t\t\ttmpShape.holes.push( tmpHoles[ j ].h );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//console.log(\"shape\", shapes);\n\n\t\treturn shapes;\n\n\t}\n\n} );\n\n/**\n * @author zz85 / http://www.lab4games.net/zz85/blog\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction Font( data ) {\n\n\tthis.type = 'Font';\n\n\tthis.data = data;\n\n}\n\nObject.assign( Font.prototype, {\n\n\tisFont: true,\n\n\tgenerateShapes: function ( text, size, divisions ) {\n\n\t\tif ( size === undefined ) size = 100;\n\t\tif ( divisions === undefined ) divisions = 4;\n\n\t\tvar shapes = [];\n\t\tvar paths = createPaths( text, size, divisions, this.data );\n\n\t\tfor ( var p = 0, pl = paths.length; p < pl; p ++ ) {\n\n\t\t\tArray.prototype.push.apply( shapes, paths[ p ].toShapes() );\n\n\t\t}\n\n\t\treturn shapes;\n\n\t}\n\n} );\n\nfunction createPaths( text, size, divisions, data ) {\n\n\tvar chars = String( text ).split( '' );\n\tvar scale = size / data.resolution;\n\tvar line_height = ( data.boundingBox.yMax - data.boundingBox.yMin + data.underlineThickness ) * scale;\n\n\tvar paths = [];\n\n\tvar offsetX = 0, offsetY = 0;\n\n\tfor ( var i = 0; i < chars.length; i ++ ) {\n\n\t\tvar char = chars[ i ];\n\n\t\tif ( char === '\\n' ) {\n\n\t\t\toffsetX = 0;\n\t\t\toffsetY -= line_height;\n\n\t\t} else {\n\n\t\t\tvar ret = createPath( char, divisions, scale, offsetX, offsetY, data );\n\t\t\toffsetX += ret.offsetX;\n\t\t\tpaths.push( ret.path );\n\n\t\t}\n\n\t}\n\n\treturn paths;\n\n}\n\nfunction createPath( char, divisions, scale, offsetX, offsetY, data ) {\n\n\tvar glyph = data.glyphs[ char ] || data.glyphs[ '?' ];\n\n\tif ( ! glyph ) return;\n\n\tvar path = new ShapePath();\n\n\tvar x, y, cpx, cpy, cpx1, cpy1, cpx2, cpy2;\n\n\tif ( glyph.o ) {\n\n\t\tvar outline = glyph._cachedOutline || ( glyph._cachedOutline = glyph.o.split( ' ' ) );\n\n\t\tfor ( var i = 0, l = outline.length; i < l; ) {\n\n\t\t\tvar action = outline[ i ++ ];\n\n\t\t\tswitch ( action ) {\n\n\t\t\t\tcase 'm': // moveTo\n\n\t\t\t\t\tx = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\ty = outline[ i ++ ] * scale + offsetY;\n\n\t\t\t\t\tpath.moveTo( x, y );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'l': // lineTo\n\n\t\t\t\t\tx = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\ty = outline[ i ++ ] * scale + offsetY;\n\n\t\t\t\t\tpath.lineTo( x, y );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'q': // quadraticCurveTo\n\n\t\t\t\t\tcpx = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\tcpy = outline[ i ++ ] * scale + offsetY;\n\t\t\t\t\tcpx1 = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\tcpy1 = outline[ i ++ ] * scale + offsetY;\n\n\t\t\t\t\tpath.quadraticCurveTo( cpx1, cpy1, cpx, cpy );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'b': // bezierCurveTo\n\n\t\t\t\t\tcpx = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\tcpy = outline[ i ++ ] * scale + offsetY;\n\t\t\t\t\tcpx1 = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\tcpy1 = outline[ i ++ ] * scale + offsetY;\n\t\t\t\t\tcpx2 = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\tcpy2 = outline[ i ++ ] * scale + offsetY;\n\n\t\t\t\t\tpath.bezierCurveTo( cpx1, cpy1, cpx2, cpy2, cpx, cpy );\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn { offsetX: glyph.ha * scale, path: path };\n\n}\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction FontLoader( manager ) {\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n}\n\nObject.assign( FontLoader.prototype, {\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar scope = this;\n\n\t\tvar loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\tvar json;\n\n\t\t\ttry {\n\n\t\t\t\tjson = JSON.parse( text );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tconsole.warn( 'THREE.FontLoader: typeface.js support is being deprecated. Use typeface.json instead.' );\n\t\t\t\tjson = JSON.parse( text.substring( 65, text.length - 2 ) );\n\n\t\t\t}\n\n\t\t\tvar font = scope.parse( json );\n\n\t\t\tif ( onLoad ) onLoad( font );\n\n\t\t}, onProgress, onError );\n\n\t},\n\n\tparse: function ( json ) {\n\n\t\treturn new Font( json );\n\n\t},\n\n\tsetPath: function ( value ) {\n\n\t\tthis.path = value;\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nvar context;\n\nvar AudioContext = {\n\n\tgetContext: function () {\n\n\t\tif ( context === undefined ) {\n\n\t\t\tcontext = new ( window.AudioContext || window.webkitAudioContext )();\n\n\t\t}\n\n\t\treturn context;\n\n\t},\n\n\tsetContext: function ( value ) {\n\n\t\tcontext = value;\n\n\t}\n\n};\n\n/**\n * @author Reece Aaron Lecrivain / http://reecenotes.com/\n */\n\nfunction AudioLoader( manager ) {\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n}\n\nObject.assign( AudioLoader.prototype, {\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar loader = new FileLoader( this.manager );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.load( url, function ( buffer ) {\n\n\t\t\tvar context = AudioContext.getContext();\n\n\t\t\tcontext.decodeAudioData( buffer, function ( audioBuffer ) {\n\n\t\t\t\tonLoad( audioBuffer );\n\n\t\t\t} );\n\n\t\t}, onProgress, onError );\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction StereoCamera() {\n\n\tthis.type = 'StereoCamera';\n\n\tthis.aspect = 1;\n\n\tthis.eyeSep = 0.064;\n\n\tthis.cameraL = new PerspectiveCamera();\n\tthis.cameraL.layers.enable( 1 );\n\tthis.cameraL.matrixAutoUpdate = false;\n\n\tthis.cameraR = new PerspectiveCamera();\n\tthis.cameraR.layers.enable( 2 );\n\tthis.cameraR.matrixAutoUpdate = false;\n\n}\n\nObject.assign( StereoCamera.prototype, {\n\n\tupdate: ( function () {\n\n\t\tvar instance, focus, fov, aspect, near, far, zoom, eyeSep;\n\n\t\tvar eyeRight = new Matrix4();\n\t\tvar eyeLeft = new Matrix4();\n\n\t\treturn function update( camera ) {\n\n\t\t\tvar needsUpdate = instance !== this || focus !== camera.focus || fov !== camera.fov ||\n\t\t\t\t\t\t\t\t\t\t\t\taspect !== camera.aspect * this.aspect || near !== camera.near ||\n\t\t\t\t\t\t\t\t\t\t\t\tfar !== camera.far || zoom !== camera.zoom || eyeSep !== this.eyeSep;\n\n\t\t\tif ( needsUpdate ) {\n\n\t\t\t\tinstance = this;\n\t\t\t\tfocus = camera.focus;\n\t\t\t\tfov = camera.fov;\n\t\t\t\taspect = camera.aspect * this.aspect;\n\t\t\t\tnear = camera.near;\n\t\t\t\tfar = camera.far;\n\t\t\t\tzoom = camera.zoom;\n\n\t\t\t\t// Off-axis stereoscopic effect based on\n\t\t\t\t// http://paulbourke.net/stereographics/stereorender/\n\n\t\t\t\tvar projectionMatrix = camera.projectionMatrix.clone();\n\t\t\t\teyeSep = this.eyeSep / 2;\n\t\t\t\tvar eyeSepOnProjection = eyeSep * near / focus;\n\t\t\t\tvar ymax = ( near * Math.tan( _Math.DEG2RAD * fov * 0.5 ) ) / zoom;\n\t\t\t\tvar xmin, xmax;\n\n\t\t\t\t// translate xOffset\n\n\t\t\t\teyeLeft.elements[ 12 ] = - eyeSep;\n\t\t\t\teyeRight.elements[ 12 ] = eyeSep;\n\n\t\t\t\t// for left eye\n\n\t\t\t\txmin = - ymax * aspect + eyeSepOnProjection;\n\t\t\t\txmax = ymax * aspect + eyeSepOnProjection;\n\n\t\t\t\tprojectionMatrix.elements[ 0 ] = 2 * near / ( xmax - xmin );\n\t\t\t\tprojectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin );\n\n\t\t\t\tthis.cameraL.projectionMatrix.copy( projectionMatrix );\n\n\t\t\t\t// for right eye\n\n\t\t\t\txmin = - ymax * aspect - eyeSepOnProjection;\n\t\t\t\txmax = ymax * aspect - eyeSepOnProjection;\n\n\t\t\t\tprojectionMatrix.elements[ 0 ] = 2 * near / ( xmax - xmin );\n\t\t\t\tprojectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin );\n\n\t\t\t\tthis.cameraR.projectionMatrix.copy( projectionMatrix );\n\n\t\t\t}\n\n\t\t\tthis.cameraL.matrixWorld.copy( camera.matrixWorld ).multiply( eyeLeft );\n\t\t\tthis.cameraR.matrixWorld.copy( camera.matrixWorld ).multiply( eyeRight );\n\n\t\t};\n\n\t} )()\n\n} );\n\n/**\n * Camera for rendering cube maps\n *\t- renders scene into axis-aligned cube\n *\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction CubeCamera( near, far, cubeResolution ) {\n\n\tObject3D.call( this );\n\n\tthis.type = 'CubeCamera';\n\n\tvar fov = 90, aspect = 1;\n\n\tvar cameraPX = new PerspectiveCamera( fov, aspect, near, far );\n\tcameraPX.up.set( 0, - 1, 0 );\n\tcameraPX.lookAt( new Vector3( 1, 0, 0 ) );\n\tthis.add( cameraPX );\n\n\tvar cameraNX = new PerspectiveCamera( fov, aspect, near, far );\n\tcameraNX.up.set( 0, - 1, 0 );\n\tcameraNX.lookAt( new Vector3( - 1, 0, 0 ) );\n\tthis.add( cameraNX );\n\n\tvar cameraPY = new PerspectiveCamera( fov, aspect, near, far );\n\tcameraPY.up.set( 0, 0, 1 );\n\tcameraPY.lookAt( new Vector3( 0, 1, 0 ) );\n\tthis.add( cameraPY );\n\n\tvar cameraNY = new PerspectiveCamera( fov, aspect, near, far );\n\tcameraNY.up.set( 0, 0, - 1 );\n\tcameraNY.lookAt( new Vector3( 0, - 1, 0 ) );\n\tthis.add( cameraNY );\n\n\tvar cameraPZ = new PerspectiveCamera( fov, aspect, near, far );\n\tcameraPZ.up.set( 0, - 1, 0 );\n\tcameraPZ.lookAt( new Vector3( 0, 0, 1 ) );\n\tthis.add( cameraPZ );\n\n\tvar cameraNZ = new PerspectiveCamera( fov, aspect, near, far );\n\tcameraNZ.up.set( 0, - 1, 0 );\n\tcameraNZ.lookAt( new Vector3( 0, 0, - 1 ) );\n\tthis.add( cameraNZ );\n\n\tvar options = { format: RGBFormat, magFilter: LinearFilter, minFilter: LinearFilter };\n\n\tthis.renderTarget = new WebGLRenderTargetCube( cubeResolution, cubeResolution, options );\n\tthis.renderTarget.texture.name = \"CubeCamera\";\n\n\tthis.update = function ( renderer, scene ) {\n\n\t\tif ( this.parent === null ) this.updateMatrixWorld();\n\n\t\tvar renderTarget = this.renderTarget;\n\t\tvar generateMipmaps = renderTarget.texture.generateMipmaps;\n\n\t\trenderTarget.texture.generateMipmaps = false;\n\n\t\trenderTarget.activeCubeFace = 0;\n\t\trenderer.render( scene, cameraPX, renderTarget );\n\n\t\trenderTarget.activeCubeFace = 1;\n\t\trenderer.render( scene, cameraNX, renderTarget );\n\n\t\trenderTarget.activeCubeFace = 2;\n\t\trenderer.render( scene, cameraPY, renderTarget );\n\n\t\trenderTarget.activeCubeFace = 3;\n\t\trenderer.render( scene, cameraNY, renderTarget );\n\n\t\trenderTarget.activeCubeFace = 4;\n\t\trenderer.render( scene, cameraPZ, renderTarget );\n\n\t\trenderTarget.texture.generateMipmaps = generateMipmaps;\n\n\t\trenderTarget.activeCubeFace = 5;\n\t\trenderer.render( scene, cameraNZ, renderTarget );\n\n\t\trenderer.setRenderTarget( null );\n\n\t};\n\n\tthis.clear = function ( renderer, color, depth, stencil ) {\n\n\t\tvar renderTarget = this.renderTarget;\n\n\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\trenderTarget.activeCubeFace = i;\n\t\t\trenderer.setRenderTarget( renderTarget );\n\n\t\t\trenderer.clear( color, depth, stencil );\n\n\t\t}\n\n\t\trenderer.setRenderTarget( null );\n\n\t};\n\n}\n\nCubeCamera.prototype = Object.create( Object3D.prototype );\nCubeCamera.prototype.constructor = CubeCamera;\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction AudioListener() {\n\n\tObject3D.call( this );\n\n\tthis.type = 'AudioListener';\n\n\tthis.context = AudioContext.getContext();\n\n\tthis.gain = this.context.createGain();\n\tthis.gain.connect( this.context.destination );\n\n\tthis.filter = null;\n\n}\n\nAudioListener.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: AudioListener,\n\n\tgetInput: function () {\n\n\t\treturn this.gain;\n\n\t},\n\n\tremoveFilter: function ( ) {\n\n\t\tif ( this.filter !== null ) {\n\n\t\t\tthis.gain.disconnect( this.filter );\n\t\t\tthis.filter.disconnect( this.context.destination );\n\t\t\tthis.gain.connect( this.context.destination );\n\t\t\tthis.filter = null;\n\n\t\t}\n\n\t},\n\n\tgetFilter: function () {\n\n\t\treturn this.filter;\n\n\t},\n\n\tsetFilter: function ( value ) {\n\n\t\tif ( this.filter !== null ) {\n\n\t\t\tthis.gain.disconnect( this.filter );\n\t\t\tthis.filter.disconnect( this.context.destination );\n\n\t\t} else {\n\n\t\t\tthis.gain.disconnect( this.context.destination );\n\n\t\t}\n\n\t\tthis.filter = value;\n\t\tthis.gain.connect( this.filter );\n\t\tthis.filter.connect( this.context.destination );\n\n\t},\n\n\tgetMasterVolume: function () {\n\n\t\treturn this.gain.gain.value;\n\n\t},\n\n\tsetMasterVolume: function ( value ) {\n\n\t\tthis.gain.gain.setTargetAtTime( value, this.context.currentTime, 0.01 );\n\n\t},\n\n\tupdateMatrixWorld: ( function () {\n\n\t\tvar position = new Vector3();\n\t\tvar quaternion = new Quaternion();\n\t\tvar scale = new Vector3();\n\n\t\tvar orientation = new Vector3();\n\n\t\treturn function updateMatrixWorld( force ) {\n\n\t\t\tObject3D.prototype.updateMatrixWorld.call( this, force );\n\n\t\t\tvar listener = this.context.listener;\n\t\t\tvar up = this.up;\n\n\t\t\tthis.matrixWorld.decompose( position, quaternion, scale );\n\n\t\t\torientation.set( 0, 0, - 1 ).applyQuaternion( quaternion );\n\n\t\t\tif ( listener.positionX ) {\n\n\t\t\t\tlistener.positionX.setValueAtTime( position.x, this.context.currentTime );\n\t\t\t\tlistener.positionY.setValueAtTime( position.y, this.context.currentTime );\n\t\t\t\tlistener.positionZ.setValueAtTime( position.z, this.context.currentTime );\n\t\t\t\tlistener.forwardX.setValueAtTime( orientation.x, this.context.currentTime );\n\t\t\t\tlistener.forwardY.setValueAtTime( orientation.y, this.context.currentTime );\n\t\t\t\tlistener.forwardZ.setValueAtTime( orientation.z, this.context.currentTime );\n\t\t\t\tlistener.upX.setValueAtTime( up.x, this.context.currentTime );\n\t\t\t\tlistener.upY.setValueAtTime( up.y, this.context.currentTime );\n\t\t\t\tlistener.upZ.setValueAtTime( up.z, this.context.currentTime );\n\n\t\t\t} else {\n\n\t\t\t\tlistener.setPosition( position.x, position.y, position.z );\n\t\t\t\tlistener.setOrientation( orientation.x, orientation.y, orientation.z, up.x, up.y, up.z );\n\n\t\t\t}\n\n\t\t};\n\n\t} )()\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author Reece Aaron Lecrivain / http://reecenotes.com/\n */\n\nfunction Audio( listener ) {\n\n\tObject3D.call( this );\n\n\tthis.type = 'Audio';\n\n\tthis.context = listener.context;\n\n\tthis.gain = this.context.createGain();\n\tthis.gain.connect( listener.getInput() );\n\n\tthis.autoplay = false;\n\n\tthis.buffer = null;\n\tthis.loop = false;\n\tthis.startTime = 0;\n\tthis.offset = 0;\n\tthis.playbackRate = 1;\n\tthis.isPlaying = false;\n\tthis.hasPlaybackControl = true;\n\tthis.sourceType = 'empty';\n\n\tthis.filters = [];\n\n}\n\nAudio.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Audio,\n\n\tgetOutput: function () {\n\n\t\treturn this.gain;\n\n\t},\n\n\tsetNodeSource: function ( audioNode ) {\n\n\t\tthis.hasPlaybackControl = false;\n\t\tthis.sourceType = 'audioNode';\n\t\tthis.source = audioNode;\n\t\tthis.connect();\n\n\t\treturn this;\n\n\t},\n\n\tsetBuffer: function ( audioBuffer ) {\n\n\t\tthis.buffer = audioBuffer;\n\t\tthis.sourceType = 'buffer';\n\n\t\tif ( this.autoplay ) this.play();\n\n\t\treturn this;\n\n\t},\n\n\tplay: function () {\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: Audio is already playing.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tvar source = this.context.createBufferSource();\n\n\t\tsource.buffer = this.buffer;\n\t\tsource.loop = this.loop;\n\t\tsource.onended = this.onEnded.bind( this );\n\t\tsource.playbackRate.setValueAtTime( this.playbackRate, this.startTime );\n\t\tthis.startTime = this.context.currentTime;\n\t\tsource.start( this.startTime, this.offset );\n\n\t\tthis.isPlaying = true;\n\n\t\tthis.source = source;\n\n\t\treturn this.connect();\n\n\t},\n\n\tpause: function () {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tthis.source.stop();\n\t\t\tthis.offset += ( this.context.currentTime - this.startTime ) * this.playbackRate;\n\t\t\tthis.isPlaying = false;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tstop: function () {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis.source.stop();\n\t\tthis.offset = 0;\n\t\tthis.isPlaying = false;\n\n\t\treturn this;\n\n\t},\n\n\tconnect: function () {\n\n\t\tif ( this.filters.length > 0 ) {\n\n\t\t\tthis.source.connect( this.filters[ 0 ] );\n\n\t\t\tfor ( var i = 1, l = this.filters.length; i < l; i ++ ) {\n\n\t\t\t\tthis.filters[ i - 1 ].connect( this.filters[ i ] );\n\n\t\t\t}\n\n\t\t\tthis.filters[ this.filters.length - 1 ].connect( this.getOutput() );\n\n\t\t} else {\n\n\t\t\tthis.source.connect( this.getOutput() );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tdisconnect: function () {\n\n\t\tif ( this.filters.length > 0 ) {\n\n\t\t\tthis.source.disconnect( this.filters[ 0 ] );\n\n\t\t\tfor ( var i = 1, l = this.filters.length; i < l; i ++ ) {\n\n\t\t\t\tthis.filters[ i - 1 ].disconnect( this.filters[ i ] );\n\n\t\t\t}\n\n\t\t\tthis.filters[ this.filters.length - 1 ].disconnect( this.getOutput() );\n\n\t\t} else {\n\n\t\t\tthis.source.disconnect( this.getOutput() );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tgetFilters: function () {\n\n\t\treturn this.filters;\n\n\t},\n\n\tsetFilters: function ( value ) {\n\n\t\tif ( ! value ) value = [];\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tthis.disconnect();\n\t\t\tthis.filters = value;\n\t\t\tthis.connect();\n\n\t\t} else {\n\n\t\t\tthis.filters = value;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tgetFilter: function () {\n\n\t\treturn this.getFilters()[ 0 ];\n\n\t},\n\n\tsetFilter: function ( filter ) {\n\n\t\treturn this.setFilters( filter ? [ filter ] : [] );\n\n\t},\n\n\tsetPlaybackRate: function ( value ) {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis.playbackRate = value;\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tthis.source.playbackRate.setValueAtTime( this.playbackRate, this.context.currentTime );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tgetPlaybackRate: function () {\n\n\t\treturn this.playbackRate;\n\n\t},\n\n\tonEnded: function () {\n\n\t\tthis.isPlaying = false;\n\n\t},\n\n\tgetLoop: function () {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn false;\n\n\t\t}\n\n\t\treturn this.loop;\n\n\t},\n\n\tsetLoop: function ( value ) {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis.loop = value;\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tthis.source.loop = this.loop;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tgetVolume: function () {\n\n\t\treturn this.gain.gain.value;\n\n\t},\n\n\tsetVolume: function ( value ) {\n\n\t\tthis.gain.gain.setTargetAtTime( value, this.context.currentTime, 0.01 );\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction PositionalAudio( listener ) {\n\n\tAudio.call( this, listener );\n\n\tthis.panner = this.context.createPanner();\n\tthis.panner.connect( this.gain );\n\n}\n\nPositionalAudio.prototype = Object.assign( Object.create( Audio.prototype ), {\n\n\tconstructor: PositionalAudio,\n\n\tgetOutput: function () {\n\n\t\treturn this.panner;\n\n\t},\n\n\tgetRefDistance: function () {\n\n\t\treturn this.panner.refDistance;\n\n\t},\n\n\tsetRefDistance: function ( value ) {\n\n\t\tthis.panner.refDistance = value;\n\n\t},\n\n\tgetRolloffFactor: function () {\n\n\t\treturn this.panner.rolloffFactor;\n\n\t},\n\n\tsetRolloffFactor: function ( value ) {\n\n\t\tthis.panner.rolloffFactor = value;\n\n\t},\n\n\tgetDistanceModel: function () {\n\n\t\treturn this.panner.distanceModel;\n\n\t},\n\n\tsetDistanceModel: function ( value ) {\n\n\t\tthis.panner.distanceModel = value;\n\n\t},\n\n\tgetMaxDistance: function () {\n\n\t\treturn this.panner.maxDistance;\n\n\t},\n\n\tsetMaxDistance: function ( value ) {\n\n\t\tthis.panner.maxDistance = value;\n\n\t},\n\n\tupdateMatrixWorld: ( function () {\n\n\t\tvar position = new Vector3();\n\n\t\treturn function updateMatrixWorld( force ) {\n\n\t\t\tObject3D.prototype.updateMatrixWorld.call( this, force );\n\n\t\t\tposition.setFromMatrixPosition( this.matrixWorld );\n\n\t\t\tthis.panner.setPosition( position.x, position.y, position.z );\n\n\t\t};\n\n\t} )()\n\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction AudioAnalyser( audio, fftSize ) {\n\n\tthis.analyser = audio.context.createAnalyser();\n\tthis.analyser.fftSize = fftSize !== undefined ? fftSize : 2048;\n\n\tthis.data = new Uint8Array( this.analyser.frequencyBinCount );\n\n\taudio.getOutput().connect( this.analyser );\n\n}\n\nObject.assign( AudioAnalyser.prototype, {\n\n\tgetFrequencyData: function () {\n\n\t\tthis.analyser.getByteFrequencyData( this.data );\n\n\t\treturn this.data;\n\n\t},\n\n\tgetAverageFrequency: function () {\n\n\t\tvar value = 0, data = this.getFrequencyData();\n\n\t\tfor ( var i = 0; i < data.length; i ++ ) {\n\n\t\t\tvalue += data[ i ];\n\n\t\t}\n\n\t\treturn value / data.length;\n\n\t}\n\n} );\n\n/**\n *\n * Buffered scene graph property that allows weighted accumulation.\n *\n *\n * @author Ben Houston / http://clara.io/\n * @author David Sarno / http://lighthaus.us/\n * @author tschw\n */\n\nfunction PropertyMixer( binding, typeName, valueSize ) {\n\n\tthis.binding = binding;\n\tthis.valueSize = valueSize;\n\n\tvar bufferType = Float64Array,\n\t\tmixFunction;\n\n\tswitch ( typeName ) {\n\n\t\tcase 'quaternion':\n\t\t\tmixFunction = this._slerp;\n\t\t\tbreak;\n\n\t\tcase 'string':\n\t\tcase 'bool':\n\t\t\tbufferType = Array;\n\t\t\tmixFunction = this._select;\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tmixFunction = this._lerp;\n\n\t}\n\n\tthis.buffer = new bufferType( valueSize * 4 );\n\t// layout: [ incoming | accu0 | accu1 | orig ]\n\t//\n\t// interpolators can use .buffer as their .result\n\t// the data then goes to 'incoming'\n\t//\n\t// 'accu0' and 'accu1' are used frame-interleaved for\n\t// the cumulative result and are compared to detect\n\t// changes\n\t//\n\t// 'orig' stores the original state of the property\n\n\tthis._mixBufferRegion = mixFunction;\n\n\tthis.cumulativeWeight = 0;\n\n\tthis.useCount = 0;\n\tthis.referenceCount = 0;\n\n}\n\nObject.assign( PropertyMixer.prototype, {\n\n\t// accumulate data in the 'incoming' region into 'accu'\n\taccumulate: function ( accuIndex, weight ) {\n\n\t\t// note: happily accumulating nothing when weight = 0, the caller knows\n\t\t// the weight and shouldn't have made the call in the first place\n\n\t\tvar buffer = this.buffer,\n\t\t\tstride = this.valueSize,\n\t\t\toffset = accuIndex * stride + stride,\n\n\t\t\tcurrentWeight = this.cumulativeWeight;\n\n\t\tif ( currentWeight === 0 ) {\n\n\t\t\t// accuN := incoming * weight\n\n\t\t\tfor ( var i = 0; i !== stride; ++ i ) {\n\n\t\t\t\tbuffer[ offset + i ] = buffer[ i ];\n\n\t\t\t}\n\n\t\t\tcurrentWeight = weight;\n\n\t\t} else {\n\n\t\t\t// accuN := accuN + incoming * weight\n\n\t\t\tcurrentWeight += weight;\n\t\t\tvar mix = weight / currentWeight;\n\t\t\tthis._mixBufferRegion( buffer, offset, 0, mix, stride );\n\n\t\t}\n\n\t\tthis.cumulativeWeight = currentWeight;\n\n\t},\n\n\t// apply the state of 'accu' to the binding when accus differ\n\tapply: function ( accuIndex ) {\n\n\t\tvar stride = this.valueSize,\n\t\t\tbuffer = this.buffer,\n\t\t\toffset = accuIndex * stride + stride,\n\n\t\t\tweight = this.cumulativeWeight,\n\n\t\t\tbinding = this.binding;\n\n\t\tthis.cumulativeWeight = 0;\n\n\t\tif ( weight < 1 ) {\n\n\t\t\t// accuN := accuN + original * ( 1 - cumulativeWeight )\n\n\t\t\tvar originalValueOffset = stride * 3;\n\n\t\t\tthis._mixBufferRegion(\n\t\t\t\tbuffer, offset, originalValueOffset, 1 - weight, stride );\n\n\t\t}\n\n\t\tfor ( var i = stride, e = stride + stride; i !== e; ++ i ) {\n\n\t\t\tif ( buffer[ i ] !== buffer[ i + stride ] ) {\n\n\t\t\t\t// value has changed -> update scene graph\n\n\t\t\t\tbinding.setValue( buffer, offset );\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\t// remember the state of the bound property and copy it to both accus\n\tsaveOriginalState: function () {\n\n\t\tvar binding = this.binding;\n\n\t\tvar buffer = this.buffer,\n\t\t\tstride = this.valueSize,\n\n\t\t\toriginalValueOffset = stride * 3;\n\n\t\tbinding.getValue( buffer, originalValueOffset );\n\n\t\t// accu[0..1] := orig -- initially detect changes against the original\n\t\tfor ( var i = stride, e = originalValueOffset; i !== e; ++ i ) {\n\n\t\t\tbuffer[ i ] = buffer[ originalValueOffset + ( i % stride ) ];\n\n\t\t}\n\n\t\tthis.cumulativeWeight = 0;\n\n\t},\n\n\t// apply the state previously taken via 'saveOriginalState' to the binding\n\trestoreOriginalState: function () {\n\n\t\tvar originalValueOffset = this.valueSize * 3;\n\t\tthis.binding.setValue( this.buffer, originalValueOffset );\n\n\t},\n\n\n\t// mix functions\n\n\t_select: function ( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\tif ( t >= 0.5 ) {\n\n\t\t\tfor ( var i = 0; i !== stride; ++ i ) {\n\n\t\t\t\tbuffer[ dstOffset + i ] = buffer[ srcOffset + i ];\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\t_slerp: function ( buffer, dstOffset, srcOffset, t ) {\n\n\t\tQuaternion.slerpFlat( buffer, dstOffset, buffer, dstOffset, buffer, srcOffset, t );\n\n\t},\n\n\t_lerp: function ( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\tvar s = 1 - t;\n\n\t\tfor ( var i = 0; i !== stride; ++ i ) {\n\n\t\t\tvar j = dstOffset + i;\n\n\t\t\tbuffer[ j ] = buffer[ j ] * s + buffer[ srcOffset + i ] * t;\n\n\t\t}\n\n\t}\n\n} );\n\n/**\n *\n * A reference to a real property in the scene graph.\n *\n *\n * @author Ben Houston / http://clara.io/\n * @author David Sarno / http://lighthaus.us/\n * @author tschw\n */\n\n// Characters [].:/ are reserved for track binding syntax.\nvar RESERVED_CHARS_RE = '\\\\[\\\\]\\\\.:\\\\/';\n\nfunction Composite( targetGroup, path, optionalParsedPath ) {\n\n\tvar parsedPath = optionalParsedPath || PropertyBinding.parseTrackName( path );\n\n\tthis._targetGroup = targetGroup;\n\tthis._bindings = targetGroup.subscribe_( path, parsedPath );\n\n}\n\nObject.assign( Composite.prototype, {\n\n\tgetValue: function ( array, offset ) {\n\n\t\tthis.bind(); // bind all binding\n\n\t\tvar firstValidIndex = this._targetGroup.nCachedObjects_,\n\t\t\tbinding = this._bindings[ firstValidIndex ];\n\n\t\t// and only call .getValue on the first\n\t\tif ( binding !== undefined ) binding.getValue( array, offset );\n\n\t},\n\n\tsetValue: function ( array, offset ) {\n\n\t\tvar bindings = this._bindings;\n\n\t\tfor ( var i = this._targetGroup.nCachedObjects_,\n\t\t\t\t n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tbindings[ i ].setValue( array, offset );\n\n\t\t}\n\n\t},\n\n\tbind: function () {\n\n\t\tvar bindings = this._bindings;\n\n\t\tfor ( var i = this._targetGroup.nCachedObjects_,\n\t\t\t\t n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tbindings[ i ].bind();\n\n\t\t}\n\n\t},\n\n\tunbind: function () {\n\n\t\tvar bindings = this._bindings;\n\n\t\tfor ( var i = this._targetGroup.nCachedObjects_,\n\t\t\t\t n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tbindings[ i ].unbind();\n\n\t\t}\n\n\t}\n\n} );\n\n\nfunction PropertyBinding( rootNode, path, parsedPath ) {\n\n\tthis.path = path;\n\tthis.parsedPath = parsedPath || PropertyBinding.parseTrackName( path );\n\n\tthis.node = PropertyBinding.findNode( rootNode, this.parsedPath.nodeName ) || rootNode;\n\n\tthis.rootNode = rootNode;\n\n}\n\nObject.assign( PropertyBinding, {\n\n\tComposite: Composite,\n\n\tcreate: function ( root, path, parsedPath ) {\n\n\t\tif ( ! ( root && root.isAnimationObjectGroup ) ) {\n\n\t\t\treturn new PropertyBinding( root, path, parsedPath );\n\n\t\t} else {\n\n\t\t\treturn new PropertyBinding.Composite( root, path, parsedPath );\n\n\t\t}\n\n\t},\n\n\t/**\n\t * Replaces spaces with underscores and removes unsupported characters from\n\t * node names, to ensure compatibility with parseTrackName().\n\t *\n\t * @param {string} name Node name to be sanitized.\n\t * @return {string}\n\t */\n\tsanitizeNodeName: ( function () {\n\n\t\tvar reservedRe = new RegExp( '[' + RESERVED_CHARS_RE + ']', 'g' );\n\n\t\treturn function sanitizeNodeName( name ) {\n\n\t\t\treturn name.replace( /\\s/g, '_' ).replace( reservedRe, '' );\n\n\t\t};\n\n\t}() ),\n\n\tparseTrackName: function () {\n\n\t\t// Attempts to allow node names from any language. ES5's `\\w` regexp matches\n\t\t// only latin characters, and the unicode \\p{L} is not yet supported. So\n\t\t// instead, we exclude reserved characters and match everything else.\n\t\tvar wordChar = '[^' + RESERVED_CHARS_RE + ']';\n\t\tvar wordCharOrDot = '[^' + RESERVED_CHARS_RE.replace( '\\\\.', '' ) + ']';\n\n\t\t// Parent directories, delimited by '/' or ':'. Currently unused, but must\n\t\t// be matched to parse the rest of the track name.\n\t\tvar directoryRe = /((?:WC+[\\/:])*)/.source.replace( 'WC', wordChar );\n\n\t\t// Target node. May contain word characters (a-zA-Z0-9_) and '.' or '-'.\n\t\tvar nodeRe = /(WCOD+)?/.source.replace( 'WCOD', wordCharOrDot );\n\n\t\t// Object on target node, and accessor. May not contain reserved\n\t\t// characters. Accessor may contain any character except closing bracket.\n\t\tvar objectRe = /(?:\\.(WC+)(?:\\[(.+)\\])?)?/.source.replace( 'WC', wordChar );\n\n\t\t// Property and accessor. May not contain reserved characters. Accessor may\n\t\t// contain any non-bracket characters.\n\t\tvar propertyRe = /\\.(WC+)(?:\\[(.+)\\])?/.source.replace( 'WC', wordChar );\n\n\t\tvar trackRe = new RegExp( ''\n\t\t\t+ '^'\n\t\t\t+ directoryRe\n\t\t\t+ nodeRe\n\t\t\t+ objectRe\n\t\t\t+ propertyRe\n\t\t\t+ '$'\n\t\t);\n\n\t\tvar supportedObjectNames = [ 'material', 'materials', 'bones' ];\n\n\t\treturn function parseTrackName( trackName ) {\n\n\t\t\tvar matches = trackRe.exec( trackName );\n\n\t\t\tif ( ! matches ) {\n\n\t\t\t\tthrow new Error( 'PropertyBinding: Cannot parse trackName: ' + trackName );\n\n\t\t\t}\n\n\t\t\tvar results = {\n\t\t\t\t// directoryName: matches[ 1 ], // (tschw) currently unused\n\t\t\t\tnodeName: matches[ 2 ],\n\t\t\t\tobjectName: matches[ 3 ],\n\t\t\t\tobjectIndex: matches[ 4 ],\n\t\t\t\tpropertyName: matches[ 5 ], // required\n\t\t\t\tpropertyIndex: matches[ 6 ]\n\t\t\t};\n\n\t\t\tvar lastDot = results.nodeName && results.nodeName.lastIndexOf( '.' );\n\n\t\t\tif ( lastDot !== undefined && lastDot !== - 1 ) {\n\n\t\t\t\tvar objectName = results.nodeName.substring( lastDot + 1 );\n\n\t\t\t\t// Object names must be checked against a whitelist. Otherwise, there\n\t\t\t\t// is no way to parse 'foo.bar.baz': 'baz' must be a property, but\n\t\t\t\t// 'bar' could be the objectName, or part of a nodeName (which can\n\t\t\t\t// include '.' characters).\n\t\t\t\tif ( supportedObjectNames.indexOf( objectName ) !== - 1 ) {\n\n\t\t\t\t\tresults.nodeName = results.nodeName.substring( 0, lastDot );\n\t\t\t\t\tresults.objectName = objectName;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( results.propertyName === null || results.propertyName.length === 0 ) {\n\n\t\t\t\tthrow new Error( 'PropertyBinding: can not parse propertyName from trackName: ' + trackName );\n\n\t\t\t}\n\n\t\t\treturn results;\n\n\t\t};\n\n\t}(),\n\n\tfindNode: function ( root, nodeName ) {\n\n\t\tif ( ! nodeName || nodeName === \"\" || nodeName === \"root\" || nodeName === \".\" || nodeName === - 1 || nodeName === root.name || nodeName === root.uuid ) {\n\n\t\t\treturn root;\n\n\t\t}\n\n\t\t// search into skeleton bones.\n\t\tif ( root.skeleton ) {\n\n\t\t\tvar bone = root.skeleton.getBoneByName( nodeName );\n\n\t\t\tif ( bone !== undefined ) {\n\n\t\t\t\treturn bone;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// search into node subtree.\n\t\tif ( root.children ) {\n\n\t\t\tvar searchNodeSubtree = function ( children ) {\n\n\t\t\t\tfor ( var i = 0; i < children.length; i ++ ) {\n\n\t\t\t\t\tvar childNode = children[ i ];\n\n\t\t\t\t\tif ( childNode.name === nodeName || childNode.uuid === nodeName ) {\n\n\t\t\t\t\t\treturn childNode;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tvar result = searchNodeSubtree( childNode.children );\n\n\t\t\t\t\tif ( result ) return result;\n\n\t\t\t\t}\n\n\t\t\t\treturn null;\n\n\t\t\t};\n\n\t\t\tvar subTreeNode = searchNodeSubtree( root.children );\n\n\t\t\tif ( subTreeNode ) {\n\n\t\t\t\treturn subTreeNode;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n} );\n\nObject.assign( PropertyBinding.prototype, { // prototype, continued\n\n\t// these are used to \"bind\" a nonexistent property\n\t_getValue_unavailable: function () {},\n\t_setValue_unavailable: function () {},\n\n\tBindingType: {\n\t\tDirect: 0,\n\t\tEntireArray: 1,\n\t\tArrayElement: 2,\n\t\tHasFromToArray: 3\n\t},\n\n\tVersioning: {\n\t\tNone: 0,\n\t\tNeedsUpdate: 1,\n\t\tMatrixWorldNeedsUpdate: 2\n\t},\n\n\tGetterByBindingType: [\n\n\t\tfunction getValue_direct( buffer, offset ) {\n\n\t\t\tbuffer[ offset ] = this.node[ this.propertyName ];\n\n\t\t},\n\n\t\tfunction getValue_array( buffer, offset ) {\n\n\t\t\tvar source = this.resolvedProperty;\n\n\t\t\tfor ( var i = 0, n = source.length; i !== n; ++ i ) {\n\n\t\t\t\tbuffer[ offset ++ ] = source[ i ];\n\n\t\t\t}\n\n\t\t},\n\n\t\tfunction getValue_arrayElement( buffer, offset ) {\n\n\t\t\tbuffer[ offset ] = this.resolvedProperty[ this.propertyIndex ];\n\n\t\t},\n\n\t\tfunction getValue_toArray( buffer, offset ) {\n\n\t\t\tthis.resolvedProperty.toArray( buffer, offset );\n\n\t\t}\n\n\t],\n\n\tSetterByBindingTypeAndVersioning: [\n\n\t\t[\n\t\t\t// Direct\n\n\t\t\tfunction setValue_direct( buffer, offset ) {\n\n\t\t\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\n\t\t\t},\n\n\t\t\tfunction setValue_direct_setNeedsUpdate( buffer, offset ) {\n\n\t\t\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\t\t\t\tthis.targetObject.needsUpdate = true;\n\n\t\t\t},\n\n\t\t\tfunction setValue_direct_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\t\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\t\t\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t\t\t}\n\n\t\t], [\n\n\t\t\t// EntireArray\n\n\t\t\tfunction setValue_array( buffer, offset ) {\n\n\t\t\t\tvar dest = this.resolvedProperty;\n\n\t\t\t\tfor ( var i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tfunction setValue_array_setNeedsUpdate( buffer, offset ) {\n\n\t\t\t\tvar dest = this.resolvedProperty;\n\n\t\t\t\tfor ( var i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t\t\t}\n\n\t\t\t\tthis.targetObject.needsUpdate = true;\n\n\t\t\t},\n\n\t\t\tfunction setValue_array_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\t\t\tvar dest = this.resolvedProperty;\n\n\t\t\t\tfor ( var i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t\t\t}\n\n\t\t\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t\t\t}\n\n\t\t], [\n\n\t\t\t// ArrayElement\n\n\t\t\tfunction setValue_arrayElement( buffer, offset ) {\n\n\t\t\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\n\t\t\t},\n\n\t\t\tfunction setValue_arrayElement_setNeedsUpdate( buffer, offset ) {\n\n\t\t\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\t\t\t\tthis.targetObject.needsUpdate = true;\n\n\t\t\t},\n\n\t\t\tfunction setValue_arrayElement_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\t\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\t\t\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t\t\t}\n\n\t\t], [\n\n\t\t\t// HasToFromArray\n\n\t\t\tfunction setValue_fromArray( buffer, offset ) {\n\n\t\t\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\n\t\t\t},\n\n\t\t\tfunction setValue_fromArray_setNeedsUpdate( buffer, offset ) {\n\n\t\t\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\t\t\t\tthis.targetObject.needsUpdate = true;\n\n\t\t\t},\n\n\t\t\tfunction setValue_fromArray_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\t\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\t\t\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t\t\t}\n\n\t\t]\n\n\t],\n\n\tgetValue: function getValue_unbound( targetArray, offset ) {\n\n\t\tthis.bind();\n\t\tthis.getValue( targetArray, offset );\n\n\t\t// Note: This class uses a State pattern on a per-method basis:\n\t\t// 'bind' sets 'this.getValue' / 'setValue' and shadows the\n\t\t// prototype version of these methods with one that represents\n\t\t// the bound state. When the property is not found, the methods\n\t\t// become no-ops.\n\n\t},\n\n\tsetValue: function getValue_unbound( sourceArray, offset ) {\n\n\t\tthis.bind();\n\t\tthis.setValue( sourceArray, offset );\n\n\t},\n\n\t// create getter / setter pair for a property in the scene graph\n\tbind: function () {\n\n\t\tvar targetObject = this.node,\n\t\t\tparsedPath = this.parsedPath,\n\n\t\t\tobjectName = parsedPath.objectName,\n\t\t\tpropertyName = parsedPath.propertyName,\n\t\t\tpropertyIndex = parsedPath.propertyIndex;\n\n\t\tif ( ! targetObject ) {\n\n\t\t\ttargetObject = PropertyBinding.findNode( this.rootNode, parsedPath.nodeName ) || this.rootNode;\n\n\t\t\tthis.node = targetObject;\n\n\t\t}\n\n\t\t// set fail state so we can just 'return' on error\n\t\tthis.getValue = this._getValue_unavailable;\n\t\tthis.setValue = this._setValue_unavailable;\n\n\t\t// ensure there is a value node\n\t\tif ( ! targetObject ) {\n\n\t\t\tconsole.error( 'THREE.PropertyBinding: Trying to update node for track: ' + this.path + ' but it wasn\\'t found.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( objectName ) {\n\n\t\t\tvar objectIndex = parsedPath.objectIndex;\n\n\t\t\t// special cases were we need to reach deeper into the hierarchy to get the face materials....\n\t\t\tswitch ( objectName ) {\n\n\t\t\t\tcase 'materials':\n\n\t\t\t\t\tif ( ! targetObject.material ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to material as node does not have a material.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! targetObject.material.materials ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttargetObject = targetObject.material.materials;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'bones':\n\n\t\t\t\t\tif ( ! targetObject.skeleton ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// potential future optimization: skip this if propertyIndex is already an integer\n\t\t\t\t\t// and convert the integer string to a true integer.\n\n\t\t\t\t\ttargetObject = targetObject.skeleton.bones;\n\n\t\t\t\t\t// support resolving morphTarget names into indices.\n\t\t\t\t\tfor ( var i = 0; i < targetObject.length; i ++ ) {\n\n\t\t\t\t\t\tif ( targetObject[ i ].name === objectIndex ) {\n\n\t\t\t\t\t\t\tobjectIndex = i;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\n\t\t\t\t\tif ( targetObject[ objectName ] === undefined ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to objectName of node undefined.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttargetObject = targetObject[ objectName ];\n\n\t\t\t}\n\n\n\t\t\tif ( objectIndex !== undefined ) {\n\n\t\t\t\tif ( targetObject[ objectIndex ] === undefined ) {\n\n\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.', this, targetObject );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\ttargetObject = targetObject[ objectIndex ];\n\n\t\t\t}\n\n\t\t}\n\n\t\t// resolve property\n\t\tvar nodeProperty = targetObject[ propertyName ];\n\n\t\tif ( nodeProperty === undefined ) {\n\n\t\t\tvar nodeName = parsedPath.nodeName;\n\n\t\t\tconsole.error( 'THREE.PropertyBinding: Trying to update property for track: ' + nodeName +\n\t\t\t\t'.' + propertyName + ' but it wasn\\'t found.', targetObject );\n\t\t\treturn;\n\n\t\t}\n\n\t\t// determine versioning scheme\n\t\tvar versioning = this.Versioning.None;\n\n\t\tif ( targetObject.needsUpdate !== undefined ) { // material\n\n\t\t\tversioning = this.Versioning.NeedsUpdate;\n\t\t\tthis.targetObject = targetObject;\n\n\t\t} else if ( targetObject.matrixWorldNeedsUpdate !== undefined ) { // node transform\n\n\t\t\tversioning = this.Versioning.MatrixWorldNeedsUpdate;\n\t\t\tthis.targetObject = targetObject;\n\n\t\t}\n\n\t\t// determine how the property gets bound\n\t\tvar bindingType = this.BindingType.Direct;\n\n\t\tif ( propertyIndex !== undefined ) {\n\n\t\t\t// access a sub element of the property array (only primitives are supported right now)\n\n\t\t\tif ( propertyName === \"morphTargetInfluences\" ) {\n\n\t\t\t\t// potential optimization, skip this if propertyIndex is already an integer, and convert the integer string to a true integer.\n\n\t\t\t\t// support resolving morphTarget names into indices.\n\t\t\t\tif ( ! targetObject.geometry ) {\n\n\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.', this );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tif ( targetObject.geometry.isBufferGeometry ) {\n\n\t\t\t\t\tif ( ! targetObject.geometry.morphAttributes ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfor ( var i = 0; i < this.node.geometry.morphAttributes.position.length; i ++ ) {\n\n\t\t\t\t\t\tif ( targetObject.geometry.morphAttributes.position[ i ].name === propertyIndex ) {\n\n\t\t\t\t\t\t\tpropertyIndex = i;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( ! targetObject.geometry.morphTargets ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphTargets.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfor ( var i = 0; i < this.node.geometry.morphTargets.length; i ++ ) {\n\n\t\t\t\t\t\tif ( targetObject.geometry.morphTargets[ i ].name === propertyIndex ) {\n\n\t\t\t\t\t\t\tpropertyIndex = i;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tbindingType = this.BindingType.ArrayElement;\n\n\t\t\tthis.resolvedProperty = nodeProperty;\n\t\t\tthis.propertyIndex = propertyIndex;\n\n\t\t} else if ( nodeProperty.fromArray !== undefined && nodeProperty.toArray !== undefined ) {\n\n\t\t\t// must use copy for Object3D.Euler/Quaternion\n\n\t\t\tbindingType = this.BindingType.HasFromToArray;\n\n\t\t\tthis.resolvedProperty = nodeProperty;\n\n\t\t} else if ( Array.isArray( nodeProperty ) ) {\n\n\t\t\tbindingType = this.BindingType.EntireArray;\n\n\t\t\tthis.resolvedProperty = nodeProperty;\n\n\t\t} else {\n\n\t\t\tthis.propertyName = propertyName;\n\n\t\t}\n\n\t\t// select getter / setter\n\t\tthis.getValue = this.GetterByBindingType[ bindingType ];\n\t\tthis.setValue = this.SetterByBindingTypeAndVersioning[ bindingType ][ versioning ];\n\n\t},\n\n\tunbind: function () {\n\n\t\tthis.node = null;\n\n\t\t// back to the prototype version of getValue / setValue\n\t\t// note: avoiding to mutate the shape of 'this' via 'delete'\n\t\tthis.getValue = this._getValue_unbound;\n\t\tthis.setValue = this._setValue_unbound;\n\n\t}\n\n} );\n\n//!\\ DECLARE ALIAS AFTER assign prototype !\nObject.assign( PropertyBinding.prototype, {\n\n\t// initial state of these methods that calls 'bind'\n\t_getValue_unbound: PropertyBinding.prototype.getValue,\n\t_setValue_unbound: PropertyBinding.prototype.setValue,\n\n} );\n\n/**\n *\n * A group of objects that receives a shared animation state.\n *\n * Usage:\n *\n * \t-\tAdd objects you would otherwise pass as 'root' to the\n * \t\tconstructor or the .clipAction method of AnimationMixer.\n *\n * \t-\tInstead pass this object as 'root'.\n *\n * \t-\tYou can also add and remove objects later when the mixer\n * \t\tis running.\n *\n * Note:\n *\n * \tObjects of this class appear as one object to the mixer,\n * \tso cache control of the individual objects must be done\n * \ton the group.\n *\n * Limitation:\n *\n * \t- \tThe animated properties must be compatible among the\n * \t\tall objects in the group.\n *\n * -\tA single property can either be controlled through a\n * \ttarget group or directly, but not both.\n *\n * @author tschw\n */\n\nfunction AnimationObjectGroup() {\n\n\tthis.uuid = _Math.generateUUID();\n\n\t// cached objects followed by the active ones\n\tthis._objects = Array.prototype.slice.call( arguments );\n\n\tthis.nCachedObjects_ = 0;\t\t\t// threshold\n\t// note: read by PropertyBinding.Composite\n\n\tvar indices = {};\n\tthis._indicesByUUID = indices;\t\t// for bookkeeping\n\n\tfor ( var i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\tindices[ arguments[ i ].uuid ] = i;\n\n\t}\n\n\tthis._paths = [];\t\t\t\t\t// inside: string\n\tthis._parsedPaths = [];\t\t\t\t// inside: { we don't care, here }\n\tthis._bindings = []; \t\t\t\t// inside: Array< PropertyBinding >\n\tthis._bindingsIndicesByPath = {}; \t// inside: indices in these arrays\n\n\tvar scope = this;\n\n\tthis.stats = {\n\n\t\tobjects: {\n\t\t\tget total() {\n\n\t\t\t\treturn scope._objects.length;\n\n\t\t\t},\n\t\t\tget inUse() {\n\n\t\t\t\treturn this.total - scope.nCachedObjects_;\n\n\t\t\t}\n\t\t},\n\t\tget bindingsPerObject() {\n\n\t\t\treturn scope._bindings.length;\n\n\t\t}\n\n\t};\n\n}\n\nObject.assign( AnimationObjectGroup.prototype, {\n\n\tisAnimationObjectGroup: true,\n\n\tadd: function () {\n\n\t\tvar objects = this._objects,\n\t\t\tnObjects = objects.length,\n\t\t\tnCachedObjects = this.nCachedObjects_,\n\t\t\tindicesByUUID = this._indicesByUUID,\n\t\t\tpaths = this._paths,\n\t\t\tparsedPaths = this._parsedPaths,\n\t\t\tbindings = this._bindings,\n\t\t\tnBindings = bindings.length,\n\t\t\tknownObject = undefined;\n\n\t\tfor ( var i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tvar object = arguments[ i ],\n\t\t\t\tuuid = object.uuid,\n\t\t\t\tindex = indicesByUUID[ uuid ];\n\n\t\t\tif ( index === undefined ) {\n\n\t\t\t\t// unknown object -> add it to the ACTIVE region\n\n\t\t\t\tindex = nObjects ++;\n\t\t\t\tindicesByUUID[ uuid ] = index;\n\t\t\t\tobjects.push( object );\n\n\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\tfor ( var j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\tbindings[ j ].push( new PropertyBinding( object, paths[ j ], parsedPaths[ j ] ) );\n\n\t\t\t\t}\n\n\t\t\t} else if ( index < nCachedObjects ) {\n\n\t\t\t\tknownObject = objects[ index ];\n\n\t\t\t\t// move existing object to the ACTIVE region\n\n\t\t\t\tvar firstActiveIndex = -- nCachedObjects,\n\t\t\t\t\tlastCachedObject = objects[ firstActiveIndex ];\n\n\t\t\t\tindicesByUUID[ lastCachedObject.uuid ] = index;\n\t\t\t\tobjects[ index ] = lastCachedObject;\n\n\t\t\t\tindicesByUUID[ uuid ] = firstActiveIndex;\n\t\t\t\tobjects[ firstActiveIndex ] = object;\n\n\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\tfor ( var j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\tvar bindingsForPath = bindings[ j ],\n\t\t\t\t\t\tlastCached = bindingsForPath[ firstActiveIndex ],\n\t\t\t\t\t\tbinding = bindingsForPath[ index ];\n\n\t\t\t\t\tbindingsForPath[ index ] = lastCached;\n\n\t\t\t\t\tif ( binding === undefined ) {\n\n\t\t\t\t\t\t// since we do not bother to create new bindings\n\t\t\t\t\t\t// for objects that are cached, the binding may\n\t\t\t\t\t\t// or may not exist\n\n\t\t\t\t\t\tbinding = new PropertyBinding( object, paths[ j ], parsedPaths[ j ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbindingsForPath[ firstActiveIndex ] = binding;\n\n\t\t\t\t}\n\n\t\t\t} else if ( objects[ index ] !== knownObject ) {\n\n\t\t\t\tconsole.error( 'THREE.AnimationObjectGroup: Different objects with the same UUID ' +\n\t\t\t\t\t\t'detected. Clean the caches or recreate your infrastructure when reloading scenes.' );\n\n\t\t\t} // else the object is already where we want it to be\n\n\t\t} // for arguments\n\n\t\tthis.nCachedObjects_ = nCachedObjects;\n\n\t},\n\n\tremove: function () {\n\n\t\tvar objects = this._objects,\n\t\t\tnCachedObjects = this.nCachedObjects_,\n\t\t\tindicesByUUID = this._indicesByUUID,\n\t\t\tbindings = this._bindings,\n\t\t\tnBindings = bindings.length;\n\n\t\tfor ( var i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tvar object = arguments[ i ],\n\t\t\t\tuuid = object.uuid,\n\t\t\t\tindex = indicesByUUID[ uuid ];\n\n\t\t\tif ( index !== undefined && index >= nCachedObjects ) {\n\n\t\t\t\t// move existing object into the CACHED region\n\n\t\t\t\tvar lastCachedIndex = nCachedObjects ++,\n\t\t\t\t\tfirstActiveObject = objects[ lastCachedIndex ];\n\n\t\t\t\tindicesByUUID[ firstActiveObject.uuid ] = index;\n\t\t\t\tobjects[ index ] = firstActiveObject;\n\n\t\t\t\tindicesByUUID[ uuid ] = lastCachedIndex;\n\t\t\t\tobjects[ lastCachedIndex ] = object;\n\n\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\tfor ( var j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\tvar bindingsForPath = bindings[ j ],\n\t\t\t\t\t\tfirstActive = bindingsForPath[ lastCachedIndex ],\n\t\t\t\t\t\tbinding = bindingsForPath[ index ];\n\n\t\t\t\t\tbindingsForPath[ index ] = firstActive;\n\t\t\t\t\tbindingsForPath[ lastCachedIndex ] = binding;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} // for arguments\n\n\t\tthis.nCachedObjects_ = nCachedObjects;\n\n\t},\n\n\t// remove & forget\n\tuncache: function () {\n\n\t\tvar objects = this._objects,\n\t\t\tnObjects = objects.length,\n\t\t\tnCachedObjects = this.nCachedObjects_,\n\t\t\tindicesByUUID = this._indicesByUUID,\n\t\t\tbindings = this._bindings,\n\t\t\tnBindings = bindings.length;\n\n\t\tfor ( var i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tvar object = arguments[ i ],\n\t\t\t\tuuid = object.uuid,\n\t\t\t\tindex = indicesByUUID[ uuid ];\n\n\t\t\tif ( index !== undefined ) {\n\n\t\t\t\tdelete indicesByUUID[ uuid ];\n\n\t\t\t\tif ( index < nCachedObjects ) {\n\n\t\t\t\t\t// object is cached, shrink the CACHED region\n\n\t\t\t\t\tvar firstActiveIndex = -- nCachedObjects,\n\t\t\t\t\t\tlastCachedObject = objects[ firstActiveIndex ],\n\t\t\t\t\t\tlastIndex = -- nObjects,\n\t\t\t\t\t\tlastObject = objects[ lastIndex ];\n\n\t\t\t\t\t// last cached object takes this object's place\n\t\t\t\t\tindicesByUUID[ lastCachedObject.uuid ] = index;\n\t\t\t\t\tobjects[ index ] = lastCachedObject;\n\n\t\t\t\t\t// last object goes to the activated slot and pop\n\t\t\t\t\tindicesByUUID[ lastObject.uuid ] = firstActiveIndex;\n\t\t\t\t\tobjects[ firstActiveIndex ] = lastObject;\n\t\t\t\t\tobjects.pop();\n\n\t\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\t\tfor ( var j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\t\tvar bindingsForPath = bindings[ j ],\n\t\t\t\t\t\t\tlastCached = bindingsForPath[ firstActiveIndex ],\n\t\t\t\t\t\t\tlast = bindingsForPath[ lastIndex ];\n\n\t\t\t\t\t\tbindingsForPath[ index ] = lastCached;\n\t\t\t\t\t\tbindingsForPath[ firstActiveIndex ] = last;\n\t\t\t\t\t\tbindingsForPath.pop();\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// object is active, just swap with the last and pop\n\n\t\t\t\t\tvar lastIndex = -- nObjects,\n\t\t\t\t\t\tlastObject = objects[ lastIndex ];\n\n\t\t\t\t\tindicesByUUID[ lastObject.uuid ] = index;\n\t\t\t\t\tobjects[ index ] = lastObject;\n\t\t\t\t\tobjects.pop();\n\n\t\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\t\tfor ( var j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\t\tvar bindingsForPath = bindings[ j ];\n\n\t\t\t\t\t\tbindingsForPath[ index ] = bindingsForPath[ lastIndex ];\n\t\t\t\t\t\tbindingsForPath.pop();\n\n\t\t\t\t\t}\n\n\t\t\t\t} // cached or active\n\n\t\t\t} // if object is known\n\n\t\t} // for arguments\n\n\t\tthis.nCachedObjects_ = nCachedObjects;\n\n\t},\n\n\t// Internal interface used by befriended PropertyBinding.Composite:\n\n\tsubscribe_: function ( path, parsedPath ) {\n\n\t\t// returns an array of bindings for the given path that is changed\n\t\t// according to the contained objects in the group\n\n\t\tvar indicesByPath = this._bindingsIndicesByPath,\n\t\t\tindex = indicesByPath[ path ],\n\t\t\tbindings = this._bindings;\n\n\t\tif ( index !== undefined ) return bindings[ index ];\n\n\t\tvar paths = this._paths,\n\t\t\tparsedPaths = this._parsedPaths,\n\t\t\tobjects = this._objects,\n\t\t\tnObjects = objects.length,\n\t\t\tnCachedObjects = this.nCachedObjects_,\n\t\t\tbindingsForPath = new Array( nObjects );\n\n\t\tindex = bindings.length;\n\n\t\tindicesByPath[ path ] = index;\n\n\t\tpaths.push( path );\n\t\tparsedPaths.push( parsedPath );\n\t\tbindings.push( bindingsForPath );\n\n\t\tfor ( var i = nCachedObjects, n = objects.length; i !== n; ++ i ) {\n\n\t\t\tvar object = objects[ i ];\n\t\t\tbindingsForPath[ i ] = new PropertyBinding( object, path, parsedPath );\n\n\t\t}\n\n\t\treturn bindingsForPath;\n\n\t},\n\n\tunsubscribe_: function ( path ) {\n\n\t\t// tells the group to forget about a property path and no longer\n\t\t// update the array previously obtained with 'subscribe_'\n\n\t\tvar indicesByPath = this._bindingsIndicesByPath,\n\t\t\tindex = indicesByPath[ path ];\n\n\t\tif ( index !== undefined ) {\n\n\t\t\tvar paths = this._paths,\n\t\t\t\tparsedPaths = this._parsedPaths,\n\t\t\t\tbindings = this._bindings,\n\t\t\t\tlastBindingsIndex = bindings.length - 1,\n\t\t\t\tlastBindings = bindings[ lastBindingsIndex ],\n\t\t\t\tlastBindingsPath = path[ lastBindingsIndex ];\n\n\t\t\tindicesByPath[ lastBindingsPath ] = index;\n\n\t\t\tbindings[ index ] = lastBindings;\n\t\t\tbindings.pop();\n\n\t\t\tparsedPaths[ index ] = parsedPaths[ lastBindingsIndex ];\n\t\t\tparsedPaths.pop();\n\n\t\t\tpaths[ index ] = paths[ lastBindingsIndex ];\n\t\t\tpaths.pop();\n\n\t\t}\n\n\t}\n\n} );\n\n/**\n *\n * Action provided by AnimationMixer for scheduling clip playback on specific\n * objects.\n *\n * @author Ben Houston / http://clara.io/\n * @author David Sarno / http://lighthaus.us/\n * @author tschw\n *\n */\n\nfunction AnimationAction( mixer, clip, localRoot ) {\n\n\tthis._mixer = mixer;\n\tthis._clip = clip;\n\tthis._localRoot = localRoot || null;\n\n\tvar tracks = clip.tracks,\n\t\tnTracks = tracks.length,\n\t\tinterpolants = new Array( nTracks );\n\n\tvar interpolantSettings = {\n\t\tendingStart: ZeroCurvatureEnding,\n\t\tendingEnd: ZeroCurvatureEnding\n\t};\n\n\tfor ( var i = 0; i !== nTracks; ++ i ) {\n\n\t\tvar interpolant = tracks[ i ].createInterpolant( null );\n\t\tinterpolants[ i ] = interpolant;\n\t\tinterpolant.settings = interpolantSettings;\n\n\t}\n\n\tthis._interpolantSettings = interpolantSettings;\n\n\tthis._interpolants = interpolants;\t// bound by the mixer\n\n\t// inside: PropertyMixer (managed by the mixer)\n\tthis._propertyBindings = new Array( nTracks );\n\n\tthis._cacheIndex = null;\t\t\t// for the memory manager\n\tthis._byClipCacheIndex = null;\t\t// for the memory manager\n\n\tthis._timeScaleInterpolant = null;\n\tthis._weightInterpolant = null;\n\n\tthis.loop = LoopRepeat;\n\tthis._loopCount = - 1;\n\n\t// global mixer time when the action is to be started\n\t// it's set back to 'null' upon start of the action\n\tthis._startTime = null;\n\n\t// scaled local time of the action\n\t// gets clamped or wrapped to 0..clip.duration according to loop\n\tthis.time = 0;\n\n\tthis.timeScale = 1;\n\tthis._effectiveTimeScale = 1;\n\n\tthis.weight = 1;\n\tthis._effectiveWeight = 1;\n\n\tthis.repetitions = Infinity; \t\t// no. of repetitions when looping\n\n\tthis.paused = false;\t\t\t\t// true -> zero effective time scale\n\tthis.enabled = true;\t\t\t\t// false -> zero effective weight\n\n\tthis.clampWhenFinished \t= false;\t// keep feeding the last frame?\n\n\tthis.zeroSlopeAtStart \t= true;\t\t// for smooth interpolation w/o separate\n\tthis.zeroSlopeAtEnd\t\t= true;\t\t// clips for start, loop and end\n\n}\n\nObject.assign( AnimationAction.prototype, {\n\n\t// State & Scheduling\n\n\tplay: function () {\n\n\t\tthis._mixer._activateAction( this );\n\n\t\treturn this;\n\n\t},\n\n\tstop: function () {\n\n\t\tthis._mixer._deactivateAction( this );\n\n\t\treturn this.reset();\n\n\t},\n\n\treset: function () {\n\n\t\tthis.paused = false;\n\t\tthis.enabled = true;\n\n\t\tthis.time = 0;\t\t\t// restart clip\n\t\tthis._loopCount = - 1;\t// forget previous loops\n\t\tthis._startTime = null;\t// forget scheduling\n\n\t\treturn this.stopFading().stopWarping();\n\n\t},\n\n\tisRunning: function () {\n\n\t\treturn this.enabled && ! this.paused && this.timeScale !== 0 &&\n\t\t\t\tthis._startTime === null && this._mixer._isActiveAction( this );\n\n\t},\n\n\t// return true when play has been called\n\tisScheduled: function () {\n\n\t\treturn this._mixer._isActiveAction( this );\n\n\t},\n\n\tstartAt: function ( time ) {\n\n\t\tthis._startTime = time;\n\n\t\treturn this;\n\n\t},\n\n\tsetLoop: function ( mode, repetitions ) {\n\n\t\tthis.loop = mode;\n\t\tthis.repetitions = repetitions;\n\n\t\treturn this;\n\n\t},\n\n\t// Weight\n\n\t// set the weight stopping any scheduled fading\n\t// although .enabled = false yields an effective weight of zero, this\n\t// method does *not* change .enabled, because it would be confusing\n\tsetEffectiveWeight: function ( weight ) {\n\n\t\tthis.weight = weight;\n\n\t\t// note: same logic as when updated at runtime\n\t\tthis._effectiveWeight = this.enabled ? weight : 0;\n\n\t\treturn this.stopFading();\n\n\t},\n\n\t// return the weight considering fading and .enabled\n\tgetEffectiveWeight: function () {\n\n\t\treturn this._effectiveWeight;\n\n\t},\n\n\tfadeIn: function ( duration ) {\n\n\t\treturn this._scheduleFading( duration, 0, 1 );\n\n\t},\n\n\tfadeOut: function ( duration ) {\n\n\t\treturn this._scheduleFading( duration, 1, 0 );\n\n\t},\n\n\tcrossFadeFrom: function ( fadeOutAction, duration, warp ) {\n\n\t\tfadeOutAction.fadeOut( duration );\n\t\tthis.fadeIn( duration );\n\n\t\tif ( warp ) {\n\n\t\t\tvar fadeInDuration = this._clip.duration,\n\t\t\t\tfadeOutDuration = fadeOutAction._clip.duration,\n\n\t\t\t\tstartEndRatio = fadeOutDuration / fadeInDuration,\n\t\t\t\tendStartRatio = fadeInDuration / fadeOutDuration;\n\n\t\t\tfadeOutAction.warp( 1.0, startEndRatio, duration );\n\t\t\tthis.warp( endStartRatio, 1.0, duration );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tcrossFadeTo: function ( fadeInAction, duration, warp ) {\n\n\t\treturn fadeInAction.crossFadeFrom( this, duration, warp );\n\n\t},\n\n\tstopFading: function () {\n\n\t\tvar weightInterpolant = this._weightInterpolant;\n\n\t\tif ( weightInterpolant !== null ) {\n\n\t\t\tthis._weightInterpolant = null;\n\t\t\tthis._mixer._takeBackControlInterpolant( weightInterpolant );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\t// Time Scale Control\n\n\t// set the time scale stopping any scheduled warping\n\t// although .paused = true yields an effective time scale of zero, this\n\t// method does *not* change .paused, because it would be confusing\n\tsetEffectiveTimeScale: function ( timeScale ) {\n\n\t\tthis.timeScale = timeScale;\n\t\tthis._effectiveTimeScale = this.paused ? 0 : timeScale;\n\n\t\treturn this.stopWarping();\n\n\t},\n\n\t// return the time scale considering warping and .paused\n\tgetEffectiveTimeScale: function () {\n\n\t\treturn this._effectiveTimeScale;\n\n\t},\n\n\tsetDuration: function ( duration ) {\n\n\t\tthis.timeScale = this._clip.duration / duration;\n\n\t\treturn this.stopWarping();\n\n\t},\n\n\tsyncWith: function ( action ) {\n\n\t\tthis.time = action.time;\n\t\tthis.timeScale = action.timeScale;\n\n\t\treturn this.stopWarping();\n\n\t},\n\n\thalt: function ( duration ) {\n\n\t\treturn this.warp( this._effectiveTimeScale, 0, duration );\n\n\t},\n\n\twarp: function ( startTimeScale, endTimeScale, duration ) {\n\n\t\tvar mixer = this._mixer, now = mixer.time,\n\t\t\tinterpolant = this._timeScaleInterpolant,\n\n\t\t\ttimeScale = this.timeScale;\n\n\t\tif ( interpolant === null ) {\n\n\t\t\tinterpolant = mixer._lendControlInterpolant();\n\t\t\tthis._timeScaleInterpolant = interpolant;\n\n\t\t}\n\n\t\tvar times = interpolant.parameterPositions,\n\t\t\tvalues = interpolant.sampleValues;\n\n\t\ttimes[ 0 ] = now;\n\t\ttimes[ 1 ] = now + duration;\n\n\t\tvalues[ 0 ] = startTimeScale / timeScale;\n\t\tvalues[ 1 ] = endTimeScale / timeScale;\n\n\t\treturn this;\n\n\t},\n\n\tstopWarping: function () {\n\n\t\tvar timeScaleInterpolant = this._timeScaleInterpolant;\n\n\t\tif ( timeScaleInterpolant !== null ) {\n\n\t\t\tthis._timeScaleInterpolant = null;\n\t\t\tthis._mixer._takeBackControlInterpolant( timeScaleInterpolant );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\t// Object Accessors\n\n\tgetMixer: function () {\n\n\t\treturn this._mixer;\n\n\t},\n\n\tgetClip: function () {\n\n\t\treturn this._clip;\n\n\t},\n\n\tgetRoot: function () {\n\n\t\treturn this._localRoot || this._mixer._root;\n\n\t},\n\n\t// Interna\n\n\t_update: function ( time, deltaTime, timeDirection, accuIndex ) {\n\n\t\t// called by the mixer\n\n\t\tif ( ! this.enabled ) {\n\n\t\t\t// call ._updateWeight() to update ._effectiveWeight\n\n\t\t\tthis._updateWeight( time );\n\t\t\treturn;\n\n\t\t}\n\n\t\tvar startTime = this._startTime;\n\n\t\tif ( startTime !== null ) {\n\n\t\t\t// check for scheduled start of action\n\n\t\t\tvar timeRunning = ( time - startTime ) * timeDirection;\n\t\t\tif ( timeRunning < 0 || timeDirection === 0 ) {\n\n\t\t\t\treturn; // yet to come / don't decide when delta = 0\n\n\t\t\t}\n\n\t\t\t// start\n\n\t\t\tthis._startTime = null; // unschedule\n\t\t\tdeltaTime = timeDirection * timeRunning;\n\n\t\t}\n\n\t\t// apply time scale and advance time\n\n\t\tdeltaTime *= this._updateTimeScale( time );\n\t\tvar clipTime = this._updateTime( deltaTime );\n\n\t\t// note: _updateTime may disable the action resulting in\n\t\t// an effective weight of 0\n\n\t\tvar weight = this._updateWeight( time );\n\n\t\tif ( weight > 0 ) {\n\n\t\t\tvar interpolants = this._interpolants;\n\t\t\tvar propertyMixers = this._propertyBindings;\n\n\t\t\tfor ( var j = 0, m = interpolants.length; j !== m; ++ j ) {\n\n\t\t\t\tinterpolants[ j ].evaluate( clipTime );\n\t\t\t\tpropertyMixers[ j ].accumulate( accuIndex, weight );\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\t_updateWeight: function ( time ) {\n\n\t\tvar weight = 0;\n\n\t\tif ( this.enabled ) {\n\n\t\t\tweight = this.weight;\n\t\t\tvar interpolant = this._weightInterpolant;\n\n\t\t\tif ( interpolant !== null ) {\n\n\t\t\t\tvar interpolantValue = interpolant.evaluate( time )[ 0 ];\n\n\t\t\t\tweight *= interpolantValue;\n\n\t\t\t\tif ( time > interpolant.parameterPositions[ 1 ] ) {\n\n\t\t\t\t\tthis.stopFading();\n\n\t\t\t\t\tif ( interpolantValue === 0 ) {\n\n\t\t\t\t\t\t// faded out, disable\n\t\t\t\t\t\tthis.enabled = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis._effectiveWeight = weight;\n\t\treturn weight;\n\n\t},\n\n\t_updateTimeScale: function ( time ) {\n\n\t\tvar timeScale = 0;\n\n\t\tif ( ! this.paused ) {\n\n\t\t\ttimeScale = this.timeScale;\n\n\t\t\tvar interpolant = this._timeScaleInterpolant;\n\n\t\t\tif ( interpolant !== null ) {\n\n\t\t\t\tvar interpolantValue = interpolant.evaluate( time )[ 0 ];\n\n\t\t\t\ttimeScale *= interpolantValue;\n\n\t\t\t\tif ( time > interpolant.parameterPositions[ 1 ] ) {\n\n\t\t\t\t\tthis.stopWarping();\n\n\t\t\t\t\tif ( timeScale === 0 ) {\n\n\t\t\t\t\t\t// motion has halted, pause\n\t\t\t\t\t\tthis.paused = true;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// warp done - apply final time scale\n\t\t\t\t\t\tthis.timeScale = timeScale;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis._effectiveTimeScale = timeScale;\n\t\treturn timeScale;\n\n\t},\n\n\t_updateTime: function ( deltaTime ) {\n\n\t\tvar time = this.time + deltaTime;\n\n\t\tif ( deltaTime === 0 ) return time;\n\n\t\tvar duration = this._clip.duration,\n\n\t\t\tloop = this.loop,\n\t\t\tloopCount = this._loopCount;\n\n\t\tif ( loop === LoopOnce ) {\n\n\t\t\tif ( loopCount === - 1 ) {\n\n\t\t\t\t// just started\n\n\t\t\t\tthis._loopCount = 0;\n\t\t\t\tthis._setEndings( true, true, false );\n\n\t\t\t}\n\n\t\t\thandle_stop: {\n\n\t\t\t\tif ( time >= duration ) {\n\n\t\t\t\t\ttime = duration;\n\n\t\t\t\t} else if ( time < 0 ) {\n\n\t\t\t\t\ttime = 0;\n\n\t\t\t\t} else break handle_stop;\n\n\t\t\t\tif ( this.clampWhenFinished ) this.paused = true;\n\t\t\t\telse this.enabled = false;\n\n\t\t\t\tthis._mixer.dispatchEvent( {\n\t\t\t\t\ttype: 'finished', action: this,\n\t\t\t\t\tdirection: deltaTime < 0 ? - 1 : 1\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t} else { // repetitive Repeat or PingPong\n\n\t\t\tvar pingPong = ( loop === LoopPingPong );\n\n\t\t\tif ( loopCount === - 1 ) {\n\n\t\t\t\t// just started\n\n\t\t\t\tif ( deltaTime >= 0 ) {\n\n\t\t\t\t\tloopCount = 0;\n\n\t\t\t\t\tthis._setEndings( true, this.repetitions === 0, pingPong );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// when looping in reverse direction, the initial\n\t\t\t\t\t// transition through zero counts as a repetition,\n\t\t\t\t\t// so leave loopCount at -1\n\n\t\t\t\t\tthis._setEndings( this.repetitions === 0, true, pingPong );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( time >= duration || time < 0 ) {\n\n\t\t\t\t// wrap around\n\n\t\t\t\tvar loopDelta = Math.floor( time / duration ); // signed\n\t\t\t\ttime -= duration * loopDelta;\n\n\t\t\t\tloopCount += Math.abs( loopDelta );\n\n\t\t\t\tvar pending = this.repetitions - loopCount;\n\n\t\t\t\tif ( pending <= 0 ) {\n\n\t\t\t\t\t// have to stop (switch state, clamp time, fire event)\n\n\t\t\t\t\tif ( this.clampWhenFinished ) this.paused = true;\n\t\t\t\t\telse this.enabled = false;\n\n\t\t\t\t\ttime = deltaTime > 0 ? duration : 0;\n\n\t\t\t\t\tthis._mixer.dispatchEvent( {\n\t\t\t\t\t\ttype: 'finished', action: this,\n\t\t\t\t\t\tdirection: deltaTime > 0 ? 1 : - 1\n\t\t\t\t\t} );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// keep running\n\n\t\t\t\t\tif ( pending === 1 ) {\n\n\t\t\t\t\t\t// entering the last round\n\n\t\t\t\t\t\tvar atStart = deltaTime < 0;\n\t\t\t\t\t\tthis._setEndings( atStart, ! atStart, pingPong );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tthis._setEndings( false, false, pingPong );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tthis._loopCount = loopCount;\n\n\t\t\t\t\tthis._mixer.dispatchEvent( {\n\t\t\t\t\t\ttype: 'loop', action: this, loopDelta: loopDelta\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( pingPong && ( loopCount & 1 ) === 1 ) {\n\n\t\t\t\t// invert time for the \"pong round\"\n\n\t\t\t\tthis.time = time;\n\t\t\t\treturn duration - time;\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.time = time;\n\t\treturn time;\n\n\t},\n\n\t_setEndings: function ( atStart, atEnd, pingPong ) {\n\n\t\tvar settings = this._interpolantSettings;\n\n\t\tif ( pingPong ) {\n\n\t\t\tsettings.endingStart \t= ZeroSlopeEnding;\n\t\t\tsettings.endingEnd\t\t= ZeroSlopeEnding;\n\n\t\t} else {\n\n\t\t\t// assuming for LoopOnce atStart == atEnd == true\n\n\t\t\tif ( atStart ) {\n\n\t\t\t\tsettings.endingStart = this.zeroSlopeAtStart ? ZeroSlopeEnding : ZeroCurvatureEnding;\n\n\t\t\t} else {\n\n\t\t\t\tsettings.endingStart = WrapAroundEnding;\n\n\t\t\t}\n\n\t\t\tif ( atEnd ) {\n\n\t\t\t\tsettings.endingEnd = this.zeroSlopeAtEnd ? ZeroSlopeEnding : ZeroCurvatureEnding;\n\n\t\t\t} else {\n\n\t\t\t\tsettings.endingEnd \t = WrapAroundEnding;\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\t_scheduleFading: function ( duration, weightNow, weightThen ) {\n\n\t\tvar mixer = this._mixer, now = mixer.time,\n\t\t\tinterpolant = this._weightInterpolant;\n\n\t\tif ( interpolant === null ) {\n\n\t\t\tinterpolant = mixer._lendControlInterpolant();\n\t\t\tthis._weightInterpolant = interpolant;\n\n\t\t}\n\n\t\tvar times = interpolant.parameterPositions,\n\t\t\tvalues = interpolant.sampleValues;\n\n\t\ttimes[ 0 ] = now; \t\t\t\tvalues[ 0 ] = weightNow;\n\t\ttimes[ 1 ] = now + duration;\tvalues[ 1 ] = weightThen;\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n *\n * Player for AnimationClips.\n *\n *\n * @author Ben Houston / http://clara.io/\n * @author David Sarno / http://lighthaus.us/\n * @author tschw\n */\n\nfunction AnimationMixer( root ) {\n\n\tthis._root = root;\n\tthis._initMemoryManager();\n\tthis._accuIndex = 0;\n\n\tthis.time = 0;\n\n\tthis.timeScale = 1.0;\n\n}\n\nAnimationMixer.prototype = Object.assign( Object.create( EventDispatcher.prototype ), {\n\n\tconstructor: AnimationMixer,\n\n\t_bindAction: function ( action, prototypeAction ) {\n\n\t\tvar root = action._localRoot || this._root,\n\t\t\ttracks = action._clip.tracks,\n\t\t\tnTracks = tracks.length,\n\t\t\tbindings = action._propertyBindings,\n\t\t\tinterpolants = action._interpolants,\n\t\t\trootUuid = root.uuid,\n\t\t\tbindingsByRoot = this._bindingsByRootAndName,\n\t\t\tbindingsByName = bindingsByRoot[ rootUuid ];\n\n\t\tif ( bindingsByName === undefined ) {\n\n\t\t\tbindingsByName = {};\n\t\t\tbindingsByRoot[ rootUuid ] = bindingsByName;\n\n\t\t}\n\n\t\tfor ( var i = 0; i !== nTracks; ++ i ) {\n\n\t\t\tvar track = tracks[ i ],\n\t\t\t\ttrackName = track.name,\n\t\t\t\tbinding = bindingsByName[ trackName ];\n\n\t\t\tif ( binding !== undefined ) {\n\n\t\t\t\tbindings[ i ] = binding;\n\n\t\t\t} else {\n\n\t\t\t\tbinding = bindings[ i ];\n\n\t\t\t\tif ( binding !== undefined ) {\n\n\t\t\t\t\t// existing binding, make sure the cache knows\n\n\t\t\t\t\tif ( binding._cacheIndex === null ) {\n\n\t\t\t\t\t\t++ binding.referenceCount;\n\t\t\t\t\t\tthis._addInactiveBinding( binding, rootUuid, trackName );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t\tvar path = prototypeAction && prototypeAction.\n\t\t\t\t\t_propertyBindings[ i ].binding.parsedPath;\n\n\t\t\t\tbinding = new PropertyMixer(\n\t\t\t\t\tPropertyBinding.create( root, trackName, path ),\n\t\t\t\t\ttrack.ValueTypeName, track.getValueSize() );\n\n\t\t\t\t++ binding.referenceCount;\n\t\t\t\tthis._addInactiveBinding( binding, rootUuid, trackName );\n\n\t\t\t\tbindings[ i ] = binding;\n\n\t\t\t}\n\n\t\t\tinterpolants[ i ].resultBuffer = binding.buffer;\n\n\t\t}\n\n\t},\n\n\t_activateAction: function ( action ) {\n\n\t\tif ( ! this._isActiveAction( action ) ) {\n\n\t\t\tif ( action._cacheIndex === null ) {\n\n\t\t\t\t// this action has been forgotten by the cache, but the user\n\t\t\t\t// appears to be still using it -> rebind\n\n\t\t\t\tvar rootUuid = ( action._localRoot || this._root ).uuid,\n\t\t\t\t\tclipUuid = action._clip.uuid,\n\t\t\t\t\tactionsForClip = this._actionsByClip[ clipUuid ];\n\n\t\t\t\tthis._bindAction( action,\n\t\t\t\t\tactionsForClip && actionsForClip.knownActions[ 0 ] );\n\n\t\t\t\tthis._addInactiveAction( action, clipUuid, rootUuid );\n\n\t\t\t}\n\n\t\t\tvar bindings = action._propertyBindings;\n\n\t\t\t// increment reference counts / sort out state\n\t\t\tfor ( var i = 0, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\t\tvar binding = bindings[ i ];\n\n\t\t\t\tif ( binding.useCount ++ === 0 ) {\n\n\t\t\t\t\tthis._lendBinding( binding );\n\t\t\t\t\tbinding.saveOriginalState();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis._lendAction( action );\n\n\t\t}\n\n\t},\n\n\t_deactivateAction: function ( action ) {\n\n\t\tif ( this._isActiveAction( action ) ) {\n\n\t\t\tvar bindings = action._propertyBindings;\n\n\t\t\t// decrement reference counts / sort out state\n\t\t\tfor ( var i = 0, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\t\tvar binding = bindings[ i ];\n\n\t\t\t\tif ( -- binding.useCount === 0 ) {\n\n\t\t\t\t\tbinding.restoreOriginalState();\n\t\t\t\t\tthis._takeBackBinding( binding );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis._takeBackAction( action );\n\n\t\t}\n\n\t},\n\n\t// Memory manager\n\n\t_initMemoryManager: function () {\n\n\t\tthis._actions = []; // 'nActiveActions' followed by inactive ones\n\t\tthis._nActiveActions = 0;\n\n\t\tthis._actionsByClip = {};\n\t\t// inside:\n\t\t// {\n\t\t// \t\tknownActions: Array< AnimationAction >\t- used as prototypes\n\t\t// \t\tactionByRoot: AnimationAction\t\t\t- lookup\n\t\t// }\n\n\n\t\tthis._bindings = []; // 'nActiveBindings' followed by inactive ones\n\t\tthis._nActiveBindings = 0;\n\n\t\tthis._bindingsByRootAndName = {}; // inside: Map< name, PropertyMixer >\n\n\n\t\tthis._controlInterpolants = []; // same game as above\n\t\tthis._nActiveControlInterpolants = 0;\n\n\t\tvar scope = this;\n\n\t\tthis.stats = {\n\n\t\t\tactions: {\n\t\t\t\tget total() {\n\n\t\t\t\t\treturn scope._actions.length;\n\n\t\t\t\t},\n\t\t\t\tget inUse() {\n\n\t\t\t\t\treturn scope._nActiveActions;\n\n\t\t\t\t}\n\t\t\t},\n\t\t\tbindings: {\n\t\t\t\tget total() {\n\n\t\t\t\t\treturn scope._bindings.length;\n\n\t\t\t\t},\n\t\t\t\tget inUse() {\n\n\t\t\t\t\treturn scope._nActiveBindings;\n\n\t\t\t\t}\n\t\t\t},\n\t\t\tcontrolInterpolants: {\n\t\t\t\tget total() {\n\n\t\t\t\t\treturn scope._controlInterpolants.length;\n\n\t\t\t\t},\n\t\t\t\tget inUse() {\n\n\t\t\t\t\treturn scope._nActiveControlInterpolants;\n\n\t\t\t\t}\n\t\t\t}\n\n\t\t};\n\n\t},\n\n\t// Memory management for AnimationAction objects\n\n\t_isActiveAction: function ( action ) {\n\n\t\tvar index = action._cacheIndex;\n\t\treturn index !== null && index < this._nActiveActions;\n\n\t},\n\n\t_addInactiveAction: function ( action, clipUuid, rootUuid ) {\n\n\t\tvar actions = this._actions,\n\t\t\tactionsByClip = this._actionsByClip,\n\t\t\tactionsForClip = actionsByClip[ clipUuid ];\n\n\t\tif ( actionsForClip === undefined ) {\n\n\t\t\tactionsForClip = {\n\n\t\t\t\tknownActions: [ action ],\n\t\t\t\tactionByRoot: {}\n\n\t\t\t};\n\n\t\t\taction._byClipCacheIndex = 0;\n\n\t\t\tactionsByClip[ clipUuid ] = actionsForClip;\n\n\t\t} else {\n\n\t\t\tvar knownActions = actionsForClip.knownActions;\n\n\t\t\taction._byClipCacheIndex = knownActions.length;\n\t\t\tknownActions.push( action );\n\n\t\t}\n\n\t\taction._cacheIndex = actions.length;\n\t\tactions.push( action );\n\n\t\tactionsForClip.actionByRoot[ rootUuid ] = action;\n\n\t},\n\n\t_removeInactiveAction: function ( action ) {\n\n\t\tvar actions = this._actions,\n\t\t\tlastInactiveAction = actions[ actions.length - 1 ],\n\t\t\tcacheIndex = action._cacheIndex;\n\n\t\tlastInactiveAction._cacheIndex = cacheIndex;\n\t\tactions[ cacheIndex ] = lastInactiveAction;\n\t\tactions.pop();\n\n\t\taction._cacheIndex = null;\n\n\n\t\tvar clipUuid = action._clip.uuid,\n\t\t\tactionsByClip = this._actionsByClip,\n\t\t\tactionsForClip = actionsByClip[ clipUuid ],\n\t\t\tknownActionsForClip = actionsForClip.knownActions,\n\n\t\t\tlastKnownAction =\n\t\t\t\tknownActionsForClip[ knownActionsForClip.length - 1 ],\n\n\t\t\tbyClipCacheIndex = action._byClipCacheIndex;\n\n\t\tlastKnownAction._byClipCacheIndex = byClipCacheIndex;\n\t\tknownActionsForClip[ byClipCacheIndex ] = lastKnownAction;\n\t\tknownActionsForClip.pop();\n\n\t\taction._byClipCacheIndex = null;\n\n\n\t\tvar actionByRoot = actionsForClip.actionByRoot,\n\t\t\trootUuid = ( action._localRoot || this._root ).uuid;\n\n\t\tdelete actionByRoot[ rootUuid ];\n\n\t\tif ( knownActionsForClip.length === 0 ) {\n\n\t\t\tdelete actionsByClip[ clipUuid ];\n\n\t\t}\n\n\t\tthis._removeInactiveBindingsForAction( action );\n\n\t},\n\n\t_removeInactiveBindingsForAction: function ( action ) {\n\n\t\tvar bindings = action._propertyBindings;\n\t\tfor ( var i = 0, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tvar binding = bindings[ i ];\n\n\t\t\tif ( -- binding.referenceCount === 0 ) {\n\n\t\t\t\tthis._removeInactiveBinding( binding );\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\t_lendAction: function ( action ) {\n\n\t\t// [ active actions | inactive actions ]\n\t\t// [ active actions >| inactive actions ]\n\t\t// s a\n\t\t// <-swap->\n\t\t// a s\n\n\t\tvar actions = this._actions,\n\t\t\tprevIndex = action._cacheIndex,\n\n\t\t\tlastActiveIndex = this._nActiveActions ++,\n\n\t\t\tfirstInactiveAction = actions[ lastActiveIndex ];\n\n\t\taction._cacheIndex = lastActiveIndex;\n\t\tactions[ lastActiveIndex ] = action;\n\n\t\tfirstInactiveAction._cacheIndex = prevIndex;\n\t\tactions[ prevIndex ] = firstInactiveAction;\n\n\t},\n\n\t_takeBackAction: function ( action ) {\n\n\t\t// [ active actions | inactive actions ]\n\t\t// [ active actions |< inactive actions ]\n\t\t// a s\n\t\t// <-swap->\n\t\t// s a\n\n\t\tvar actions = this._actions,\n\t\t\tprevIndex = action._cacheIndex,\n\n\t\t\tfirstInactiveIndex = -- this._nActiveActions,\n\n\t\t\tlastActiveAction = actions[ firstInactiveIndex ];\n\n\t\taction._cacheIndex = firstInactiveIndex;\n\t\tactions[ firstInactiveIndex ] = action;\n\n\t\tlastActiveAction._cacheIndex = prevIndex;\n\t\tactions[ prevIndex ] = lastActiveAction;\n\n\t},\n\n\t// Memory management for PropertyMixer objects\n\n\t_addInactiveBinding: function ( binding, rootUuid, trackName ) {\n\n\t\tvar bindingsByRoot = this._bindingsByRootAndName,\n\t\t\tbindingByName = bindingsByRoot[ rootUuid ],\n\n\t\t\tbindings = this._bindings;\n\n\t\tif ( bindingByName === undefined ) {\n\n\t\t\tbindingByName = {};\n\t\t\tbindingsByRoot[ rootUuid ] = bindingByName;\n\n\t\t}\n\n\t\tbindingByName[ trackName ] = binding;\n\n\t\tbinding._cacheIndex = bindings.length;\n\t\tbindings.push( binding );\n\n\t},\n\n\t_removeInactiveBinding: function ( binding ) {\n\n\t\tvar bindings = this._bindings,\n\t\t\tpropBinding = binding.binding,\n\t\t\trootUuid = propBinding.rootNode.uuid,\n\t\t\ttrackName = propBinding.path,\n\t\t\tbindingsByRoot = this._bindingsByRootAndName,\n\t\t\tbindingByName = bindingsByRoot[ rootUuid ],\n\n\t\t\tlastInactiveBinding = bindings[ bindings.length - 1 ],\n\t\t\tcacheIndex = binding._cacheIndex;\n\n\t\tlastInactiveBinding._cacheIndex = cacheIndex;\n\t\tbindings[ cacheIndex ] = lastInactiveBinding;\n\t\tbindings.pop();\n\n\t\tdelete bindingByName[ trackName ];\n\n\t\tremove_empty_map: {\n\n\t\t\tfor ( var _ in bindingByName ) break remove_empty_map; // eslint-disable-line no-unused-vars\n\n\t\t\tdelete bindingsByRoot[ rootUuid ];\n\n\t\t}\n\n\t},\n\n\t_lendBinding: function ( binding ) {\n\n\t\tvar bindings = this._bindings,\n\t\t\tprevIndex = binding._cacheIndex,\n\n\t\t\tlastActiveIndex = this._nActiveBindings ++,\n\n\t\t\tfirstInactiveBinding = bindings[ lastActiveIndex ];\n\n\t\tbinding._cacheIndex = lastActiveIndex;\n\t\tbindings[ lastActiveIndex ] = binding;\n\n\t\tfirstInactiveBinding._cacheIndex = prevIndex;\n\t\tbindings[ prevIndex ] = firstInactiveBinding;\n\n\t},\n\n\t_takeBackBinding: function ( binding ) {\n\n\t\tvar bindings = this._bindings,\n\t\t\tprevIndex = binding._cacheIndex,\n\n\t\t\tfirstInactiveIndex = -- this._nActiveBindings,\n\n\t\t\tlastActiveBinding = bindings[ firstInactiveIndex ];\n\n\t\tbinding._cacheIndex = firstInactiveIndex;\n\t\tbindings[ firstInactiveIndex ] = binding;\n\n\t\tlastActiveBinding._cacheIndex = prevIndex;\n\t\tbindings[ prevIndex ] = lastActiveBinding;\n\n\t},\n\n\n\t// Memory management of Interpolants for weight and time scale\n\n\t_lendControlInterpolant: function () {\n\n\t\tvar interpolants = this._controlInterpolants,\n\t\t\tlastActiveIndex = this._nActiveControlInterpolants ++,\n\t\t\tinterpolant = interpolants[ lastActiveIndex ];\n\n\t\tif ( interpolant === undefined ) {\n\n\t\t\tinterpolant = new LinearInterpolant(\n\t\t\t\tnew Float32Array( 2 ), new Float32Array( 2 ),\n\t\t\t\t1, this._controlInterpolantsResultBuffer );\n\n\t\t\tinterpolant.__cacheIndex = lastActiveIndex;\n\t\t\tinterpolants[ lastActiveIndex ] = interpolant;\n\n\t\t}\n\n\t\treturn interpolant;\n\n\t},\n\n\t_takeBackControlInterpolant: function ( interpolant ) {\n\n\t\tvar interpolants = this._controlInterpolants,\n\t\t\tprevIndex = interpolant.__cacheIndex,\n\n\t\t\tfirstInactiveIndex = -- this._nActiveControlInterpolants,\n\n\t\t\tlastActiveInterpolant = interpolants[ firstInactiveIndex ];\n\n\t\tinterpolant.__cacheIndex = firstInactiveIndex;\n\t\tinterpolants[ firstInactiveIndex ] = interpolant;\n\n\t\tlastActiveInterpolant.__cacheIndex = prevIndex;\n\t\tinterpolants[ prevIndex ] = lastActiveInterpolant;\n\n\t},\n\n\t_controlInterpolantsResultBuffer: new Float32Array( 1 ),\n\n\t// return an action for a clip optionally using a custom root target\n\t// object (this method allocates a lot of dynamic memory in case a\n\t// previously unknown clip/root combination is specified)\n\tclipAction: function ( clip, optionalRoot ) {\n\n\t\tvar root = optionalRoot || this._root,\n\t\t\trootUuid = root.uuid,\n\n\t\t\tclipObject = typeof clip === 'string' ?\n\t\t\t\tAnimationClip.findByName( root, clip ) : clip,\n\n\t\t\tclipUuid = clipObject !== null ? clipObject.uuid : clip,\n\n\t\t\tactionsForClip = this._actionsByClip[ clipUuid ],\n\t\t\tprototypeAction = null;\n\n\t\tif ( actionsForClip !== undefined ) {\n\n\t\t\tvar existingAction =\n\t\t\t\t\tactionsForClip.actionByRoot[ rootUuid ];\n\n\t\t\tif ( existingAction !== undefined ) {\n\n\t\t\t\treturn existingAction;\n\n\t\t\t}\n\n\t\t\t// we know the clip, so we don't have to parse all\n\t\t\t// the bindings again but can just copy\n\t\t\tprototypeAction = actionsForClip.knownActions[ 0 ];\n\n\t\t\t// also, take the clip from the prototype action\n\t\t\tif ( clipObject === null )\n\t\t\t\tclipObject = prototypeAction._clip;\n\n\t\t}\n\n\t\t// clip must be known when specified via string\n\t\tif ( clipObject === null ) return null;\n\n\t\t// allocate all resources required to run it\n\t\tvar newAction = new AnimationAction( this, clipObject, optionalRoot );\n\n\t\tthis._bindAction( newAction, prototypeAction );\n\n\t\t// and make the action known to the memory manager\n\t\tthis._addInactiveAction( newAction, clipUuid, rootUuid );\n\n\t\treturn newAction;\n\n\t},\n\n\t// get an existing action\n\texistingAction: function ( clip, optionalRoot ) {\n\n\t\tvar root = optionalRoot || this._root,\n\t\t\trootUuid = root.uuid,\n\n\t\t\tclipObject = typeof clip === 'string' ?\n\t\t\t\tAnimationClip.findByName( root, clip ) : clip,\n\n\t\t\tclipUuid = clipObject ? clipObject.uuid : clip,\n\n\t\t\tactionsForClip = this._actionsByClip[ clipUuid ];\n\n\t\tif ( actionsForClip !== undefined ) {\n\n\t\t\treturn actionsForClip.actionByRoot[ rootUuid ] || null;\n\n\t\t}\n\n\t\treturn null;\n\n\t},\n\n\t// deactivates all previously scheduled actions\n\tstopAllAction: function () {\n\n\t\tvar actions = this._actions,\n\t\t\tnActions = this._nActiveActions,\n\t\t\tbindings = this._bindings,\n\t\t\tnBindings = this._nActiveBindings;\n\n\t\tthis._nActiveActions = 0;\n\t\tthis._nActiveBindings = 0;\n\n\t\tfor ( var i = 0; i !== nActions; ++ i ) {\n\n\t\t\tactions[ i ].reset();\n\n\t\t}\n\n\t\tfor ( var i = 0; i !== nBindings; ++ i ) {\n\n\t\t\tbindings[ i ].useCount = 0;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\t// advance the time and update apply the animation\n\tupdate: function ( deltaTime ) {\n\n\t\tdeltaTime *= this.timeScale;\n\n\t\tvar actions = this._actions,\n\t\t\tnActions = this._nActiveActions,\n\n\t\t\ttime = this.time += deltaTime,\n\t\t\ttimeDirection = Math.sign( deltaTime ),\n\n\t\t\taccuIndex = this._accuIndex ^= 1;\n\n\t\t// run active actions\n\n\t\tfor ( var i = 0; i !== nActions; ++ i ) {\n\n\t\t\tvar action = actions[ i ];\n\n\t\t\taction._update( time, deltaTime, timeDirection, accuIndex );\n\n\t\t}\n\n\t\t// update scene graph\n\n\t\tvar bindings = this._bindings,\n\t\t\tnBindings = this._nActiveBindings;\n\n\t\tfor ( var i = 0; i !== nBindings; ++ i ) {\n\n\t\t\tbindings[ i ].apply( accuIndex );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\t// return this mixer's root target object\n\tgetRoot: function () {\n\n\t\treturn this._root;\n\n\t},\n\n\t// free all resources specific to a particular clip\n\tuncacheClip: function ( clip ) {\n\n\t\tvar actions = this._actions,\n\t\t\tclipUuid = clip.uuid,\n\t\t\tactionsByClip = this._actionsByClip,\n\t\t\tactionsForClip = actionsByClip[ clipUuid ];\n\n\t\tif ( actionsForClip !== undefined ) {\n\n\t\t\t// note: just calling _removeInactiveAction would mess up the\n\t\t\t// iteration state and also require updating the state we can\n\t\t\t// just throw away\n\n\t\t\tvar actionsToRemove = actionsForClip.knownActions;\n\n\t\t\tfor ( var i = 0, n = actionsToRemove.length; i !== n; ++ i ) {\n\n\t\t\t\tvar action = actionsToRemove[ i ];\n\n\t\t\t\tthis._deactivateAction( action );\n\n\t\t\t\tvar cacheIndex = action._cacheIndex,\n\t\t\t\t\tlastInactiveAction = actions[ actions.length - 1 ];\n\n\t\t\t\taction._cacheIndex = null;\n\t\t\t\taction._byClipCacheIndex = null;\n\n\t\t\t\tlastInactiveAction._cacheIndex = cacheIndex;\n\t\t\t\tactions[ cacheIndex ] = lastInactiveAction;\n\t\t\t\tactions.pop();\n\n\t\t\t\tthis._removeInactiveBindingsForAction( action );\n\n\t\t\t}\n\n\t\t\tdelete actionsByClip[ clipUuid ];\n\n\t\t}\n\n\t},\n\n\t// free all resources specific to a particular root target object\n\tuncacheRoot: function ( root ) {\n\n\t\tvar rootUuid = root.uuid,\n\t\t\tactionsByClip = this._actionsByClip;\n\n\t\tfor ( var clipUuid in actionsByClip ) {\n\n\t\t\tvar actionByRoot = actionsByClip[ clipUuid ].actionByRoot,\n\t\t\t\taction = actionByRoot[ rootUuid ];\n\n\t\t\tif ( action !== undefined ) {\n\n\t\t\t\tthis._deactivateAction( action );\n\t\t\t\tthis._removeInactiveAction( action );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar bindingsByRoot = this._bindingsByRootAndName,\n\t\t\tbindingByName = bindingsByRoot[ rootUuid ];\n\n\t\tif ( bindingByName !== undefined ) {\n\n\t\t\tfor ( var trackName in bindingByName ) {\n\n\t\t\t\tvar binding = bindingByName[ trackName ];\n\t\t\t\tbinding.restoreOriginalState();\n\t\t\t\tthis._removeInactiveBinding( binding );\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\t// remove a targeted clip from the cache\n\tuncacheAction: function ( clip, optionalRoot ) {\n\n\t\tvar action = this.existingAction( clip, optionalRoot );\n\n\t\tif ( action !== null ) {\n\n\t\t\tthis._deactivateAction( action );\n\t\t\tthis._removeInactiveAction( action );\n\n\t\t}\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction Uniform( value ) {\n\n\tif ( typeof value === 'string' ) {\n\n\t\tconsole.warn( 'THREE.Uniform: Type parameter is no longer needed.' );\n\t\tvalue = arguments[ 1 ];\n\n\t}\n\n\tthis.value = value;\n\n}\n\nUniform.prototype.clone = function () {\n\n\treturn new Uniform( this.value.clone === undefined ? this.value : this.value.clone() );\n\n};\n\n/**\n * @author benaadams / https://twitter.com/ben_a_adams\n */\n\nfunction InstancedBufferGeometry() {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'InstancedBufferGeometry';\n\tthis.maxInstancedCount = undefined;\n\n}\n\nInstancedBufferGeometry.prototype = Object.assign( Object.create( BufferGeometry.prototype ), {\n\n\tconstructor: InstancedBufferGeometry,\n\n\tisInstancedBufferGeometry: true,\n\n\tcopy: function ( source ) {\n\n\t\tBufferGeometry.prototype.copy.call( this, source );\n\n\t\tthis.maxInstancedCount = source.maxInstancedCount;\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n} );\n\n/**\n * @author benaadams / https://twitter.com/ben_a_adams\n */\n\nfunction InterleavedBufferAttribute( interleavedBuffer, itemSize, offset, normalized ) {\n\n\tthis.data = interleavedBuffer;\n\tthis.itemSize = itemSize;\n\tthis.offset = offset;\n\n\tthis.normalized = normalized === true;\n\n}\n\nObject.defineProperties( InterleavedBufferAttribute.prototype, {\n\n\tcount: {\n\n\t\tget: function () {\n\n\t\t\treturn this.data.count;\n\n\t\t}\n\n\t},\n\n\tarray: {\n\n\t\tget: function () {\n\n\t\t\treturn this.data.array;\n\n\t\t}\n\n\t}\n\n} );\n\nObject.assign( InterleavedBufferAttribute.prototype, {\n\n\tisInterleavedBufferAttribute: true,\n\n\tsetX: function ( index, x ) {\n\n\t\tthis.data.array[ index * this.data.stride + this.offset ] = x;\n\n\t\treturn this;\n\n\t},\n\n\tsetY: function ( index, y ) {\n\n\t\tthis.data.array[ index * this.data.stride + this.offset + 1 ] = y;\n\n\t\treturn this;\n\n\t},\n\n\tsetZ: function ( index, z ) {\n\n\t\tthis.data.array[ index * this.data.stride + this.offset + 2 ] = z;\n\n\t\treturn this;\n\n\t},\n\n\tsetW: function ( index, w ) {\n\n\t\tthis.data.array[ index * this.data.stride + this.offset + 3 ] = w;\n\n\t\treturn this;\n\n\t},\n\n\tgetX: function ( index ) {\n\n\t\treturn this.data.array[ index * this.data.stride + this.offset ];\n\n\t},\n\n\tgetY: function ( index ) {\n\n\t\treturn this.data.array[ index * this.data.stride + this.offset + 1 ];\n\n\t},\n\n\tgetZ: function ( index ) {\n\n\t\treturn this.data.array[ index * this.data.stride + this.offset + 2 ];\n\n\t},\n\n\tgetW: function ( index ) {\n\n\t\treturn this.data.array[ index * this.data.stride + this.offset + 3 ];\n\n\t},\n\n\tsetXY: function ( index, x, y ) {\n\n\t\tindex = index * this.data.stride + this.offset;\n\n\t\tthis.data.array[ index + 0 ] = x;\n\t\tthis.data.array[ index + 1 ] = y;\n\n\t\treturn this;\n\n\t},\n\n\tsetXYZ: function ( index, x, y, z ) {\n\n\t\tindex = index * this.data.stride + this.offset;\n\n\t\tthis.data.array[ index + 0 ] = x;\n\t\tthis.data.array[ index + 1 ] = y;\n\t\tthis.data.array[ index + 2 ] = z;\n\n\t\treturn this;\n\n\t},\n\n\tsetXYZW: function ( index, x, y, z, w ) {\n\n\t\tindex = index * this.data.stride + this.offset;\n\n\t\tthis.data.array[ index + 0 ] = x;\n\t\tthis.data.array[ index + 1 ] = y;\n\t\tthis.data.array[ index + 2 ] = z;\n\t\tthis.data.array[ index + 3 ] = w;\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author benaadams / https://twitter.com/ben_a_adams\n */\n\nfunction InterleavedBuffer( array, stride ) {\n\n\tthis.array = array;\n\tthis.stride = stride;\n\tthis.count = array !== undefined ? array.length / stride : 0;\n\n\tthis.dynamic = false;\n\tthis.updateRange = { offset: 0, count: - 1 };\n\n\tthis.version = 0;\n\n}\n\nObject.defineProperty( InterleavedBuffer.prototype, 'needsUpdate', {\n\n\tset: function ( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n} );\n\nObject.assign( InterleavedBuffer.prototype, {\n\n\tisInterleavedBuffer: true,\n\n\tonUploadCallback: function () {},\n\n\tsetArray: function ( array ) {\n\n\t\tif ( Array.isArray( array ) ) {\n\n\t\t\tthrow new TypeError( 'THREE.BufferAttribute: array should be a Typed Array.' );\n\n\t\t}\n\n\t\tthis.count = array !== undefined ? array.length / this.stride : 0;\n\t\tthis.array = array;\n\n\t\treturn this;\n\n\t},\n\n\tsetDynamic: function ( value ) {\n\n\t\tthis.dynamic = value;\n\n\t\treturn this;\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tthis.array = new source.array.constructor( source.array );\n\t\tthis.count = source.count;\n\t\tthis.stride = source.stride;\n\t\tthis.dynamic = source.dynamic;\n\n\t\treturn this;\n\n\t},\n\n\tcopyAt: function ( index1, attribute, index2 ) {\n\n\t\tindex1 *= this.stride;\n\t\tindex2 *= attribute.stride;\n\n\t\tfor ( var i = 0, l = this.stride; i < l; i ++ ) {\n\n\t\t\tthis.array[ index1 + i ] = attribute.array[ index2 + i ];\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tset: function ( value, offset ) {\n\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tthis.array.set( value, offset );\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tonUpload: function ( callback ) {\n\n\t\tthis.onUploadCallback = callback;\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author benaadams / https://twitter.com/ben_a_adams\n */\n\nfunction InstancedInterleavedBuffer( array, stride, meshPerAttribute ) {\n\n\tInterleavedBuffer.call( this, array, stride );\n\n\tthis.meshPerAttribute = meshPerAttribute || 1;\n\n}\n\nInstancedInterleavedBuffer.prototype = Object.assign( Object.create( InterleavedBuffer.prototype ), {\n\n\tconstructor: InstancedInterleavedBuffer,\n\n\tisInstancedInterleavedBuffer: true,\n\n\tcopy: function ( source ) {\n\n\t\tInterleavedBuffer.prototype.copy.call( this, source );\n\n\t\tthis.meshPerAttribute = source.meshPerAttribute;\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author benaadams / https://twitter.com/ben_a_adams\n */\n\nfunction InstancedBufferAttribute( array, itemSize, meshPerAttribute ) {\n\n\tBufferAttribute.call( this, array, itemSize );\n\n\tthis.meshPerAttribute = meshPerAttribute || 1;\n\n}\n\nInstancedBufferAttribute.prototype = Object.assign( Object.create( BufferAttribute.prototype ), {\n\n\tconstructor: InstancedBufferAttribute,\n\n\tisInstancedBufferAttribute: true,\n\n\tcopy: function ( source ) {\n\n\t\tBufferAttribute.prototype.copy.call( this, source );\n\n\t\tthis.meshPerAttribute = source.meshPerAttribute;\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author bhouston / http://clara.io/\n * @author stephomi / http://stephaneginier.com/\n */\n\nfunction Raycaster( origin, direction, near, far ) {\n\n\tthis.ray = new Ray( origin, direction );\n\t// direction is assumed to be normalized (for accurate distance calculations)\n\n\tthis.near = near || 0;\n\tthis.far = far || Infinity;\n\n\tthis.params = {\n\t\tMesh: {},\n\t\tLine: {},\n\t\tLOD: {},\n\t\tPoints: { threshold: 1 },\n\t\tSprite: {}\n\t};\n\n\tObject.defineProperties( this.params, {\n\t\tPointCloud: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.Raycaster: params.PointCloud has been renamed to params.Points.' );\n\t\t\t\treturn this.Points;\n\n\t\t\t}\n\t\t}\n\t} );\n\n}\n\nfunction ascSort( a, b ) {\n\n\treturn a.distance - b.distance;\n\n}\n\nfunction intersectObject( object, raycaster, intersects, recursive ) {\n\n\tif ( object.visible === false ) return;\n\n\tobject.raycast( raycaster, intersects );\n\n\tif ( recursive === true ) {\n\n\t\tvar children = object.children;\n\n\t\tfor ( var i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tintersectObject( children[ i ], raycaster, intersects, true );\n\n\t\t}\n\n\t}\n\n}\n\nObject.assign( Raycaster.prototype, {\n\n\tlinePrecision: 1,\n\n\tset: function ( origin, direction ) {\n\n\t\t// direction is assumed to be normalized (for accurate distance calculations)\n\n\t\tthis.ray.set( origin, direction );\n\n\t},\n\n\tsetFromCamera: function ( coords, camera ) {\n\n\t\tif ( ( camera && camera.isPerspectiveCamera ) ) {\n\n\t\t\tthis.ray.origin.setFromMatrixPosition( camera.matrixWorld );\n\t\t\tthis.ray.direction.set( coords.x, coords.y, 0.5 ).unproject( camera ).sub( this.ray.origin ).normalize();\n\n\t\t} else if ( ( camera && camera.isOrthographicCamera ) ) {\n\n\t\t\tthis.ray.origin.set( coords.x, coords.y, ( camera.near + camera.far ) / ( camera.near - camera.far ) ).unproject( camera ); // set origin in plane of camera\n\t\t\tthis.ray.direction.set( 0, 0, - 1 ).transformDirection( camera.matrixWorld );\n\n\t\t} else {\n\n\t\t\tconsole.error( 'THREE.Raycaster: Unsupported camera type.' );\n\n\t\t}\n\n\t},\n\n\tintersectObject: function ( object, recursive, optionalTarget ) {\n\n\t\tvar intersects = optionalTarget || [];\n\n\t\tintersectObject( object, this, intersects, recursive );\n\n\t\tintersects.sort( ascSort );\n\n\t\treturn intersects;\n\n\t},\n\n\tintersectObjects: function ( objects, recursive, optionalTarget ) {\n\n\t\tvar intersects = optionalTarget || [];\n\n\t\tif ( Array.isArray( objects ) === false ) {\n\n\t\t\tconsole.warn( 'THREE.Raycaster.intersectObjects: objects is not an Array.' );\n\t\t\treturn intersects;\n\n\t\t}\n\n\t\tfor ( var i = 0, l = objects.length; i < l; i ++ ) {\n\n\t\t\tintersectObject( objects[ i ], this, intersects, recursive );\n\n\t\t}\n\n\t\tintersects.sort( ascSort );\n\n\t\treturn intersects;\n\n\t}\n\n} );\n\n/**\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction Clock( autoStart ) {\n\n\tthis.autoStart = ( autoStart !== undefined ) ? autoStart : true;\n\n\tthis.startTime = 0;\n\tthis.oldTime = 0;\n\tthis.elapsedTime = 0;\n\n\tthis.running = false;\n\n}\n\nObject.assign( Clock.prototype, {\n\n\tstart: function () {\n\n\t\tthis.startTime = ( typeof performance === 'undefined' ? Date : performance ).now(); // see #10732\n\n\t\tthis.oldTime = this.startTime;\n\t\tthis.elapsedTime = 0;\n\t\tthis.running = true;\n\n\t},\n\n\tstop: function () {\n\n\t\tthis.getElapsedTime();\n\t\tthis.running = false;\n\t\tthis.autoStart = false;\n\n\t},\n\n\tgetElapsedTime: function () {\n\n\t\tthis.getDelta();\n\t\treturn this.elapsedTime;\n\n\t},\n\n\tgetDelta: function () {\n\n\t\tvar diff = 0;\n\n\t\tif ( this.autoStart && ! this.running ) {\n\n\t\t\tthis.start();\n\t\t\treturn 0;\n\n\t\t}\n\n\t\tif ( this.running ) {\n\n\t\t\tvar newTime = ( typeof performance === 'undefined' ? Date : performance ).now();\n\n\t\t\tdiff = ( newTime - this.oldTime ) / 1000;\n\t\t\tthis.oldTime = newTime;\n\n\t\t\tthis.elapsedTime += diff;\n\n\t\t}\n\n\t\treturn diff;\n\n\t}\n\n} );\n\n/**\n * @author bhouston / http://clara.io\n * @author WestLangley / http://github.com/WestLangley\n *\n * Ref: https://en.wikipedia.org/wiki/Spherical_coordinate_system\n *\n * The poles (phi) are at the positive and negative y axis.\n * The equator starts at positive z.\n */\n\nfunction Spherical( radius, phi, theta ) {\n\n\tthis.radius = ( radius !== undefined ) ? radius : 1.0;\n\tthis.phi = ( phi !== undefined ) ? phi : 0; // up / down towards top and bottom pole\n\tthis.theta = ( theta !== undefined ) ? theta : 0; // around the equator of the sphere\n\n\treturn this;\n\n}\n\nObject.assign( Spherical.prototype, {\n\n\tset: function ( radius, phi, theta ) {\n\n\t\tthis.radius = radius;\n\t\tthis.phi = phi;\n\t\tthis.theta = theta;\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( other ) {\n\n\t\tthis.radius = other.radius;\n\t\tthis.phi = other.phi;\n\t\tthis.theta = other.theta;\n\n\t\treturn this;\n\n\t},\n\n\t// restrict phi to be betwee EPS and PI-EPS\n\tmakeSafe: function () {\n\n\t\tvar EPS = 0.000001;\n\t\tthis.phi = Math.max( EPS, Math.min( Math.PI - EPS, this.phi ) );\n\n\t\treturn this;\n\n\t},\n\n\tsetFromVector3: function ( vec3 ) {\n\n\t\tthis.radius = vec3.length();\n\n\t\tif ( this.radius === 0 ) {\n\n\t\t\tthis.theta = 0;\n\t\t\tthis.phi = 0;\n\n\t\t} else {\n\n\t\t\tthis.theta = Math.atan2( vec3.x, vec3.z ); // equator angle around y-up axis\n\t\t\tthis.phi = Math.acos( _Math.clamp( vec3.y / this.radius, - 1, 1 ) ); // polar angle\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author Mugen87 / https://github.com/Mugen87\n *\n * Ref: https://en.wikipedia.org/wiki/Cylindrical_coordinate_system\n *\n */\n\nfunction Cylindrical( radius, theta, y ) {\n\n\tthis.radius = ( radius !== undefined ) ? radius : 1.0; // distance from the origin to a point in the x-z plane\n\tthis.theta = ( theta !== undefined ) ? theta : 0; // counterclockwise angle in the x-z plane measured in radians from the positive z-axis\n\tthis.y = ( y !== undefined ) ? y : 0; // height above the x-z plane\n\n\treturn this;\n\n}\n\nObject.assign( Cylindrical.prototype, {\n\n\tset: function ( radius, theta, y ) {\n\n\t\tthis.radius = radius;\n\t\tthis.theta = theta;\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( other ) {\n\n\t\tthis.radius = other.radius;\n\t\tthis.theta = other.theta;\n\t\tthis.y = other.y;\n\n\t\treturn this;\n\n\t},\n\n\tsetFromVector3: function ( vec3 ) {\n\n\t\tthis.radius = Math.sqrt( vec3.x * vec3.x + vec3.z * vec3.z );\n\t\tthis.theta = Math.atan2( vec3.x, vec3.z );\n\t\tthis.y = vec3.y;\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/**\n * @author bhouston / http://clara.io\n */\n\nfunction Box2( min, max ) {\n\n\tthis.min = ( min !== undefined ) ? min : new Vector2( + Infinity, + Infinity );\n\tthis.max = ( max !== undefined ) ? max : new Vector2( - Infinity, - Infinity );\n\n}\n\nObject.assign( Box2.prototype, {\n\n\tset: function ( min, max ) {\n\n\t\tthis.min.copy( min );\n\t\tthis.max.copy( max );\n\n\t\treturn this;\n\n\t},\n\n\tsetFromPoints: function ( points ) {\n\n\t\tthis.makeEmpty();\n\n\t\tfor ( var i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\tthis.expandByPoint( points[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tsetFromCenterAndSize: function () {\n\n\t\tvar v1 = new Vector2();\n\n\t\treturn function setFromCenterAndSize( center, size ) {\n\n\t\t\tvar halfSize = v1.copy( size ).multiplyScalar( 0.5 );\n\t\t\tthis.min.copy( center ).sub( halfSize );\n\t\t\tthis.max.copy( center ).add( halfSize );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}(),\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( box ) {\n\n\t\tthis.min.copy( box.min );\n\t\tthis.max.copy( box.max );\n\n\t\treturn this;\n\n\t},\n\n\tmakeEmpty: function () {\n\n\t\tthis.min.x = this.min.y = + Infinity;\n\t\tthis.max.x = this.max.y = - Infinity;\n\n\t\treturn this;\n\n\t},\n\n\tisEmpty: function () {\n\n\t\t// this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes\n\n\t\treturn ( this.max.x < this.min.x ) || ( this.max.y < this.min.y );\n\n\t},\n\n\tgetCenter: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box2: .getCenter() target is now required' );\n\t\t\ttarget = new Vector2();\n\n\t\t}\n\n\t\treturn this.isEmpty() ? target.set( 0, 0 ) : target.addVectors( this.min, this.max ).multiplyScalar( 0.5 );\n\n\t},\n\n\tgetSize: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box2: .getSize() target is now required' );\n\t\t\ttarget = new Vector2();\n\n\t\t}\n\n\t\treturn this.isEmpty() ? target.set( 0, 0 ) : target.subVectors( this.max, this.min );\n\n\t},\n\n\texpandByPoint: function ( point ) {\n\n\t\tthis.min.min( point );\n\t\tthis.max.max( point );\n\n\t\treturn this;\n\n\t},\n\n\texpandByVector: function ( vector ) {\n\n\t\tthis.min.sub( vector );\n\t\tthis.max.add( vector );\n\n\t\treturn this;\n\n\t},\n\n\texpandByScalar: function ( scalar ) {\n\n\t\tthis.min.addScalar( - scalar );\n\t\tthis.max.addScalar( scalar );\n\n\t\treturn this;\n\n\t},\n\n\tcontainsPoint: function ( point ) {\n\n\t\treturn point.x < this.min.x || point.x > this.max.x ||\n\t\t\tpoint.y < this.min.y || point.y > this.max.y ? false : true;\n\n\t},\n\n\tcontainsBox: function ( box ) {\n\n\t\treturn this.min.x <= box.min.x && box.max.x <= this.max.x &&\n\t\t\tthis.min.y <= box.min.y && box.max.y <= this.max.y;\n\n\t},\n\n\tgetParameter: function ( point, target ) {\n\n\t\t// This can potentially have a divide by zero if the box\n\t\t// has a size dimension of 0.\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box2: .getParameter() target is now required' );\n\t\t\ttarget = new Vector2();\n\n\t\t}\n\n\t\treturn target.set(\n\t\t\t( point.x - this.min.x ) / ( this.max.x - this.min.x ),\n\t\t\t( point.y - this.min.y ) / ( this.max.y - this.min.y )\n\t\t);\n\n\t},\n\n\tintersectsBox: function ( box ) {\n\n\t\t// using 4 splitting planes to rule out intersections\n\n\t\treturn box.max.x < this.min.x || box.min.x > this.max.x ||\n\t\t\tbox.max.y < this.min.y || box.min.y > this.max.y ? false : true;\n\n\t},\n\n\tclampPoint: function ( point, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box2: .clampPoint() target is now required' );\n\t\t\ttarget = new Vector2();\n\n\t\t}\n\n\t\treturn target.copy( point ).clamp( this.min, this.max );\n\n\t},\n\n\tdistanceToPoint: function () {\n\n\t\tvar v1 = new Vector2();\n\n\t\treturn function distanceToPoint( point ) {\n\n\t\t\tvar clampedPoint = v1.copy( point ).clamp( this.min, this.max );\n\t\t\treturn clampedPoint.sub( point ).length();\n\n\t\t};\n\n\t}(),\n\n\tintersect: function ( box ) {\n\n\t\tthis.min.max( box.min );\n\t\tthis.max.min( box.max );\n\n\t\treturn this;\n\n\t},\n\n\tunion: function ( box ) {\n\n\t\tthis.min.min( box.min );\n\t\tthis.max.max( box.max );\n\n\t\treturn this;\n\n\t},\n\n\ttranslate: function ( offset ) {\n\n\t\tthis.min.add( offset );\n\t\tthis.max.add( offset );\n\n\t\treturn this;\n\n\t},\n\n\tequals: function ( box ) {\n\n\t\treturn box.min.equals( this.min ) && box.max.equals( this.max );\n\n\t}\n\n} );\n\n/**\n * @author alteredq / http://alteredqualia.com/\n */\n\nfunction ImmediateRenderObject( material ) {\n\n\tObject3D.call( this );\n\n\tthis.material = material;\n\tthis.render = function ( /* renderCallback */ ) {};\n\n}\n\nImmediateRenderObject.prototype = Object.create( Object3D.prototype );\nImmediateRenderObject.prototype.constructor = ImmediateRenderObject;\n\nImmediateRenderObject.prototype.isImmediateRenderObject = true;\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author WestLangley / http://github.com/WestLangley\n */\n\nfunction VertexNormalsHelper( object, size, hex, linewidth ) {\n\n\tthis.object = object;\n\n\tthis.size = ( size !== undefined ) ? size : 1;\n\n\tvar color = ( hex !== undefined ) ? hex : 0xff0000;\n\n\tvar width = ( linewidth !== undefined ) ? linewidth : 1;\n\n\t//\n\n\tvar nNormals = 0;\n\n\tvar objGeometry = this.object.geometry;\n\n\tif ( objGeometry && objGeometry.isGeometry ) {\n\n\t\tnNormals = objGeometry.faces.length * 3;\n\n\t} else if ( objGeometry && objGeometry.isBufferGeometry ) {\n\n\t\tnNormals = objGeometry.attributes.normal.count;\n\n\t}\n\n\t//\n\n\tvar geometry = new BufferGeometry();\n\n\tvar positions = new Float32BufferAttribute( nNormals * 2 * 3, 3 );\n\n\tgeometry.addAttribute( 'position', positions );\n\n\tLineSegments.call( this, geometry, new LineBasicMaterial( { color: color, linewidth: width } ) );\n\n\t//\n\n\tthis.matrixAutoUpdate = false;\n\n\tthis.update();\n\n}\n\nVertexNormalsHelper.prototype = Object.create( LineSegments.prototype );\nVertexNormalsHelper.prototype.constructor = VertexNormalsHelper;\n\nVertexNormalsHelper.prototype.update = ( function () {\n\n\tvar v1 = new Vector3();\n\tvar v2 = new Vector3();\n\tvar normalMatrix = new Matrix3();\n\n\treturn function update() {\n\n\t\tvar keys = [ 'a', 'b', 'c' ];\n\n\t\tthis.object.updateMatrixWorld( true );\n\n\t\tnormalMatrix.getNormalMatrix( this.object.matrixWorld );\n\n\t\tvar matrixWorld = this.object.matrixWorld;\n\n\t\tvar position = this.geometry.attributes.position;\n\n\t\t//\n\n\t\tvar objGeometry = this.object.geometry;\n\n\t\tif ( objGeometry && objGeometry.isGeometry ) {\n\n\t\t\tvar vertices = objGeometry.vertices;\n\n\t\t\tvar faces = objGeometry.faces;\n\n\t\t\tvar idx = 0;\n\n\t\t\tfor ( var i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\t\t\tvar face = faces[ i ];\n\n\t\t\t\tfor ( var j = 0, jl = face.vertexNormals.length; j < jl; j ++ ) {\n\n\t\t\t\t\tvar vertex = vertices[ face[ keys[ j ] ] ];\n\n\t\t\t\t\tvar normal = face.vertexNormals[ j ];\n\n\t\t\t\t\tv1.copy( vertex ).applyMatrix4( matrixWorld );\n\n\t\t\t\t\tv2.copy( normal ).applyMatrix3( normalMatrix ).normalize().multiplyScalar( this.size ).add( v1 );\n\n\t\t\t\t\tposition.setXYZ( idx, v1.x, v1.y, v1.z );\n\n\t\t\t\t\tidx = idx + 1;\n\n\t\t\t\t\tposition.setXYZ( idx, v2.x, v2.y, v2.z );\n\n\t\t\t\t\tidx = idx + 1;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else if ( objGeometry && objGeometry.isBufferGeometry ) {\n\n\t\t\tvar objPos = objGeometry.attributes.position;\n\n\t\t\tvar objNorm = objGeometry.attributes.normal;\n\n\t\t\tvar idx = 0;\n\n\t\t\t// for simplicity, ignore index and drawcalls, and render every normal\n\n\t\t\tfor ( var j = 0, jl = objPos.count; j < jl; j ++ ) {\n\n\t\t\t\tv1.set( objPos.getX( j ), objPos.getY( j ), objPos.getZ( j ) ).applyMatrix4( matrixWorld );\n\n\t\t\t\tv2.set( objNorm.getX( j ), objNorm.getY( j ), objNorm.getZ( j ) );\n\n\t\t\t\tv2.applyMatrix3( normalMatrix ).normalize().multiplyScalar( this.size ).add( v1 );\n\n\t\t\t\tposition.setXYZ( idx, v1.x, v1.y, v1.z );\n\n\t\t\t\tidx = idx + 1;\n\n\t\t\t\tposition.setXYZ( idx, v2.x, v2.y, v2.z );\n\n\t\t\t\tidx = idx + 1;\n\n\t\t\t}\n\n\t\t}\n\n\t\tposition.needsUpdate = true;\n\n\t};\n\n}() );\n\n/**\n * @author alteredq / http://alteredqualia.com/\n * @author mrdoob / http://mrdoob.com/\n * @author WestLangley / http://github.com/WestLangley\n */\n\nfunction SpotLightHelper( light, color ) {\n\n\tObject3D.call( this );\n\n\tthis.light = light;\n\tthis.light.updateMatrixWorld();\n\n\tthis.matrix = light.matrixWorld;\n\tthis.matrixAutoUpdate = false;\n\n\tthis.color = color;\n\n\tvar geometry = new BufferGeometry();\n\n\tvar positions = [\n\t\t0, 0, 0, \t0, 0, 1,\n\t\t0, 0, 0, \t1, 0, 1,\n\t\t0, 0, 0,\t- 1, 0, 1,\n\t\t0, 0, 0, \t0, 1, 1,\n\t\t0, 0, 0, \t0, - 1, 1\n\t];\n\n\tfor ( var i = 0, j = 1, l = 32; i < l; i ++, j ++ ) {\n\n\t\tvar p1 = ( i / l ) * Math.PI * 2;\n\t\tvar p2 = ( j / l ) * Math.PI * 2;\n\n\t\tpositions.push(\n\t\t\tMath.cos( p1 ), Math.sin( p1 ), 1,\n\t\t\tMath.cos( p2 ), Math.sin( p2 ), 1\n\t\t);\n\n\t}\n\n\tgeometry.addAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\n\tvar material = new LineBasicMaterial( { fog: false } );\n\n\tthis.cone = new LineSegments( geometry, material );\n\tthis.add( this.cone );\n\n\tthis.update();\n\n}\n\nSpotLightHelper.prototype = Object.create( Object3D.prototype );\nSpotLightHelper.prototype.constructor = SpotLightHelper;\n\nSpotLightHelper.prototype.dispose = function () {\n\n\tthis.cone.geometry.dispose();\n\tthis.cone.material.dispose();\n\n};\n\nSpotLightHelper.prototype.update = function () {\n\n\tvar vector = new Vector3();\n\tvar vector2 = new Vector3();\n\n\treturn function update() {\n\n\t\tthis.light.updateMatrixWorld();\n\n\t\tvar coneLength = this.light.distance ? this.light.distance : 1000;\n\t\tvar coneWidth = coneLength * Math.tan( this.light.angle );\n\n\t\tthis.cone.scale.set( coneWidth, coneWidth, coneLength );\n\n\t\tvector.setFromMatrixPosition( this.light.matrixWorld );\n\t\tvector2.setFromMatrixPosition( this.light.target.matrixWorld );\n\n\t\tthis.cone.lookAt( vector2.sub( vector ) );\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.cone.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tthis.cone.material.color.copy( this.light.color );\n\n\t\t}\n\n\t};\n\n}();\n\n/**\n * @author Sean Griffin / http://twitter.com/sgrif\n * @author Michael Guerrero / http://realitymeltdown.com\n * @author mrdoob / http://mrdoob.com/\n * @author ikerr / http://verold.com\n * @author Mugen87 / https://github.com/Mugen87\n */\n\nfunction getBoneList( object ) {\n\n\tvar boneList = [];\n\n\tif ( object && object.isBone ) {\n\n\t\tboneList.push( object );\n\n\t}\n\n\tfor ( var i = 0; i < object.children.length; i ++ ) {\n\n\t\tboneList.push.apply( boneList, getBoneList( object.children[ i ] ) );\n\n\t}\n\n\treturn boneList;\n\n}\n\nfunction SkeletonHelper( object ) {\n\n\tvar bones = getBoneList( object );\n\n\tvar geometry = new BufferGeometry();\n\n\tvar vertices = [];\n\tvar colors = [];\n\n\tvar color1 = new Color( 0, 0, 1 );\n\tvar color2 = new Color( 0, 1, 0 );\n\n\tfor ( var i = 0; i < bones.length; i ++ ) {\n\n\t\tvar bone = bones[ i ];\n\n\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\tvertices.push( 0, 0, 0 );\n\t\t\tvertices.push( 0, 0, 0 );\n\t\t\tcolors.push( color1.r, color1.g, color1.b );\n\t\t\tcolors.push( color2.r, color2.g, color2.b );\n\n\t\t}\n\n\t}\n\n\tgeometry.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tgeometry.addAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\tvar material = new LineBasicMaterial( { vertexColors: VertexColors, depthTest: false, depthWrite: false, transparent: true } );\n\n\tLineSegments.call( this, geometry, material );\n\n\tthis.root = object;\n\tthis.bones = bones;\n\n\tthis.matrix = object.matrixWorld;\n\tthis.matrixAutoUpdate = false;\n\n}\n\nSkeletonHelper.prototype = Object.create( LineSegments.prototype );\nSkeletonHelper.prototype.constructor = SkeletonHelper;\n\nSkeletonHelper.prototype.updateMatrixWorld = function () {\n\n\tvar vector = new Vector3();\n\n\tvar boneMatrix = new Matrix4();\n\tvar matrixWorldInv = new Matrix4();\n\n\treturn function updateMatrixWorld( force ) {\n\n\t\tvar bones = this.bones;\n\n\t\tvar geometry = this.geometry;\n\t\tvar position = geometry.getAttribute( 'position' );\n\n\t\tmatrixWorldInv.getInverse( this.root.matrixWorld );\n\n\t\tfor ( var i = 0, j = 0; i < bones.length; i ++ ) {\n\n\t\t\tvar bone = bones[ i ];\n\n\t\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\t\tboneMatrix.multiplyMatrices( matrixWorldInv, bone.matrixWorld );\n\t\t\t\tvector.setFromMatrixPosition( boneMatrix );\n\t\t\t\tposition.setXYZ( j, vector.x, vector.y, vector.z );\n\n\t\t\t\tboneMatrix.multiplyMatrices( matrixWorldInv, bone.parent.matrixWorld );\n\t\t\t\tvector.setFromMatrixPosition( boneMatrix );\n\t\t\t\tposition.setXYZ( j + 1, vector.x, vector.y, vector.z );\n\n\t\t\t\tj += 2;\n\n\t\t\t}\n\n\t\t}\n\n\t\tgeometry.getAttribute( 'position' ).needsUpdate = true;\n\n\t\tObject3D.prototype.updateMatrixWorld.call( this, force );\n\n\t};\n\n}();\n\n/**\n * @author alteredq / http://alteredqualia.com/\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction PointLightHelper( light, sphereSize, color ) {\n\n\tthis.light = light;\n\tthis.light.updateMatrixWorld();\n\n\tthis.color = color;\n\n\tvar geometry = new SphereBufferGeometry( sphereSize, 4, 2 );\n\tvar material = new MeshBasicMaterial( { wireframe: true, fog: false } );\n\n\tMesh.call( this, geometry, material );\n\n\tthis.matrix = this.light.matrixWorld;\n\tthis.matrixAutoUpdate = false;\n\n\tthis.update();\n\n\n\t/*\n\tvar distanceGeometry = new THREE.IcosahedronGeometry( 1, 2 );\n\tvar distanceMaterial = new THREE.MeshBasicMaterial( { color: hexColor, fog: false, wireframe: true, opacity: 0.1, transparent: true } );\n\n\tthis.lightSphere = new THREE.Mesh( bulbGeometry, bulbMaterial );\n\tthis.lightDistance = new THREE.Mesh( distanceGeometry, distanceMaterial );\n\n\tvar d = light.distance;\n\n\tif ( d === 0.0 ) {\n\n\t\tthis.lightDistance.visible = false;\n\n\t} else {\n\n\t\tthis.lightDistance.scale.set( d, d, d );\n\n\t}\n\n\tthis.add( this.lightDistance );\n\t*/\n\n}\n\nPointLightHelper.prototype = Object.create( Mesh.prototype );\nPointLightHelper.prototype.constructor = PointLightHelper;\n\nPointLightHelper.prototype.dispose = function () {\n\n\tthis.geometry.dispose();\n\tthis.material.dispose();\n\n};\n\nPointLightHelper.prototype.update = function () {\n\n\tif ( this.color !== undefined ) {\n\n\t\tthis.material.color.set( this.color );\n\n\t} else {\n\n\t\tthis.material.color.copy( this.light.color );\n\n\t}\n\n\t/*\n\tvar d = this.light.distance;\n\n\tif ( d === 0.0 ) {\n\n\t\tthis.lightDistance.visible = false;\n\n\t} else {\n\n\t\tthis.lightDistance.visible = true;\n\t\tthis.lightDistance.scale.set( d, d, d );\n\n\t}\n\t*/\n\n};\n\n/**\n * @author abelnation / http://github.com/abelnation\n * @author Mugen87 / http://github.com/Mugen87\n * @author WestLangley / http://github.com/WestLangley\n */\n\nfunction RectAreaLightHelper( light, color ) {\n\n\tObject3D.call( this );\n\n\tthis.light = light;\n\tthis.light.updateMatrixWorld();\n\n\tthis.matrix = light.matrixWorld;\n\tthis.matrixAutoUpdate = false;\n\n\tthis.color = color;\n\n\tvar material = new LineBasicMaterial( { fog: false } );\n\n\tvar geometry = new BufferGeometry();\n\n\tgeometry.addAttribute( 'position', new BufferAttribute( new Float32Array( 5 * 3 ), 3 ) );\n\n\tthis.line = new Line( geometry, material );\n\tthis.add( this.line );\n\n\n\tthis.update();\n\n}\n\nRectAreaLightHelper.prototype = Object.create( Object3D.prototype );\nRectAreaLightHelper.prototype.constructor = RectAreaLightHelper;\n\nRectAreaLightHelper.prototype.dispose = function () {\n\n\tthis.children[ 0 ].geometry.dispose();\n\tthis.children[ 0 ].material.dispose();\n\n};\n\nRectAreaLightHelper.prototype.update = function () {\n\n\t// calculate new dimensions of the helper\n\n\tvar hx = this.light.width * 0.5;\n\tvar hy = this.light.height * 0.5;\n\n\tvar position = this.line.geometry.attributes.position;\n\tvar array = position.array;\n\n\t// update vertices\n\n\tarray[ 0 ] = hx; array[ 1 ] = - hy; array[ 2 ] = 0;\n\tarray[ 3 ] = hx; array[ 4 ] = hy; array[ 5 ] = 0;\n\tarray[ 6 ] = - hx; array[ 7 ] = hy; array[ 8 ] = 0;\n\tarray[ 9 ] = - hx; array[ 10 ] = - hy; array[ 11 ] = 0;\n\tarray[ 12 ] = hx; array[ 13 ] = - hy; array[ 14 ] = 0;\n\n\tposition.needsUpdate = true;\n\n\tif ( this.color !== undefined ) {\n\n\t\tthis.line.material.color.set( this.color );\n\n\t} else {\n\n\t\tthis.line.material.color.copy( this.light.color );\n\n\t}\n\n};\n\n/**\n * @author alteredq / http://alteredqualia.com/\n * @author mrdoob / http://mrdoob.com/\n * @author Mugen87 / https://github.com/Mugen87\n */\n\nfunction HemisphereLightHelper( light, size, color ) {\n\n\tObject3D.call( this );\n\n\tthis.light = light;\n\tthis.light.updateMatrixWorld();\n\n\tthis.matrix = light.matrixWorld;\n\tthis.matrixAutoUpdate = false;\n\n\tthis.color = color;\n\n\tvar geometry = new OctahedronBufferGeometry( size );\n\tgeometry.rotateY( Math.PI * 0.5 );\n\n\tthis.material = new MeshBasicMaterial( { wireframe: true, fog: false } );\n\tif ( this.color === undefined ) this.material.vertexColors = VertexColors;\n\n\tvar position = geometry.getAttribute( 'position' );\n\tvar colors = new Float32Array( position.count * 3 );\n\n\tgeometry.addAttribute( 'color', new BufferAttribute( colors, 3 ) );\n\n\tthis.add( new Mesh( geometry, this.material ) );\n\n\tthis.update();\n\n}\n\nHemisphereLightHelper.prototype = Object.create( Object3D.prototype );\nHemisphereLightHelper.prototype.constructor = HemisphereLightHelper;\n\nHemisphereLightHelper.prototype.dispose = function () {\n\n\tthis.children[ 0 ].geometry.dispose();\n\tthis.children[ 0 ].material.dispose();\n\n};\n\nHemisphereLightHelper.prototype.update = function () {\n\n\tvar vector = new Vector3();\n\n\tvar color1 = new Color();\n\tvar color2 = new Color();\n\n\treturn function update() {\n\n\t\tvar mesh = this.children[ 0 ];\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tvar colors = mesh.geometry.getAttribute( 'color' );\n\n\t\t\tcolor1.copy( this.light.color );\n\t\t\tcolor2.copy( this.light.groundColor );\n\n\t\t\tfor ( var i = 0, l = colors.count; i < l; i ++ ) {\n\n\t\t\t\tvar color = ( i < ( l / 2 ) ) ? color1 : color2;\n\n\t\t\t\tcolors.setXYZ( i, color.r, color.g, color.b );\n\n\t\t\t}\n\n\t\t\tcolors.needsUpdate = true;\n\n\t\t}\n\n\t\tmesh.lookAt( vector.setFromMatrixPosition( this.light.matrixWorld ).negate() );\n\n\t};\n\n}();\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction GridHelper( size, divisions, color1, color2 ) {\n\n\tsize = size || 10;\n\tdivisions = divisions || 10;\n\tcolor1 = new Color( color1 !== undefined ? color1 : 0x444444 );\n\tcolor2 = new Color( color2 !== undefined ? color2 : 0x888888 );\n\n\tvar center = divisions / 2;\n\tvar step = size / divisions;\n\tvar halfSize = size / 2;\n\n\tvar vertices = [], colors = [];\n\n\tfor ( var i = 0, j = 0, k = - halfSize; i <= divisions; i ++, k += step ) {\n\n\t\tvertices.push( - halfSize, 0, k, halfSize, 0, k );\n\t\tvertices.push( k, 0, - halfSize, k, 0, halfSize );\n\n\t\tvar color = i === center ? color1 : color2;\n\n\t\tcolor.toArray( colors, j ); j += 3;\n\t\tcolor.toArray( colors, j ); j += 3;\n\t\tcolor.toArray( colors, j ); j += 3;\n\t\tcolor.toArray( colors, j ); j += 3;\n\n\t}\n\n\tvar geometry = new BufferGeometry();\n\tgeometry.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tgeometry.addAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\tvar material = new LineBasicMaterial( { vertexColors: VertexColors } );\n\n\tLineSegments.call( this, geometry, material );\n\n}\n\nGridHelper.prototype = Object.create( LineSegments.prototype );\nGridHelper.prototype.constructor = GridHelper;\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author Mugen87 / http://github.com/Mugen87\n * @author Hectate / http://www.github.com/Hectate\n */\n\nfunction PolarGridHelper( radius, radials, circles, divisions, color1, color2 ) {\n\n\tradius = radius || 10;\n\tradials = radials || 16;\n\tcircles = circles || 8;\n\tdivisions = divisions || 64;\n\tcolor1 = new Color( color1 !== undefined ? color1 : 0x444444 );\n\tcolor2 = new Color( color2 !== undefined ? color2 : 0x888888 );\n\n\tvar vertices = [];\n\tvar colors = [];\n\n\tvar x, z;\n\tvar v, i, j, r, color;\n\n\t// create the radials\n\n\tfor ( i = 0; i <= radials; i ++ ) {\n\n\t\tv = ( i / radials ) * ( Math.PI * 2 );\n\n\t\tx = Math.sin( v ) * radius;\n\t\tz = Math.cos( v ) * radius;\n\n\t\tvertices.push( 0, 0, 0 );\n\t\tvertices.push( x, 0, z );\n\n\t\tcolor = ( i & 1 ) ? color1 : color2;\n\n\t\tcolors.push( color.r, color.g, color.b );\n\t\tcolors.push( color.r, color.g, color.b );\n\n\t}\n\n\t// create the circles\n\n\tfor ( i = 0; i <= circles; i ++ ) {\n\n\t\tcolor = ( i & 1 ) ? color1 : color2;\n\n\t\tr = radius - ( radius / circles * i );\n\n\t\tfor ( j = 0; j < divisions; j ++ ) {\n\n\t\t\t// first vertex\n\n\t\t\tv = ( j / divisions ) * ( Math.PI * 2 );\n\n\t\t\tx = Math.sin( v ) * r;\n\t\t\tz = Math.cos( v ) * r;\n\n\t\t\tvertices.push( x, 0, z );\n\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t\t// second vertex\n\n\t\t\tv = ( ( j + 1 ) / divisions ) * ( Math.PI * 2 );\n\n\t\t\tx = Math.sin( v ) * r;\n\t\t\tz = Math.cos( v ) * r;\n\n\t\t\tvertices.push( x, 0, z );\n\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t}\n\n\t}\n\n\tvar geometry = new BufferGeometry();\n\tgeometry.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tgeometry.addAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\tvar material = new LineBasicMaterial( { vertexColors: VertexColors } );\n\n\tLineSegments.call( this, geometry, material );\n\n}\n\nPolarGridHelper.prototype = Object.create( LineSegments.prototype );\nPolarGridHelper.prototype.constructor = PolarGridHelper;\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author WestLangley / http://github.com/WestLangley\n */\n\nfunction FaceNormalsHelper( object, size, hex, linewidth ) {\n\n\t// FaceNormalsHelper only supports THREE.Geometry\n\n\tthis.object = object;\n\n\tthis.size = ( size !== undefined ) ? size : 1;\n\n\tvar color = ( hex !== undefined ) ? hex : 0xffff00;\n\n\tvar width = ( linewidth !== undefined ) ? linewidth : 1;\n\n\t//\n\n\tvar nNormals = 0;\n\n\tvar objGeometry = this.object.geometry;\n\n\tif ( objGeometry && objGeometry.isGeometry ) {\n\n\t\tnNormals = objGeometry.faces.length;\n\n\t} else {\n\n\t\tconsole.warn( 'THREE.FaceNormalsHelper: only THREE.Geometry is supported. Use THREE.VertexNormalsHelper, instead.' );\n\n\t}\n\n\t//\n\n\tvar geometry = new BufferGeometry();\n\n\tvar positions = new Float32BufferAttribute( nNormals * 2 * 3, 3 );\n\n\tgeometry.addAttribute( 'position', positions );\n\n\tLineSegments.call( this, geometry, new LineBasicMaterial( { color: color, linewidth: width } ) );\n\n\t//\n\n\tthis.matrixAutoUpdate = false;\n\tthis.update();\n\n}\n\nFaceNormalsHelper.prototype = Object.create( LineSegments.prototype );\nFaceNormalsHelper.prototype.constructor = FaceNormalsHelper;\n\nFaceNormalsHelper.prototype.update = ( function () {\n\n\tvar v1 = new Vector3();\n\tvar v2 = new Vector3();\n\tvar normalMatrix = new Matrix3();\n\n\treturn function update() {\n\n\t\tthis.object.updateMatrixWorld( true );\n\n\t\tnormalMatrix.getNormalMatrix( this.object.matrixWorld );\n\n\t\tvar matrixWorld = this.object.matrixWorld;\n\n\t\tvar position = this.geometry.attributes.position;\n\n\t\t//\n\n\t\tvar objGeometry = this.object.geometry;\n\n\t\tvar vertices = objGeometry.vertices;\n\n\t\tvar faces = objGeometry.faces;\n\n\t\tvar idx = 0;\n\n\t\tfor ( var i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\t\tvar face = faces[ i ];\n\n\t\t\tvar normal = face.normal;\n\n\t\t\tv1.copy( vertices[ face.a ] )\n\t\t\t\t.add( vertices[ face.b ] )\n\t\t\t\t.add( vertices[ face.c ] )\n\t\t\t\t.divideScalar( 3 )\n\t\t\t\t.applyMatrix4( matrixWorld );\n\n\t\t\tv2.copy( normal ).applyMatrix3( normalMatrix ).normalize().multiplyScalar( this.size ).add( v1 );\n\n\t\t\tposition.setXYZ( idx, v1.x, v1.y, v1.z );\n\n\t\t\tidx = idx + 1;\n\n\t\t\tposition.setXYZ( idx, v2.x, v2.y, v2.z );\n\n\t\t\tidx = idx + 1;\n\n\t\t}\n\n\t\tposition.needsUpdate = true;\n\n\t};\n\n}() );\n\n/**\n * @author alteredq / http://alteredqualia.com/\n * @author mrdoob / http://mrdoob.com/\n * @author WestLangley / http://github.com/WestLangley\n */\n\nfunction DirectionalLightHelper( light, size, color ) {\n\n\tObject3D.call( this );\n\n\tthis.light = light;\n\tthis.light.updateMatrixWorld();\n\n\tthis.matrix = light.matrixWorld;\n\tthis.matrixAutoUpdate = false;\n\n\tthis.color = color;\n\n\tif ( size === undefined ) size = 1;\n\n\tvar geometry = new BufferGeometry();\n\tgeometry.addAttribute( 'position', new Float32BufferAttribute( [\n\t\t- size, size, 0,\n\t\tsize, size, 0,\n\t\tsize, - size, 0,\n\t\t- size, - size, 0,\n\t\t- size, size, 0\n\t], 3 ) );\n\n\tvar material = new LineBasicMaterial( { fog: false } );\n\n\tthis.lightPlane = new Line( geometry, material );\n\tthis.add( this.lightPlane );\n\n\tgeometry = new BufferGeometry();\n\tgeometry.addAttribute( 'position', new Float32BufferAttribute( [ 0, 0, 0, 0, 0, 1 ], 3 ) );\n\n\tthis.targetLine = new Line( geometry, material );\n\tthis.add( this.targetLine );\n\n\tthis.update();\n\n}\n\nDirectionalLightHelper.prototype = Object.create( Object3D.prototype );\nDirectionalLightHelper.prototype.constructor = DirectionalLightHelper;\n\nDirectionalLightHelper.prototype.dispose = function () {\n\n\tthis.lightPlane.geometry.dispose();\n\tthis.lightPlane.material.dispose();\n\tthis.targetLine.geometry.dispose();\n\tthis.targetLine.material.dispose();\n\n};\n\nDirectionalLightHelper.prototype.update = function () {\n\n\tvar v1 = new Vector3();\n\tvar v2 = new Vector3();\n\tvar v3 = new Vector3();\n\n\treturn function update() {\n\n\t\tv1.setFromMatrixPosition( this.light.matrixWorld );\n\t\tv2.setFromMatrixPosition( this.light.target.matrixWorld );\n\t\tv3.subVectors( v2, v1 );\n\n\t\tthis.lightPlane.lookAt( v3 );\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.lightPlane.material.color.set( this.color );\n\t\t\tthis.targetLine.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tthis.lightPlane.material.color.copy( this.light.color );\n\t\t\tthis.targetLine.material.color.copy( this.light.color );\n\n\t\t}\n\n\t\tthis.targetLine.lookAt( v3 );\n\t\tthis.targetLine.scale.z = v3.length();\n\n\t};\n\n}();\n\n/**\n * @author alteredq / http://alteredqualia.com/\n * @author Mugen87 / https://github.com/Mugen87\n *\n *\t- shows frustum, line of sight and up of the camera\n *\t- suitable for fast updates\n * \t- based on frustum visualization in lightgl.js shadowmap example\n *\t\thttp://evanw.github.com/lightgl.js/tests/shadowmap.html\n */\n\nfunction CameraHelper( camera ) {\n\n\tvar geometry = new BufferGeometry();\n\tvar material = new LineBasicMaterial( { color: 0xffffff, vertexColors: FaceColors } );\n\n\tvar vertices = [];\n\tvar colors = [];\n\n\tvar pointMap = {};\n\n\t// colors\n\n\tvar colorFrustum = new Color( 0xffaa00 );\n\tvar colorCone = new Color( 0xff0000 );\n\tvar colorUp = new Color( 0x00aaff );\n\tvar colorTarget = new Color( 0xffffff );\n\tvar colorCross = new Color( 0x333333 );\n\n\t// near\n\n\taddLine( 'n1', 'n2', colorFrustum );\n\taddLine( 'n2', 'n4', colorFrustum );\n\taddLine( 'n4', 'n3', colorFrustum );\n\taddLine( 'n3', 'n1', colorFrustum );\n\n\t// far\n\n\taddLine( 'f1', 'f2', colorFrustum );\n\taddLine( 'f2', 'f4', colorFrustum );\n\taddLine( 'f4', 'f3', colorFrustum );\n\taddLine( 'f3', 'f1', colorFrustum );\n\n\t// sides\n\n\taddLine( 'n1', 'f1', colorFrustum );\n\taddLine( 'n2', 'f2', colorFrustum );\n\taddLine( 'n3', 'f3', colorFrustum );\n\taddLine( 'n4', 'f4', colorFrustum );\n\n\t// cone\n\n\taddLine( 'p', 'n1', colorCone );\n\taddLine( 'p', 'n2', colorCone );\n\taddLine( 'p', 'n3', colorCone );\n\taddLine( 'p', 'n4', colorCone );\n\n\t// up\n\n\taddLine( 'u1', 'u2', colorUp );\n\taddLine( 'u2', 'u3', colorUp );\n\taddLine( 'u3', 'u1', colorUp );\n\n\t// target\n\n\taddLine( 'c', 't', colorTarget );\n\taddLine( 'p', 'c', colorCross );\n\n\t// cross\n\n\taddLine( 'cn1', 'cn2', colorCross );\n\taddLine( 'cn3', 'cn4', colorCross );\n\n\taddLine( 'cf1', 'cf2', colorCross );\n\taddLine( 'cf3', 'cf4', colorCross );\n\n\tfunction addLine( a, b, color ) {\n\n\t\taddPoint( a, color );\n\t\taddPoint( b, color );\n\n\t}\n\n\tfunction addPoint( id, color ) {\n\n\t\tvertices.push( 0, 0, 0 );\n\t\tcolors.push( color.r, color.g, color.b );\n\n\t\tif ( pointMap[ id ] === undefined ) {\n\n\t\t\tpointMap[ id ] = [];\n\n\t\t}\n\n\t\tpointMap[ id ].push( ( vertices.length / 3 ) - 1 );\n\n\t}\n\n\tgeometry.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tgeometry.addAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\tLineSegments.call( this, geometry, material );\n\n\tthis.camera = camera;\n\tif ( this.camera.updateProjectionMatrix ) this.camera.updateProjectionMatrix();\n\n\tthis.matrix = camera.matrixWorld;\n\tthis.matrixAutoUpdate = false;\n\n\tthis.pointMap = pointMap;\n\n\tthis.update();\n\n}\n\nCameraHelper.prototype = Object.create( LineSegments.prototype );\nCameraHelper.prototype.constructor = CameraHelper;\n\nCameraHelper.prototype.update = function () {\n\n\tvar geometry, pointMap;\n\n\tvar vector = new Vector3();\n\tvar camera = new Camera();\n\n\tfunction setPoint( point, x, y, z ) {\n\n\t\tvector.set( x, y, z ).unproject( camera );\n\n\t\tvar points = pointMap[ point ];\n\n\t\tif ( points !== undefined ) {\n\n\t\t\tvar position = geometry.getAttribute( 'position' );\n\n\t\t\tfor ( var i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\t\tposition.setXYZ( points[ i ], vector.x, vector.y, vector.z );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn function update() {\n\n\t\tgeometry = this.geometry;\n\t\tpointMap = this.pointMap;\n\n\t\tvar w = 1, h = 1;\n\n\t\t// we need just camera projection matrix\n\t\t// world matrix must be identity\n\n\t\tcamera.projectionMatrix.copy( this.camera.projectionMatrix );\n\n\t\t// center / target\n\n\t\tsetPoint( 'c', 0, 0, - 1 );\n\t\tsetPoint( 't', 0, 0, 1 );\n\n\t\t// near\n\n\t\tsetPoint( 'n1', - w, - h, - 1 );\n\t\tsetPoint( 'n2', w, - h, - 1 );\n\t\tsetPoint( 'n3', - w, h, - 1 );\n\t\tsetPoint( 'n4', w, h, - 1 );\n\n\t\t// far\n\n\t\tsetPoint( 'f1', - w, - h, 1 );\n\t\tsetPoint( 'f2', w, - h, 1 );\n\t\tsetPoint( 'f3', - w, h, 1 );\n\t\tsetPoint( 'f4', w, h, 1 );\n\n\t\t// up\n\n\t\tsetPoint( 'u1', w * 0.7, h * 1.1, - 1 );\n\t\tsetPoint( 'u2', - w * 0.7, h * 1.1, - 1 );\n\t\tsetPoint( 'u3', 0, h * 2, - 1 );\n\n\t\t// cross\n\n\t\tsetPoint( 'cf1', - w, 0, 1 );\n\t\tsetPoint( 'cf2', w, 0, 1 );\n\t\tsetPoint( 'cf3', 0, - h, 1 );\n\t\tsetPoint( 'cf4', 0, h, 1 );\n\n\t\tsetPoint( 'cn1', - w, 0, - 1 );\n\t\tsetPoint( 'cn2', w, 0, - 1 );\n\t\tsetPoint( 'cn3', 0, - h, - 1 );\n\t\tsetPoint( 'cn4', 0, h, - 1 );\n\n\t\tgeometry.getAttribute( 'position' ).needsUpdate = true;\n\n\t};\n\n}();\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author Mugen87 / http://github.com/Mugen87\n */\n\nfunction BoxHelper( object, color ) {\n\n\tthis.object = object;\n\n\tif ( color === undefined ) color = 0xffff00;\n\n\tvar indices = new Uint16Array( [ 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7 ] );\n\tvar positions = new Float32Array( 8 * 3 );\n\n\tvar geometry = new BufferGeometry();\n\tgeometry.setIndex( new BufferAttribute( indices, 1 ) );\n\tgeometry.addAttribute( 'position', new BufferAttribute( positions, 3 ) );\n\n\tLineSegments.call( this, geometry, new LineBasicMaterial( { color: color } ) );\n\n\tthis.matrixAutoUpdate = false;\n\n\tthis.update();\n\n}\n\nBoxHelper.prototype = Object.create( LineSegments.prototype );\nBoxHelper.prototype.constructor = BoxHelper;\n\nBoxHelper.prototype.update = ( function () {\n\n\tvar box = new Box3();\n\n\treturn function update( object ) {\n\n\t\tif ( object !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.BoxHelper: .update() has no longer arguments.' );\n\n\t\t}\n\n\t\tif ( this.object !== undefined ) {\n\n\t\t\tbox.setFromObject( this.object );\n\n\t\t}\n\n\t\tif ( box.isEmpty() ) return;\n\n\t\tvar min = box.min;\n\t\tvar max = box.max;\n\n\t\t/*\n\t\t 5____4\n\t\t1/___0/|\n\t\t| 6__|_7\n\t\t2/___3/\n\n\t\t0: max.x, max.y, max.z\n\t\t1: min.x, max.y, max.z\n\t\t2: min.x, min.y, max.z\n\t\t3: max.x, min.y, max.z\n\t\t4: max.x, max.y, min.z\n\t\t5: min.x, max.y, min.z\n\t\t6: min.x, min.y, min.z\n\t\t7: max.x, min.y, min.z\n\t\t*/\n\n\t\tvar position = this.geometry.attributes.position;\n\t\tvar array = position.array;\n\n\t\tarray[ 0 ] = max.x; array[ 1 ] = max.y; array[ 2 ] = max.z;\n\t\tarray[ 3 ] = min.x; array[ 4 ] = max.y; array[ 5 ] = max.z;\n\t\tarray[ 6 ] = min.x; array[ 7 ] = min.y; array[ 8 ] = max.z;\n\t\tarray[ 9 ] = max.x; array[ 10 ] = min.y; array[ 11 ] = max.z;\n\t\tarray[ 12 ] = max.x; array[ 13 ] = max.y; array[ 14 ] = min.z;\n\t\tarray[ 15 ] = min.x; array[ 16 ] = max.y; array[ 17 ] = min.z;\n\t\tarray[ 18 ] = min.x; array[ 19 ] = min.y; array[ 20 ] = min.z;\n\t\tarray[ 21 ] = max.x; array[ 22 ] = min.y; array[ 23 ] = min.z;\n\n\t\tposition.needsUpdate = true;\n\n\t\tthis.geometry.computeBoundingSphere();\n\n\t};\n\n} )();\n\nBoxHelper.prototype.setFromObject = function ( object ) {\n\n\tthis.object = object;\n\tthis.update();\n\n\treturn this;\n\n};\n\n/**\n * @author WestLangley / http://github.com/WestLangley\n */\n\nfunction Box3Helper( box, hex ) {\n\n\tthis.type = 'Box3Helper';\n\n\tthis.box = box;\n\n\tvar color = ( hex !== undefined ) ? hex : 0xffff00;\n\n\tvar indices = new Uint16Array( [ 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7 ] );\n\n\tvar positions = [ 1, 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, - 1, 1, 1, 1, - 1, - 1, 1, - 1, - 1, - 1, - 1, 1, - 1, - 1 ];\n\n\tvar geometry = new BufferGeometry();\n\n\tgeometry.setIndex( new BufferAttribute( indices, 1 ) );\n\n\tgeometry.addAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\n\tLineSegments.call( this, geometry, new LineBasicMaterial( { color: color } ) );\n\n\tthis.geometry.computeBoundingSphere();\n\n}\n\nBox3Helper.prototype = Object.create( LineSegments.prototype );\nBox3Helper.prototype.constructor = Box3Helper;\n\nBox3Helper.prototype.updateMatrixWorld = function ( force ) {\n\n\tvar box = this.box;\n\n\tif ( box.isEmpty() ) return;\n\n\tbox.getCenter( this.position );\n\n\tbox.getSize( this.scale );\n\n\tthis.scale.multiplyScalar( 0.5 );\n\n\tObject3D.prototype.updateMatrixWorld.call( this, force );\n\n};\n\n/**\n * @author WestLangley / http://github.com/WestLangley\n */\n\nfunction PlaneHelper( plane, size, hex ) {\n\n\tthis.type = 'PlaneHelper';\n\n\tthis.plane = plane;\n\n\tthis.size = ( size === undefined ) ? 1 : size;\n\n\tvar color = ( hex !== undefined ) ? hex : 0xffff00;\n\n\tvar positions = [ 1, - 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, - 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0 ];\n\n\tvar geometry = new BufferGeometry();\n\tgeometry.addAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\tgeometry.computeBoundingSphere();\n\n\tLine.call( this, geometry, new LineBasicMaterial( { color: color } ) );\n\n\t//\n\n\tvar positions2 = [ 1, 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, 1, 1, - 1, - 1, 1, 1, - 1, 1 ];\n\n\tvar geometry2 = new BufferGeometry();\n\tgeometry2.addAttribute( 'position', new Float32BufferAttribute( positions2, 3 ) );\n\tgeometry2.computeBoundingSphere();\n\n\tthis.add( new Mesh( geometry2, new MeshBasicMaterial( { color: color, opacity: 0.2, transparent: true, depthWrite: false } ) ) );\n\n}\n\nPlaneHelper.prototype = Object.create( Line.prototype );\nPlaneHelper.prototype.constructor = PlaneHelper;\n\nPlaneHelper.prototype.updateMatrixWorld = function ( force ) {\n\n\tvar scale = - this.plane.constant;\n\n\tif ( Math.abs( scale ) < 1e-8 ) scale = 1e-8; // sign does not matter\n\n\tthis.scale.set( 0.5 * this.size, 0.5 * this.size, scale );\n\n\tthis.lookAt( this.plane.normal );\n\n\tObject3D.prototype.updateMatrixWorld.call( this, force );\n\n};\n\n/**\n * @author WestLangley / http://github.com/WestLangley\n * @author zz85 / http://github.com/zz85\n * @author bhouston / http://clara.io\n *\n * Creates an arrow for visualizing directions\n *\n * Parameters:\n * dir - Vector3\n * origin - Vector3\n * length - Number\n * color - color in hex value\n * headLength - Number\n * headWidth - Number\n */\n\nvar lineGeometry;\nvar coneGeometry;\n\nfunction ArrowHelper( dir, origin, length, color, headLength, headWidth ) {\n\n\t// dir is assumed to be normalized\n\n\tObject3D.call( this );\n\n\tif ( color === undefined ) color = 0xffff00;\n\tif ( length === undefined ) length = 1;\n\tif ( headLength === undefined ) headLength = 0.2 * length;\n\tif ( headWidth === undefined ) headWidth = 0.2 * headLength;\n\n\tif ( lineGeometry === undefined ) {\n\n\t\tlineGeometry = new BufferGeometry();\n\t\tlineGeometry.addAttribute( 'position', new Float32BufferAttribute( [ 0, 0, 0, 0, 1, 0 ], 3 ) );\n\n\t\tconeGeometry = new CylinderBufferGeometry( 0, 0.5, 1, 5, 1 );\n\t\tconeGeometry.translate( 0, - 0.5, 0 );\n\n\t}\n\n\tthis.position.copy( origin );\n\n\tthis.line = new Line( lineGeometry, new LineBasicMaterial( { color: color } ) );\n\tthis.line.matrixAutoUpdate = false;\n\tthis.add( this.line );\n\n\tthis.cone = new Mesh( coneGeometry, new MeshBasicMaterial( { color: color } ) );\n\tthis.cone.matrixAutoUpdate = false;\n\tthis.add( this.cone );\n\n\tthis.setDirection( dir );\n\tthis.setLength( length, headLength, headWidth );\n\n}\n\nArrowHelper.prototype = Object.create( Object3D.prototype );\nArrowHelper.prototype.constructor = ArrowHelper;\n\nArrowHelper.prototype.setDirection = ( function () {\n\n\tvar axis = new Vector3();\n\tvar radians;\n\n\treturn function setDirection( dir ) {\n\n\t\t// dir is assumed to be normalized\n\n\t\tif ( dir.y > 0.99999 ) {\n\n\t\t\tthis.quaternion.set( 0, 0, 0, 1 );\n\n\t\t} else if ( dir.y < - 0.99999 ) {\n\n\t\t\tthis.quaternion.set( 1, 0, 0, 0 );\n\n\t\t} else {\n\n\t\t\taxis.set( dir.z, 0, - dir.x ).normalize();\n\n\t\t\tradians = Math.acos( dir.y );\n\n\t\t\tthis.quaternion.setFromAxisAngle( axis, radians );\n\n\t\t}\n\n\t};\n\n}() );\n\nArrowHelper.prototype.setLength = function ( length, headLength, headWidth ) {\n\n\tif ( headLength === undefined ) headLength = 0.2 * length;\n\tif ( headWidth === undefined ) headWidth = 0.2 * headLength;\n\n\tthis.line.scale.set( 1, Math.max( 0, length - headLength ), 1 );\n\tthis.line.updateMatrix();\n\n\tthis.cone.scale.set( headWidth, headLength, headWidth );\n\tthis.cone.position.y = length;\n\tthis.cone.updateMatrix();\n\n};\n\nArrowHelper.prototype.setColor = function ( color ) {\n\n\tthis.line.material.color.copy( color );\n\tthis.cone.material.color.copy( color );\n\n};\n\n/**\n * @author sroucheray / http://sroucheray.org/\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction AxesHelper( size ) {\n\n\tsize = size || 1;\n\n\tvar vertices = [\n\t\t0, 0, 0,\tsize, 0, 0,\n\t\t0, 0, 0,\t0, size, 0,\n\t\t0, 0, 0,\t0, 0, size\n\t];\n\n\tvar colors = [\n\t\t1, 0, 0,\t1, 0.6, 0,\n\t\t0, 1, 0,\t0.6, 1, 0,\n\t\t0, 0, 1,\t0, 0.6, 1\n\t];\n\n\tvar geometry = new BufferGeometry();\n\tgeometry.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tgeometry.addAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\tvar material = new LineBasicMaterial( { vertexColors: VertexColors } );\n\n\tLineSegments.call( this, geometry, material );\n\n}\n\nAxesHelper.prototype = Object.create( LineSegments.prototype );\nAxesHelper.prototype.constructor = AxesHelper;\n\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nfunction Face4( a, b, c, d, normal, color, materialIndex ) {\n\n\tconsole.warn( 'THREE.Face4 has been removed. A THREE.Face3 will be created instead.' );\n\treturn new Face3( a, b, c, normal, color, materialIndex );\n\n}\n\nvar LineStrip = 0;\n\nvar LinePieces = 1;\n\nfunction MeshFaceMaterial( materials ) {\n\n\tconsole.warn( 'THREE.MeshFaceMaterial has been removed. Use an Array instead.' );\n\treturn materials;\n\n}\n\nfunction MultiMaterial( materials ) {\n\n\tif ( materials === undefined ) materials = [];\n\n\tconsole.warn( 'THREE.MultiMaterial has been removed. Use an Array instead.' );\n\tmaterials.isMultiMaterial = true;\n\tmaterials.materials = materials;\n\tmaterials.clone = function () {\n\n\t\treturn materials.slice();\n\n\t};\n\treturn materials;\n\n}\n\nfunction PointCloud( geometry, material ) {\n\n\tconsole.warn( 'THREE.PointCloud has been renamed to THREE.Points.' );\n\treturn new Points( geometry, material );\n\n}\n\nfunction Particle( material ) {\n\n\tconsole.warn( 'THREE.Particle has been renamed to THREE.Sprite.' );\n\treturn new Sprite( material );\n\n}\n\nfunction ParticleSystem( geometry, material ) {\n\n\tconsole.warn( 'THREE.ParticleSystem has been renamed to THREE.Points.' );\n\treturn new Points( geometry, material );\n\n}\n\nfunction PointCloudMaterial( parameters ) {\n\n\tconsole.warn( 'THREE.PointCloudMaterial has been renamed to THREE.PointsMaterial.' );\n\treturn new PointsMaterial( parameters );\n\n}\n\nfunction ParticleBasicMaterial( parameters ) {\n\n\tconsole.warn( 'THREE.ParticleBasicMaterial has been renamed to THREE.PointsMaterial.' );\n\treturn new PointsMaterial( parameters );\n\n}\n\nfunction ParticleSystemMaterial( parameters ) {\n\n\tconsole.warn( 'THREE.ParticleSystemMaterial has been renamed to THREE.PointsMaterial.' );\n\treturn new PointsMaterial( parameters );\n\n}\n\nfunction Vertex( x, y, z ) {\n\n\tconsole.warn( 'THREE.Vertex has been removed. Use THREE.Vector3 instead.' );\n\treturn new Vector3( x, y, z );\n\n}\n\n//\n\nfunction DynamicBufferAttribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.DynamicBufferAttribute has been removed. Use new THREE.BufferAttribute().setDynamic( true ) instead.' );\n\treturn new BufferAttribute( array, itemSize ).setDynamic( true );\n\n}\n\nfunction Int8Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Int8Attribute has been removed. Use new THREE.Int8BufferAttribute() instead.' );\n\treturn new Int8BufferAttribute( array, itemSize );\n\n}\n\nfunction Uint8Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Uint8Attribute has been removed. Use new THREE.Uint8BufferAttribute() instead.' );\n\treturn new Uint8BufferAttribute( array, itemSize );\n\n}\n\nfunction Uint8ClampedAttribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Uint8ClampedAttribute has been removed. Use new THREE.Uint8ClampedBufferAttribute() instead.' );\n\treturn new Uint8ClampedBufferAttribute( array, itemSize );\n\n}\n\nfunction Int16Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Int16Attribute has been removed. Use new THREE.Int16BufferAttribute() instead.' );\n\treturn new Int16BufferAttribute( array, itemSize );\n\n}\n\nfunction Uint16Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Uint16Attribute has been removed. Use new THREE.Uint16BufferAttribute() instead.' );\n\treturn new Uint16BufferAttribute( array, itemSize );\n\n}\n\nfunction Int32Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Int32Attribute has been removed. Use new THREE.Int32BufferAttribute() instead.' );\n\treturn new Int32BufferAttribute( array, itemSize );\n\n}\n\nfunction Uint32Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Uint32Attribute has been removed. Use new THREE.Uint32BufferAttribute() instead.' );\n\treturn new Uint32BufferAttribute( array, itemSize );\n\n}\n\nfunction Float32Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Float32Attribute has been removed. Use new THREE.Float32BufferAttribute() instead.' );\n\treturn new Float32BufferAttribute( array, itemSize );\n\n}\n\nfunction Float64Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Float64Attribute has been removed. Use new THREE.Float64BufferAttribute() instead.' );\n\treturn new Float64BufferAttribute( array, itemSize );\n\n}\n\n//\n\nCurve.create = function ( construct, getPoint ) {\n\n\tconsole.log( 'THREE.Curve.create() has been deprecated' );\n\n\tconstruct.prototype = Object.create( Curve.prototype );\n\tconstruct.prototype.constructor = construct;\n\tconstruct.prototype.getPoint = getPoint;\n\n\treturn construct;\n\n};\n\n//\n\nObject.assign( CurvePath.prototype, {\n\n\tcreatePointsGeometry: function ( divisions ) {\n\n\t\tconsole.warn( 'THREE.CurvePath: .createPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.' );\n\n\t\t// generate geometry from path points (for Line or Points objects)\n\n\t\tvar pts = this.getPoints( divisions );\n\t\treturn this.createGeometry( pts );\n\n\t},\n\n\tcreateSpacedPointsGeometry: function ( divisions ) {\n\n\t\tconsole.warn( 'THREE.CurvePath: .createSpacedPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.' );\n\n\t\t// generate geometry from equidistant sampling along the path\n\n\t\tvar pts = this.getSpacedPoints( divisions );\n\t\treturn this.createGeometry( pts );\n\n\t},\n\n\tcreateGeometry: function ( points ) {\n\n\t\tconsole.warn( 'THREE.CurvePath: .createGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.' );\n\n\t\tvar geometry = new Geometry();\n\n\t\tfor ( var i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\tvar point = points[ i ];\n\t\t\tgeometry.vertices.push( new Vector3( point.x, point.y, point.z || 0 ) );\n\n\t\t}\n\n\t\treturn geometry;\n\n\t}\n\n} );\n\n//\n\nObject.assign( Path.prototype, {\n\n\tfromPoints: function ( points ) {\n\n\t\tconsole.warn( 'THREE.Path: .fromPoints() has been renamed to .setFromPoints().' );\n\t\tthis.setFromPoints( points );\n\n\t}\n\n} );\n\n//\n\nfunction ClosedSplineCurve3( points ) {\n\n\tconsole.warn( 'THREE.ClosedSplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead.' );\n\n\tCatmullRomCurve3.call( this, points );\n\tthis.type = 'catmullrom';\n\tthis.closed = true;\n\n}\n\nClosedSplineCurve3.prototype = Object.create( CatmullRomCurve3.prototype );\n\n//\n\nfunction SplineCurve3( points ) {\n\n\tconsole.warn( 'THREE.SplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead.' );\n\n\tCatmullRomCurve3.call( this, points );\n\tthis.type = 'catmullrom';\n\n}\n\nSplineCurve3.prototype = Object.create( CatmullRomCurve3.prototype );\n\n//\n\nfunction Spline( points ) {\n\n\tconsole.warn( 'THREE.Spline has been removed. Use THREE.CatmullRomCurve3 instead.' );\n\n\tCatmullRomCurve3.call( this, points );\n\tthis.type = 'catmullrom';\n\n}\n\nSpline.prototype = Object.create( CatmullRomCurve3.prototype );\n\nObject.assign( Spline.prototype, {\n\n\tinitFromArray: function ( /* a */ ) {\n\n\t\tconsole.error( 'THREE.Spline: .initFromArray() has been removed.' );\n\n\t},\n\tgetControlPointsArray: function ( /* optionalTarget */ ) {\n\n\t\tconsole.error( 'THREE.Spline: .getControlPointsArray() has been removed.' );\n\n\t},\n\treparametrizeByArcLength: function ( /* samplingCoef */ ) {\n\n\t\tconsole.error( 'THREE.Spline: .reparametrizeByArcLength() has been removed.' );\n\n\t}\n\n} );\n\n//\n\nfunction AxisHelper( size ) {\n\n\tconsole.warn( 'THREE.AxisHelper has been renamed to THREE.AxesHelper.' );\n\treturn new AxesHelper( size );\n\n}\n\nfunction BoundingBoxHelper( object, color ) {\n\n\tconsole.warn( 'THREE.BoundingBoxHelper has been deprecated. Creating a THREE.BoxHelper instead.' );\n\treturn new BoxHelper( object, color );\n\n}\n\nfunction EdgesHelper( object, hex ) {\n\n\tconsole.warn( 'THREE.EdgesHelper has been removed. Use THREE.EdgesGeometry instead.' );\n\treturn new LineSegments( new EdgesGeometry( object.geometry ), new LineBasicMaterial( { color: hex !== undefined ? hex : 0xffffff } ) );\n\n}\n\nGridHelper.prototype.setColors = function () {\n\n\tconsole.error( 'THREE.GridHelper: setColors() has been deprecated, pass them in the constructor instead.' );\n\n};\n\nSkeletonHelper.prototype.update = function () {\n\n\tconsole.error( 'THREE.SkeletonHelper: update() no longer needs to be called.' );\n\n};\n\nfunction WireframeHelper( object, hex ) {\n\n\tconsole.warn( 'THREE.WireframeHelper has been removed. Use THREE.WireframeGeometry instead.' );\n\treturn new LineSegments( new WireframeGeometry( object.geometry ), new LineBasicMaterial( { color: hex !== undefined ? hex : 0xffffff } ) );\n\n}\n\n//\n\nObject.assign( Loader.prototype, {\n\n\textractUrlBase: function ( url ) {\n\n\t\tconsole.warn( 'THREE.Loader: .extractUrlBase() has been deprecated. Use THREE.LoaderUtils.extractUrlBase() instead.' );\n\t\treturn LoaderUtils.extractUrlBase( url );\n\n\t}\n\n} );\n\nfunction XHRLoader( manager ) {\n\n\tconsole.warn( 'THREE.XHRLoader has been renamed to THREE.FileLoader.' );\n\treturn new FileLoader( manager );\n\n}\n\nfunction BinaryTextureLoader( manager ) {\n\n\tconsole.warn( 'THREE.BinaryTextureLoader has been renamed to THREE.DataTextureLoader.' );\n\treturn new DataTextureLoader( manager );\n\n}\n\n//\n\nObject.assign( Box2.prototype, {\n\n\tcenter: function ( optionalTarget ) {\n\n\t\tconsole.warn( 'THREE.Box2: .center() has been renamed to .getCenter().' );\n\t\treturn this.getCenter( optionalTarget );\n\n\t},\n\tempty: function () {\n\n\t\tconsole.warn( 'THREE.Box2: .empty() has been renamed to .isEmpty().' );\n\t\treturn this.isEmpty();\n\n\t},\n\tisIntersectionBox: function ( box ) {\n\n\t\tconsole.warn( 'THREE.Box2: .isIntersectionBox() has been renamed to .intersectsBox().' );\n\t\treturn this.intersectsBox( box );\n\n\t},\n\tsize: function ( optionalTarget ) {\n\n\t\tconsole.warn( 'THREE.Box2: .size() has been renamed to .getSize().' );\n\t\treturn this.getSize( optionalTarget );\n\n\t}\n} );\n\nObject.assign( Box3.prototype, {\n\n\tcenter: function ( optionalTarget ) {\n\n\t\tconsole.warn( 'THREE.Box3: .center() has been renamed to .getCenter().' );\n\t\treturn this.getCenter( optionalTarget );\n\n\t},\n\tempty: function () {\n\n\t\tconsole.warn( 'THREE.Box3: .empty() has been renamed to .isEmpty().' );\n\t\treturn this.isEmpty();\n\n\t},\n\tisIntersectionBox: function ( box ) {\n\n\t\tconsole.warn( 'THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox().' );\n\t\treturn this.intersectsBox( box );\n\n\t},\n\tisIntersectionSphere: function ( sphere ) {\n\n\t\tconsole.warn( 'THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere().' );\n\t\treturn this.intersectsSphere( sphere );\n\n\t},\n\tsize: function ( optionalTarget ) {\n\n\t\tconsole.warn( 'THREE.Box3: .size() has been renamed to .getSize().' );\n\t\treturn this.getSize( optionalTarget );\n\n\t}\n} );\n\nLine3.prototype.center = function ( optionalTarget ) {\n\n\tconsole.warn( 'THREE.Line3: .center() has been renamed to .getCenter().' );\n\treturn this.getCenter( optionalTarget );\n\n};\n\nObject.assign( _Math, {\n\n\trandom16: function () {\n\n\t\tconsole.warn( 'THREE.Math: .random16() has been deprecated. Use Math.random() instead.' );\n\t\treturn Math.random();\n\n\t},\n\n\tnearestPowerOfTwo: function ( value ) {\n\n\t\tconsole.warn( 'THREE.Math: .nearestPowerOfTwo() has been renamed to .floorPowerOfTwo().' );\n\t\treturn _Math.floorPowerOfTwo( value );\n\n\t},\n\n\tnextPowerOfTwo: function ( value ) {\n\n\t\tconsole.warn( 'THREE.Math: .nextPowerOfTwo() has been renamed to .ceilPowerOfTwo().' );\n\t\treturn _Math.ceilPowerOfTwo( value );\n\n\t}\n\n} );\n\nObject.assign( Matrix3.prototype, {\n\n\tflattenToArrayOffset: function ( array, offset ) {\n\n\t\tconsole.warn( \"THREE.Matrix3: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.\" );\n\t\treturn this.toArray( array, offset );\n\n\t},\n\tmultiplyVector3: function ( vector ) {\n\n\t\tconsole.warn( 'THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead.' );\n\t\treturn vector.applyMatrix3( this );\n\n\t},\n\tmultiplyVector3Array: function ( /* a */ ) {\n\n\t\tconsole.error( 'THREE.Matrix3: .multiplyVector3Array() has been removed.' );\n\n\t},\n\tapplyToBuffer: function ( buffer /*, offset, length */ ) {\n\n\t\tconsole.warn( 'THREE.Matrix3: .applyToBuffer() has been removed. Use matrix.applyToBufferAttribute( attribute ) instead.' );\n\t\treturn this.applyToBufferAttribute( buffer );\n\n\t},\n\tapplyToVector3Array: function ( /* array, offset, length */ ) {\n\n\t\tconsole.error( 'THREE.Matrix3: .applyToVector3Array() has been removed.' );\n\n\t}\n\n} );\n\nObject.assign( Matrix4.prototype, {\n\n\textractPosition: function ( m ) {\n\n\t\tconsole.warn( 'THREE.Matrix4: .extractPosition() has been renamed to .copyPosition().' );\n\t\treturn this.copyPosition( m );\n\n\t},\n\tflattenToArrayOffset: function ( array, offset ) {\n\n\t\tconsole.warn( \"THREE.Matrix4: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.\" );\n\t\treturn this.toArray( array, offset );\n\n\t},\n\tgetPosition: function () {\n\n\t\tvar v1;\n\n\t\treturn function getPosition() {\n\n\t\t\tif ( v1 === undefined ) v1 = new Vector3();\n\t\t\tconsole.warn( 'THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead.' );\n\t\t\treturn v1.setFromMatrixColumn( this, 3 );\n\n\t\t};\n\n\t}(),\n\tsetRotationFromQuaternion: function ( q ) {\n\n\t\tconsole.warn( 'THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion().' );\n\t\treturn this.makeRotationFromQuaternion( q );\n\n\t},\n\tmultiplyToArray: function () {\n\n\t\tconsole.warn( 'THREE.Matrix4: .multiplyToArray() has been removed.' );\n\n\t},\n\tmultiplyVector3: function ( vector ) {\n\n\t\tconsole.warn( 'THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) instead.' );\n\t\treturn vector.applyMatrix4( this );\n\n\t},\n\tmultiplyVector4: function ( vector ) {\n\n\t\tconsole.warn( 'THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead.' );\n\t\treturn vector.applyMatrix4( this );\n\n\t},\n\tmultiplyVector3Array: function ( /* a */ ) {\n\n\t\tconsole.error( 'THREE.Matrix4: .multiplyVector3Array() has been removed.' );\n\n\t},\n\trotateAxis: function ( v ) {\n\n\t\tconsole.warn( 'THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead.' );\n\t\tv.transformDirection( this );\n\n\t},\n\tcrossVector: function ( vector ) {\n\n\t\tconsole.warn( 'THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead.' );\n\t\treturn vector.applyMatrix4( this );\n\n\t},\n\ttranslate: function () {\n\n\t\tconsole.error( 'THREE.Matrix4: .translate() has been removed.' );\n\n\t},\n\trotateX: function () {\n\n\t\tconsole.error( 'THREE.Matrix4: .rotateX() has been removed.' );\n\n\t},\n\trotateY: function () {\n\n\t\tconsole.error( 'THREE.Matrix4: .rotateY() has been removed.' );\n\n\t},\n\trotateZ: function () {\n\n\t\tconsole.error( 'THREE.Matrix4: .rotateZ() has been removed.' );\n\n\t},\n\trotateByAxis: function () {\n\n\t\tconsole.error( 'THREE.Matrix4: .rotateByAxis() has been removed.' );\n\n\t},\n\tapplyToBuffer: function ( buffer /*, offset, length */ ) {\n\n\t\tconsole.warn( 'THREE.Matrix4: .applyToBuffer() has been removed. Use matrix.applyToBufferAttribute( attribute ) instead.' );\n\t\treturn this.applyToBufferAttribute( buffer );\n\n\t},\n\tapplyToVector3Array: function ( /* array, offset, length */ ) {\n\n\t\tconsole.error( 'THREE.Matrix4: .applyToVector3Array() has been removed.' );\n\n\t},\n\tmakeFrustum: function ( left, right, bottom, top, near, far ) {\n\n\t\tconsole.warn( 'THREE.Matrix4: .makeFrustum() has been removed. Use .makePerspective( left, right, top, bottom, near, far ) instead.' );\n\t\treturn this.makePerspective( left, right, top, bottom, near, far );\n\n\t}\n\n} );\n\nPlane.prototype.isIntersectionLine = function ( line ) {\n\n\tconsole.warn( 'THREE.Plane: .isIntersectionLine() has been renamed to .intersectsLine().' );\n\treturn this.intersectsLine( line );\n\n};\n\nQuaternion.prototype.multiplyVector3 = function ( vector ) {\n\n\tconsole.warn( 'THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead.' );\n\treturn vector.applyQuaternion( this );\n\n};\n\nObject.assign( Ray.prototype, {\n\n\tisIntersectionBox: function ( box ) {\n\n\t\tconsole.warn( 'THREE.Ray: .isIntersectionBox() has been renamed to .intersectsBox().' );\n\t\treturn this.intersectsBox( box );\n\n\t},\n\tisIntersectionPlane: function ( plane ) {\n\n\t\tconsole.warn( 'THREE.Ray: .isIntersectionPlane() has been renamed to .intersectsPlane().' );\n\t\treturn this.intersectsPlane( plane );\n\n\t},\n\tisIntersectionSphere: function ( sphere ) {\n\n\t\tconsole.warn( 'THREE.Ray: .isIntersectionSphere() has been renamed to .intersectsSphere().' );\n\t\treturn this.intersectsSphere( sphere );\n\n\t}\n\n} );\n\nObject.assign( Triangle.prototype, {\n\n\tarea: function () {\n\n\t\tconsole.warn( 'THREE.Triangle: .area() has been renamed to .getArea().' );\n\t\treturn this.getArea();\n\n\t},\n\tbarycoordFromPoint: function ( point, target ) {\n\n\t\tconsole.warn( 'THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord().' );\n\t\treturn this.getBarycoord( point, target );\n\n\t},\n\tmidpoint: function ( target ) {\n\n\t\tconsole.warn( 'THREE.Triangle: .midpoint() has been renamed to .getMidpoint().' );\n\t\treturn this.getMidpoint( target );\n\n\t},\n\tnormal: function ( target ) {\n\n\t\tconsole.warn( 'THREE.Triangle: .normal() has been renamed to .getNormal().' );\n\t\treturn this.getNormal( target );\n\n\t},\n\tplane: function ( target ) {\n\n\t\tconsole.warn( 'THREE.Triangle: .plane() has been renamed to .getPlane().' );\n\t\treturn this.getPlane( target );\n\n\t}\n\n} );\n\nObject.assign( Triangle, {\n\n\tbarycoordFromPoint: function ( point, a, b, c, target ) {\n\n\t\tconsole.warn( 'THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord().' );\n\t\treturn Triangle.getBarycoord( point, a, b, c, target );\n\n\t},\n\tnormal: function ( a, b, c, target ) {\n\n\t\tconsole.warn( 'THREE.Triangle: .normal() has been renamed to .getNormal().' );\n\t\treturn Triangle.getNormal( a, b, c, target );\n\n\t}\n\n} );\n\nObject.assign( Shape.prototype, {\n\n\textractAllPoints: function ( divisions ) {\n\n\t\tconsole.warn( 'THREE.Shape: .extractAllPoints() has been removed. Use .extractPoints() instead.' );\n\t\treturn this.extractPoints( divisions );\n\n\t},\n\textrude: function ( options ) {\n\n\t\tconsole.warn( 'THREE.Shape: .extrude() has been removed. Use ExtrudeGeometry() instead.' );\n\t\treturn new ExtrudeGeometry( this, options );\n\n\t},\n\tmakeGeometry: function ( options ) {\n\n\t\tconsole.warn( 'THREE.Shape: .makeGeometry() has been removed. Use ShapeGeometry() instead.' );\n\t\treturn new ShapeGeometry( this, options );\n\n\t}\n\n} );\n\nObject.assign( Vector2.prototype, {\n\n\tfromAttribute: function ( attribute, index, offset ) {\n\n\t\tconsole.warn( 'THREE.Vector2: .fromAttribute() has been renamed to .fromBufferAttribute().' );\n\t\treturn this.fromBufferAttribute( attribute, index, offset );\n\n\t},\n\tdistanceToManhattan: function ( v ) {\n\n\t\tconsole.warn( 'THREE.Vector2: .distanceToManhattan() has been renamed to .manhattanDistanceTo().' );\n\t\treturn this.manhattanDistanceTo( v );\n\n\t},\n\tlengthManhattan: function () {\n\n\t\tconsole.warn( 'THREE.Vector2: .lengthManhattan() has been renamed to .manhattanLength().' );\n\t\treturn this.manhattanLength();\n\n\t}\n\n} );\n\nObject.assign( Vector3.prototype, {\n\n\tsetEulerFromRotationMatrix: function () {\n\n\t\tconsole.error( 'THREE.Vector3: .setEulerFromRotationMatrix() has been removed. Use Euler.setFromRotationMatrix() instead.' );\n\n\t},\n\tsetEulerFromQuaternion: function () {\n\n\t\tconsole.error( 'THREE.Vector3: .setEulerFromQuaternion() has been removed. Use Euler.setFromQuaternion() instead.' );\n\n\t},\n\tgetPositionFromMatrix: function ( m ) {\n\n\t\tconsole.warn( 'THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition().' );\n\t\treturn this.setFromMatrixPosition( m );\n\n\t},\n\tgetScaleFromMatrix: function ( m ) {\n\n\t\tconsole.warn( 'THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale().' );\n\t\treturn this.setFromMatrixScale( m );\n\n\t},\n\tgetColumnFromMatrix: function ( index, matrix ) {\n\n\t\tconsole.warn( 'THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn().' );\n\t\treturn this.setFromMatrixColumn( matrix, index );\n\n\t},\n\tapplyProjection: function ( m ) {\n\n\t\tconsole.warn( 'THREE.Vector3: .applyProjection() has been removed. Use .applyMatrix4( m ) instead.' );\n\t\treturn this.applyMatrix4( m );\n\n\t},\n\tfromAttribute: function ( attribute, index, offset ) {\n\n\t\tconsole.warn( 'THREE.Vector3: .fromAttribute() has been renamed to .fromBufferAttribute().' );\n\t\treturn this.fromBufferAttribute( attribute, index, offset );\n\n\t},\n\tdistanceToManhattan: function ( v ) {\n\n\t\tconsole.warn( 'THREE.Vector3: .distanceToManhattan() has been renamed to .manhattanDistanceTo().' );\n\t\treturn this.manhattanDistanceTo( v );\n\n\t},\n\tlengthManhattan: function () {\n\n\t\tconsole.warn( 'THREE.Vector3: .lengthManhattan() has been renamed to .manhattanLength().' );\n\t\treturn this.manhattanLength();\n\n\t}\n\n} );\n\nObject.assign( Vector4.prototype, {\n\n\tfromAttribute: function ( attribute, index, offset ) {\n\n\t\tconsole.warn( 'THREE.Vector4: .fromAttribute() has been renamed to .fromBufferAttribute().' );\n\t\treturn this.fromBufferAttribute( attribute, index, offset );\n\n\t},\n\tlengthManhattan: function () {\n\n\t\tconsole.warn( 'THREE.Vector4: .lengthManhattan() has been renamed to .manhattanLength().' );\n\t\treturn this.manhattanLength();\n\n\t}\n\n} );\n\n//\n\nObject.assign( Geometry.prototype, {\n\n\tcomputeTangents: function () {\n\n\t\tconsole.error( 'THREE.Geometry: .computeTangents() has been removed.' );\n\n\t},\n\tcomputeLineDistances: function () {\n\n\t\tconsole.error( 'THREE.Geometry: .computeLineDistances() has been removed. Use THREE.Line.computeLineDistances() instead.' );\n\n\t}\n\n} );\n\nObject.assign( Object3D.prototype, {\n\n\tgetChildByName: function ( name ) {\n\n\t\tconsole.warn( 'THREE.Object3D: .getChildByName() has been renamed to .getObjectByName().' );\n\t\treturn this.getObjectByName( name );\n\n\t},\n\trenderDepth: function () {\n\n\t\tconsole.warn( 'THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.' );\n\n\t},\n\ttranslate: function ( distance, axis ) {\n\n\t\tconsole.warn( 'THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead.' );\n\t\treturn this.translateOnAxis( axis, distance );\n\n\t},\n\tgetWorldRotation: function () {\n\n\t\tconsole.error( 'THREE.Object3D: .getWorldRotation() has been removed. Use THREE.Object3D.getWorldQuaternion( target ) instead.' );\n\n\t}\n\n} );\n\nObject.defineProperties( Object3D.prototype, {\n\n\teulerOrder: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .eulerOrder is now .rotation.order.' );\n\t\t\treturn this.rotation.order;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .eulerOrder is now .rotation.order.' );\n\t\t\tthis.rotation.order = value;\n\n\t\t}\n\t},\n\tuseQuaternion: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.' );\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.' );\n\n\t\t}\n\t}\n\n} );\n\nObject.defineProperties( LOD.prototype, {\n\n\tobjects: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.LOD: .objects has been renamed to .levels.' );\n\t\t\treturn this.levels;\n\n\t\t}\n\t}\n\n} );\n\nObject.defineProperty( Skeleton.prototype, 'useVertexTexture', {\n\n\tget: function () {\n\n\t\tconsole.warn( 'THREE.Skeleton: useVertexTexture has been removed.' );\n\n\t},\n\tset: function () {\n\n\t\tconsole.warn( 'THREE.Skeleton: useVertexTexture has been removed.' );\n\n\t}\n\n} );\n\nObject.defineProperty( Curve.prototype, '__arcLengthDivisions', {\n\n\tget: function () {\n\n\t\tconsole.warn( 'THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions.' );\n\t\treturn this.arcLengthDivisions;\n\n\t},\n\tset: function ( value ) {\n\n\t\tconsole.warn( 'THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions.' );\n\t\tthis.arcLengthDivisions = value;\n\n\t}\n\n} );\n\n//\n\nPerspectiveCamera.prototype.setLens = function ( focalLength, filmGauge ) {\n\n\tconsole.warn( \"THREE.PerspectiveCamera.setLens is deprecated. \" +\n\t\t\t\"Use .setFocalLength and .filmGauge for a photographic setup.\" );\n\n\tif ( filmGauge !== undefined ) this.filmGauge = filmGauge;\n\tthis.setFocalLength( focalLength );\n\n};\n\n//\n\nObject.defineProperties( Light.prototype, {\n\tonlyShadow: {\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Light: .onlyShadow has been removed.' );\n\n\t\t}\n\t},\n\tshadowCameraFov: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraFov is now .shadow.camera.fov.' );\n\t\t\tthis.shadow.camera.fov = value;\n\n\t\t}\n\t},\n\tshadowCameraLeft: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraLeft is now .shadow.camera.left.' );\n\t\t\tthis.shadow.camera.left = value;\n\n\t\t}\n\t},\n\tshadowCameraRight: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraRight is now .shadow.camera.right.' );\n\t\t\tthis.shadow.camera.right = value;\n\n\t\t}\n\t},\n\tshadowCameraTop: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraTop is now .shadow.camera.top.' );\n\t\t\tthis.shadow.camera.top = value;\n\n\t\t}\n\t},\n\tshadowCameraBottom: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraBottom is now .shadow.camera.bottom.' );\n\t\t\tthis.shadow.camera.bottom = value;\n\n\t\t}\n\t},\n\tshadowCameraNear: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraNear is now .shadow.camera.near.' );\n\t\t\tthis.shadow.camera.near = value;\n\n\t\t}\n\t},\n\tshadowCameraFar: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraFar is now .shadow.camera.far.' );\n\t\t\tthis.shadow.camera.far = value;\n\n\t\t}\n\t},\n\tshadowCameraVisible: {\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( light.shadow.camera ) instead.' );\n\n\t\t}\n\t},\n\tshadowBias: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowBias is now .shadow.bias.' );\n\t\t\tthis.shadow.bias = value;\n\n\t\t}\n\t},\n\tshadowDarkness: {\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowDarkness has been removed.' );\n\n\t\t}\n\t},\n\tshadowMapWidth: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowMapWidth is now .shadow.mapSize.width.' );\n\t\t\tthis.shadow.mapSize.width = value;\n\n\t\t}\n\t},\n\tshadowMapHeight: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowMapHeight is now .shadow.mapSize.height.' );\n\t\t\tthis.shadow.mapSize.height = value;\n\n\t\t}\n\t}\n} );\n\n//\n\nObject.defineProperties( BufferAttribute.prototype, {\n\n\tlength: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.BufferAttribute: .length has been deprecated. Use .count instead.' );\n\t\t\treturn this.array.length;\n\n\t\t}\n\t},\n\tcopyIndicesArray: function ( /* indices */ ) {\n\n\t\tconsole.error( 'THREE.BufferAttribute: .copyIndicesArray() has been removed.' );\n\n\t}\n\n} );\n\nObject.assign( BufferGeometry.prototype, {\n\n\taddIndex: function ( index ) {\n\n\t\tconsole.warn( 'THREE.BufferGeometry: .addIndex() has been renamed to .setIndex().' );\n\t\tthis.setIndex( index );\n\n\t},\n\taddDrawCall: function ( start, count, indexOffset ) {\n\n\t\tif ( indexOffset !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset.' );\n\n\t\t}\n\t\tconsole.warn( 'THREE.BufferGeometry: .addDrawCall() is now .addGroup().' );\n\t\tthis.addGroup( start, count );\n\n\t},\n\tclearDrawCalls: function () {\n\n\t\tconsole.warn( 'THREE.BufferGeometry: .clearDrawCalls() is now .clearGroups().' );\n\t\tthis.clearGroups();\n\n\t},\n\tcomputeTangents: function () {\n\n\t\tconsole.warn( 'THREE.BufferGeometry: .computeTangents() has been removed.' );\n\n\t},\n\tcomputeOffsets: function () {\n\n\t\tconsole.warn( 'THREE.BufferGeometry: .computeOffsets() has been removed.' );\n\n\t}\n\n} );\n\nObject.defineProperties( BufferGeometry.prototype, {\n\n\tdrawcalls: {\n\t\tget: function () {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry: .drawcalls has been renamed to .groups.' );\n\t\t\treturn this.groups;\n\n\t\t}\n\t},\n\toffsets: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.BufferGeometry: .offsets has been renamed to .groups.' );\n\t\t\treturn this.groups;\n\n\t\t}\n\t}\n\n} );\n\n//\n\nObject.assign( ExtrudeBufferGeometry.prototype, {\n\n\tgetArrays: function () {\n\n\t\tconsole.error( 'THREE.ExtrudeBufferGeometry: .getArrays() has been removed.' );\n\n\t},\n\n\taddShapeList: function () {\n\n\t\tconsole.error( 'THREE.ExtrudeBufferGeometry: .addShapeList() has been removed.' );\n\n\t},\n\n\taddShape: function () {\n\n\t\tconsole.error( 'THREE.ExtrudeBufferGeometry: .addShape() has been removed.' );\n\n\t}\n\n} );\n\n//\n\nObject.defineProperties( Uniform.prototype, {\n\n\tdynamic: {\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Uniform: .dynamic has been removed. Use object.onBeforeRender() instead.' );\n\n\t\t}\n\t},\n\tonUpdate: {\n\t\tvalue: function () {\n\n\t\t\tconsole.warn( 'THREE.Uniform: .onUpdate() has been removed. Use object.onBeforeRender() instead.' );\n\t\t\treturn this;\n\n\t\t}\n\t}\n\n} );\n\n//\n\nObject.defineProperties( Material.prototype, {\n\n\twrapAround: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.Material: .wrapAround has been removed.' );\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Material: .wrapAround has been removed.' );\n\n\t\t}\n\t},\n\twrapRGB: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.Material: .wrapRGB has been removed.' );\n\t\t\treturn new Color();\n\n\t\t}\n\t},\n\n\tshading: {\n\t\tget: function () {\n\n\t\t\tconsole.error( 'THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.' );\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.' );\n\t\t\tthis.flatShading = ( value === FlatShading );\n\n\t\t}\n\t}\n\n} );\n\nObject.defineProperties( MeshPhongMaterial.prototype, {\n\n\tmetal: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead.' );\n\t\t\treturn false;\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead' );\n\n\t\t}\n\t}\n\n} );\n\nObject.defineProperties( ShaderMaterial.prototype, {\n\n\tderivatives: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.ShaderMaterial: .derivatives has been moved to .extensions.derivatives.' );\n\t\t\treturn this.extensions.derivatives;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE. ShaderMaterial: .derivatives has been moved to .extensions.derivatives.' );\n\t\t\tthis.extensions.derivatives = value;\n\n\t\t}\n\t}\n\n} );\n\n//\n\nObject.assign( WebGLRenderer.prototype, {\n\n\tgetCurrentRenderTarget: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .getCurrentRenderTarget() is now .getRenderTarget().' );\n\t\treturn this.getRenderTarget();\n\n\t},\n\n\tgetMaxAnisotropy: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .getMaxAnisotropy() is now .capabilities.getMaxAnisotropy().' );\n\t\treturn this.capabilities.getMaxAnisotropy();\n\n\t},\n\n\tgetPrecision: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .getPrecision() is now .capabilities.precision.' );\n\t\treturn this.capabilities.precision;\n\n\t},\n\n\tresetGLState: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .resetGLState() is now .state.reset().' );\n\t\treturn this.state.reset();\n\n\t},\n\n\tsupportsFloatTextures: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( \\'OES_texture_float\\' ).' );\n\t\treturn this.extensions.get( 'OES_texture_float' );\n\n\t},\n\tsupportsHalfFloatTextures: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsHalfFloatTextures() is now .extensions.get( \\'OES_texture_half_float\\' ).' );\n\t\treturn this.extensions.get( 'OES_texture_half_float' );\n\n\t},\n\tsupportsStandardDerivatives: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsStandardDerivatives() is now .extensions.get( \\'OES_standard_derivatives\\' ).' );\n\t\treturn this.extensions.get( 'OES_standard_derivatives' );\n\n\t},\n\tsupportsCompressedTextureS3TC: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsCompressedTextureS3TC() is now .extensions.get( \\'WEBGL_compressed_texture_s3tc\\' ).' );\n\t\treturn this.extensions.get( 'WEBGL_compressed_texture_s3tc' );\n\n\t},\n\tsupportsCompressedTexturePVRTC: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsCompressedTexturePVRTC() is now .extensions.get( \\'WEBGL_compressed_texture_pvrtc\\' ).' );\n\t\treturn this.extensions.get( 'WEBGL_compressed_texture_pvrtc' );\n\n\t},\n\tsupportsBlendMinMax: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsBlendMinMax() is now .extensions.get( \\'EXT_blend_minmax\\' ).' );\n\t\treturn this.extensions.get( 'EXT_blend_minmax' );\n\n\t},\n\tsupportsVertexTextures: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsVertexTextures() is now .capabilities.vertexTextures.' );\n\t\treturn this.capabilities.vertexTextures;\n\n\t},\n\tsupportsInstancedArrays: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsInstancedArrays() is now .extensions.get( \\'ANGLE_instanced_arrays\\' ).' );\n\t\treturn this.extensions.get( 'ANGLE_instanced_arrays' );\n\n\t},\n\tenableScissorTest: function ( boolean ) {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest().' );\n\t\tthis.setScissorTest( boolean );\n\n\t},\n\tinitMaterial: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .initMaterial() has been removed.' );\n\n\t},\n\taddPrePlugin: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .addPrePlugin() has been removed.' );\n\n\t},\n\taddPostPlugin: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .addPostPlugin() has been removed.' );\n\n\t},\n\tupdateShadowMap: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .updateShadowMap() has been removed.' );\n\n\t},\n\tsetFaceCulling: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .setFaceCulling() has been removed.' );\n\n\t}\n\n} );\n\nObject.defineProperties( WebGLRenderer.prototype, {\n\n\tshadowMapEnabled: {\n\t\tget: function () {\n\n\t\t\treturn this.shadowMap.enabled;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled.' );\n\t\t\tthis.shadowMap.enabled = value;\n\n\t\t}\n\t},\n\tshadowMapType: {\n\t\tget: function () {\n\n\t\t\treturn this.shadowMap.type;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMapType is now .shadowMap.type.' );\n\t\t\tthis.shadowMap.type = value;\n\n\t\t}\n\t},\n\tshadowMapCullFace: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.' );\n\t\t\treturn undefined;\n\n\t\t},\n\t\tset: function ( /* value */ ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.' );\n\n\t\t}\n\t}\n} );\n\nObject.defineProperties( WebGLShadowMap.prototype, {\n\n\tcullFace: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.' );\n\t\t\treturn undefined;\n\n\t\t},\n\t\tset: function ( /* cullFace */ ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.' );\n\n\t\t}\n\t},\n\trenderReverseSided: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.' );\n\t\t\treturn undefined;\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.' );\n\n\t\t}\n\t},\n\trenderSingleSided: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.' );\n\t\t\treturn undefined;\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.' );\n\n\t\t}\n\t}\n\n} );\n\n//\n\nObject.defineProperties( WebGLRenderTarget.prototype, {\n\n\twrapS: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.' );\n\t\t\treturn this.texture.wrapS;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.' );\n\t\t\tthis.texture.wrapS = value;\n\n\t\t}\n\t},\n\twrapT: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.' );\n\t\t\treturn this.texture.wrapT;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.' );\n\t\t\tthis.texture.wrapT = value;\n\n\t\t}\n\t},\n\tmagFilter: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.' );\n\t\t\treturn this.texture.magFilter;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.' );\n\t\t\tthis.texture.magFilter = value;\n\n\t\t}\n\t},\n\tminFilter: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.' );\n\t\t\treturn this.texture.minFilter;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.' );\n\t\t\tthis.texture.minFilter = value;\n\n\t\t}\n\t},\n\tanisotropy: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.' );\n\t\t\treturn this.texture.anisotropy;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.' );\n\t\t\tthis.texture.anisotropy = value;\n\n\t\t}\n\t},\n\toffset: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .offset is now .texture.offset.' );\n\t\t\treturn this.texture.offset;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .offset is now .texture.offset.' );\n\t\t\tthis.texture.offset = value;\n\n\t\t}\n\t},\n\trepeat: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .repeat is now .texture.repeat.' );\n\t\t\treturn this.texture.repeat;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .repeat is now .texture.repeat.' );\n\t\t\tthis.texture.repeat = value;\n\n\t\t}\n\t},\n\tformat: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .format is now .texture.format.' );\n\t\t\treturn this.texture.format;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .format is now .texture.format.' );\n\t\t\tthis.texture.format = value;\n\n\t\t}\n\t},\n\ttype: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .type is now .texture.type.' );\n\t\t\treturn this.texture.type;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .type is now .texture.type.' );\n\t\t\tthis.texture.type = value;\n\n\t\t}\n\t},\n\tgenerateMipmaps: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.' );\n\t\t\treturn this.texture.generateMipmaps;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.' );\n\t\t\tthis.texture.generateMipmaps = value;\n\n\t\t}\n\t}\n\n} );\n\n//\n\nObject.defineProperties( WebVRManager.prototype, {\n\n\tstanding: {\n\t\tset: function ( /* value */ ) {\n\n\t\t\tconsole.warn( 'THREE.WebVRManager: .standing has been removed.' );\n\n\t\t}\n\t}\n\n} );\n\n//\n\nAudio.prototype.load = function ( file ) {\n\n\tconsole.warn( 'THREE.Audio: .load has been deprecated. Use THREE.AudioLoader instead.' );\n\tvar scope = this;\n\tvar audioLoader = new AudioLoader();\n\taudioLoader.load( file, function ( buffer ) {\n\n\t\tscope.setBuffer( buffer );\n\n\t} );\n\treturn this;\n\n};\n\nAudioAnalyser.prototype.getData = function () {\n\n\tconsole.warn( 'THREE.AudioAnalyser: .getData() is now .getFrequencyData().' );\n\treturn this.getFrequencyData();\n\n};\n\n//\n\nCubeCamera.prototype.updateCubeMap = function ( renderer, scene ) {\n\n\tconsole.warn( 'THREE.CubeCamera: .updateCubeMap() is now .update().' );\n\treturn this.update( renderer, scene );\n\n};\n\n//\n\nvar GeometryUtils = {\n\n\tmerge: function ( geometry1, geometry2, materialIndexOffset ) {\n\n\t\tconsole.warn( 'THREE.GeometryUtils: .merge() has been moved to Geometry. Use geometry.merge( geometry2, matrix, materialIndexOffset ) instead.' );\n\t\tvar matrix;\n\n\t\tif ( geometry2.isMesh ) {\n\n\t\t\tgeometry2.matrixAutoUpdate && geometry2.updateMatrix();\n\n\t\t\tmatrix = geometry2.matrix;\n\t\t\tgeometry2 = geometry2.geometry;\n\n\t\t}\n\n\t\tgeometry1.merge( geometry2, matrix, materialIndexOffset );\n\n\t},\n\n\tcenter: function ( geometry ) {\n\n\t\tconsole.warn( 'THREE.GeometryUtils: .center() has been moved to Geometry. Use geometry.center() instead.' );\n\t\treturn geometry.center();\n\n\t}\n\n};\n\nvar ImageUtils = {\n\n\tcrossOrigin: undefined,\n\n\tloadTexture: function ( url, mapping, onLoad, onError ) {\n\n\t\tconsole.warn( 'THREE.ImageUtils.loadTexture has been deprecated. Use THREE.TextureLoader() instead.' );\n\n\t\tvar loader = new TextureLoader();\n\t\tloader.setCrossOrigin( this.crossOrigin );\n\n\t\tvar texture = loader.load( url, onLoad, undefined, onError );\n\n\t\tif ( mapping ) texture.mapping = mapping;\n\n\t\treturn texture;\n\n\t},\n\n\tloadTextureCube: function ( urls, mapping, onLoad, onError ) {\n\n\t\tconsole.warn( 'THREE.ImageUtils.loadTextureCube has been deprecated. Use THREE.CubeTextureLoader() instead.' );\n\n\t\tvar loader = new CubeTextureLoader();\n\t\tloader.setCrossOrigin( this.crossOrigin );\n\n\t\tvar texture = loader.load( urls, onLoad, undefined, onError );\n\n\t\tif ( mapping ) texture.mapping = mapping;\n\n\t\treturn texture;\n\n\t},\n\n\tloadCompressedTexture: function () {\n\n\t\tconsole.error( 'THREE.ImageUtils.loadCompressedTexture has been removed. Use THREE.DDSLoader instead.' );\n\n\t},\n\n\tloadCompressedTextureCube: function () {\n\n\t\tconsole.error( 'THREE.ImageUtils.loadCompressedTextureCube has been removed. Use THREE.DDSLoader instead.' );\n\n\t}\n\n};\n\n//\n\nfunction Projector() {\n\n\tconsole.error( 'THREE.Projector has been moved to /examples/js/renderers/Projector.js.' );\n\n\tthis.projectVector = function ( vector, camera ) {\n\n\t\tconsole.warn( 'THREE.Projector: .projectVector() is now vector.project().' );\n\t\tvector.project( camera );\n\n\t};\n\n\tthis.unprojectVector = function ( vector, camera ) {\n\n\t\tconsole.warn( 'THREE.Projector: .unprojectVector() is now vector.unproject().' );\n\t\tvector.unproject( camera );\n\n\t};\n\n\tthis.pickingRay = function () {\n\n\t\tconsole.error( 'THREE.Projector: .pickingRay() is now raycaster.setFromCamera().' );\n\n\t};\n\n}\n\n//\n\nfunction CanvasRenderer() {\n\n\tconsole.error( 'THREE.CanvasRenderer has been moved to /examples/js/renderers/CanvasRenderer.js' );\n\n\tthis.domElement = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' );\n\tthis.clear = function () {};\n\tthis.render = function () {};\n\tthis.setClearColor = function () {};\n\tthis.setSize = function () {};\n\n}\n\n//\n\nvar SceneUtils = {\n\n\tcreateMultiMaterialObject: function ( /* geometry, materials */ ) {\n\n\t\tconsole.error( 'THREE.SceneUtils has been moved to /examples/js/utils/SceneUtils.js' );\n\n\t},\n\n\tdetach: function ( /* child, parent, scene */ ) {\n\n\t\tconsole.error( 'THREE.SceneUtils has been moved to /examples/js/utils/SceneUtils.js' );\n\n\t},\n\n\tattach: function ( /* child, scene, parent */ ) {\n\n\t\tconsole.error( 'THREE.SceneUtils has been moved to /examples/js/utils/SceneUtils.js' );\n\n\t}\n\n};\n\n//\n\nfunction LensFlare() {\n\n\tconsole.error( 'THREE.LensFlare has been moved to /examples/js/objects/Lensflare.js' );\n\n}\n\nexport { WebGLRenderTargetCube, WebGLRenderTarget, WebGLRenderer, ShaderLib, UniformsLib, UniformsUtils, ShaderChunk, FogExp2, Fog, Scene, Sprite, LOD, SkinnedMesh, Skeleton, Bone, Mesh, LineSegments, LineLoop, Line, Points, Group, VideoTexture, DataTexture, CompressedTexture, CubeTexture, CanvasTexture, DepthTexture, Texture, CompressedTextureLoader, DataTextureLoader, CubeTextureLoader, TextureLoader, ObjectLoader, MaterialLoader, BufferGeometryLoader, DefaultLoadingManager, LoadingManager, JSONLoader, ImageLoader, ImageBitmapLoader, FontLoader, FileLoader, Loader, LoaderUtils, Cache, AudioLoader, SpotLightShadow, SpotLight, PointLight, RectAreaLight, HemisphereLight, DirectionalLightShadow, DirectionalLight, AmbientLight, LightShadow, Light, StereoCamera, PerspectiveCamera, OrthographicCamera, CubeCamera, ArrayCamera, Camera, AudioListener, PositionalAudio, AudioContext, AudioAnalyser, Audio, VectorKeyframeTrack, StringKeyframeTrack, QuaternionKeyframeTrack, NumberKeyframeTrack, ColorKeyframeTrack, BooleanKeyframeTrack, PropertyMixer, PropertyBinding, KeyframeTrack, AnimationUtils, AnimationObjectGroup, AnimationMixer, AnimationClip, Uniform, InstancedBufferGeometry, BufferGeometry, Geometry, InterleavedBufferAttribute, InstancedInterleavedBuffer, InterleavedBuffer, InstancedBufferAttribute, Face3, Object3D, Raycaster, Layers, EventDispatcher, Clock, QuaternionLinearInterpolant, LinearInterpolant, DiscreteInterpolant, CubicInterpolant, Interpolant, Triangle, _Math as Math, Spherical, Cylindrical, Plane, Frustum, Sphere, Ray, Matrix4, Matrix3, Box3, Box2, Line3, Euler, Vector4, Vector3, Vector2, Quaternion, Color, ImmediateRenderObject, VertexNormalsHelper, SpotLightHelper, SkeletonHelper, PointLightHelper, RectAreaLightHelper, HemisphereLightHelper, GridHelper, PolarGridHelper, FaceNormalsHelper, DirectionalLightHelper, CameraHelper, BoxHelper, Box3Helper, PlaneHelper, ArrowHelper, AxesHelper, Shape, Path, ShapePath, Font, CurvePath, Curve, ShapeUtils, WebGLUtils, WireframeGeometry, ParametricGeometry, ParametricBufferGeometry, TetrahedronGeometry, TetrahedronBufferGeometry, OctahedronGeometry, OctahedronBufferGeometry, IcosahedronGeometry, IcosahedronBufferGeometry, DodecahedronGeometry, DodecahedronBufferGeometry, PolyhedronGeometry, PolyhedronBufferGeometry, TubeGeometry, TubeBufferGeometry, TorusKnotGeometry, TorusKnotBufferGeometry, TorusGeometry, TorusBufferGeometry, TextGeometry, TextBufferGeometry, SphereGeometry, SphereBufferGeometry, RingGeometry, RingBufferGeometry, PlaneGeometry, PlaneBufferGeometry, LatheGeometry, LatheBufferGeometry, ShapeGeometry, ShapeBufferGeometry, ExtrudeGeometry, ExtrudeBufferGeometry, EdgesGeometry, ConeGeometry, ConeBufferGeometry, CylinderGeometry, CylinderBufferGeometry, CircleGeometry, CircleBufferGeometry, BoxGeometry, BoxBufferGeometry, ShadowMaterial, SpriteMaterial, RawShaderMaterial, ShaderMaterial, PointsMaterial, MeshPhysicalMaterial, MeshStandardMaterial, MeshPhongMaterial, MeshToonMaterial, MeshNormalMaterial, MeshLambertMaterial, MeshDepthMaterial, MeshDistanceMaterial, MeshBasicMaterial, LineDashedMaterial, LineBasicMaterial, Material, Float64BufferAttribute, Float32BufferAttribute, Uint32BufferAttribute, Int32BufferAttribute, Uint16BufferAttribute, Int16BufferAttribute, Uint8ClampedBufferAttribute, Uint8BufferAttribute, Int8BufferAttribute, BufferAttribute, ArcCurve, CatmullRomCurve3, CubicBezierCurve, CubicBezierCurve3, EllipseCurve, LineCurve, LineCurve3, QuadraticBezierCurve, QuadraticBezierCurve3, SplineCurve, REVISION, MOUSE, CullFaceNone, CullFaceBack, CullFaceFront, CullFaceFrontBack, FrontFaceDirectionCW, FrontFaceDirectionCCW, BasicShadowMap, PCFShadowMap, PCFSoftShadowMap, FrontSide, BackSide, DoubleSide, FlatShading, SmoothShading, NoColors, FaceColors, VertexColors, NoBlending, NormalBlending, AdditiveBlending, SubtractiveBlending, MultiplyBlending, CustomBlending, AddEquation, SubtractEquation, ReverseSubtractEquation, MinEquation, MaxEquation, ZeroFactor, OneFactor, SrcColorFactor, OneMinusSrcColorFactor, SrcAlphaFactor, OneMinusSrcAlphaFactor, DstAlphaFactor, OneMinusDstAlphaFactor, DstColorFactor, OneMinusDstColorFactor, SrcAlphaSaturateFactor, NeverDepth, AlwaysDepth, LessDepth, LessEqualDepth, EqualDepth, GreaterEqualDepth, GreaterDepth, NotEqualDepth, MultiplyOperation, MixOperation, AddOperation, NoToneMapping, LinearToneMapping, ReinhardToneMapping, Uncharted2ToneMapping, CineonToneMapping, UVMapping, CubeReflectionMapping, CubeRefractionMapping, EquirectangularReflectionMapping, EquirectangularRefractionMapping, SphericalReflectionMapping, CubeUVReflectionMapping, CubeUVRefractionMapping, RepeatWrapping, ClampToEdgeWrapping, MirroredRepeatWrapping, NearestFilter, NearestMipMapNearestFilter, NearestMipMapLinearFilter, LinearFilter, LinearMipMapNearestFilter, LinearMipMapLinearFilter, UnsignedByteType, ByteType, ShortType, UnsignedShortType, IntType, UnsignedIntType, FloatType, HalfFloatType, UnsignedShort4444Type, UnsignedShort5551Type, UnsignedShort565Type, UnsignedInt248Type, AlphaFormat, RGBFormat, RGBAFormat, LuminanceFormat, LuminanceAlphaFormat, RGBEFormat, DepthFormat, DepthStencilFormat, RGB_S3TC_DXT1_Format, RGBA_S3TC_DXT1_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT5_Format, RGB_PVRTC_4BPPV1_Format, RGB_PVRTC_2BPPV1_Format, RGBA_PVRTC_4BPPV1_Format, RGBA_PVRTC_2BPPV1_Format, RGB_ETC1_Format, RGBA_ASTC_4x4_Format, RGBA_ASTC_5x4_Format, RGBA_ASTC_5x5_Format, RGBA_ASTC_6x5_Format, RGBA_ASTC_6x6_Format, RGBA_ASTC_8x5_Format, RGBA_ASTC_8x6_Format, RGBA_ASTC_8x8_Format, RGBA_ASTC_10x5_Format, RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_10x10_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_Format, LoopOnce, LoopRepeat, LoopPingPong, InterpolateDiscrete, InterpolateLinear, InterpolateSmooth, ZeroCurvatureEnding, ZeroSlopeEnding, WrapAroundEnding, TrianglesDrawMode, TriangleStripDrawMode, TriangleFanDrawMode, LinearEncoding, sRGBEncoding, GammaEncoding, RGBEEncoding, LogLuvEncoding, RGBM7Encoding, RGBM16Encoding, RGBDEncoding, BasicDepthPacking, RGBADepthPacking, BoxGeometry as CubeGeometry, Face4, LineStrip, LinePieces, MeshFaceMaterial, MultiMaterial, PointCloud, Particle, ParticleSystem, PointCloudMaterial, ParticleBasicMaterial, ParticleSystemMaterial, Vertex, DynamicBufferAttribute, Int8Attribute, Uint8Attribute, Uint8ClampedAttribute, Int16Attribute, Uint16Attribute, Int32Attribute, Uint32Attribute, Float32Attribute, Float64Attribute, ClosedSplineCurve3, SplineCurve3, Spline, AxisHelper, BoundingBoxHelper, EdgesHelper, WireframeHelper, XHRLoader, BinaryTextureLoader, GeometryUtils, ImageUtils, Projector, CanvasRenderer, SceneUtils, LensFlare };\n","// Provides simple static functions that are used multiple times in the app\nexport default class Helpers {\n static throttle(fn, threshhold, scope) {\n threshhold || (threshhold = 250);\n let last, deferTimer;\n\n return function() {\n const context = scope || this;\n\n const now = +new Date,\n args = arguments;\n\n if(last && now < last + threshhold) {\n clearTimeout(deferTimer);\n deferTimer = setTimeout(function() {\n last = now;\n fn.apply(context, args);\n }, threshhold);\n }\n else {\n last = now;\n fn.apply(context, args);\n }\n };\n }\n\n static logProgress() {\n return function(xhr) {\n if(xhr.lengthComputable) {\n const percentComplete = xhr.loaded / xhr.total * 100;\n\n console.log(Math.round(percentComplete, 2) + '% downloaded');\n }\n }\n }\n\n static logError() {\n return function(xhr) {\n console.error(xhr);\n }\n }\n\n static handleColorChange(color) {\n return (value) => {\n if(typeof value === 'string') {\n value = value.replace('#', '0x');\n }\n\n color.setHex(value);\n };\n }\n\n static update(mesh) {\n this.needsUpdate(mesh.material, mesh.geometry);\n }\n\n static needsUpdate(material, geometry) {\n return function() {\n material.shading = +material.shading; //Ensure number\n material.vertexColors = +material.vertexColors; //Ensure number\n material.side = +material.side; //Ensure number\n material.needsUpdate = true;\n geometry.verticesNeedUpdate = true;\n geometry.normalsNeedUpdate = true;\n geometry.colorsNeedUpdate = true;\n };\n }\n\n static updateTexture(material, materialKey, textures) {\n return function(key) {\n material[materialKey] = textures[key];\n material.needsUpdate = true;\n };\n }\n}\n","import * as THREE from 'three';\n\nimport Config from '../../data/config';\n\n// USe this class as a helper to set up some default materials\nexport default class Material {\n constructor(color) {\n this.basic = new THREE.MeshBasicMaterial({\n color,\n side: THREE.DoubleSide\n });\n\n this.standard = new THREE.MeshStandardMaterial({\n color,\n shading: THREE.FlatShading,\n roughness: 1,\n metalness: 0,\n side: THREE.DoubleSide\n });\n\n this.wire = new THREE.MeshBasicMaterial({wireframe: true});\n }\n}\n\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/**\n * Tween.js - Licensed under the MIT license\n * https://github.com/tweenjs/tween.js\n * ----------------------------------------------\n *\n * See https://github.com/tweenjs/tween.js/graphs/contributors for the full list of contributors.\n * Thank you all, you're awesome!\n */\n\nvar TWEEN = TWEEN || (function () {\n\n\tvar _tweens = [];\n\n\treturn {\n\n\t\tgetAll: function () {\n\n\t\t\treturn _tweens;\n\n\t\t},\n\n\t\tremoveAll: function () {\n\n\t\t\t_tweens = [];\n\n\t\t},\n\n\t\tadd: function (tween) {\n\n\t\t\t_tweens.push(tween);\n\n\t\t},\n\n\t\tremove: function (tween) {\n\n\t\t\tvar i = _tweens.indexOf(tween);\n\n\t\t\tif (i !== -1) {\n\t\t\t\t_tweens.splice(i, 1);\n\t\t\t}\n\n\t\t},\n\n\t\tupdate: function (time, preserve) {\n\n\t\t\tif (_tweens.length === 0) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tvar i = 0;\n\n\t\t\ttime = time !== undefined ? time : TWEEN.now();\n\n\t\t\twhile (i < _tweens.length) {\n\n\t\t\t\tif (_tweens[i].update(time) || preserve) {\n\t\t\t\t\ti++;\n\t\t\t\t} else {\n\t\t\t\t\t_tweens.splice(i, 1);\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn true;\n\n\t\t}\n\t};\n\n})();\n\n\n// Include a performance.now polyfill.\n// In node.js, use process.hrtime.\nif (typeof (window) === 'undefined' && typeof (process) !== 'undefined') {\n\tTWEEN.now = function () {\n\t\tvar time = process.hrtime();\n\n\t\t// Convert [seconds, nanoseconds] to milliseconds.\n\t\treturn time[0] * 1000 + time[1] / 1000000;\n\t};\n}\n// In a browser, use window.performance.now if it is available.\nelse if (typeof (window) !== 'undefined' &&\n window.performance !== undefined &&\n\t\t window.performance.now !== undefined) {\n\t// This must be bound, because directly assigning this function\n\t// leads to an invocation exception in Chrome.\n\tTWEEN.now = window.performance.now.bind(window.performance);\n}\n// Use Date.now if it is available.\nelse if (Date.now !== undefined) {\n\tTWEEN.now = Date.now;\n}\n// Otherwise, use 'new Date().getTime()'.\nelse {\n\tTWEEN.now = function () {\n\t\treturn new Date().getTime();\n\t};\n}\n\n\nTWEEN.Tween = function (object) {\n\n\tvar _object = object;\n\tvar _valuesStart = {};\n\tvar _valuesEnd = {};\n\tvar _valuesStartRepeat = {};\n\tvar _duration = 1000;\n\tvar _repeat = 0;\n\tvar _repeatDelayTime;\n\tvar _yoyo = false;\n\tvar _isPlaying = false;\n\tvar _reversed = false;\n\tvar _delayTime = 0;\n\tvar _startTime = null;\n\tvar _easingFunction = TWEEN.Easing.Linear.None;\n\tvar _interpolationFunction = TWEEN.Interpolation.Linear;\n\tvar _chainedTweens = [];\n\tvar _onStartCallback = null;\n\tvar _onStartCallbackFired = false;\n\tvar _onUpdateCallback = null;\n\tvar _onCompleteCallback = null;\n\tvar _onStopCallback = null;\n\n\tthis.to = function (properties, duration) {\n\n\t\t_valuesEnd = properties;\n\n\t\tif (duration !== undefined) {\n\t\t\t_duration = duration;\n\t\t}\n\n\t\treturn this;\n\n\t};\n\n\tthis.start = function (time) {\n\n\t\tTWEEN.add(this);\n\n\t\t_isPlaying = true;\n\n\t\t_onStartCallbackFired = false;\n\n\t\t_startTime = time !== undefined ? time : TWEEN.now();\n\t\t_startTime += _delayTime;\n\n\t\tfor (var property in _valuesEnd) {\n\n\t\t\t// Check if an Array was provided as property value\n\t\t\tif (_valuesEnd[property] instanceof Array) {\n\n\t\t\t\tif (_valuesEnd[property].length === 0) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Create a local copy of the Array with the start value at the front\n\t\t\t\t_valuesEnd[property] = [_object[property]].concat(_valuesEnd[property]);\n\n\t\t\t}\n\n\t\t\t// If `to()` specifies a property that doesn't exist in the source object,\n\t\t\t// we should not set that property in the object\n\t\t\tif (_object[property] === undefined) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Save the starting value.\n\t\t\t_valuesStart[property] = _object[property];\n\n\t\t\tif ((_valuesStart[property] instanceof Array) === false) {\n\t\t\t\t_valuesStart[property] *= 1.0; // Ensures we're using numbers, not strings\n\t\t\t}\n\n\t\t\t_valuesStartRepeat[property] = _valuesStart[property] || 0;\n\n\t\t}\n\n\t\treturn this;\n\n\t};\n\n\tthis.stop = function () {\n\n\t\tif (!_isPlaying) {\n\t\t\treturn this;\n\t\t}\n\n\t\tTWEEN.remove(this);\n\t\t_isPlaying = false;\n\n\t\tif (_onStopCallback !== null) {\n\t\t\t_onStopCallback.call(_object, _object);\n\t\t}\n\n\t\tthis.stopChainedTweens();\n\t\treturn this;\n\n\t};\n\n\tthis.end = function () {\n\n\t\tthis.update(_startTime + _duration);\n\t\treturn this;\n\n\t};\n\n\tthis.stopChainedTweens = function () {\n\n\t\tfor (var i = 0, numChainedTweens = _chainedTweens.length; i < numChainedTweens; i++) {\n\t\t\t_chainedTweens[i].stop();\n\t\t}\n\n\t};\n\n\tthis.delay = function (amount) {\n\n\t\t_delayTime = amount;\n\t\treturn this;\n\n\t};\n\n\tthis.repeat = function (times) {\n\n\t\t_repeat = times;\n\t\treturn this;\n\n\t};\n\n\tthis.repeatDelay = function (amount) {\n\n\t\t_repeatDelayTime = amount;\n\t\treturn this;\n\n\t};\n\n\tthis.yoyo = function (yoyo) {\n\n\t\t_yoyo = yoyo;\n\t\treturn this;\n\n\t};\n\n\n\tthis.easing = function (easing) {\n\n\t\t_easingFunction = easing;\n\t\treturn this;\n\n\t};\n\n\tthis.interpolation = function (interpolation) {\n\n\t\t_interpolationFunction = interpolation;\n\t\treturn this;\n\n\t};\n\n\tthis.chain = function () {\n\n\t\t_chainedTweens = arguments;\n\t\treturn this;\n\n\t};\n\n\tthis.onStart = function (callback) {\n\n\t\t_onStartCallback = callback;\n\t\treturn this;\n\n\t};\n\n\tthis.onUpdate = function (callback) {\n\n\t\t_onUpdateCallback = callback;\n\t\treturn this;\n\n\t};\n\n\tthis.onComplete = function (callback) {\n\n\t\t_onCompleteCallback = callback;\n\t\treturn this;\n\n\t};\n\n\tthis.onStop = function (callback) {\n\n\t\t_onStopCallback = callback;\n\t\treturn this;\n\n\t};\n\n\tthis.update = function (time) {\n\n\t\tvar property;\n\t\tvar elapsed;\n\t\tvar value;\n\n\t\tif (time < _startTime) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (_onStartCallbackFired === false) {\n\n\t\t\tif (_onStartCallback !== null) {\n\t\t\t\t_onStartCallback.call(_object, _object);\n\t\t\t}\n\n\t\t\t_onStartCallbackFired = true;\n\t\t}\n\n\t\telapsed = (time - _startTime) / _duration;\n\t\telapsed = elapsed > 1 ? 1 : elapsed;\n\n\t\tvalue = _easingFunction(elapsed);\n\n\t\tfor (property in _valuesEnd) {\n\n\t\t\t// Don't update properties that do not exist in the source object\n\t\t\tif (_valuesStart[property] === undefined) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tvar start = _valuesStart[property] || 0;\n\t\t\tvar end = _valuesEnd[property];\n\n\t\t\tif (end instanceof Array) {\n\n\t\t\t\t_object[property] = _interpolationFunction(end, value);\n\n\t\t\t} else {\n\n\t\t\t\t// Parses relative end values with start as base (e.g.: +10, -3)\n\t\t\t\tif (typeof (end) === 'string') {\n\n\t\t\t\t\tif (end.charAt(0) === '+' || end.charAt(0) === '-') {\n\t\t\t\t\t\tend = start + parseFloat(end);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tend = parseFloat(end);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Protect against non numeric properties.\n\t\t\t\tif (typeof (end) === 'number') {\n\t\t\t\t\t_object[property] = start + (end - start) * value;\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif (_onUpdateCallback !== null) {\n\t\t\t_onUpdateCallback.call(_object, value);\n\t\t}\n\n\t\tif (elapsed === 1) {\n\n\t\t\tif (_repeat > 0) {\n\n\t\t\t\tif (isFinite(_repeat)) {\n\t\t\t\t\t_repeat--;\n\t\t\t\t}\n\n\t\t\t\t// Reassign starting values, restart by making startTime = now\n\t\t\t\tfor (property in _valuesStartRepeat) {\n\n\t\t\t\t\tif (typeof (_valuesEnd[property]) === 'string') {\n\t\t\t\t\t\t_valuesStartRepeat[property] = _valuesStartRepeat[property] + parseFloat(_valuesEnd[property]);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (_yoyo) {\n\t\t\t\t\t\tvar tmp = _valuesStartRepeat[property];\n\n\t\t\t\t\t\t_valuesStartRepeat[property] = _valuesEnd[property];\n\t\t\t\t\t\t_valuesEnd[property] = tmp;\n\t\t\t\t\t}\n\n\t\t\t\t\t_valuesStart[property] = _valuesStartRepeat[property];\n\n\t\t\t\t}\n\n\t\t\t\tif (_yoyo) {\n\t\t\t\t\t_reversed = !_reversed;\n\t\t\t\t}\n\n\t\t\t\tif (_repeatDelayTime !== undefined) {\n\t\t\t\t\t_startTime = time + _repeatDelayTime;\n\t\t\t\t} else {\n\t\t\t\t\t_startTime = time + _delayTime;\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\n\t\t\t} else {\n\n\t\t\t\tif (_onCompleteCallback !== null) {\n\n\t\t\t\t\t_onCompleteCallback.call(_object, _object);\n\t\t\t\t}\n\n\t\t\t\tfor (var i = 0, numChainedTweens = _chainedTweens.length; i < numChainedTweens; i++) {\n\t\t\t\t\t// Make the chained tweens start exactly at the time they should,\n\t\t\t\t\t// even if the `update()` method was called way past the duration of the tween\n\t\t\t\t\t_chainedTweens[i].start(_startTime + _duration);\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t};\n\n};\n\n\nTWEEN.Easing = {\n\n\tLinear: {\n\n\t\tNone: function (k) {\n\n\t\t\treturn k;\n\n\t\t}\n\n\t},\n\n\tQuadratic: {\n\n\t\tIn: function (k) {\n\n\t\t\treturn k * k;\n\n\t\t},\n\n\t\tOut: function (k) {\n\n\t\t\treturn k * (2 - k);\n\n\t\t},\n\n\t\tInOut: function (k) {\n\n\t\t\tif ((k *= 2) < 1) {\n\t\t\t\treturn 0.5 * k * k;\n\t\t\t}\n\n\t\t\treturn - 0.5 * (--k * (k - 2) - 1);\n\n\t\t}\n\n\t},\n\n\tCubic: {\n\n\t\tIn: function (k) {\n\n\t\t\treturn k * k * k;\n\n\t\t},\n\n\t\tOut: function (k) {\n\n\t\t\treturn --k * k * k + 1;\n\n\t\t},\n\n\t\tInOut: function (k) {\n\n\t\t\tif ((k *= 2) < 1) {\n\t\t\t\treturn 0.5 * k * k * k;\n\t\t\t}\n\n\t\t\treturn 0.5 * ((k -= 2) * k * k + 2);\n\n\t\t}\n\n\t},\n\n\tQuartic: {\n\n\t\tIn: function (k) {\n\n\t\t\treturn k * k * k * k;\n\n\t\t},\n\n\t\tOut: function (k) {\n\n\t\t\treturn 1 - (--k * k * k * k);\n\n\t\t},\n\n\t\tInOut: function (k) {\n\n\t\t\tif ((k *= 2) < 1) {\n\t\t\t\treturn 0.5 * k * k * k * k;\n\t\t\t}\n\n\t\t\treturn - 0.5 * ((k -= 2) * k * k * k - 2);\n\n\t\t}\n\n\t},\n\n\tQuintic: {\n\n\t\tIn: function (k) {\n\n\t\t\treturn k * k * k * k * k;\n\n\t\t},\n\n\t\tOut: function (k) {\n\n\t\t\treturn --k * k * k * k * k + 1;\n\n\t\t},\n\n\t\tInOut: function (k) {\n\n\t\t\tif ((k *= 2) < 1) {\n\t\t\t\treturn 0.5 * k * k * k * k * k;\n\t\t\t}\n\n\t\t\treturn 0.5 * ((k -= 2) * k * k * k * k + 2);\n\n\t\t}\n\n\t},\n\n\tSinusoidal: {\n\n\t\tIn: function (k) {\n\n\t\t\treturn 1 - Math.cos(k * Math.PI / 2);\n\n\t\t},\n\n\t\tOut: function (k) {\n\n\t\t\treturn Math.sin(k * Math.PI / 2);\n\n\t\t},\n\n\t\tInOut: function (k) {\n\n\t\t\treturn 0.5 * (1 - Math.cos(Math.PI * k));\n\n\t\t}\n\n\t},\n\n\tExponential: {\n\n\t\tIn: function (k) {\n\n\t\t\treturn k === 0 ? 0 : Math.pow(1024, k - 1);\n\n\t\t},\n\n\t\tOut: function (k) {\n\n\t\t\treturn k === 1 ? 1 : 1 - Math.pow(2, - 10 * k);\n\n\t\t},\n\n\t\tInOut: function (k) {\n\n\t\t\tif (k === 0) {\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tif (k === 1) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\tif ((k *= 2) < 1) {\n\t\t\t\treturn 0.5 * Math.pow(1024, k - 1);\n\t\t\t}\n\n\t\t\treturn 0.5 * (- Math.pow(2, - 10 * (k - 1)) + 2);\n\n\t\t}\n\n\t},\n\n\tCircular: {\n\n\t\tIn: function (k) {\n\n\t\t\treturn 1 - Math.sqrt(1 - k * k);\n\n\t\t},\n\n\t\tOut: function (k) {\n\n\t\t\treturn Math.sqrt(1 - (--k * k));\n\n\t\t},\n\n\t\tInOut: function (k) {\n\n\t\t\tif ((k *= 2) < 1) {\n\t\t\t\treturn - 0.5 * (Math.sqrt(1 - k * k) - 1);\n\t\t\t}\n\n\t\t\treturn 0.5 * (Math.sqrt(1 - (k -= 2) * k) + 1);\n\n\t\t}\n\n\t},\n\n\tElastic: {\n\n\t\tIn: function (k) {\n\n\t\t\tif (k === 0) {\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tif (k === 1) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\treturn -Math.pow(2, 10 * (k - 1)) * Math.sin((k - 1.1) * 5 * Math.PI);\n\n\t\t},\n\n\t\tOut: function (k) {\n\n\t\t\tif (k === 0) {\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tif (k === 1) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\treturn Math.pow(2, -10 * k) * Math.sin((k - 0.1) * 5 * Math.PI) + 1;\n\n\t\t},\n\n\t\tInOut: function (k) {\n\n\t\t\tif (k === 0) {\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tif (k === 1) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\tk *= 2;\n\n\t\t\tif (k < 1) {\n\t\t\t\treturn -0.5 * Math.pow(2, 10 * (k - 1)) * Math.sin((k - 1.1) * 5 * Math.PI);\n\t\t\t}\n\n\t\t\treturn 0.5 * Math.pow(2, -10 * (k - 1)) * Math.sin((k - 1.1) * 5 * Math.PI) + 1;\n\n\t\t}\n\n\t},\n\n\tBack: {\n\n\t\tIn: function (k) {\n\n\t\t\tvar s = 1.70158;\n\n\t\t\treturn k * k * ((s + 1) * k - s);\n\n\t\t},\n\n\t\tOut: function (k) {\n\n\t\t\tvar s = 1.70158;\n\n\t\t\treturn --k * k * ((s + 1) * k + s) + 1;\n\n\t\t},\n\n\t\tInOut: function (k) {\n\n\t\t\tvar s = 1.70158 * 1.525;\n\n\t\t\tif ((k *= 2) < 1) {\n\t\t\t\treturn 0.5 * (k * k * ((s + 1) * k - s));\n\t\t\t}\n\n\t\t\treturn 0.5 * ((k -= 2) * k * ((s + 1) * k + s) + 2);\n\n\t\t}\n\n\t},\n\n\tBounce: {\n\n\t\tIn: function (k) {\n\n\t\t\treturn 1 - TWEEN.Easing.Bounce.Out(1 - k);\n\n\t\t},\n\n\t\tOut: function (k) {\n\n\t\t\tif (k < (1 / 2.75)) {\n\t\t\t\treturn 7.5625 * k * k;\n\t\t\t} else if (k < (2 / 2.75)) {\n\t\t\t\treturn 7.5625 * (k -= (1.5 / 2.75)) * k + 0.75;\n\t\t\t} else if (k < (2.5 / 2.75)) {\n\t\t\t\treturn 7.5625 * (k -= (2.25 / 2.75)) * k + 0.9375;\n\t\t\t} else {\n\t\t\t\treturn 7.5625 * (k -= (2.625 / 2.75)) * k + 0.984375;\n\t\t\t}\n\n\t\t},\n\n\t\tInOut: function (k) {\n\n\t\t\tif (k < 0.5) {\n\t\t\t\treturn TWEEN.Easing.Bounce.In(k * 2) * 0.5;\n\t\t\t}\n\n\t\t\treturn TWEEN.Easing.Bounce.Out(k * 2 - 1) * 0.5 + 0.5;\n\n\t\t}\n\n\t}\n\n};\n\nTWEEN.Interpolation = {\n\n\tLinear: function (v, k) {\n\n\t\tvar m = v.length - 1;\n\t\tvar f = m * k;\n\t\tvar i = Math.floor(f);\n\t\tvar fn = TWEEN.Interpolation.Utils.Linear;\n\n\t\tif (k < 0) {\n\t\t\treturn fn(v[0], v[1], f);\n\t\t}\n\n\t\tif (k > 1) {\n\t\t\treturn fn(v[m], v[m - 1], m - f);\n\t\t}\n\n\t\treturn fn(v[i], v[i + 1 > m ? m : i + 1], f - i);\n\n\t},\n\n\tBezier: function (v, k) {\n\n\t\tvar b = 0;\n\t\tvar n = v.length - 1;\n\t\tvar pw = Math.pow;\n\t\tvar bn = TWEEN.Interpolation.Utils.Bernstein;\n\n\t\tfor (var i = 0; i <= n; i++) {\n\t\t\tb += pw(1 - k, n - i) * pw(k, i) * v[i] * bn(n, i);\n\t\t}\n\n\t\treturn b;\n\n\t},\n\n\tCatmullRom: function (v, k) {\n\n\t\tvar m = v.length - 1;\n\t\tvar f = m * k;\n\t\tvar i = Math.floor(f);\n\t\tvar fn = TWEEN.Interpolation.Utils.CatmullRom;\n\n\t\tif (v[0] === v[m]) {\n\n\t\t\tif (k < 0) {\n\t\t\t\ti = Math.floor(f = m * (1 + k));\n\t\t\t}\n\n\t\t\treturn fn(v[(i - 1 + m) % m], v[i], v[(i + 1) % m], v[(i + 2) % m], f - i);\n\n\t\t} else {\n\n\t\t\tif (k < 0) {\n\t\t\t\treturn v[0] - (fn(v[0], v[0], v[1], v[1], -f) - v[0]);\n\t\t\t}\n\n\t\t\tif (k > 1) {\n\t\t\t\treturn v[m] - (fn(v[m], v[m], v[m - 1], v[m - 1], f - m) - v[m]);\n\t\t\t}\n\n\t\t\treturn fn(v[i ? i - 1 : 0], v[i], v[m < i + 1 ? m : i + 1], v[m < i + 2 ? m : i + 2], f - i);\n\n\t\t}\n\n\t},\n\n\tUtils: {\n\n\t\tLinear: function (p0, p1, t) {\n\n\t\t\treturn (p1 - p0) * t + p0;\n\n\t\t},\n\n\t\tBernstein: function (n, i) {\n\n\t\t\tvar fc = TWEEN.Interpolation.Utils.Factorial;\n\n\t\t\treturn fc(n) / fc(i) / fc(n - i);\n\n\t\t},\n\n\t\tFactorial: (function () {\n\n\t\t\tvar a = [1];\n\n\t\t\treturn function (n) {\n\n\t\t\t\tvar s = 1;\n\n\t\t\t\tif (a[n]) {\n\t\t\t\t\treturn a[n];\n\t\t\t\t}\n\n\t\t\t\tfor (var i = n; i > 1; i--) {\n\t\t\t\t\ts *= i;\n\t\t\t\t}\n\n\t\t\t\ta[n] = s;\n\t\t\t\treturn s;\n\n\t\t\t};\n\n\t\t})(),\n\n\t\tCatmullRom: function (p0, p1, p2, p3, t) {\n\n\t\t\tvar v0 = (p2 - p0) * 0.5;\n\t\t\tvar v1 = (p3 - p1) * 0.5;\n\t\t\tvar t2 = t * t;\n\t\t\tvar t3 = t * t2;\n\n\t\t\treturn (2 * p1 - 2 * p2 + v0 + v1) * t3 + (- 3 * p1 + 3 * p2 - 2 * v0 - v1) * t2 + v0 * t + p1;\n\n\t\t}\n\n\t}\n\n};\n\n// UMD (Universal Module Definition)\n(function (root) {\n\n\tif (typeof define === 'function' && define.amd) {\n\n\t\t// AMD\n\t\tdefine([], function () {\n\t\t\treturn TWEEN;\n\t\t});\n\n\t} else if (typeof module !== 'undefined' && typeof exports === 'object') {\n\n\t\t// Node.js\n\t\tmodule.exports = TWEEN;\n\n\t} else if (root !== undefined) {\n\n\t\t// Global variable\n\t\troot.TWEEN = TWEEN;\n\n\t}\n\n})(this);\n","import Config from '../../data/config';\n\n// Manages all dat.GUI interactions\nexport default class DatGUI {\n constructor(main, mesh) {\n const gui = new dat.GUI();\n\n this.camera = main.camera.threeCamera;\n this.controls = main.controls.threeControls;\n this.light = main.light;\n\n /* Global */\n //gui.close();\n\n /* Camera */\n const cameraFolder = gui.addFolder('Camera');\n const cameraFOVGui = cameraFolder.add(Config.camera, 'fov', 0, 180).name('Camera FOV');\n cameraFOVGui.onChange((value) => {\n this.controls.enableRotate = false;\n\n this.camera.fov = value;\n });\n cameraFOVGui.onFinishChange(() => {\n this.camera.updateProjectionMatrix();\n\n this.controls.enableRotate = true;\n });\n const cameraAspectGui = cameraFolder.add(Config.camera, 'aspect', 0, 4).name('Camera Aspect');\n cameraAspectGui.onChange((value) => {\n this.controls.enableRotate = false;\n\n this.camera.aspect = value;\n });\n cameraAspectGui.onFinishChange(() => {\n this.camera.updateProjectionMatrix();\n\n this.controls.enableRotate = true;\n });\n const cameraFogColorGui = cameraFolder.addColor(Config.fog, 'color').name('Fog Color');\n cameraFogColorGui.onChange((value) => {\n main.scene.fog.color.setHex(value);\n });\n const cameraFogNearGui = cameraFolder.add(Config.fog, 'near', 0.000, 0.010).name('Fog Near');\n cameraFogNearGui.onChange((value) => {\n this.controls.enableRotate = false;\n\n main.scene.fog.density = value;\n });\n cameraFogNearGui.onFinishChange(() => {\n this.controls.enableRotate = true;\n });\n\n\n /* Controls */\n const controlsFolder = gui.addFolder('Controls');\n controlsFolder.add(Config.controls, 'autoRotate').name('Auto Rotate').onChange((value) => {\n this.controls.autoRotate = value;\n });\n const controlsAutoRotateSpeedGui = controlsFolder.add(Config.controls, 'autoRotateSpeed', -1, 1).name('Rotation Speed');\n controlsAutoRotateSpeedGui.onChange((value) => {\n this.controls.enableRotate = false;\n this.controls.autoRotateSpeed = value;\n });\n controlsAutoRotateSpeedGui.onFinishChange(() => {\n this.controls.enableRotate = true;\n });\n\n\n /* Mesh */\n const meshFolder = gui.addFolder('Mesh');\n meshFolder.add(Config.mesh, 'translucent', true).name('Translucent').onChange((value) => {\n if(value) {\n mesh.material.transparent = true;\n mesh.material.opacity = 0.5;\n } else {\n mesh.material.opacity = 1.0;\n }\n });\n meshFolder.add(Config.mesh, 'wireframe', true).name('Wireframe').onChange((value) => {\n mesh.material.wireframe = value;\n });\n\n\n /* Lights */\n // Ambient Light\n const ambientLightFolder = gui.addFolder('Ambient Light');\n ambientLightFolder.add(Config.ambientLight, 'enabled').name('Enabled').onChange((value) => {\n this.light.ambientLight.visible = value;\n });\n ambientLightFolder.addColor(Config.ambientLight, 'color').name('Color').onChange((value) => {\n this.light.ambientLight.color.setHex(value);\n });\n\n\n // Directional Light\n const directionalLightFolder = gui.addFolder('Directional Light');\n directionalLightFolder.add(Config.directionalLight, 'enabled').name('Enabled').onChange((value) => {\n this.light.directionalLight.visible = value;\n });\n directionalLightFolder.addColor(Config.directionalLight, 'color').name('Color').onChange((value) => {\n this.light.directionalLight.color.setHex(value);\n });\n const directionalLightIntensityGui = directionalLightFolder.add(Config.directionalLight, 'intensity', 0, 2).name('Intensity');\n directionalLightIntensityGui.onChange((value) => {\n this.controls.enableRotate = false;\n\n this.light.directionalLight.intensity = value;\n });\n directionalLightIntensityGui.onFinishChange(() => {\n this.controls.enableRotate = true;\n });\n const directionalLightPositionXGui = directionalLightFolder.add(Config.directionalLight, 'x', -1000, 1000).name('Position X');\n directionalLightPositionXGui.onChange((value) => {\n this.controls.enableRotate = false;\n\n this.light.directionalLight.position.x = value;\n });\n directionalLightPositionXGui.onFinishChange(() => {\n this.controls.enableRotate = true;\n });\n const directionalLightPositionYGui = directionalLightFolder.add(Config.directionalLight, 'y', -1000, 1000).name('Position Y');\n directionalLightPositionYGui.onChange((value) => {\n this.controls.enableRotate = false;\n\n this.light.directionalLight.position.y = value;\n });\n directionalLightPositionYGui.onFinishChange(() => {\n this.controls.enableRotate = true;\n });\n const directionalLightPositionZGui = directionalLightFolder.add(Config.directionalLight, 'z', -1000, 1000).name('Position Z');\n directionalLightPositionZGui.onChange((value) => {\n this.controls.enableRotate = false;\n\n this.light.directionalLight.position.z = value;\n });\n directionalLightPositionZGui.onFinishChange(() => {\n this.controls.enableRotate = true;\n });\n\n // Shadow Map\n const shadowFolder = gui.addFolder('Shadow Map');\n shadowFolder.add(Config.shadow, 'enabled').name('Enabled').onChange((value) => {\n this.light.directionalLight.castShadow = value;\n });\n shadowFolder.add(Config.shadow, 'helperEnabled').name('Helper Enabled').onChange((value) => {\n this.light.directionalLightHelper.visible = value;\n });\n const shadowNearGui = shadowFolder.add(Config.shadow, 'near', 0, 400).name('Near');\n shadowNearGui.onChange((value) => {\n this.controls.enableRotate = false;\n\n this.light.directionalLight.shadow.camera.near = value;\n });\n shadowNearGui.onFinishChange(() => {\n this.controls.enableRotate = true;\n this.light.directionalLight.shadow.map.dispose();\n this.light.directionalLight.shadow.map = null;\n this.light.directionalLightHelper.update();\n });\n const shadowFarGui = shadowFolder.add(Config.shadow, 'far', 0, 1200).name('Far');\n shadowFarGui.onChange((value) => {\n this.controls.enableRotate = false;\n\n this.light.directionalLight.shadow.camera.far = value;\n });\n shadowFarGui.onFinishChange(() => {\n this.controls.enableRotate = true;\n this.light.directionalLight.shadow.map.dispose();\n this.light.directionalLight.shadow.map = null;\n this.light.directionalLightHelper.update();\n });\n const shadowTopGui = shadowFolder.add(Config.shadow, 'top', -400, 400).name('Top');\n shadowTopGui.onChange((value) => {\n this.controls.enableRotate = false;\n\n this.light.directionalLight.shadow.camera.top = value;\n });\n shadowTopGui.onFinishChange(() => {\n this.controls.enableRotate = true;\n this.light.directionalLight.shadow.map.dispose();\n this.light.directionalLight.shadow.map = null;\n this.light.directionalLightHelper.update();\n });\n const shadowRightGui = shadowFolder.add(Config.shadow, 'right', -400, 400).name('Right');\n shadowRightGui.onChange((value) => {\n this.controls.enableRotate = false;\n\n this.light.directionalLight.shadow.camera.right = value;\n });\n shadowRightGui.onFinishChange(() => {\n this.controls.enableRotate = true;\n this.light.directionalLight.shadow.map.dispose();\n this.light.directionalLight.shadow.map = null;\n this.light.directionalLightHelper.update();\n });\n const shadowBottomGui = shadowFolder.add(Config.shadow, 'bottom', -400, 400).name('Bottom');\n shadowBottomGui.onChange((value) => {\n this.controls.enableRotate = false;\n\n this.light.directionalLight.shadow.camera.bottom = value;\n });\n shadowBottomGui.onFinishChange(() => {\n this.controls.enableRotate = true;\n this.light.directionalLight.shadow.map.dispose();\n this.light.directionalLight.shadow.map = null;\n this.light.directionalLightHelper.update();\n });\n const shadowLeftGui = shadowFolder.add(Config.shadow, 'left', -400, 400).name('Left');\n shadowLeftGui.onChange((value) => {\n this.controls.enableRotate = false;\n\n this.light.directionalLight.shadow.camera.left = value;\n });\n shadowLeftGui.onFinishChange(() => {\n this.controls.enableRotate = true;\n this.light.directionalLight.shadow.map.dispose();\n this.light.directionalLight.shadow.map = null;\n this.light.directionalLightHelper.update();\n });\n const shadowBiasGui = shadowFolder.add(Config.shadow, 'bias', -0.000010, 1).name('Bias');\n shadowBiasGui.onChange((value) => {\n this.controls.enableRotate = false;\n\n this.light.directionalLight.shadow.bias = value;\n });\n shadowBiasGui.onFinishChange(() => {\n this.controls.enableRotate = true;\n this.light.directionalLight.shadow.map.dispose();\n this.light.directionalLight.shadow.map = null;\n this.light.directionalLightHelper.update();\n });\n\n\n // Point Light\n const pointLightFolder = gui.addFolder('Point Light');\n pointLightFolder.add(Config.pointLight, 'enabled').name('Enabled').onChange((value) => {\n this.light.pointLight.visible = value;\n });\n pointLightFolder.addColor(Config.pointLight, 'color').name('Color').onChange((value) => {\n this.light.pointLight.color.setHex(value);\n });\n const pointLightIntensityGui = pointLightFolder.add(Config.pointLight, 'intensity', 0, 2).name('Intensity');\n pointLightIntensityGui.onChange((value) => {\n this.controls.enableRotate = false;\n\n this.light.pointLight.intensity = value;\n });\n pointLightIntensityGui.onFinishChange(() => {\n this.controls.enableRotate = true;\n });\n const pointLightDistanceGui = pointLightFolder.add(Config.pointLight, 'distance', 0, 1000).name('Distance');\n pointLightDistanceGui.onChange((value) => {\n this.controls.enableRotate = false;\n\n this.light.pointLight.distance = value;\n });\n pointLightDistanceGui.onFinishChange(() => {\n this.controls.enableRotate = true;\n });\n const pointLightPositionXGui = pointLightFolder.add(Config.pointLight, 'x', -1000, 1000).name('Position X');\n pointLightPositionXGui.onChange((value) => {\n this.controls.enableRotate = false;\n\n this.light.pointLight.position.x = value;\n });\n pointLightPositionXGui.onFinishChange(() => {\n this.controls.enableRotate = true;\n });\n const pointLightPositionYGui = pointLightFolder.add(Config.pointLight, 'y', -1000, 1000).name('Position Y');\n pointLightPositionYGui.onChange((value) => {\n this.controls.enableRotate = false;\n\n this.light.pointLight.position.y = value;\n });\n pointLightPositionYGui.onFinishChange(() => {\n this.controls.enableRotate = true;\n });\n const pointLightPositionZGui = pointLightFolder.add(Config.pointLight, 'z', -1000, 1000).name('Position Z');\n pointLightPositionZGui.onChange((value) => {\n this.controls.enableRotate = false;\n\n this.light.pointLight.position.z = value;\n });\n pointLightPositionZGui.onFinishChange(() => {\n this.controls.enableRotate = true;\n });\n\n\n // Hemi Light\n const hemiLightFolder = gui.addFolder('Hemi Light');\n hemiLightFolder.add(Config.hemiLight, 'enabled').name('Enabled').onChange((value) => {\n this.light.hemiLight.visible = value;\n });\n hemiLightFolder.addColor(Config.hemiLight, 'color').name('Color').onChange((value) => {\n this.light.hemiLight.color.setHex(value);\n });\n hemiLightFolder.addColor(Config.hemiLight, 'groundColor').name('ground Color').onChange((value) => {\n this.light.hemiLight.groundColor.setHex(value);\n });\n const hemiLightIntensityGui = hemiLightFolder.add(Config.hemiLight, 'intensity', 0, 2).name('Intensity');\n hemiLightIntensityGui.onChange((value) => {\n this.controls.enableRotate = false;\n\n this.light.hemiLight.intensity = value;\n });\n hemiLightIntensityGui.onFinishChange(() => {\n this.controls.enableRotate = true;\n });\n const hemiLightPositionXGui = hemiLightFolder.add(Config.hemiLight, 'x', -1000, 1000).name('Position X');\n hemiLightPositionXGui.onChange((value) => {\n this.controls.enableRotate = false;\n\n this.light.hemiLight.position.x = value;\n });\n hemiLightPositionXGui.onFinishChange(() => {\n this.controls.enableRotate = true;\n });\n const hemiLightPositionYGui = hemiLightFolder.add(Config.hemiLight, 'y', -500, 1000).name('Position Y');\n hemiLightPositionYGui.onChange((value) => {\n this.controls.enableRotate = false;\n\n this.light.hemiLight.position.y = value;\n });\n hemiLightPositionYGui.onFinishChange(() => {\n this.controls.enableRotate = true;\n });\n const hemiLightPositionZGui = hemiLightFolder.add(Config.hemiLight, 'z', -1000, 1000).name('Position Z');\n hemiLightPositionZGui.onChange((value) => {\n this.controls.enableRotate = false;\n\n this.light.hemiLight.position.z = value;\n });\n hemiLightPositionZGui.onFinishChange(() => {\n this.controls.enableRotate = true;\n });\n }\n}\n","const ALIAS = {\r\n 'left'\t\t: 37,\r\n 'up'\t\t : 38,\r\n 'right'\t\t: 39,\r\n 'down'\t\t: 40,\r\n 'space'\t\t: 32,\r\n 'tab'\t\t : 9,\r\n 'escape'\t: 27\r\n};\r\n\r\nexport default class Keyboard {\r\n constructor(domElement) {\r\n this.domElement = domElement || document;\r\n this.keyCodes = {};\r\n\r\n // bind keyEvents\r\n this.domElement.addEventListener('keydown', (event) => this.onKeyChange(event), false);\r\n this.domElement.addEventListener('keyup', (event) => this.onKeyChange(event), false);\r\n\r\n // bind window blur\r\n window.addEventListener('blur', () => this.onBlur, false);\r\n }\r\n\r\n destroy() {\r\n this.domElement.removeEventListener('keydown', (event) => this.onKeyChange(event), false);\r\n this.domElement.removeEventListener('keyup', (event) => this.onKeyChange(event), false);\r\n\r\n // unbind window blur event\r\n window.removeEventListener('blur', () => this.onBlur, false);\r\n }\r\n\r\n onBlur() {\r\n for(const prop in this.keyCodes)\r\n this.keyCodes[prop] = false;\r\n }\r\n\r\n onKeyChange(event) {\r\n // log to debug\r\n //console.log('onKeyChange', event, event.keyCode, event.shiftKey, event.ctrlKey, event.altKey, event.metaKey)\r\n\r\n // update this.keyCodes\r\n const keyCode = event.keyCode;\r\n this.keyCodes[keyCode] = event.type === 'keydown';\r\n }\r\n\r\n pressed(keyDesc) {\r\n const keys = keyDesc.split('+');\r\n for(let i = 0; i < keys.length; i++) {\r\n const key = keys[i];\r\n let pressed = false;\r\n if(Object.keys(ALIAS).indexOf(key) != -1) {\r\n pressed = this.keyCodes[ALIAS[key]];\r\n } else {\r\n pressed = this.keyCodes[key.toUpperCase().charCodeAt(0)];\r\n }\r\n if(!pressed)\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n eventMatches(event, keyDesc) {\r\n const aliases = ALIAS;\r\n const aliasKeys = Object.keys(aliases);\r\n const keys = keyDesc.split('+');\r\n // log to debug\r\n // console.log('eventMatches', event, event.keyCode, event.shiftKey, event.ctrlKey, event.altKey, event.metaKey)\r\n for(let i = 0; i < keys.length; i++) {\r\n const key = keys[i];\r\n let pressed = false;\r\n if(key === 'shift') {\r\n pressed = event.shiftKey ? true : false;\r\n } else if(key === 'ctrl') {\r\n pressed = event.ctrlKey ? true : false;\r\n } else if(key === 'alt') {\r\n pressed = event.altKey ? true : false;\r\n } else if(key === 'meta') {\r\n pressed = event.metaKey ? true : false;\r\n } else if(aliasKeys.indexOf(key) !== -1) {\r\n pressed = event.keyCode === aliases[key];\r\n } else if(event.keyCode === key.toUpperCase().charCodeAt(0)) {\r\n pressed = true;\r\n }\r\n if(!pressed)\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n}\r\n","import Keyboard from '../../utils/keyboard';\nimport Helpers from '../../utils/helpers';\nimport Config from '../../data/config';\n\n// Manages all input interactions\nexport default class Interaction {\n constructor(renderer, scene, camera, controls) {\n // Properties\n this.renderer = renderer;\n this.scene = scene;\n this.camera = camera;\n this.controls = controls;\n\n this.timeout = null;\n\n // Instantiate keyboard helper\n this.keyboard = new Keyboard();\n\n // Listeners\n // Mouse events\n this.renderer.domElement.addEventListener('mousemove', (event) => Helpers.throttle(this.onMouseMove(event), 250), false);\n this.renderer.domElement.addEventListener('mouseleave', (event) => this.onMouseLeave(event), false);\n this.renderer.domElement.addEventListener('mouseover', (event) => this.onMouseOver(event), false);\n\n // Keyboard events\n this.keyboard.domElement.addEventListener('keydown', (event) => {\n // Only once\n if(event.repeat) {\n return;\n }\n\n if(this.keyboard.eventMatches(event, 'escape')) {\n console.log('Escape pressed');\n }\n });\n }\n\n onMouseOver(event) {\n event.preventDefault();\n\n Config.isMouseOver = true;\n }\n\n onMouseLeave(event) {\n event.preventDefault();\n\n Config.isMouseOver = false;\n }\n\n onMouseMove(event) {\n event.preventDefault();\n\n clearTimeout(this.timeout);\n\n this.timeout = setTimeout(function() {\n Config.isMouseMoving = false;\n }, 200);\n\n Config.isMouseMoving = true;\n }\n}\n","import * as THREE from 'three';\n\n// Simple mesh helper that shows edges, wireframes, and face and vertex normals\nexport default class MeshHelper {\n constructor(scene, mesh) {\n const wireframe = new THREE.WireframeGeometry(mesh.geometry);\n const wireLine = new THREE.LineSegments(wireframe);\n wireLine.material.depthTest = false;\n wireLine.material.opacity = 0.25;\n wireLine.material.transparent = true;\n mesh.add(wireLine);\n\n const edges = new THREE.EdgesGeometry(mesh.geometry);\n const edgesLine = new THREE.LineSegments(edges);\n edgesLine.material.depthTest = false;\n edgesLine.material.opacity = 0.25;\n edgesLine.material.transparent = true;\n mesh.add(edgesLine);\n\n scene.add(new THREE.BoxHelper(mesh));\n scene.add(new THREE.FaceNormalsHelper(mesh, 2));\n scene.add(new THREE.VertexNormalsHelper(mesh, 2));\n }\n}\n","import * as THREE from 'three';\n\nimport Material from '../helpers/material';\nimport MeshHelper from '../helpers/meshHelper';\nimport Helpers from '../../utils/helpers';\nimport Config from '../../data/config';\n\n// Loads in a single object from the config file\nexport default class Model {\n constructor(scene, manager, textures) {\n this.scene = scene;\n this.textures = textures;\n\n // Manager is passed in to loader to determine when loading done in main\n this.loader = new THREE.ObjectLoader(manager);\n this.obj = null;\n }\n\n load() {\n // Load model with ObjectLoader\n this.loader.load(Config.model.path, obj => {\n obj.traverse(child => {\n if(child instanceof THREE.Mesh) {\n // Create material for mesh and set its map to texture by name from preloaded textures\n const material = new Material(0xffffff).standard;\n material.map = this.textures.UV;\n child.material = material;\n\n // Set to cast and receive shadow if enabled\n if(Config.shadow.enabled) {\n child.receiveShadow = true;\n child.castShadow = true;\n }\n }\n });\n\n // Add mesh helper if Dev\n if(Config.isDev && Config.mesh.enableHelper) {\n new MeshHelper(this.scene, obj);\n }\n\n // Set prop to obj\n this.obj = obj;\n\n obj.scale.multiplyScalar(Config.model.scale);\n this.scene.add(obj);\n }, Helpers.logProgress(), Helpers.logError());\n }\n}\n","var g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1, eval)(\"this\");\r\n} catch (e) {\r\n\t// This works if the window reference is available\r\n\tif (typeof window === \"object\") g = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n","/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE\n * @version v4.2.4+314e4831\n */\n\n(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global.ES6Promise = factory());\n}(this, (function () { 'use strict';\n\nfunction objectOrFunction(x) {\n var type = typeof x;\n return x !== null && (type === 'object' || type === 'function');\n}\n\nfunction isFunction(x) {\n return typeof x === 'function';\n}\n\n\n\nvar _isArray = void 0;\nif (Array.isArray) {\n _isArray = Array.isArray;\n} else {\n _isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n}\n\nvar isArray = _isArray;\n\nvar len = 0;\nvar vertxNext = void 0;\nvar customSchedulerFn = void 0;\n\nvar asap = function asap(callback, arg) {\n queue[len] = callback;\n queue[len + 1] = arg;\n len += 2;\n if (len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (customSchedulerFn) {\n customSchedulerFn(flush);\n } else {\n scheduleFlush();\n }\n }\n};\n\nfunction setScheduler(scheduleFn) {\n customSchedulerFn = scheduleFn;\n}\n\nfunction setAsap(asapFn) {\n asap = asapFn;\n}\n\nvar browserWindow = typeof window !== 'undefined' ? window : undefined;\nvar browserGlobal = browserWindow || {};\nvar BrowserMutationObserver = browserGlobal.MutationObserver || browserGlobal.WebKitMutationObserver;\nvar isNode = typeof self === 'undefined' && typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n// test for web worker but not in IE10\nvar isWorker = typeof Uint8ClampedArray !== 'undefined' && typeof importScripts !== 'undefined' && typeof MessageChannel !== 'undefined';\n\n// node\nfunction useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function () {\n return process.nextTick(flush);\n };\n}\n\n// vertx\nfunction useVertxTimer() {\n if (typeof vertxNext !== 'undefined') {\n return function () {\n vertxNext(flush);\n };\n }\n\n return useSetTimeout();\n}\n\nfunction useMutationObserver() {\n var iterations = 0;\n var observer = new BrowserMutationObserver(flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function () {\n node.data = iterations = ++iterations % 2;\n };\n}\n\n// web worker\nfunction useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = flush;\n return function () {\n return channel.port2.postMessage(0);\n };\n}\n\nfunction useSetTimeout() {\n // Store setTimeout reference so es6-promise will be unaffected by\n // other code modifying setTimeout (like sinon.useFakeTimers())\n var globalSetTimeout = setTimeout;\n return function () {\n return globalSetTimeout(flush, 1);\n };\n}\n\nvar queue = new Array(1000);\nfunction flush() {\n for (var i = 0; i < len; i += 2) {\n var callback = queue[i];\n var arg = queue[i + 1];\n\n callback(arg);\n\n queue[i] = undefined;\n queue[i + 1] = undefined;\n }\n\n len = 0;\n}\n\nfunction attemptVertx() {\n try {\n var vertx = Function('return this')().require('vertx');\n vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return useVertxTimer();\n } catch (e) {\n return useSetTimeout();\n }\n}\n\nvar scheduleFlush = void 0;\n// Decide what async method to use to triggering processing of queued callbacks:\nif (isNode) {\n scheduleFlush = useNextTick();\n} else if (BrowserMutationObserver) {\n scheduleFlush = useMutationObserver();\n} else if (isWorker) {\n scheduleFlush = useMessageChannel();\n} else if (browserWindow === undefined && typeof require === 'function') {\n scheduleFlush = attemptVertx();\n} else {\n scheduleFlush = useSetTimeout();\n}\n\nfunction then(onFulfillment, onRejection) {\n var parent = this;\n\n var child = new this.constructor(noop);\n\n if (child[PROMISE_ID] === undefined) {\n makePromise(child);\n }\n\n var _state = parent._state;\n\n\n if (_state) {\n var callback = arguments[_state - 1];\n asap(function () {\n return invokeCallback(_state, child, callback, parent._result);\n });\n } else {\n subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n}\n\n/**\n `Promise.resolve` returns a promise that will become resolved with the\n passed `value`. It is shorthand for the following:\n\n ```javascript\n let promise = new Promise(function(resolve, reject){\n resolve(1);\n });\n\n promise.then(function(value){\n // value === 1\n });\n ```\n\n Instead of writing the above, your code now simply becomes the following:\n\n ```javascript\n let promise = Promise.resolve(1);\n\n promise.then(function(value){\n // value === 1\n });\n ```\n\n @method resolve\n @static\n @param {Any} value value that the returned promise will be resolved with\n Useful for tooling.\n @return {Promise} a promise that will become fulfilled with the given\n `value`\n*/\nfunction resolve$1(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(noop);\n resolve(promise, object);\n return promise;\n}\n\nvar PROMISE_ID = Math.random().toString(36).substring(2);\n\nfunction noop() {}\n\nvar PENDING = void 0;\nvar FULFILLED = 1;\nvar REJECTED = 2;\n\nvar TRY_CATCH_ERROR = { error: null };\n\nfunction selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n}\n\nfunction cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n}\n\nfunction getThen(promise) {\n try {\n return promise.then;\n } catch (error) {\n TRY_CATCH_ERROR.error = error;\n return TRY_CATCH_ERROR;\n }\n}\n\nfunction tryThen(then$$1, value, fulfillmentHandler, rejectionHandler) {\n try {\n then$$1.call(value, fulfillmentHandler, rejectionHandler);\n } catch (e) {\n return e;\n }\n}\n\nfunction handleForeignThenable(promise, thenable, then$$1) {\n asap(function (promise) {\n var sealed = false;\n var error = tryThen(then$$1, thenable, function (value) {\n if (sealed) {\n return;\n }\n sealed = true;\n if (thenable !== value) {\n resolve(promise, value);\n } else {\n fulfill(promise, value);\n }\n }, function (reason) {\n if (sealed) {\n return;\n }\n sealed = true;\n\n reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n reject(promise, error);\n }\n }, promise);\n}\n\nfunction handleOwnThenable(promise, thenable) {\n if (thenable._state === FULFILLED) {\n fulfill(promise, thenable._result);\n } else if (thenable._state === REJECTED) {\n reject(promise, thenable._result);\n } else {\n subscribe(thenable, undefined, function (value) {\n return resolve(promise, value);\n }, function (reason) {\n return reject(promise, reason);\n });\n }\n}\n\nfunction handleMaybeThenable(promise, maybeThenable, then$$1) {\n if (maybeThenable.constructor === promise.constructor && then$$1 === then && maybeThenable.constructor.resolve === resolve$1) {\n handleOwnThenable(promise, maybeThenable);\n } else {\n if (then$$1 === TRY_CATCH_ERROR) {\n reject(promise, TRY_CATCH_ERROR.error);\n TRY_CATCH_ERROR.error = null;\n } else if (then$$1 === undefined) {\n fulfill(promise, maybeThenable);\n } else if (isFunction(then$$1)) {\n handleForeignThenable(promise, maybeThenable, then$$1);\n } else {\n fulfill(promise, maybeThenable);\n }\n }\n}\n\nfunction resolve(promise, value) {\n if (promise === value) {\n reject(promise, selfFulfillment());\n } else if (objectOrFunction(value)) {\n handleMaybeThenable(promise, value, getThen(value));\n } else {\n fulfill(promise, value);\n }\n}\n\nfunction publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n publish(promise);\n}\n\nfunction fulfill(promise, value) {\n if (promise._state !== PENDING) {\n return;\n }\n\n promise._result = value;\n promise._state = FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n asap(publish, promise);\n }\n}\n\nfunction reject(promise, reason) {\n if (promise._state !== PENDING) {\n return;\n }\n promise._state = REJECTED;\n promise._result = reason;\n\n asap(publishRejection, promise);\n}\n\nfunction subscribe(parent, child, onFulfillment, onRejection) {\n var _subscribers = parent._subscribers;\n var length = _subscribers.length;\n\n\n parent._onerror = null;\n\n _subscribers[length] = child;\n _subscribers[length + FULFILLED] = onFulfillment;\n _subscribers[length + REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n asap(publish, parent);\n }\n}\n\nfunction publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) {\n return;\n }\n\n var child = void 0,\n callback = void 0,\n detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n}\n\nfunction tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch (e) {\n TRY_CATCH_ERROR.error = e;\n return TRY_CATCH_ERROR;\n }\n}\n\nfunction invokeCallback(settled, promise, callback, detail) {\n var hasCallback = isFunction(callback),\n value = void 0,\n error = void 0,\n succeeded = void 0,\n failed = void 0;\n\n if (hasCallback) {\n value = tryCatch(callback, detail);\n\n if (value === TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value.error = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n reject(promise, cannotReturnOwn());\n return;\n }\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n resolve(promise, value);\n } else if (failed) {\n reject(promise, error);\n } else if (settled === FULFILLED) {\n fulfill(promise, value);\n } else if (settled === REJECTED) {\n reject(promise, value);\n }\n}\n\nfunction initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value) {\n resolve(promise, value);\n }, function rejectPromise(reason) {\n reject(promise, reason);\n });\n } catch (e) {\n reject(promise, e);\n }\n}\n\nvar id = 0;\nfunction nextId() {\n return id++;\n}\n\nfunction makePromise(promise) {\n promise[PROMISE_ID] = id++;\n promise._state = undefined;\n promise._result = undefined;\n promise._subscribers = [];\n}\n\nfunction validationError() {\n return new Error('Array Methods must be provided an Array');\n}\n\nvar Enumerator = function () {\n function Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(noop);\n\n if (!this.promise[PROMISE_ID]) {\n makePromise(this.promise);\n }\n\n if (isArray(input)) {\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate(input);\n if (this._remaining === 0) {\n fulfill(this.promise, this._result);\n }\n }\n } else {\n reject(this.promise, validationError());\n }\n }\n\n Enumerator.prototype._enumerate = function _enumerate(input) {\n for (var i = 0; this._state === PENDING && i < input.length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n Enumerator.prototype._eachEntry = function _eachEntry(entry, i) {\n var c = this._instanceConstructor;\n var resolve$$1 = c.resolve;\n\n\n if (resolve$$1 === resolve$1) {\n var _then = getThen(entry);\n\n if (_then === then && entry._state !== PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof _then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === Promise$1) {\n var promise = new c(noop);\n handleMaybeThenable(promise, entry, _then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function (resolve$$1) {\n return resolve$$1(entry);\n }), i);\n }\n } else {\n this._willSettleAt(resolve$$1(entry), i);\n }\n };\n\n Enumerator.prototype._settledAt = function _settledAt(state, i, value) {\n var promise = this.promise;\n\n\n if (promise._state === PENDING) {\n this._remaining--;\n\n if (state === REJECTED) {\n reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n fulfill(promise, this._result);\n }\n };\n\n Enumerator.prototype._willSettleAt = function _willSettleAt(promise, i) {\n var enumerator = this;\n\n subscribe(promise, undefined, function (value) {\n return enumerator._settledAt(FULFILLED, i, value);\n }, function (reason) {\n return enumerator._settledAt(REJECTED, i, reason);\n });\n };\n\n return Enumerator;\n}();\n\n/**\n `Promise.all` accepts an array of promises, and returns a new promise which\n is fulfilled with an array of fulfillment values for the passed promises, or\n rejected with the reason of the first passed promise to be rejected. It casts all\n elements of the passed iterable to promises as it runs this algorithm.\n\n Example:\n\n ```javascript\n let promise1 = resolve(1);\n let promise2 = resolve(2);\n let promise3 = resolve(3);\n let promises = [ promise1, promise2, promise3 ];\n\n Promise.all(promises).then(function(array){\n // The array here would be [ 1, 2, 3 ];\n });\n ```\n\n If any of the `promises` given to `all` are rejected, the first promise\n that is rejected will be given as an argument to the returned promises's\n rejection handler. For example:\n\n Example:\n\n ```javascript\n let promise1 = resolve(1);\n let promise2 = reject(new Error(\"2\"));\n let promise3 = reject(new Error(\"3\"));\n let promises = [ promise1, promise2, promise3 ];\n\n Promise.all(promises).then(function(array){\n // Code here never runs because there are rejected promises!\n }, function(error) {\n // error.message === \"2\"\n });\n ```\n\n @method all\n @static\n @param {Array} entries array of promises\n @param {String} label optional string for labeling the promise.\n Useful for tooling.\n @return {Promise} promise that is fulfilled when all `promises` have been\n fulfilled, or rejected if any of them become rejected.\n @static\n*/\nfunction all(entries) {\n return new Enumerator(this, entries).promise;\n}\n\n/**\n `Promise.race` returns a new promise which is settled in the same way as the\n first passed promise to settle.\n\n Example:\n\n ```javascript\n let promise1 = new Promise(function(resolve, reject){\n setTimeout(function(){\n resolve('promise 1');\n }, 200);\n });\n\n let promise2 = new Promise(function(resolve, reject){\n setTimeout(function(){\n resolve('promise 2');\n }, 100);\n });\n\n Promise.race([promise1, promise2]).then(function(result){\n // result === 'promise 2' because it was resolved before promise1\n // was resolved.\n });\n ```\n\n `Promise.race` is deterministic in that only the state of the first\n settled promise matters. For example, even if other promises given to the\n `promises` array argument are resolved, but the first settled promise has\n become rejected before the other promises became fulfilled, the returned\n promise will become rejected:\n\n ```javascript\n let promise1 = new Promise(function(resolve, reject){\n setTimeout(function(){\n resolve('promise 1');\n }, 200);\n });\n\n let promise2 = new Promise(function(resolve, reject){\n setTimeout(function(){\n reject(new Error('promise 2'));\n }, 100);\n });\n\n Promise.race([promise1, promise2]).then(function(result){\n // Code here never runs\n }, function(reason){\n // reason.message === 'promise 2' because promise 2 became rejected before\n // promise 1 became fulfilled\n });\n ```\n\n An example real-world use case is implementing timeouts:\n\n ```javascript\n Promise.race([ajax('foo.json'), timeout(5000)])\n ```\n\n @method race\n @static\n @param {Array} promises array of promises to observe\n Useful for tooling.\n @return {Promise} a promise which settles in the same way as the first passed\n promise to settle.\n*/\nfunction race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (!isArray(entries)) {\n return new Constructor(function (_, reject) {\n return reject(new TypeError('You must pass an array to race.'));\n });\n } else {\n return new Constructor(function (resolve, reject) {\n var length = entries.length;\n for (var i = 0; i < length; i++) {\n Constructor.resolve(entries[i]).then(resolve, reject);\n }\n });\n }\n}\n\n/**\n `Promise.reject` returns a promise rejected with the passed `reason`.\n It is shorthand for the following:\n\n ```javascript\n let promise = new Promise(function(resolve, reject){\n reject(new Error('WHOOPS'));\n });\n\n promise.then(function(value){\n // Code here doesn't run because the promise is rejected!\n }, function(reason){\n // reason.message === 'WHOOPS'\n });\n ```\n\n Instead of writing the above, your code now simply becomes the following:\n\n ```javascript\n let promise = Promise.reject(new Error('WHOOPS'));\n\n promise.then(function(value){\n // Code here doesn't run because the promise is rejected!\n }, function(reason){\n // reason.message === 'WHOOPS'\n });\n ```\n\n @method reject\n @static\n @param {Any} reason value that the returned promise will be rejected with.\n Useful for tooling.\n @return {Promise} a promise rejected with the given `reason`.\n*/\nfunction reject$1(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(noop);\n reject(promise, reason);\n return promise;\n}\n\nfunction needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n}\n\nfunction needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n}\n\n/**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n let promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n let xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {Function} resolver\n Useful for tooling.\n @constructor\n*/\n\nvar Promise$1 = function () {\n function Promise(resolver) {\n this[PROMISE_ID] = nextId();\n this._result = this._state = undefined;\n this._subscribers = [];\n\n if (noop !== resolver) {\n typeof resolver !== 'function' && needsResolver();\n this instanceof Promise ? initializePromise(this, resolver) : needsNew();\n }\n }\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n Chaining\n --------\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n Assimilation\n ------------\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n If the assimliated promise rejects, then the downstream promise will also reject.\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n Simple Example\n --------------\n Synchronous Example\n ```javascript\n let result;\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n Errback Example\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n Promise Example;\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n Advanced Example\n --------------\n Synchronous Example\n ```javascript\n let author, books;\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n Errback Example\n ```js\n function foundBooks(books) {\n }\n function failure(reason) {\n }\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n Promise Example;\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n\n\n Promise.prototype.catch = function _catch(onRejection) {\n return this.then(null, onRejection);\n };\n\n /**\n `finally` will be invoked regardless of the promise's fate just as native\n try/catch/finally behaves\n \n Synchronous example:\n \n ```js\n findAuthor() {\n if (Math.random() > 0.5) {\n throw new Error();\n }\n return new Author();\n }\n \n try {\n return findAuthor(); // succeed or fail\n } catch(error) {\n return findOtherAuther();\n } finally {\n // always runs\n // doesn't affect the return value\n }\n ```\n \n Asynchronous example:\n \n ```js\n findAuthor().catch(function(reason){\n return findOtherAuther();\n }).finally(function(){\n // author was either found, or not\n });\n ```\n \n @method finally\n @param {Function} callback\n @return {Promise}\n */\n\n\n Promise.prototype.finally = function _finally(callback) {\n var promise = this;\n var constructor = promise.constructor;\n\n return promise.then(function (value) {\n return constructor.resolve(callback()).then(function () {\n return value;\n });\n }, function (reason) {\n return constructor.resolve(callback()).then(function () {\n throw reason;\n });\n });\n };\n\n return Promise;\n}();\n\nPromise$1.prototype.then = then;\nPromise$1.all = all;\nPromise$1.race = race;\nPromise$1.resolve = resolve$1;\nPromise$1.reject = reject$1;\nPromise$1._setScheduler = setScheduler;\nPromise$1._setAsap = setAsap;\nPromise$1._asap = asap;\n\n/*global self*/\nfunction polyfill() {\n var local = void 0;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P) {\n var promiseToString = null;\n try {\n promiseToString = Object.prototype.toString.call(P.resolve());\n } catch (e) {\n // silently ignored\n }\n\n if (promiseToString === '[object Promise]' && !P.cast) {\n return;\n }\n }\n\n local.Promise = Promise$1;\n}\n\n// Strange compat..\nPromise$1.polyfill = polyfill;\nPromise$1.Promise = Promise$1;\n\nreturn Promise$1;\n\n})));\n\n\n\n//# sourceMappingURL=es6-promise.map\n","import * as THREE from 'three';\n// Promise polyfill for IE\nimport { Promise } from 'es6-promise';\n\nimport Helpers from '../../utils/helpers';\nimport Config from '../../data/config';\n\n// This class preloads all textures in the imageFiles array in the Config via ES6 Promises.\n// Once all textures are done loading the model itself will be loaded after the Promise .then() callback.\n// Using promises to preload textures prevents issues when applying textures to materials\n// before the textures have loaded.\nexport default class Texture {\n constructor() {\n // Prop that will contain all loaded textures\n this.textures = {};\n }\n\n load() {\n const loader = new THREE.TextureLoader();\n const maxAnisotropy = Config.maxAnisotropy;\n const imageFiles = Config.texture.imageFiles;\n const promiseArray = [];\n\n loader.setPath(Config.texture.path);\n\n imageFiles.forEach(imageFile => {\n // Add an individual Promise for each image in array\n promiseArray.push(new Promise((resolve, reject) => {\n // Each Promise will attempt to load the image file\n loader.load(imageFile.image,\n // This gets called on load with the loaded texture\n texture => {\n texture.anisotropy = maxAnisotropy;\n\n // Resolve Promise with object of texture if it is instance of THREE.Texture\n const modelOBJ = {};\n modelOBJ[imageFile.name] = texture;\n if(modelOBJ[imageFile.name] instanceof THREE.Texture)\n resolve(modelOBJ);\n },\n Helpers.logProgress(),\n xhr => reject(new Error(xhr + 'An error occurred loading while loading ' + imageFile.image))\n )\n }));\n });\n\n // Iterate through all Promises in array and return another Promise when all have resolved or console log reason when any reject\n return Promise.all(promiseArray).then(textures => {\n // Set the textures prop object to have name be the resolved texture\n for(let i = 0; i < textures.length; i++) {\n this.textures[Object.keys(textures[i])[0]] = textures[i][Object.keys(textures[i])[0]];\n }\n }, reason => console.log(reason));\n }\n}\n","// Local vars for rStats\r\nlet rS, bS, glS, tS;\r\n\r\nexport default class Stats {\r\n constructor(renderer) {\r\n this.renderer = renderer;\r\n }\r\n\r\n setUp() {\r\n bS = new BrowserStats();\r\n glS = new glStats();\r\n tS = new threeStats(this.renderer.threeRenderer);\r\n\r\n rS = new rStats({\r\n CSSPath: './assets/css/',\r\n userTimingAPI: true,\r\n values: {\r\n frame: { caption: 'Total frame time (ms)', over: 16, average: true, avgMs: 100 },\r\n fps: { caption: 'Framerate (FPS)', below: 30 },\r\n calls: { caption: 'Calls (three.js)', over: 3000 },\r\n raf: { caption: 'Time since last rAF (ms)', average: true, avgMs: 100 },\r\n rstats: { caption: 'rStats update (ms)', average: true, avgMs: 100 },\r\n texture: { caption: 'GenTex', average: true, avgMs: 100 }\r\n },\r\n groups: [\r\n { caption: 'Framerate', values: ['fps', 'raf'] },\r\n { caption: 'Frame Budget', values: ['frame', 'texture', 'setup', 'render'] }\r\n ],\r\n fractions: [\r\n { base: 'frame', steps: ['texture', 'setup', 'render'] }\r\n ],\r\n plugins: [bS, tS, glS]\r\n });\r\n };\r\n\r\n static start() {\r\n rS('frame').start();\r\n glS.start();\r\n\r\n rS('rAF').tick();\r\n rS('FPS').frame();\r\n\r\n rS('render').start();\r\n };\r\n\r\n static end() {\r\n rS('render').end(); // render finished\r\n rS('frame').end(); // frame finished\r\n\r\n // Local rStats update\r\n rS('rStats').start();\r\n rS().update();\r\n rS('rStats').end();\r\n };\r\n}\r\n","import * as THREE from 'three';\n\nimport Material from './material';\n\nimport Config from '../../data/config';\n\n// This helper class can be used to create and then place geometry in the scene\nexport default class Geometry {\n constructor(scene) {\n this.scene = scene;\n this.geo = null;\n }\n\n make(type) {\n if(type === 'plane') {\n return (width, height, widthSegments = 1, heightSegments = 1) => {\n this.geo = new THREE.PlaneGeometry(width, height, widthSegments, heightSegments);\n };\n }\n\n if(type === 'sphere') {\n return (radius, widthSegments = 32, heightSegments = 32) => {\n this.geo = new THREE.SphereGeometry(radius, widthSegments, heightSegments);\n };\n }\n }\n\n place(position, rotation) {\n const material = new Material(0xeeeeee).standard;\n const mesh = new THREE.Mesh(this.geo, material);\n\n // Use ES6 spread to set position and rotation from passed in array\n mesh.position.set(...position);\n mesh.rotation.set(...rotation);\n\n if(Config.shadow.enabled) {\n mesh.receiveShadow = true;\n }\n\n this.scene.add(mesh);\n }\n}\n","module.exports = function(THREE) {\n var MOUSE = THREE.MOUSE\n if (!MOUSE)\n MOUSE = { LEFT: 0, MIDDLE: 1, RIGHT: 2 };\n\n /**\n * @author qiao / https://github.com/qiao\n * @author mrdoob / http://mrdoob.com\n * @author alteredq / http://alteredqualia.com/\n * @author WestLangley / http://github.com/WestLangley\n * @author erich666 / http://erichaines.com\n */\n /*global THREE, console */\n\n function OrbitConstraint ( object ) {\n\n this.object = object;\n\n // \"target\" sets the location of focus, where the object orbits around\n // and where it pans with respect to.\n this.target = new THREE.Vector3();\n\n // Limits to how far you can dolly in and out ( PerspectiveCamera only )\n this.minDistance = 0;\n this.maxDistance = Infinity;\n\n // Limits to how far you can zoom in and out ( OrthographicCamera only )\n this.minZoom = 0;\n this.maxZoom = Infinity;\n\n // How far you can orbit vertically, upper and lower limits.\n // Range is 0 to Math.PI radians.\n this.minPolarAngle = 0; // radians\n this.maxPolarAngle = Math.PI; // radians\n\n // How far you can orbit horizontally, upper and lower limits.\n // If set, must be a sub-interval of the interval [ - Math.PI, Math.PI ].\n this.minAzimuthAngle = - Infinity; // radians\n this.maxAzimuthAngle = Infinity; // radians\n\n // Set to true to enable damping (inertia)\n // If damping is enabled, you must call controls.update() in your animation loop\n this.enableDamping = false;\n this.dampingFactor = 0.25;\n\n ////////////\n // internals\n\n var scope = this;\n\n var EPS = 0.000001;\n\n // Current position in spherical coordinate system.\n var theta;\n var phi;\n\n // Pending changes\n var phiDelta = 0;\n var thetaDelta = 0;\n var scale = 1;\n var panOffset = new THREE.Vector3();\n var zoomChanged = false;\n\n // API\n\n this.getPolarAngle = function () {\n\n return phi;\n\n };\n\n this.getAzimuthalAngle = function () {\n\n return theta;\n\n };\n\n this.rotateLeft = function ( angle ) {\n\n thetaDelta -= angle;\n\n };\n\n this.rotateUp = function ( angle ) {\n\n phiDelta -= angle;\n\n };\n\n // pass in distance in world space to move left\n this.panLeft = function() {\n\n var v = new THREE.Vector3();\n\n return function panLeft ( distance ) {\n\n var te = this.object.matrix.elements;\n\n // get X column of matrix\n v.set( te[ 0 ], te[ 1 ], te[ 2 ] );\n v.multiplyScalar( - distance );\n\n panOffset.add( v );\n\n };\n\n }();\n\n // pass in distance in world space to move up\n this.panUp = function() {\n\n var v = new THREE.Vector3();\n\n return function panUp ( distance ) {\n\n var te = this.object.matrix.elements;\n\n // get Y column of matrix\n v.set( te[ 4 ], te[ 5 ], te[ 6 ] );\n v.multiplyScalar( distance );\n\n panOffset.add( v );\n\n };\n\n }();\n\n // pass in x,y of change desired in pixel space,\n // right and down are positive\n this.pan = function ( deltaX, deltaY, screenWidth, screenHeight ) {\n\n if ( scope.object instanceof THREE.PerspectiveCamera ) {\n\n // perspective\n var position = scope.object.position;\n var offset = position.clone().sub( scope.target );\n var targetDistance = offset.length();\n\n // half of the fov is center to top of screen\n targetDistance *= Math.tan( ( scope.object.fov / 2 ) * Math.PI / 180.0 );\n\n // we actually don't use screenWidth, since perspective camera is fixed to screen height\n scope.panLeft( 2 * deltaX * targetDistance / screenHeight );\n scope.panUp( 2 * deltaY * targetDistance / screenHeight );\n\n } else if ( scope.object instanceof THREE.OrthographicCamera ) {\n\n // orthographic\n scope.panLeft( deltaX * ( scope.object.right - scope.object.left ) / screenWidth );\n scope.panUp( deltaY * ( scope.object.top - scope.object.bottom ) / screenHeight );\n\n } else {\n\n // camera neither orthographic or perspective\n console.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.' );\n\n }\n\n };\n\n this.dollyIn = function ( dollyScale ) {\n\n if ( scope.object instanceof THREE.PerspectiveCamera ) {\n\n scale /= dollyScale;\n\n } else if ( scope.object instanceof THREE.OrthographicCamera ) {\n\n scope.object.zoom = Math.max( this.minZoom, Math.min( this.maxZoom, this.object.zoom * dollyScale ) );\n scope.object.updateProjectionMatrix();\n zoomChanged = true;\n\n } else {\n\n console.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.' );\n\n }\n\n };\n\n this.dollyOut = function ( dollyScale ) {\n\n if ( scope.object instanceof THREE.PerspectiveCamera ) {\n\n scale *= dollyScale;\n\n } else if ( scope.object instanceof THREE.OrthographicCamera ) {\n\n scope.object.zoom = Math.max( this.minZoom, Math.min( this.maxZoom, this.object.zoom / dollyScale ) );\n scope.object.updateProjectionMatrix();\n zoomChanged = true;\n\n } else {\n\n console.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.' );\n\n }\n\n };\n\n this.update = function() {\n\n var offset = new THREE.Vector3();\n\n // so camera.up is the orbit axis\n var quat = new THREE.Quaternion().setFromUnitVectors( object.up, new THREE.Vector3( 0, 1, 0 ) );\n var quatInverse = quat.clone().inverse();\n\n var lastPosition = new THREE.Vector3();\n var lastQuaternion = new THREE.Quaternion();\n\n return function () {\n\n var position = this.object.position;\n\n offset.copy( position ).sub( this.target );\n\n // rotate offset to \"y-axis-is-up\" space\n offset.applyQuaternion( quat );\n\n // angle from z-axis around y-axis\n\n theta = Math.atan2( offset.x, offset.z );\n\n // angle from y-axis\n\n phi = Math.atan2( Math.sqrt( offset.x * offset.x + offset.z * offset.z ), offset.y );\n\n theta += thetaDelta;\n phi += phiDelta;\n\n // restrict theta to be between desired limits\n theta = Math.max( this.minAzimuthAngle, Math.min( this.maxAzimuthAngle, theta ) );\n\n // restrict phi to be between desired limits\n phi = Math.max( this.minPolarAngle, Math.min( this.maxPolarAngle, phi ) );\n\n // restrict phi to be betwee EPS and PI-EPS\n phi = Math.max( EPS, Math.min( Math.PI - EPS, phi ) );\n\n var radius = offset.length() * scale;\n\n // restrict radius to be between desired limits\n radius = Math.max( this.minDistance, Math.min( this.maxDistance, radius ) );\n\n // move target to panned location\n this.target.add( panOffset );\n\n offset.x = radius * Math.sin( phi ) * Math.sin( theta );\n offset.y = radius * Math.cos( phi );\n offset.z = radius * Math.sin( phi ) * Math.cos( theta );\n\n // rotate offset back to \"camera-up-vector-is-up\" space\n offset.applyQuaternion( quatInverse );\n\n position.copy( this.target ).add( offset );\n\n this.object.lookAt( this.target );\n\n if ( this.enableDamping === true ) {\n\n thetaDelta *= ( 1 - this.dampingFactor );\n phiDelta *= ( 1 - this.dampingFactor );\n\n } else {\n\n thetaDelta = 0;\n phiDelta = 0;\n\n }\n\n scale = 1;\n panOffset.set( 0, 0, 0 );\n\n // update condition is:\n // min(camera displacement, camera rotation in radians)^2 > EPS\n // using small-angle approximation cos(x/2) = 1 - x^2 / 8\n\n if ( zoomChanged ||\n lastPosition.distanceToSquared( this.object.position ) > EPS ||\n 8 * ( 1 - lastQuaternion.dot( this.object.quaternion ) ) > EPS ) {\n\n lastPosition.copy( this.object.position );\n lastQuaternion.copy( this.object.quaternion );\n zoomChanged = false;\n\n return true;\n\n }\n\n return false;\n\n };\n\n }();\n\n };\n\n\n // This set of controls performs orbiting, dollying (zooming), and panning. It maintains\n // the \"up\" direction as +Y, unlike the TrackballControls. Touch on tablet and phones is\n // supported.\n //\n // Orbit - left mouse / touch: one finger move\n // Zoom - middle mouse, or mousewheel / touch: two finger spread or squish\n // Pan - right mouse, or arrow keys / touch: three finter swipe\n\n function OrbitControls ( object, domElement ) {\n\n var constraint = new OrbitConstraint( object );\n\n this.domElement = ( domElement !== undefined ) ? domElement : document;\n\n // API\n\n Object.defineProperty( this, 'constraint', {\n\n get: function() {\n\n return constraint;\n\n }\n\n } );\n\n this.getPolarAngle = function () {\n\n return constraint.getPolarAngle();\n\n };\n\n this.getAzimuthalAngle = function () {\n\n return constraint.getAzimuthalAngle();\n\n };\n\n // Set to false to disable this control\n this.enabled = true;\n\n // center is old, deprecated; use \"target\" instead\n this.center = this.target;\n\n // This option actually enables dollying in and out; left as \"zoom\" for\n // backwards compatibility.\n // Set to false to disable zooming\n this.enableZoom = true;\n this.zoomSpeed = 1.0;\n\n // Set to false to disable rotating\n this.enableRotate = true;\n this.rotateSpeed = 1.0;\n\n // Set to false to disable panning\n this.enablePan = true;\n this.keyPanSpeed = 7.0;\t// pixels moved per arrow key push\n\n // Set to true to automatically rotate around the target\n // If auto-rotate is enabled, you must call controls.update() in your animation loop\n this.autoRotate = false;\n this.autoRotateSpeed = 2.0; // 30 seconds per round when fps is 60\n\n // Set to false to disable use of the keys\n this.enableKeys = true;\n\n // The four arrow keys\n this.keys = { LEFT: 37, UP: 38, RIGHT: 39, BOTTOM: 40 };\n\n // Mouse buttons\n this.mouseButtons = { ORBIT: THREE.MOUSE.LEFT, ZOOM: THREE.MOUSE.MIDDLE, PAN: THREE.MOUSE.RIGHT };\n\n ////////////\n // internals\n\n var scope = this;\n\n var rotateStart = new THREE.Vector2();\n var rotateEnd = new THREE.Vector2();\n var rotateDelta = new THREE.Vector2();\n\n var panStart = new THREE.Vector2();\n var panEnd = new THREE.Vector2();\n var panDelta = new THREE.Vector2();\n\n var dollyStart = new THREE.Vector2();\n var dollyEnd = new THREE.Vector2();\n var dollyDelta = new THREE.Vector2();\n\n var STATE = { NONE : - 1, ROTATE : 0, DOLLY : 1, PAN : 2, TOUCH_ROTATE : 3, TOUCH_DOLLY : 4, TOUCH_PAN : 5 };\n\n var state = STATE.NONE;\n\n // for reset\n\n this.target0 = this.target.clone();\n this.position0 = this.object.position.clone();\n this.zoom0 = this.object.zoom;\n\n // events\n\n var changeEvent = { type: 'change' };\n var startEvent = { type: 'start' };\n var endEvent = { type: 'end' };\n\n // pass in x,y of change desired in pixel space,\n // right and down are positive\n function pan( deltaX, deltaY ) {\n\n var element = scope.domElement === document ? scope.domElement.body : scope.domElement;\n\n constraint.pan( deltaX, deltaY, element.clientWidth, element.clientHeight );\n\n }\n\n this.update = function () {\n\n if ( this.autoRotate && state === STATE.NONE ) {\n\n constraint.rotateLeft( getAutoRotationAngle() );\n\n }\n\n if ( constraint.update() === true ) {\n\n this.dispatchEvent( changeEvent );\n\n }\n\n };\n\n this.reset = function () {\n\n state = STATE.NONE;\n\n this.target.copy( this.target0 );\n this.object.position.copy( this.position0 );\n this.object.zoom = this.zoom0;\n\n this.object.updateProjectionMatrix();\n this.dispatchEvent( changeEvent );\n\n this.update();\n\n };\n\n function getAutoRotationAngle() {\n\n return 2 * Math.PI / 60 / 60 * scope.autoRotateSpeed;\n\n }\n\n function getZoomScale() {\n\n return Math.pow( 0.95, scope.zoomSpeed );\n\n }\n\n function onMouseDown( event ) {\n\n if ( scope.enabled === false ) return;\n\n event.preventDefault();\n\n if ( event.button === scope.mouseButtons.ORBIT ) {\n\n if ( scope.enableRotate === false ) return;\n\n state = STATE.ROTATE;\n\n rotateStart.set( event.clientX, event.clientY );\n\n } else if ( event.button === scope.mouseButtons.ZOOM ) {\n\n if ( scope.enableZoom === false ) return;\n\n state = STATE.DOLLY;\n\n dollyStart.set( event.clientX, event.clientY );\n\n } else if ( event.button === scope.mouseButtons.PAN ) {\n\n if ( scope.enablePan === false ) return;\n\n state = STATE.PAN;\n\n panStart.set( event.clientX, event.clientY );\n\n }\n\n if ( state !== STATE.NONE ) {\n\n document.addEventListener( 'mousemove', onMouseMove, false );\n document.addEventListener( 'mouseup', onMouseUp, false );\n scope.dispatchEvent( startEvent );\n\n }\n\n }\n\n function onMouseMove( event ) {\n\n if ( scope.enabled === false ) return;\n\n event.preventDefault();\n\n var element = scope.domElement === document ? scope.domElement.body : scope.domElement;\n\n if ( state === STATE.ROTATE ) {\n\n if ( scope.enableRotate === false ) return;\n\n rotateEnd.set( event.clientX, event.clientY );\n rotateDelta.subVectors( rotateEnd, rotateStart );\n\n // rotating across whole screen goes 360 degrees around\n constraint.rotateLeft( 2 * Math.PI * rotateDelta.x / element.clientWidth * scope.rotateSpeed );\n\n // rotating up and down along whole screen attempts to go 360, but limited to 180\n constraint.rotateUp( 2 * Math.PI * rotateDelta.y / element.clientHeight * scope.rotateSpeed );\n\n rotateStart.copy( rotateEnd );\n\n } else if ( state === STATE.DOLLY ) {\n\n if ( scope.enableZoom === false ) return;\n\n dollyEnd.set( event.clientX, event.clientY );\n dollyDelta.subVectors( dollyEnd, dollyStart );\n\n if ( dollyDelta.y > 0 ) {\n\n constraint.dollyIn( getZoomScale() );\n\n } else if ( dollyDelta.y < 0 ) {\n\n constraint.dollyOut( getZoomScale() );\n\n }\n\n dollyStart.copy( dollyEnd );\n\n } else if ( state === STATE.PAN ) {\n\n if ( scope.enablePan === false ) return;\n\n panEnd.set( event.clientX, event.clientY );\n panDelta.subVectors( panEnd, panStart );\n\n pan( panDelta.x, panDelta.y );\n\n panStart.copy( panEnd );\n\n }\n\n if ( state !== STATE.NONE ) scope.update();\n\n }\n\n function onMouseUp( /* event */ ) {\n\n if ( scope.enabled === false ) return;\n\n document.removeEventListener( 'mousemove', onMouseMove, false );\n document.removeEventListener( 'mouseup', onMouseUp, false );\n scope.dispatchEvent( endEvent );\n state = STATE.NONE;\n\n }\n\n function onMouseWheel( event ) {\n\n if ( scope.enabled === false || scope.enableZoom === false || state !== STATE.NONE ) return;\n\n event.preventDefault();\n event.stopPropagation();\n\n var delta = 0;\n\n if ( event.wheelDelta !== undefined ) {\n\n // WebKit / Opera / Explorer 9\n\n delta = event.wheelDelta;\n\n } else if ( event.detail !== undefined ) {\n\n // Firefox\n\n delta = - event.detail;\n\n }\n\n if ( delta > 0 ) {\n\n constraint.dollyOut( getZoomScale() );\n\n } else if ( delta < 0 ) {\n\n constraint.dollyIn( getZoomScale() );\n\n }\n\n scope.update();\n scope.dispatchEvent( startEvent );\n scope.dispatchEvent( endEvent );\n\n }\n\n function onKeyDown( event ) {\n\n if ( scope.enabled === false || scope.enableKeys === false || scope.enablePan === false ) return;\n\n switch ( event.keyCode ) {\n\n case scope.keys.UP:\n pan( 0, scope.keyPanSpeed );\n scope.update();\n break;\n\n case scope.keys.BOTTOM:\n pan( 0, - scope.keyPanSpeed );\n scope.update();\n break;\n\n case scope.keys.LEFT:\n pan( scope.keyPanSpeed, 0 );\n scope.update();\n break;\n\n case scope.keys.RIGHT:\n pan( - scope.keyPanSpeed, 0 );\n scope.update();\n break;\n\n }\n\n }\n\n function touchstart( event ) {\n\n if ( scope.enabled === false ) return;\n\n switch ( event.touches.length ) {\n\n case 1:\t// one-fingered touch: rotate\n\n if ( scope.enableRotate === false ) return;\n\n state = STATE.TOUCH_ROTATE;\n\n rotateStart.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY );\n break;\n\n case 2:\t// two-fingered touch: dolly\n\n if ( scope.enableZoom === false ) return;\n\n state = STATE.TOUCH_DOLLY;\n\n var dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX;\n var dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY;\n var distance = Math.sqrt( dx * dx + dy * dy );\n dollyStart.set( 0, distance );\n break;\n\n case 3: // three-fingered touch: pan\n\n if ( scope.enablePan === false ) return;\n\n state = STATE.TOUCH_PAN;\n\n panStart.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY );\n break;\n\n default:\n\n state = STATE.NONE;\n\n }\n\n if ( state !== STATE.NONE ) scope.dispatchEvent( startEvent );\n\n }\n\n function touchmove( event ) {\n\n if ( scope.enabled === false ) return;\n\n event.preventDefault();\n event.stopPropagation();\n\n var element = scope.domElement === document ? scope.domElement.body : scope.domElement;\n\n switch ( event.touches.length ) {\n\n case 1: // one-fingered touch: rotate\n\n if ( scope.enableRotate === false ) return;\n if ( state !== STATE.TOUCH_ROTATE ) return;\n\n rotateEnd.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY );\n rotateDelta.subVectors( rotateEnd, rotateStart );\n\n // rotating across whole screen goes 360 degrees around\n constraint.rotateLeft( 2 * Math.PI * rotateDelta.x / element.clientWidth * scope.rotateSpeed );\n // rotating up and down along whole screen attempts to go 360, but limited to 180\n constraint.rotateUp( 2 * Math.PI * rotateDelta.y / element.clientHeight * scope.rotateSpeed );\n\n rotateStart.copy( rotateEnd );\n\n scope.update();\n break;\n\n case 2: // two-fingered touch: dolly\n\n if ( scope.enableZoom === false ) return;\n if ( state !== STATE.TOUCH_DOLLY ) return;\n\n var dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX;\n var dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY;\n var distance = Math.sqrt( dx * dx + dy * dy );\n\n dollyEnd.set( 0, distance );\n dollyDelta.subVectors( dollyEnd, dollyStart );\n\n if ( dollyDelta.y > 0 ) {\n\n constraint.dollyOut( getZoomScale() );\n\n } else if ( dollyDelta.y < 0 ) {\n\n constraint.dollyIn( getZoomScale() );\n\n }\n\n dollyStart.copy( dollyEnd );\n\n scope.update();\n break;\n\n case 3: // three-fingered touch: pan\n\n if ( scope.enablePan === false ) return;\n if ( state !== STATE.TOUCH_PAN ) return;\n\n panEnd.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY );\n panDelta.subVectors( panEnd, panStart );\n\n pan( panDelta.x, panDelta.y );\n\n panStart.copy( panEnd );\n\n scope.update();\n break;\n\n default:\n\n state = STATE.NONE;\n\n }\n\n }\n\n function touchend( /* event */ ) {\n\n if ( scope.enabled === false ) return;\n\n scope.dispatchEvent( endEvent );\n state = STATE.NONE;\n\n }\n\n function contextmenu( event ) {\n\n event.preventDefault();\n\n }\n\n this.dispose = function() {\n\n this.domElement.removeEventListener( 'contextmenu', contextmenu, false );\n this.domElement.removeEventListener( 'mousedown', onMouseDown, false );\n this.domElement.removeEventListener( 'mousewheel', onMouseWheel, false );\n this.domElement.removeEventListener( 'MozMousePixelScroll', onMouseWheel, false ); // firefox\n\n this.domElement.removeEventListener( 'touchstart', touchstart, false );\n this.domElement.removeEventListener( 'touchend', touchend, false );\n this.domElement.removeEventListener( 'touchmove', touchmove, false );\n\n document.removeEventListener( 'mousemove', onMouseMove, false );\n document.removeEventListener( 'mouseup', onMouseUp, false );\n\n window.removeEventListener( 'keydown', onKeyDown, false );\n\n }\n\n this.domElement.addEventListener( 'contextmenu', contextmenu, false );\n\n this.domElement.addEventListener( 'mousedown', onMouseDown, false );\n this.domElement.addEventListener( 'mousewheel', onMouseWheel, false );\n this.domElement.addEventListener( 'MozMousePixelScroll', onMouseWheel, false ); // firefox\n\n this.domElement.addEventListener( 'touchstart', touchstart, false );\n this.domElement.addEventListener( 'touchend', touchend, false );\n this.domElement.addEventListener( 'touchmove', touchmove, false );\n\n window.addEventListener( 'keydown', onKeyDown, false );\n\n // force an update at start\n this.update();\n\n };\n\n OrbitControls.prototype = Object.create( THREE.EventDispatcher.prototype );\n OrbitControls.prototype.constructor = OrbitControls;\n\n Object.defineProperties( OrbitControls.prototype, {\n\n object: {\n\n get: function () {\n\n return this.constraint.object;\n\n }\n\n },\n\n target: {\n\n get: function () {\n\n return this.constraint.target;\n\n },\n\n set: function ( value ) {\n\n console.warn( 'THREE.OrbitControls: target is now immutable. Use target.set() instead.' );\n this.constraint.target.copy( value );\n\n }\n\n },\n\n minDistance : {\n\n get: function () {\n\n return this.constraint.minDistance;\n\n },\n\n set: function ( value ) {\n\n this.constraint.minDistance = value;\n\n }\n\n },\n\n maxDistance : {\n\n get: function () {\n\n return this.constraint.maxDistance;\n\n },\n\n set: function ( value ) {\n\n this.constraint.maxDistance = value;\n\n }\n\n },\n\n minZoom : {\n\n get: function () {\n\n return this.constraint.minZoom;\n\n },\n\n set: function ( value ) {\n\n this.constraint.minZoom = value;\n\n }\n\n },\n\n maxZoom : {\n\n get: function () {\n\n return this.constraint.maxZoom;\n\n },\n\n set: function ( value ) {\n\n this.constraint.maxZoom = value;\n\n }\n\n },\n\n minPolarAngle : {\n\n get: function () {\n\n return this.constraint.minPolarAngle;\n\n },\n\n set: function ( value ) {\n\n this.constraint.minPolarAngle = value;\n\n }\n\n },\n\n maxPolarAngle : {\n\n get: function () {\n\n return this.constraint.maxPolarAngle;\n\n },\n\n set: function ( value ) {\n\n this.constraint.maxPolarAngle = value;\n\n }\n\n },\n\n minAzimuthAngle : {\n\n get: function () {\n\n return this.constraint.minAzimuthAngle;\n\n },\n\n set: function ( value ) {\n\n this.constraint.minAzimuthAngle = value;\n\n }\n\n },\n\n maxAzimuthAngle : {\n\n get: function () {\n\n return this.constraint.maxAzimuthAngle;\n\n },\n\n set: function ( value ) {\n\n this.constraint.maxAzimuthAngle = value;\n\n }\n\n },\n\n enableDamping : {\n\n get: function () {\n\n return this.constraint.enableDamping;\n\n },\n\n set: function ( value ) {\n\n this.constraint.enableDamping = value;\n\n }\n\n },\n\n dampingFactor : {\n\n get: function () {\n\n return this.constraint.dampingFactor;\n\n },\n\n set: function ( value ) {\n\n this.constraint.dampingFactor = value;\n\n }\n\n },\n\n // backward compatibility\n\n noZoom: {\n\n get: function () {\n\n console.warn( 'THREE.OrbitControls: .noZoom has been deprecated. Use .enableZoom instead.' );\n return ! this.enableZoom;\n\n },\n\n set: function ( value ) {\n\n console.warn( 'THREE.OrbitControls: .noZoom has been deprecated. Use .enableZoom instead.' );\n this.enableZoom = ! value;\n\n }\n\n },\n\n noRotate: {\n\n get: function () {\n\n console.warn( 'THREE.OrbitControls: .noRotate has been deprecated. Use .enableRotate instead.' );\n return ! this.enableRotate;\n\n },\n\n set: function ( value ) {\n\n console.warn( 'THREE.OrbitControls: .noRotate has been deprecated. Use .enableRotate instead.' );\n this.enableRotate = ! value;\n\n }\n\n },\n\n noPan: {\n\n get: function () {\n\n console.warn( 'THREE.OrbitControls: .noPan has been deprecated. Use .enablePan instead.' );\n return ! this.enablePan;\n\n },\n\n set: function ( value ) {\n\n console.warn( 'THREE.OrbitControls: .noPan has been deprecated. Use .enablePan instead.' );\n this.enablePan = ! value;\n\n }\n\n },\n\n noKeys: {\n\n get: function () {\n\n console.warn( 'THREE.OrbitControls: .noKeys has been deprecated. Use .enableKeys instead.' );\n return ! this.enableKeys;\n\n },\n\n set: function ( value ) {\n\n console.warn( 'THREE.OrbitControls: .noKeys has been deprecated. Use .enableKeys instead.' );\n this.enableKeys = ! value;\n\n }\n\n },\n\n staticMoving : {\n\n get: function () {\n\n console.warn( 'THREE.OrbitControls: .staticMoving has been deprecated. Use .enableDamping instead.' );\n return ! this.constraint.enableDamping;\n\n },\n\n set: function ( value ) {\n\n console.warn( 'THREE.OrbitControls: .staticMoving has been deprecated. Use .enableDamping instead.' );\n this.constraint.enableDamping = ! value;\n\n }\n\n },\n\n dynamicDampingFactor : {\n\n get: function () {\n\n console.warn( 'THREE.OrbitControls: .dynamicDampingFactor has been renamed. Use .dampingFactor instead.' );\n return this.constraint.dampingFactor;\n\n },\n\n set: function ( value ) {\n\n console.warn( 'THREE.OrbitControls: .dynamicDampingFactor has been renamed. Use .dampingFactor instead.' );\n this.constraint.dampingFactor = value;\n\n }\n\n }\n\n } );\n\n return OrbitControls;\n}\n","import * as THREE from 'three';\n\nimport OrbitControls from '../../utils/orbitControls';\nimport Config from '../../data/config';\n\n// Controls based on orbit controls\nexport default class Controls {\n constructor(camera, container) {\n // Orbit controls first needs to pass in THREE to constructor\n const orbitControls = new OrbitControls(THREE);\n this.threeControls = new orbitControls(camera, container);\n\n this.init();\n }\n\n init() {\n this.threeControls.target.set(Config.controls.target.x, Config.controls.target.y, Config.controls.target.z);\n this.threeControls.autoRotate = Config.controls.autoRotate;\n this.threeControls.autoRotateSpeed = Config.controls.autoRotateSpeed;\n this.threeControls.rotateSpeed = Config.controls.rotateSpeed;\n this.threeControls.zoomSpeed = Config.controls.zoomSpeed;\n this.threeControls.minDistance = Config.controls.minDistance;\n this.threeControls.maxDistance = Config.controls.maxDistance;\n this.threeControls.minPolarAngle = Config.controls.minPolarAngle;\n this.threeControls.maxPolarAngle = Config.controls.maxPolarAngle;\n this.threeControls.enableDamping = Config.controls.enableDamping;\n this.threeControls.enableZoom = Config.controls.enableZoom;\n this.threeControls.dampingFactor = Config.controls.dampingFactor;\n }\n}\n","import * as THREE from 'three';\n\nimport Config from '../../data/config';\n\n// Sets up and places all lights in scene\nexport default class Light {\n constructor(scene) {\n this.scene = scene;\n\n this.init();\n }\n\n init() {\n // Ambient\n this.ambientLight = new THREE.AmbientLight(Config.ambientLight.color);\n this.ambientLight.visible = Config.ambientLight.enabled;\n\n // Point light\n this.pointLight = new THREE.PointLight(Config.pointLight.color, Config.pointLight.intensity, Config.pointLight.distance);\n this.pointLight.position.set(Config.pointLight.x, Config.pointLight.y, Config.pointLight.z);\n this.pointLight.visible = Config.pointLight.enabled;\n\n // Directional light\n this.directionalLight = new THREE.DirectionalLight(Config.directionalLight.color, Config.directionalLight.intensity);\n this.directionalLight.position.set(Config.directionalLight.x, Config.directionalLight.y, Config.directionalLight.z);\n this.directionalLight.visible = Config.directionalLight.enabled;\n\n // Shadow map\n this.directionalLight.castShadow = Config.shadow.enabled;\n this.directionalLight.shadow.bias = Config.shadow.bias;\n this.directionalLight.shadow.camera.near = Config.shadow.near;\n this.directionalLight.shadow.camera.far = Config.shadow.far;\n this.directionalLight.shadow.camera.left = Config.shadow.left;\n this.directionalLight.shadow.camera.right = Config.shadow.right;\n this.directionalLight.shadow.camera.top = Config.shadow.top;\n this.directionalLight.shadow.camera.bottom = Config.shadow.bottom;\n this.directionalLight.shadow.mapSize.width = Config.shadow.mapWidth;\n this.directionalLight.shadow.mapSize.height = Config.shadow.mapHeight;\n\n // Shadow camera helper\n this.directionalLightHelper = new THREE.CameraHelper(this.directionalLight.shadow.camera);\n this.directionalLightHelper.visible = Config.shadow.helperEnabled;\n\n // Hemisphere light\n this.hemiLight = new THREE.HemisphereLight(Config.hemiLight.color, Config.hemiLight.groundColor, Config.hemiLight.intensity);\n this.hemiLight.position.set(Config.hemiLight.x, Config.hemiLight.y, Config.hemiLight.z);\n this.hemiLight.visible = Config.hemiLight.enabled;\n }\n\n place(lightName) {\n switch(lightName) {\n case 'ambient':\n this.scene.add(this.ambientLight);\n break;\n\n case 'directional':\n this.scene.add(this.directionalLight);\n this.scene.add(this.directionalLightHelper);\n break;\n\n case 'point':\n this.scene.add(this.pointLight);\n break;\n\n case 'hemi':\n this.scene.add(this.hemiLight);\n break;\n }\n }\n}\n","import * as THREE from 'three';\n\nimport Config from '../../data/config';\n\n// Class that creates and updates the main camera\nexport default class Camera {\n constructor(renderer) {\n const width = renderer.domElement.width;\n const height = renderer.domElement.height;\n\n // Create and position a Perspective Camera\n this.threeCamera = new THREE.PerspectiveCamera(Config.camera.fov, width / height, Config.camera.near, Config.camera.far);\n this.threeCamera.position.set(Config.camera.posX, Config.camera.posY, Config.camera.posZ);\n\n // Initial sizing\n this.updateSize(renderer);\n \n // Listeners\n window.addEventListener('resize', () => this.updateSize(renderer), false);\n }\n\n updateSize(renderer) {\n // Multiply by dpr in case it is retina device\n this.threeCamera.aspect = renderer.domElement.width * Config.dpr / renderer.domElement.height * Config.dpr;\n\n // Always call updateProjectionMatrix on camera change\n this.threeCamera.updateProjectionMatrix();\n }\n}\n","import * as THREE from 'three';\n\nimport Config from '../../data/config';\n\n// Main webGL renderer class\nexport default class Renderer {\n constructor(scene, container) {\n // Properties\n this.scene = scene;\n this.container = container;\n\n // Create WebGL renderer and set its antialias\n this.threeRenderer = new THREE.WebGLRenderer({antialias: true});\n\n // Set clear color to fog to enable fog or to hex color for no fog\n this.threeRenderer.setClearColor(scene.fog.color);\n this.threeRenderer.setPixelRatio(window.devicePixelRatio); // For retina\n\n // Appends canvas\n container.appendChild(this.threeRenderer.domElement);\n\n // Shadow map options\n this.threeRenderer.shadowMap.enabled = true;\n this.threeRenderer.shadowMap.type = THREE.PCFSoftShadowMap;\n\n // Get anisotropy for textures\n Config.maxAnisotropy = this.threeRenderer.getMaxAnisotropy();\n\n // Initial size update set to canvas container\n this.updateSize();\n\n // Listeners\n document.addEventListener('DOMContentLoaded', () => this.updateSize(), false);\n window.addEventListener('resize', () => this.updateSize(), false);\n }\n\n updateSize() {\n this.threeRenderer.setSize(this.container.offsetWidth, this.container.offsetHeight);\n }\n\n render(scene, camera) {\n // Renders scene to canvas target\n this.threeRenderer.render(scene, camera);\n }\n}\n","// Global imports -\nimport * as THREE from 'three';\nimport TWEEN from 'tween.js';\n\n// Local imports -\n// Components\nimport Renderer from './components/renderer';\nimport Camera from './components/camera';\nimport Light from './components/light';\nimport Controls from './components/controls';\n\n// Helpers\nimport Geometry from './helpers/geometry';\nimport Stats from './helpers/stats';\n\n// Model\nimport Texture from './model/texture';\nimport Model from './model/model';\n\n// Managers\nimport Interaction from './managers/interaction';\nimport DatGUI from './managers/datGUI';\n\n// data\nimport Config from './../data/config';\n// -- End of imports\n\n// This class instantiates and ties all of the components together, starts the loading process and renders the main loop\nexport default class Main {\n constructor(container) {\n // Set container property to container element\n this.container = container;\n\n // Start Three clock\n this.clock = new THREE.Clock();\n\n // Main scene creation\n this.scene = new THREE.Scene();\n this.scene.fog = new THREE.FogExp2(Config.fog.color, Config.fog.near);\n\n // Get Device Pixel Ratio first for retina\n if(window.devicePixelRatio) {\n Config.dpr = window.devicePixelRatio;\n }\n\n // Main renderer constructor\n this.renderer = new Renderer(this.scene, container);\n\n // Components instantiations\n this.camera = new Camera(this.renderer.threeRenderer);\n this.controls = new Controls(this.camera.threeCamera, container);\n this.light = new Light(this.scene);\n\n // Create and place lights in scene\n const lights = ['ambient', 'directional', 'point', 'hemi'];\n lights.forEach((light) => this.light.place(light));\n\n // Create and place geo in scene\n this.geometry = new Geometry(this.scene);\n this.geometry.make('plane')(150, 150, 10, 10);\n this.geometry.place([0, -20, 0], [Math.PI / 2, 0, 0]);\n\n // Set up rStats if dev environment\n if(Config.isDev && Config.isShowingStats) {\n this.stats = new Stats(this.renderer);\n this.stats.setUp();\n }\n\n // Instantiate texture class\n this.texture = new Texture();\n\n // Start loading the textures and then go on to load the model after the texture Promises have resolved\n this.texture.load().then(() => {\n this.manager = new THREE.LoadingManager();\n\n // Textures loaded, load model\n this.model = new Model(this.scene, this.manager, this.texture.textures);\n this.model.load();\n\n // onProgress callback\n this.manager.onProgress = (item, loaded, total) => {\n console.log(`${item}: ${loaded} ${total}`);\n };\n\n // All loaders done now\n this.manager.onLoad = () => {\n // Set up interaction manager with the app now that the model is finished loading\n new Interaction(this.renderer.threeRenderer, this.scene, this.camera.threeCamera, this.controls.threeControls);\n\n // Add dat.GUI controls if dev\n if(Config.isDev) {\n new DatGUI(this, this.model.obj);\n }\n\n // Everything is now fully loaded\n Config.isLoaded = true;\n this.container.querySelector('#loading').style.display = 'none';\n };\n });\n\n // Start render which does not wait for model fully loaded\n this.render();\n }\n\n render() {\n // Render rStats if Dev\n if(Config.isDev && Config.isShowingStats) {\n Stats.start();\n }\n\n // Call render function and pass in created scene and camera\n this.renderer.render(this.scene, this.camera.threeCamera);\n\n // rStats has finished determining render call now\n if(Config.isDev && Config.isShowingStats) {\n Stats.end();\n }\n\n // Delta time is sometimes needed for certain updates\n //const delta = this.clock.getDelta();\n\n // Call any vendor or module frame updates here\n TWEEN.update();\n this.controls.threeControls.update();\n\n // RAF\n requestAnimationFrame(this.render.bind(this)); // Bind the main class instead of window object\n }\n}\n","/**\r\n * @author alteredq / http://alteredqualia.com/\r\n * @author mr.doob / http://mrdoob.com/\r\n */\r\n\r\nexport default {\r\n canvas: !!window.CanvasRenderingContext2D,\r\n webgl: (function() {\r\n try {\r\n var canvas = document.createElement('canvas');\r\n\r\n return !!(window.WebGLRenderingContext && (canvas.getContext('webgl') || canvas.getContext('experimental-webgl')));\r\n } catch(e) {\r\n return false;\r\n }\r\n })(),\r\n\r\n workers: !!window.Worker,\r\n fileapi: window.File && window.FileReader && window.FileList && window.Blob,\r\n\r\n getWebGLErrorMessage: function() {\r\n var element = document.createElement('div');\r\n element.id = 'webgl-error-message';\r\n element.style.fontFamily = 'monospace';\r\n element.style.fontSize = '13px';\r\n element.style.fontWeight = 'normal';\r\n element.style.textAlign = 'center';\r\n element.style.background = '#fff';\r\n element.style.color = '#000';\r\n element.style.padding = '1.5em';\r\n element.style.width = '400px';\r\n element.style.margin = '5em auto 0';\r\n\r\n if(!this.webgl) {\r\n element.innerHTML = window.WebGLRenderingContext ? [\r\n 'Your graphics card does not seem to support WebGL.
',\r\n 'Find out how to get it here.'\r\n ].join('\\n') : [\r\n 'Your browser does not seem to support WebGL.
',\r\n 'Find out how to get it here.'\r\n ].join('\\n');\r\n }\r\n\r\n return element;\r\n },\r\n\r\n addGetWebGLMessage: function(parameters) {\r\n var parent, id, element;\r\n\r\n parameters = parameters || {};\r\n\r\n parent = parameters.parent !== undefined ? parameters.parent : document.body;\r\n id = parameters.id !== undefined ? parameters.id : 'oldie';\r\n\r\n element = this.getWebGLErrorMessage();\r\n element.id = id;\r\n\r\n parent.appendChild(element);\r\n }\r\n};\r\n","import Config from './data/config';\nimport Detector from './utils/detector';\nimport Main from './app/main';\n\n// Check environment and set the Config helper\nif(__ENV__ === 'dev') {\n console.log('----- RUNNING IN DEV ENVIRONMENT! -----');\n\n Config.isDev = true;\n}\n\nfunction init() {\n // Check for webGL capabilities\n if(!Detector.webgl) {\n Detector.addGetWebGLMessage();\n } else {\n const container = document.getElementById('appContainer');\n new Main(container);\n }\n}\n\ninit();\n"],"sourceRoot":""} \ No newline at end of file diff --git a/build/public/assets/js/dat.gui.min.js b/build/public/assets/js/dat.gui.min.js deleted file mode 100644 index 6de153f..0000000 --- a/build/public/assets/js/dat.gui.min.js +++ /dev/null @@ -1,13 +0,0 @@ -/** - * dat-gui JavaScript Controller Library - * http://code.google.com/p/dat-gui - * - * Copyright 2011 Data Arts Team, Google Creative Lab - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - */ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.dat=t()}(this,function(){"use strict";function e(e,t){var n=e.__state.conversionName.toString(),o=Math.round(e.r),i=Math.round(e.g),r=Math.round(e.b),s=e.a,a=Math.round(e.h),l=e.s.toFixed(1),d=e.v.toFixed(1);if(t||"THREE_CHAR_HEX"===n||"SIX_CHAR_HEX"===n){for(var c=e.hex.toString(16);c.length<6;)c="0"+c;return"#"+c}return"CSS_RGB"===n?"rgb("+o+","+i+","+r+")":"CSS_RGBA"===n?"rgba("+o+","+i+","+r+","+s+")":"HEX"===n?"0x"+e.hex.toString(16):"RGB_ARRAY"===n?"["+o+","+i+","+r+"]":"RGBA_ARRAY"===n?"["+o+","+i+","+r+","+s+"]":"RGB_OBJ"===n?"{r:"+o+",g:"+i+",b:"+r+"}":"RGBA_OBJ"===n?"{r:"+o+",g:"+i+",b:"+r+",a:"+s+"}":"HSV_OBJ"===n?"{h:"+a+",s:"+l+",v:"+d+"}":"HSVA_OBJ"===n?"{h:"+a+",s:"+l+",v:"+d+",a:"+s+"}":"unknown format"}function t(e,t,n){Object.defineProperty(e,t,{get:function(){return"RGB"===this.__state.space?this.__state[t]:(V.recalculateRGB(this,t,n),this.__state[t])},set:function(e){"RGB"!==this.__state.space&&(V.recalculateRGB(this,t,n),this.__state.space="RGB"),this.__state[t]=e}})}function n(e,t){Object.defineProperty(e,t,{get:function(){return"HSV"===this.__state.space?this.__state[t]:(V.recalculateHSV(this),this.__state[t])},set:function(e){"HSV"!==this.__state.space&&(V.recalculateHSV(this),this.__state.space="HSV"),this.__state[t]=e}})}function o(e){if("0"===e||k.isUndefined(e))return 0;var t=e.match(G);return k.isNull(t)?0:parseFloat(t[1])}function i(e){var t=e.toString();return t.indexOf(".")>-1?t.length-t.indexOf(".")-1:0}function r(e,t){var n=Math.pow(10,t);return Math.round(e*n)/n}function s(e,t,n,o,i){return o+(e-t)/(n-t)*(i-o)}function a(e,t,n,o){e.style.background="",k.each($,function(i){e.style.cssText+="background: "+i+"linear-gradient("+t+", "+n+" 0%, "+o+" 100%); "})}function l(e){e.style.background="",e.style.cssText+="background: -moz-linear-gradient(top, #ff0000 0%, #ff00ff 17%, #0000ff 34%, #00ffff 50%, #00ff00 67%, #ffff00 84%, #ff0000 100%);",e.style.cssText+="background: -webkit-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);",e.style.cssText+="background: -o-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);",e.style.cssText+="background: -ms-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);",e.style.cssText+="background: linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);"}function d(e,t,n){var o=document.createElement("li");return t&&o.appendChild(t),n?e.__ul.insertBefore(o,n):e.__ul.appendChild(o),e.onResize(),o}function c(e){U.unbind(window,"resize",e.__resizeHandler),e.saveToLocalStorageIfPossible&&U.unbind(window,"unload",e.saveToLocalStorageIfPossible)}function u(e,t){var n=e.__preset_select[e.__preset_select.selectedIndex];n.innerHTML=t?n.value+"*":n.value}function _(e,t,n){if(n.__li=t,n.__gui=e,k.extend(n,{options:function(t){if(arguments.length>1){var o=n.__li.nextElementSibling;return n.remove(),p(e,n.object,n.property,{before:o,factoryArgs:[k.toArray(arguments)]})}if(k.isArray(t)||k.isObject(t)){var i=n.__li.nextElementSibling;return n.remove(),p(e,n.object,n.property,{before:i,factoryArgs:[t]})}},name:function(e){return n.__li.firstElementChild.firstElementChild.innerHTML=e,n},listen:function(){return n.__gui.listen(n),n},remove:function(){return n.__gui.remove(n),n}}),n instanceof Q){var o=new W(n.object,n.property,{min:n.__min,max:n.__max,step:n.__step});k.each(["updateDisplay","onChange","onFinishChange","step"],function(e){var t=n[e],i=o[e];n[e]=o[e]=function(){var e=Array.prototype.slice.call(arguments);return i.apply(o,e),t.apply(n,e)}}),U.addClass(t,"has-slider"),n.domElement.insertBefore(o.domElement,n.domElement.firstElementChild)}else if(n instanceof W){var i=function(t){if(k.isNumber(n.__min)&&k.isNumber(n.__max)){var o=n.__li.firstElementChild.firstElementChild.innerHTML,i=n.__gui.__listening.indexOf(n)>-1;n.remove();var r=p(e,n.object,n.property,{before:n.__li.nextElementSibling,factoryArgs:[n.__min,n.__max,n.__step]});return r.name(o),i&&r.listen(),r}return t};n.min=k.compose(i,n.min),n.max=k.compose(i,n.max)}else n instanceof X?(U.bind(t,"click",function(){U.fakeEvent(n.__checkbox,"click")}),U.bind(n.__checkbox,"click",function(e){e.stopPropagation()})):n instanceof q?(U.bind(t,"click",function(){U.fakeEvent(n.__button,"click")}),U.bind(t,"mouseover",function(){U.addClass(n.__button,"hover")}),U.bind(t,"mouseout",function(){U.removeClass(n.__button,"hover")})):n instanceof Z&&(U.addClass(t,"color"),n.updateDisplay=k.compose(function(e){return t.style.borderLeftColor=n.__color.toString(),e},n.updateDisplay),n.updateDisplay());n.setValue=k.compose(function(t){return e.getRoot().__preset_select&&n.isModified()&&u(e.getRoot(),!0),t},n.setValue)}function h(e,t){var n=e.getRoot(),o=n.__rememberedObjects.indexOf(t.object);if(-1!==o){var i=n.__rememberedObjectIndecesToControllers[o];if(void 0===i&&(i={},n.__rememberedObjectIndecesToControllers[o]=i),i[t.property]=t,n.load&&n.load.remembered){var r=n.load.remembered,s=void 0;if(r[e.preset])s=r[e.preset];else{if(!r[re])return;s=r[re]}if(s[o]&&void 0!==s[o][t.property]){var a=s[o][t.property];t.initialValue=a,t.setValue(a)}}}}function p(e,t,n,o){if(void 0===t[n])throw new Error('Object "'+t+'" has no property "'+n+'"');var i=void 0;if(o.color)i=new Z(t,n);else{var r=[t,n].concat(o.factoryArgs);i=te.apply(e,r)}o.before instanceof I&&(o.before=o.before.__li),h(e,i),U.addClass(i.domElement,"c");var s=document.createElement("span");U.addClass(s,"property-name"),s.innerHTML=i.property;var a=document.createElement("div");a.appendChild(s),a.appendChild(i.domElement);var l=d(e,a,o.before);return U.addClass(l,_e.CLASS_CONTROLLER_ROW),i instanceof Z?U.addClass(l,"color"):U.addClass(l,N(i.getValue())),_(e,l,i),e.__controllers.push(i),i}function f(e,t){return document.location.href+"."+t}function m(e,t,n){var o=document.createElement("option");o.innerHTML=t,o.value=t,e.__preset_select.appendChild(o),n&&(e.__preset_select.selectedIndex=e.__preset_select.length-1)}function g(e,t){t.style.display=e.useLocalStorage?"block":"none"}function b(e){var t=e.__save_row=document.createElement("li");U.addClass(e.domElement,"has-save"),e.__ul.insertBefore(t,e.__ul.firstChild),U.addClass(t,"save-row");var n=document.createElement("span");n.innerHTML=" ",U.addClass(n,"button gears");var o=document.createElement("span");o.innerHTML="Save",U.addClass(o,"button"),U.addClass(o,"save");var i=document.createElement("span");i.innerHTML="New",U.addClass(i,"button"),U.addClass(i,"save-as");var r=document.createElement("span");r.innerHTML="Revert",U.addClass(r,"button"),U.addClass(r,"revert");var s=e.__preset_select=document.createElement("select");if(e.load&&e.load.remembered?k.each(e.load.remembered,function(t,n){m(e,n,n===e.preset)}):m(e,re,!1),U.bind(s,"change",function(){for(var t=0;t=0;n--)t=[e[n].apply(this,t)];return t[0]}},each:function(e,t,n){if(e)if(C&&e.forEach&&e.forEach===C)e.forEach(t,n);else if(e.length===e.length+0){var o=void 0,i=void 0;for(o=0,i=e.length;o1?k.toArray(arguments):arguments[0];return k.each(S,function(t){if(t.litmus(e))return k.each(t.conversions,function(t,n){if(O=t.read(e),!1===T&&!1!==O)return T=O,O.conversionName=n,O.conversion=t,k.BREAK}),k.BREAK}),T},L=void 0,B={hsv_to_rgb:function(e,t,n){var o=Math.floor(e/60)%6,i=e/60-Math.floor(e/60),r=n*(1-t),s=n*(1-i*t),a=n*(1-(1-i)*t),l=[[n,a,r],[s,n,r],[r,n,a],[r,s,n],[a,r,n],[n,r,s]][o];return{r:255*l[0],g:255*l[1],b:255*l[2]}},rgb_to_hsv:function(e,t,n){var o=Math.min(e,t,n),i=Math.max(e,t,n),r=i-o,s=void 0,a=void 0;return 0===i?{h:NaN,s:0,v:0}:(a=r/i,s=e===i?(t-n)/r:t===i?2+(n-e)/r:4+(e-t)/r,(s/=6)<0&&(s+=1),{h:360*s,s:a,v:i/255})},rgb_to_hex:function(e,t,n){var o=this.hex_with_component(0,2,e);return o=this.hex_with_component(o,1,t),o=this.hex_with_component(o,0,n)},component_from_hex:function(e,t){return e>>8*t&255},hex_with_component:function(e,t,n){return n<<(L=8*t)|e&~(255<this.__max&&(n=this.__max),void 0!==this.__step&&n%this.__step!=0&&(n=Math.round(n/this.__step)*this.__step),P(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"setValue",this).call(this,n)}},{key:"min",value:function(e){return this.__min=e,this}},{key:"max",value:function(e){return this.__max=e,this}},{key:"step",value:function(e){return this.__step=e,this.__impliedStep=e,this.__precision=i(e),this}}]),t}(),W=function(e){function t(e,n,o){function i(){l.__onFinishChange&&l.__onFinishChange.call(l,l.getValue())}function r(e){var t=d-e.clientY;l.setValue(l.getValue()+t*l.__impliedStep),d=e.clientY}function s(){U.unbind(window,"mousemove",r),U.unbind(window,"mouseup",s),i()}H(this,t);var a=D(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,n,o));a.__truncationSuspended=!1;var l=a,d=void 0;return a.__input=document.createElement("input"),a.__input.setAttribute("type","text"),U.bind(a.__input,"change",function(){var e=parseFloat(l.__input.value);k.isNaN(e)||l.setValue(e)}),U.bind(a.__input,"blur",function(){i()}),U.bind(a.__input,"mousedown",function(e){U.bind(window,"mousemove",r),U.bind(window,"mouseup",s),d=e.clientY}),U.bind(a.__input,"keydown",function(e){13===e.keyCode&&(l.__truncationSuspended=!0,this.blur(),l.__truncationSuspended=!1,i())}),a.updateDisplay(),a.domElement.appendChild(a.__input),a}return j(t,J),F(t,[{key:"updateDisplay",value:function(){return this.__input.value=this.__truncationSuspended?this.getValue():r(this.getValue(),this.__precision),P(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"updateDisplay",this).call(this)}}]),t}(),Q=function(e){function t(e,n,o,i,r){function a(e){e.preventDefault();var t=_.__background.getBoundingClientRect();return _.setValue(s(e.clientX,t.left,t.right,_.__min,_.__max)),!1}function l(){U.unbind(window,"mousemove",a),U.unbind(window,"mouseup",l),_.__onFinishChange&&_.__onFinishChange.call(_,_.getValue())}function d(e){var t=e.touches[0].clientX,n=_.__background.getBoundingClientRect();_.setValue(s(t,n.left,n.right,_.__min,_.__max))}function c(){U.unbind(window,"touchmove",d),U.unbind(window,"touchend",c),_.__onFinishChange&&_.__onFinishChange.call(_,_.getValue())}H(this,t);var u=D(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,n,{min:o,max:i,step:r})),_=u;return u.__background=document.createElement("div"),u.__foreground=document.createElement("div"),U.bind(u.__background,"mousedown",function(e){document.activeElement.blur(),U.bind(window,"mousemove",a),U.bind(window,"mouseup",l),a(e)}),U.bind(u.__background,"touchstart",function(e){1===e.touches.length&&(U.bind(window,"touchmove",d),U.bind(window,"touchend",c),d(e))}),U.addClass(u.__background,"slider"),U.addClass(u.__foreground,"slider-fg"),u.updateDisplay(),u.__background.appendChild(u.__foreground),u.domElement.appendChild(u.__background),u}return j(t,J),F(t,[{key:"updateDisplay",value:function(){var e=(this.getValue()-this.__min)/(this.__max-this.__min);return this.__foreground.style.width=100*e+"%",P(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"updateDisplay",this).call(this)}}]),t}(),q=function(e){function t(e,n,o){H(this,t);var i=D(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,n)),r=i;return i.__button=document.createElement("div"),i.__button.innerHTML=void 0===o?"Fire":o,U.bind(i.__button,"click",function(e){return e.preventDefault(),r.fire(),!1}),U.addClass(i.__button,"button"),i.domElement.appendChild(i.__button),i}return j(t,I),F(t,[{key:"fire",value:function(){this.__onChange&&this.__onChange.call(this),this.getValue().call(this.object),this.__onFinishChange&&this.__onFinishChange.call(this,this.getValue())}}]),t}(),Z=function(e){function t(e,n){function o(e){u(e),U.bind(window,"mousemove",u),U.bind(window,"touchmove",u),U.bind(window,"mouseup",r),U.bind(window,"touchend",r)}function i(e){_(e),U.bind(window,"mousemove",_),U.bind(window,"touchmove",_),U.bind(window,"mouseup",s),U.bind(window,"touchend",s)}function r(){U.unbind(window,"mousemove",u),U.unbind(window,"touchmove",u),U.unbind(window,"mouseup",r),U.unbind(window,"touchend",r),c()}function s(){U.unbind(window,"mousemove",_),U.unbind(window,"touchmove",_),U.unbind(window,"mouseup",s),U.unbind(window,"touchend",s),c()}function d(){var e=R(this.value);!1!==e?(p.__color.__state=e,p.setValue(p.__color.toOriginal())):this.value=p.__color.toString()}function c(){p.__onFinishChange&&p.__onFinishChange.call(p,p.__color.toOriginal())}function u(e){-1===e.type.indexOf("touch")&&e.preventDefault();var t=p.__saturation_field.getBoundingClientRect(),n=e.touches&&e.touches[0]||e,o=n.clientX,i=n.clientY,r=(o-t.left)/(t.right-t.left),s=1-(i-t.top)/(t.bottom-t.top);return s>1?s=1:s<0&&(s=0),r>1?r=1:r<0&&(r=0),p.__color.v=s,p.__color.s=r,p.setValue(p.__color.toOriginal()),!1}function _(e){-1===e.type.indexOf("touch")&&e.preventDefault();var t=p.__hue_field.getBoundingClientRect(),n=1-((e.touches&&e.touches[0]||e).clientY-t.top)/(t.bottom-t.top);return n>1?n=1:n<0&&(n=0),p.__color.h=360*n,p.setValue(p.__color.toOriginal()),!1}H(this,t);var h=D(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,n));h.__color=new V(h.getValue()),h.__temp=new V(0);var p=h;h.domElement=document.createElement("div"),U.makeSelectable(h.domElement,!1),h.__selector=document.createElement("div"),h.__selector.className="selector",h.__saturation_field=document.createElement("div"),h.__saturation_field.className="saturation-field",h.__field_knob=document.createElement("div"),h.__field_knob.className="field-knob",h.__field_knob_border="2px solid ",h.__hue_knob=document.createElement("div"),h.__hue_knob.className="hue-knob",h.__hue_field=document.createElement("div"),h.__hue_field.className="hue-field",h.__input=document.createElement("input"),h.__input.type="text",h.__input_textShadow="0 1px 1px ",U.bind(h.__input,"keydown",function(e){13===e.keyCode&&d.call(this)}),U.bind(h.__input,"blur",d),U.bind(h.__selector,"mousedown",function(){U.addClass(this,"drag").bind(window,"mouseup",function(){U.removeClass(p.__selector,"drag")})}),U.bind(h.__selector,"touchstart",function(){U.addClass(this,"drag").bind(window,"touchend",function(){U.removeClass(p.__selector,"drag")})});var f=document.createElement("div");return k.extend(h.__selector.style,{width:"122px",height:"102px",padding:"3px",backgroundColor:"#222",boxShadow:"0px 1px 3px rgba(0,0,0,0.3)"}),k.extend(h.__field_knob.style,{position:"absolute",width:"12px",height:"12px",border:h.__field_knob_border+(h.__color.v<.5?"#fff":"#000"),boxShadow:"0px 1px 3px rgba(0,0,0,0.5)",borderRadius:"12px",zIndex:1}),k.extend(h.__hue_knob.style,{position:"absolute",width:"15px",height:"2px",borderRight:"4px solid #fff",zIndex:1}),k.extend(h.__saturation_field.style,{width:"100px",height:"100px",border:"1px solid #555",marginRight:"3px",display:"inline-block",cursor:"pointer"}),k.extend(f.style,{width:"100%",height:"100%",background:"none"}),a(f,"top","rgba(0,0,0,0)","#000"),k.extend(h.__hue_field.style,{width:"15px",height:"100px",border:"1px solid #555",cursor:"ns-resize",position:"absolute",top:"3px",right:"3px"}),l(h.__hue_field),k.extend(h.__input.style,{outline:"none",textAlign:"center",color:"#fff",border:0,fontWeight:"bold",textShadow:h.__input_textShadow+"rgba(0,0,0,0.7)"}),U.bind(h.__saturation_field,"mousedown",o),U.bind(h.__saturation_field,"touchstart",o),U.bind(h.__field_knob,"mousedown",o),U.bind(h.__field_knob,"touchstart",o),U.bind(h.__hue_field,"mousedown",i),U.bind(h.__hue_field,"touchstart",i),h.__saturation_field.appendChild(f),h.__selector.appendChild(h.__field_knob),h.__selector.appendChild(h.__saturation_field),h.__selector.appendChild(h.__hue_field),h.__hue_field.appendChild(h.__hue_knob),h.domElement.appendChild(h.__input),h.domElement.appendChild(h.__selector),h.updateDisplay(),h}return j(t,I),F(t,[{key:"updateDisplay",value:function(){var e=R(this.getValue());if(!1!==e){var t=!1;k.each(V.COMPONENTS,function(n){if(!k.isUndefined(e[n])&&!k.isUndefined(this.__color.__state[n])&&e[n]!==this.__color.__state[n])return t=!0,{}},this),t&&k.extend(this.__color.__state,e)}k.extend(this.__temp.__state,this.__color.__state),this.__temp.a=1;var n=this.__color.v<.5||this.__color.s>.5?255:0,o=255-n;k.extend(this.__field_knob.style,{marginLeft:100*this.__color.s-7+"px",marginTop:100*(1-this.__color.v)-7+"px",backgroundColor:this.__temp.toHexString(),border:this.__field_knob_border+"rgb("+n+","+n+","+n+")"}),this.__hue_knob.style.marginTop=100*(1-this.__color.h/360)+"px",this.__temp.s=1,this.__temp.v=1,a(this.__saturation_field,"left","#fff",this.__temp.toHexString()),this.__input.value=this.__color.toString(),k.extend(this.__input.style,{backgroundColor:this.__color.toHexString(),color:"rgb("+n+","+n+","+n+")",textShadow:this.__input_textShadow+"rgba("+o+","+o+","+o+",.7)"})}}]),t}(),$=["-moz-","-o-","-webkit-","-ms-",""],ee={load:function(e,t){var n=t||document,o=n.createElement("link");o.type="text/css",o.rel="stylesheet",o.href=e,n.getElementsByTagName("head")[0].appendChild(o)},inject:function(e,t){var n=t||document,o=document.createElement("style");o.type="text/css",o.innerHTML=e;var i=n.getElementsByTagName("head")[0];try{i.appendChild(o)}catch(e){}}},te=function(e,t){var n=e[t];return k.isArray(arguments[2])||k.isObject(arguments[2])?new K(e,t,arguments[2]):k.isNumber(n)?k.isNumber(arguments[2])&&k.isNumber(arguments[3])?k.isNumber(arguments[4])?new Q(e,t,arguments[2],arguments[3],arguments[4]):new Q(e,t,arguments[2],arguments[3]):k.isNumber(arguments[4])?new W(e,t,{min:arguments[2],max:arguments[3],step:arguments[4]}):new W(e,t,{min:arguments[2],max:arguments[3]}):k.isString(n)?new Y(e,t):k.isFunction(n)?new q(e,t,""):k.isBoolean(n)?new X(e,t):null},ne=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(e){setTimeout(e,1e3/60)},oe=function(){function e(){H(this,e),this.backgroundElement=document.createElement("div"),k.extend(this.backgroundElement.style,{backgroundColor:"rgba(0,0,0,0.8)",top:0,left:0,display:"none",zIndex:"1000",opacity:0,WebkitTransition:"opacity 0.2s linear",transition:"opacity 0.2s linear"}),U.makeFullscreen(this.backgroundElement),this.backgroundElement.style.position="fixed",this.domElement=document.createElement("div"),k.extend(this.domElement.style,{position:"fixed",display:"none",zIndex:"1001",opacity:0,WebkitTransition:"-webkit-transform 0.2s ease-out, opacity 0.2s linear",transition:"transform 0.2s ease-out, opacity 0.2s linear"}),document.body.appendChild(this.backgroundElement),document.body.appendChild(this.domElement);var t=this;U.bind(this.backgroundElement,"click",function(){t.hide()})}return F(e,[{key:"show",value:function(){var e=this;this.backgroundElement.style.display="block",this.domElement.style.display="block",this.domElement.style.opacity=0,this.domElement.style.webkitTransform="scale(1.1)",this.layout(),k.defer(function(){e.backgroundElement.style.opacity=1,e.domElement.style.opacity=1,e.domElement.style.webkitTransform="scale(1)"})}},{key:"hide",value:function(){var e=this,t=function t(){e.domElement.style.display="none",e.backgroundElement.style.display="none",U.unbind(e.domElement,"webkitTransitionEnd",t),U.unbind(e.domElement,"transitionend",t),U.unbind(e.domElement,"oTransitionEnd",t)};U.bind(this.domElement,"webkitTransitionEnd",t),U.bind(this.domElement,"transitionend",t),U.bind(this.domElement,"oTransitionEnd",t),this.backgroundElement.style.opacity=0,this.domElement.style.opacity=0,this.domElement.style.webkitTransform="scale(1.1)"}},{key:"layout",value:function(){this.domElement.style.left=window.innerWidth/2-U.getWidth(this.domElement)/2+"px",this.domElement.style.top=window.innerHeight/2-U.getHeight(this.domElement)/2+"px"}}]),e}(),ie=function(e){if(e&&"undefined"!=typeof window){var t=document.createElement("style");return t.setAttribute("type","text/css"),t.innerHTML=e,document.head.appendChild(t),e}}(".dg ul{list-style:none;margin:0;padding:0;width:100%;clear:both}.dg.ac{position:fixed;top:0;left:0;right:0;height:0;z-index:0}.dg:not(.ac) .main{overflow:hidden}.dg.main{-webkit-transition:opacity .1s linear;-o-transition:opacity .1s linear;-moz-transition:opacity .1s linear;transition:opacity .1s linear}.dg.main.taller-than-window{overflow-y:auto}.dg.main.taller-than-window .close-button{opacity:1;margin-top:-1px;border-top:1px solid #2c2c2c}.dg.main ul.closed .close-button{opacity:1 !important}.dg.main:hover .close-button,.dg.main .close-button.drag{opacity:1}.dg.main .close-button{-webkit-transition:opacity .1s linear;-o-transition:opacity .1s linear;-moz-transition:opacity .1s linear;transition:opacity .1s linear;border:0;line-height:19px;height:20px;cursor:pointer;text-align:center;background-color:#000}.dg.main .close-button.close-top{position:relative}.dg.main .close-button.close-bottom{position:absolute}.dg.main .close-button:hover{background-color:#111}.dg.a{float:right;margin-right:15px;overflow-y:visible}.dg.a.has-save>ul.close-top{margin-top:0}.dg.a.has-save>ul.close-bottom{margin-top:27px}.dg.a.has-save>ul.closed{margin-top:0}.dg.a .save-row{top:0;z-index:1002}.dg.a .save-row.close-top{position:relative}.dg.a .save-row.close-bottom{position:fixed}.dg li{-webkit-transition:height .1s ease-out;-o-transition:height .1s ease-out;-moz-transition:height .1s ease-out;transition:height .1s ease-out;-webkit-transition:overflow .1s linear;-o-transition:overflow .1s linear;-moz-transition:overflow .1s linear;transition:overflow .1s linear}.dg li:not(.folder){cursor:auto;height:27px;line-height:27px;padding:0 4px 0 5px}.dg li.folder{padding:0;border-left:4px solid transparent}.dg li.title{cursor:pointer;margin-left:-4px}.dg .closed li:not(.title),.dg .closed ul li,.dg .closed ul li>*{height:0;overflow:hidden;border:0}.dg .cr{clear:both;padding-left:3px;height:27px;overflow:hidden}.dg .property-name{cursor:default;float:left;clear:left;width:40%;overflow:hidden;text-overflow:ellipsis}.dg .c{float:left;width:60%;position:relative}.dg .c input[type=text]{border:0;margin-top:4px;padding:3px;width:100%;float:right}.dg .has-slider input[type=text]{width:30%;margin-left:0}.dg .slider{float:left;width:66%;margin-left:-5px;margin-right:0;height:19px;margin-top:4px}.dg .slider-fg{height:100%}.dg .c input[type=checkbox]{margin-top:7px}.dg .c select{margin-top:5px}.dg .cr.function,.dg .cr.function .property-name,.dg .cr.function *,.dg .cr.boolean,.dg .cr.boolean *{cursor:pointer}.dg .cr.color{overflow:visible}.dg .selector{display:none;position:absolute;margin-left:-9px;margin-top:23px;z-index:10}.dg .c:hover .selector,.dg .selector.drag{display:block}.dg li.save-row{padding:0}.dg li.save-row .button{display:inline-block;padding:0px 6px}.dg.dialogue{background-color:#222;width:460px;padding:15px;font-size:13px;line-height:15px}#dg-new-constructor{padding:10px;color:#222;font-family:Monaco, monospace;font-size:10px;border:0;resize:none;box-shadow:inset 1px 1px 1px #888;word-wrap:break-word;margin:12px 0;display:block;width:440px;overflow-y:scroll;height:100px;position:relative}#dg-local-explain{display:none;font-size:11px;line-height:17px;border-radius:3px;background-color:#333;padding:8px;margin-top:10px}#dg-local-explain code{font-size:10px}#dat-gui-save-locally{display:none}.dg{color:#eee;font:11px 'Lucida Grande', sans-serif;text-shadow:0 -1px 0 #111}.dg.main::-webkit-scrollbar{width:5px;background:#1a1a1a}.dg.main::-webkit-scrollbar-corner{height:0;display:none}.dg.main::-webkit-scrollbar-thumb{border-radius:5px;background:#676767}.dg li:not(.folder){background:#1a1a1a;border-bottom:1px solid #2c2c2c}.dg li.save-row{line-height:25px;background:#dad5cb;border:0}.dg li.save-row select{margin-left:5px;width:108px}.dg li.save-row .button{margin-left:5px;margin-top:1px;border-radius:2px;font-size:9px;line-height:7px;padding:4px 4px 5px 4px;background:#c5bdad;color:#fff;text-shadow:0 1px 0 #b0a58f;box-shadow:0 -1px 0 #b0a58f;cursor:pointer}.dg li.save-row .button.gears{background:#c5bdad url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAANCAYAAAB/9ZQ7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQJJREFUeNpiYKAU/P//PwGIC/ApCABiBSAW+I8AClAcgKxQ4T9hoMAEUrxx2QSGN6+egDX+/vWT4e7N82AMYoPAx/evwWoYoSYbACX2s7KxCxzcsezDh3evFoDEBYTEEqycggWAzA9AuUSQQgeYPa9fPv6/YWm/Acx5IPb7ty/fw+QZblw67vDs8R0YHyQhgObx+yAJkBqmG5dPPDh1aPOGR/eugW0G4vlIoTIfyFcA+QekhhHJhPdQxbiAIguMBTQZrPD7108M6roWYDFQiIAAv6Aow/1bFwXgis+f2LUAynwoIaNcz8XNx3Dl7MEJUDGQpx9gtQ8YCueB+D26OECAAQDadt7e46D42QAAAABJRU5ErkJggg==) 2px 1px no-repeat;height:7px;width:8px}.dg li.save-row .button:hover{background-color:#bab19e;box-shadow:0 -1px 0 #b0a58f}.dg li.folder{border-bottom:0}.dg li.title{padding-left:16px;background:#000 url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlI+hKgFxoCgAOw==) 6px 10px no-repeat;cursor:pointer;border-bottom:1px solid rgba(255,255,255,0.2)}.dg .closed li.title{background-image:url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlGIWqMCbWAEAOw==)}.dg .cr.boolean{border-left:3px solid #806787}.dg .cr.color{border-left:3px solid}.dg .cr.function{border-left:3px solid #e61d5f}.dg .cr.number{border-left:3px solid #2FA1D6}.dg .cr.number input[type=text]{color:#2FA1D6}.dg .cr.string{border-left:3px solid #1ed36f}.dg .cr.string input[type=text]{color:#1ed36f}.dg .cr.function:hover,.dg .cr.boolean:hover{background:#111}.dg .c input[type=text]{background:#303030;outline:none}.dg .c input[type=text]:hover{background:#3c3c3c}.dg .c input[type=text]:focus{background:#494949;color:#fff}.dg .c .slider{background:#303030;cursor:ew-resize}.dg .c .slider-fg{background:#2FA1D6;max-width:100%}.dg .c .slider:hover{background:#3c3c3c}.dg .c .slider:hover .slider-fg{background:#44abda}\n");ee.inject(ie);var re="Default",se=function(){try{return"localStorage"in window&&null!==window.localStorage}catch(e){return!1}}(),ae=void 0,le=!0,de=void 0,ce=!1,ue=[],_e=function e(t){var n=this,o=t||{};this.domElement=document.createElement("div"),this.__ul=document.createElement("ul"),this.domElement.appendChild(this.__ul),U.addClass(this.domElement,"dg"),this.__folders={},this.__controllers=[],this.__rememberedObjects=[],this.__rememberedObjectIndecesToControllers=[],this.__listening=[],o=k.defaults(o,{closeOnTop:!1,autoPlace:!0,width:e.DEFAULT_WIDTH}),o=k.defaults(o,{resizable:o.autoPlace,hideable:o.autoPlace}),k.isUndefined(o.load)?o.load={preset:re}:o.preset&&(o.load.preset=o.preset),k.isUndefined(o.parent)&&o.hideable&&ue.push(this),o.resizable=k.isUndefined(o.parent)&&o.resizable,o.autoPlace&&k.isUndefined(o.scrollable)&&(o.scrollable=!0);var i=se&&"true"===localStorage.getItem(f(this,"isLocal")),r=void 0;if(Object.defineProperties(this,{parent:{get:function(){return o.parent}},scrollable:{get:function(){return o.scrollable}},autoPlace:{get:function(){return o.autoPlace}},closeOnTop:{get:function(){return o.closeOnTop}},preset:{get:function(){return n.parent?n.getRoot().preset:o.load.preset},set:function(e){n.parent?n.getRoot().preset=e:o.load.preset=e,x(this),n.revert()}},width:{get:function(){return o.width},set:function(e){o.width=e,y(n,e)}},name:{get:function(){return o.name},set:function(e){o.name=e,titleRowName&&(titleRowName.innerHTML=o.name)}},closed:{get:function(){return o.closed},set:function(t){o.closed=t,o.closed?U.addClass(n.__ul,e.CLASS_CLOSED):U.removeClass(n.__ul,e.CLASS_CLOSED),this.onResize(),n.__closeButton&&(n.__closeButton.innerHTML=t?e.TEXT_OPEN:e.TEXT_CLOSED)}},load:{get:function(){return o.load}},useLocalStorage:{get:function(){return i},set:function(e){se&&(i=e,e?U.bind(window,"unload",r):U.unbind(window,"unload",r),localStorage.setItem(f(n,"isLocal"),e))}}}),k.isUndefined(o.parent)){if(o.closed=!1,U.addClass(this.domElement,e.CLASS_MAIN),U.makeSelectable(this.domElement,!1),se&&i){n.useLocalStorage=!0;var s=localStorage.getItem(f(this,"gui"));s&&(o.load=JSON.parse(s))}this.__closeButton=document.createElement("div"),this.__closeButton.innerHTML=e.TEXT_CLOSED,U.addClass(this.__closeButton,e.CLASS_CLOSE_BUTTON),o.closeOnTop?(U.addClass(this.__closeButton,e.CLASS_CLOSE_TOP),this.domElement.insertBefore(this.__closeButton,this.domElement.childNodes[0])):(U.addClass(this.__closeButton,e.CLASS_CLOSE_BOTTOM),this.domElement.appendChild(this.__closeButton)),U.bind(this.__closeButton,"click",function(){n.closed=!n.closed})}else{void 0===o.closed&&(o.closed=!0);var a=document.createTextNode(o.name);U.addClass(a,"controller-name");var l=d(n,a);U.addClass(this.__ul,e.CLASS_CLOSED),U.addClass(l,"title"),U.bind(l,"click",function(e){return e.preventDefault(),n.closed=!n.closed,!1}),o.closed||(this.closed=!1)}o.autoPlace&&(k.isUndefined(o.parent)&&(le&&(de=document.createElement("div"),U.addClass(de,"dg"),U.addClass(de,e.CLASS_AUTO_PLACE_CONTAINER),document.body.appendChild(de),le=!1),de.appendChild(this.domElement),U.addClass(this.domElement,e.CLASS_AUTO_PLACE)),this.parent||y(n,o.width)),this.__resizeHandler=function(){n.onResizeDebounced()},U.bind(window,"resize",this.__resizeHandler),U.bind(this.__ul,"webkitTransitionEnd",this.__resizeHandler),U.bind(this.__ul,"transitionend",this.__resizeHandler),U.bind(this.__ul,"oTransitionEnd",this.__resizeHandler),this.onResize(),o.resizable&&v(this),r=function(){se&&"true"===localStorage.getItem(f(n,"isLocal"))&&localStorage.setItem(f(n,"gui"),JSON.stringify(n.getSaveObject()))},this.saveToLocalStorageIfPossible=r,o.parent||function(){var e=n.getRoot();e.width+=1,k.defer(function(){e.width-=1})}()};return _e.toggleHide=function(){ce=!ce,k.each(ue,function(e){e.domElement.style.display=ce?"none":""})},_e.CLASS_AUTO_PLACE="a",_e.CLASS_AUTO_PLACE_CONTAINER="ac",_e.CLASS_MAIN="main",_e.CLASS_CONTROLLER_ROW="cr",_e.CLASS_TOO_TALL="taller-than-window",_e.CLASS_CLOSED="closed",_e.CLASS_CLOSE_BUTTON="close-button",_e.CLASS_CLOSE_TOP="close-top",_e.CLASS_CLOSE_BOTTOM="close-bottom",_e.CLASS_DRAG="drag",_e.DEFAULT_WIDTH=245,_e.TEXT_CLOSED="Close Controls",_e.TEXT_OPEN="Open Controls",_e._keydownHandler=function(e){"text"===document.activeElement.type||72!==e.which&&72!==e.keyCode||_e.toggleHide()},U.bind(window,"keydown",_e._keydownHandler,!1),k.extend(_e.prototype,{add:function(e,t){return p(this,e,t,{factoryArgs:Array.prototype.slice.call(arguments,2)})},addColor:function(e,t){return p(this,e,t,{color:!0})},remove:function(e){this.__ul.removeChild(e.__li),this.__controllers.splice(this.__controllers.indexOf(e),1);var t=this;k.defer(function(){t.onResize()})},destroy:function(){if(this.parent)throw new Error("Only the root GUI should be removed with .destroy(). For subfolders, use gui.removeFolder(folder) instead.");this.autoPlace&&de.removeChild(this.domElement);var e=this;k.each(this.__folders,function(t){e.removeFolder(t)}),U.unbind(window,"keydown",_e._keydownHandler,!1),c(this)},addFolder:function(e){if(void 0!==this.__folders[e])throw new Error('You already have a folder in this GUI by the name "'+e+'"');var t={name:e,parent:this};t.autoPlace=this.autoPlace,this.load&&this.load.folders&&this.load.folders[e]&&(t.closed=this.load.folders[e].closed,t.load=this.load.folders[e]);var n=new _e(t);this.__folders[e]=n;var o=d(this,n.domElement);return U.addClass(o,"folder"),n},removeFolder:function(e){this.__ul.removeChild(e.domElement.parentElement),delete this.__folders[e.name],this.load&&this.load.folders&&this.load.folders[e.name]&&delete this.load.folders[e.name],c(e);var t=this;k.each(e.__folders,function(t){e.removeFolder(t)}),k.defer(function(){t.onResize()})},open:function(){this.closed=!1},close:function(){this.closed=!0},onResize:function(){var e=this.getRoot();if(e.scrollable){var t=U.getOffset(e.__ul).top,n=0;k.each(e.__ul.childNodes,function(t){e.autoPlace&&t===e.__save_row||(n+=U.getHeight(t))}),window.innerHeight-t-20GUI\'s constructor:\n\n \n\n
\n\n Automatically save\n values to localStorage on exit.\n\n
The values saved to localStorage will\n override those passed to dat.GUI\'s constructor. This makes it\n easier to work incrementally, but localStorage is fragile,\n and your friends may not see the same values you do.\n\n
\n\n
\n\n'),this.parent)throw new Error("You can only call remember on a top level GUI.");var e=this;k.each(Array.prototype.slice.call(arguments),function(t){0===e.__rememberedObjects.length&&b(e),-1===e.__rememberedObjects.indexOf(t)&&e.__rememberedObjects.push(t)}),this.autoPlace&&y(this,this.width)},getRoot:function(){for(var e=this;e.parent;)e=e.parent;return e},getSaveObject:function(){var e=this.load;return e.closed=this.closed,this.__rememberedObjects.length>0&&(e.preset=this.preset,e.remembered||(e.remembered={}),e.remembered[this.preset]=w(this)),e.folders={},k.each(this.__folders,function(t,n){e.folders[n]=t.getSaveObject()}),e},save:function(){this.load.remembered||(this.load.remembered={}),this.load.remembered[this.preset]=w(this),u(this,!1),this.saveToLocalStorageIfPossible()},saveAs:function(e){this.load.remembered||(this.load.remembered={},this.load.remembered[re]=w(this,!0)),this.load.remembered[e]=w(this),this.preset=e,m(this,e,!0),this.saveToLocalStorageIfPossible()},revert:function(e){k.each(this.__controllers,function(t){this.getRoot().load.remembered?h(e||this.getRoot(),t):t.setValue(t.initialValue),t.__onFinishChange&&t.__onFinishChange.call(t,t.getValue())},this),k.each(this.__folders,function(e){e.revert(e)}),e||u(this.getRoot(),!1)},listen:function(e){var t=0===this.__listening.length;this.__listening.push(e),t&&E(this.__listening)},updateDisplay:function(){k.each(this.__controllers,function(e){e.updateDisplay()}),k.each(this.__folders,function(e){e.updateDisplay()})}}),{color:{Color:V,math:B,interpret:R},controllers:{Controller:I,BooleanController:X,OptionController:K,StringController:Y,NumberController:J,NumberControllerBox:W,NumberControllerSlider:Q,FunctionController:q,ColorController:Z},dom:{dom:U},gui:{GUI:_e},GUI:_e}}); diff --git a/build/public/assets/js/rStats.extras.js b/build/public/assets/js/rStats.extras.js deleted file mode 100644 index 2a88f8f..0000000 --- a/build/public/assets/js/rStats.extras.js +++ /dev/null @@ -1,265 +0,0 @@ -window.glStats = function () { - - var _rS = null; - - var _totalDrawArraysCalls = 0, - _totalDrawElementsCalls = 0, - _totalUseProgramCalls = 0, - _totalFaces = 0, - _totalVertices = 0, - _totalPoints = 0, - _totalBindTexures = 0; - - function _h ( f, c ) { - return function () { - c.apply( this, arguments ); - f.apply( this, arguments ); - }; - } - - WebGLRenderingContext.prototype.drawArrays = _h( WebGLRenderingContext.prototype.drawArrays, function () { - _totalDrawArraysCalls++; - if ( arguments[ 0 ] == this.POINTS ) _totalPoints += arguments[ 2 ]; - else _totalVertices += arguments[ 2 ]; - } ); - - WebGLRenderingContext.prototype.drawElements = _h( WebGLRenderingContext.prototype.drawElements, function () { - _totalDrawElementsCalls++; - _totalFaces += arguments[ 1 ] / 3; - _totalVertices += arguments[ 1 ]; - } ); - - WebGLRenderingContext.prototype.useProgram = _h( WebGLRenderingContext.prototype.useProgram, function () { - _totalUseProgramCalls++; - } ); - - WebGLRenderingContext.prototype.bindTexture = _h( WebGLRenderingContext.prototype.bindTexture, function () { - _totalBindTexures++; - } ); - - var _values = { - allcalls: { - over: 3000, - caption: 'Calls (hook)' - }, - drawelements: { - caption: 'drawElements (hook)' - }, - drawarrays: { - caption: 'drawArrays (hook)' - } - }; - - var _groups = [ { - caption: 'WebGL', - values: [ 'allcalls', 'drawelements', 'drawarrays', 'useprogram', 'bindtexture', 'glfaces', 'glvertices', 'glpoints' ] - } ]; - - var _fractions = [ { - base: 'allcalls', - steps: [ 'drawelements', 'drawarrays' ] - } ]; - - function _update () { - _rS( 'allcalls' ).set( _totalDrawArraysCalls + _totalDrawElementsCalls ); - _rS( 'drawElements' ).set( _totalDrawElementsCalls ); - _rS( 'drawArrays' ).set( _totalDrawArraysCalls ); - _rS( 'bindTexture' ).set( _totalBindTexures ); - _rS( 'useProgram' ).set( _totalUseProgramCalls ); - _rS( 'glfaces' ).set( _totalFaces ); - _rS( 'glvertices' ).set( _totalVertices ); - _rS( 'glpoints' ).set( _totalPoints ); - } - - function _start () { - _totalDrawArraysCalls = 0; - _totalDrawElementsCalls = 0; - _totalUseProgramCalls = 0; - _totalFaces = 0; - _totalVertices = 0; - _totalPoints = 0; - _totalBindTexures = 0; - } - - function _end () {} - - function _attach ( r ) { - _rS = r; - } - - return { - update: _update, - start: _start, - end: _end, - attach: _attach, - values: _values, - groups: _groups, - fractions: _fractions - }; - -}; - -window.threeStats = function ( renderer ) { - - var _rS = null; - - var _values = { - 'renderer.info.memory.geometries': { - caption: 'Geometries' - }, - 'renderer.info.memory.textures': { - caption: 'Textures' - }, - 'renderer.info.programs': { - caption: 'Programs' - }, - 'renderer.info.render.calls': { - caption: 'Calls' - }, - 'renderer.info.render.faces': { - caption: 'Faces', - over: 1000 - }, - 'renderer.info.render.points': { - caption: 'Points' - }, - 'renderer.info.render.vertices': { - caption: 'Vertices' - } - }; - - var _groups = [ { - caption: 'Three.js - Memory', - values: [ 'renderer.info.memory.geometries', 'renderer.info.programs', 'renderer.info.memory.textures' ] - }, { - caption: 'Three.js - Render', - values: [ 'renderer.info.render.calls', 'renderer.info.render.faces', 'renderer.info.render.points', 'renderer.info.render.vertices' ] - } ]; - - var _fractions = []; - - function _update () { - - _rS( 'renderer.info.memory.geometries' ).set( renderer.info.memory.geometries ); - //_rS( 'renderer.info.programs' ).set( renderer.info.programs.length ); - _rS( 'renderer.info.memory.textures' ).set( renderer.info.memory.textures ); - _rS( 'renderer.info.render.calls' ).set( renderer.info.render.calls ); - _rS( 'renderer.info.render.faces' ).set( renderer.info.render.faces ); - _rS( 'renderer.info.render.points' ).set( renderer.info.render.points ); - _rS( 'renderer.info.render.vertices' ).set( renderer.info.render.vertices ); - - } - - function _start () {} - - function _end () {} - - function _attach ( r ) { - _rS = r; - } - - return { - update: _update, - start: _start, - end: _end, - attach: _attach, - values: _values, - groups: _groups, - fractions: _fractions - }; - -}; - -/* - * From https://github.com/paulirish/memory-stats.js - */ - -window.BrowserStats = function () { - - var _rS = null; - - var _usedJSHeapSize = 0, - _totalJSHeapSize = 0; - - var memory = { - usedJSHeapSize: 0, - totalJSHeapSize: 0 - }; - - if ( window.performance && performance.memory ) - memory = performance.memory; - - if ( memory.totalJSHeapSize === 0 ) { - console.warn( 'totalJSHeapSize === 0... performance.memory is only available in Chrome .' ); - } - - var _values = { - memory: { - caption: 'Used Memory', - average: true, - avgMs: 1000, - over: 22 - }, - total: { - caption: 'Total Memory' - } - }; - - var _groups = [ { - caption: 'Browser', - values: [ 'memory', 'total' ] - } ]; - - var _fractions = [ { - base: 'total', - steps: [ 'memory' ] - } ]; - - var log1024 = Math.log( 1024 ); - - function _size ( v ) { - - var precision = 100; //Math.pow(10, 2); - var i = Math.floor( Math.log( v ) / log1024 ); - if( v === 0 ) i = 1; - return Math.round( v * precision / Math.pow( 1024, i ) ) / precision; // + ' ' + sizes[i]; - - } - - function _update () { - _usedJSHeapSize = _size( memory.usedJSHeapSize ); - _totalJSHeapSize = _size( memory.totalJSHeapSize ); - - _rS( 'memory' ).set( _usedJSHeapSize ); - _rS( 'total' ).set( _totalJSHeapSize ); - } - - function _start () { - _usedJSHeapSize = 0; - } - - function _end () {} - - function _attach ( r ) { - _rS = r; - } - - return { - update: _update, - start: _start, - end: _end, - attach: _attach, - values: _values, - groups: _groups, - fractions: _fractions - }; - -}; - -if (typeof module === 'object') { - module.exports = { - glStats: window.glStats, - threeStats: window.threeStats, - BrowserStats: window.BrowserStats - }; -} diff --git a/build/public/assets/js/rStats.js b/build/public/assets/js/rStats.js deleted file mode 100644 index 2266937..0000000 --- a/build/public/assets/js/rStats.js +++ /dev/null @@ -1,478 +0,0 @@ -// performance.now() polyfill from https://gist.github.com/paulirish/5438650 -'use strict'; - -( function () { - - // prepare base perf object - if ( typeof window.performance === 'undefined' ) { - window.performance = {}; - } - - if ( !window.performance.now ) { - - var nowOffset = Date.now(); - - if ( performance.timing && performance.timing.navigationStart ) { - nowOffset = performance.timing.navigationStart; - } - - window.performance.now = function now () { - return Date.now() - nowOffset; - }; - - } - - if( !window.performance.mark ) { - window.performance.mark = function(){} - } - - if( !window.performance.measure ) { - window.performance.measure = function(){} - } - -} )(); - -/** - * @class rStats - * @param {rStats~Settings} [settings] Settings for the rStats instance. - */ - -/** - * @typedef {Object} rStats~Settings - * @property {Array.} [colours] An array of CSS colour values. - * @property {String} [CSSPath=''] Base URL where rStats.css is located. - * @property {Array.} [css] URLs of CSS or font files to import. - * @property {Object.} [values] Properties to use for each counter. - * @property {Array.} [groups] Define groups of counters. - * @property {Array.} [fractions] Define stacked counters. - * @property {Array.} [plugins] Additional plugins. - */ - -/** - * @typedef {Object} rStats~CounterProperties - * @property {String} [caption] Caption for this counter. - * @property {Boolean} [average=false] Whether the values should be averaged. - * @property {Number} [avgMs=1000] Duration for which the values should be averaged. - * @property {Number} [below] Value below which the graph should be highlighted. - * @property {Number} [over] Value over which the graph should be highlighted. - * @property {Boolean} [interpolate=true] Whether framerate should be interpolated. - */ - -window.rStats = function rStats ( settings ) { - - function iterateKeys ( array, callback ) { - var keys = Object.keys( array ); - for ( var j = 0, l = keys.length; j < l; j++ ) { - callback( keys[ j ] ); - } - } - - function importCSS ( url ) { - - var element = document.createElement( 'link' ); - element.href = url; - element.rel = 'stylesheet'; - element.type = 'text/css'; - document.getElementsByTagName( 'head' )[ 0 ].appendChild( element ); - - } - - var _settings = settings || {}; - var _colours = _settings.colours || [ '#850700', '#c74900', '#fcb300', '#284280', '#4c7c0c' ]; - - var _cssFont = 'https://fonts.googleapis.com/css?family=Roboto+Condensed:400,700,300'; - var _cssRStats = ( _settings.CSSPath ? _settings.CSSPath : '' ) + 'rStats.css'; - - var _css = _settings.css || [ _cssFont, _cssRStats ]; - _css.forEach(function (uri) { - importCSS( uri ); - }); - - if ( !_settings.values ) _settings.values = {}; - - var _base, _div, _elHeight = 10, _elWidth = 200; - var _perfCounters = {}; - - - function Graph ( _dom, _id, _defArg ) { - - var _def = _defArg || {}; - var _canvas = document.createElement( 'canvas' ), - _ctx = _canvas.getContext( '2d' ), - _max = 0, - _current = 0; - - var c = _def.color ? _def.color : '#666666'; - - var _dotCanvas = document.createElement( 'canvas' ), - _dotCtx = _dotCanvas.getContext( '2d' ); - _dotCanvas.width = 1; - _dotCanvas.height = 2 * _elHeight; - _dotCtx.fillStyle = '#444444'; - _dotCtx.fillRect( 0, 0, 1, 2 * _elHeight ); - _dotCtx.fillStyle = c; - _dotCtx.fillRect( 0, _elHeight, 1, _elHeight ); - _dotCtx.fillStyle = '#ffffff'; - _dotCtx.globalAlpha = 0.5; - _dotCtx.fillRect( 0, _elHeight, 1, 1 ); - _dotCtx.globalAlpha = 1; - - var _alarmCanvas = document.createElement( 'canvas' ), - _alarmCtx = _alarmCanvas.getContext( '2d' ); - _alarmCanvas.width = 1; - _alarmCanvas.height = 2 * _elHeight; - _alarmCtx.fillStyle = '#444444'; - _alarmCtx.fillRect( 0, 0, 1, 2 * _elHeight ); - _alarmCtx.fillStyle = '#b70000'; - _alarmCtx.fillRect( 0, _elHeight, 1, _elHeight ); - _alarmCtx.globalAlpha = 0.5; - _alarmCtx.fillStyle = '#ffffff'; - _alarmCtx.fillRect( 0, _elHeight, 1, 1 ); - _alarmCtx.globalAlpha = 1; - - function _init () { - - _canvas.width = _elWidth; - _canvas.height = _elHeight; - _canvas.style.width = _canvas.width + 'px'; - _canvas.style.height = _canvas.height + 'px'; - _canvas.className = 'rs-canvas'; - _dom.appendChild( _canvas ); - - _ctx.fillStyle = '#444444'; - _ctx.fillRect( 0, 0, _canvas.width, _canvas.height ); - - } - - function _draw ( v, alarm ) { - _current += ( v - _current ) * 0.1; - _max *= 0.99; - if ( _current > _max ) _max = _current; - _ctx.drawImage( _canvas, 1, 0, _canvas.width - 1, _canvas.height, 0, 0, _canvas.width - 1, _canvas.height ); - if ( alarm ) { - _ctx.drawImage( _alarmCanvas, _canvas.width - 1, _canvas.height - _current * _canvas.height / _max - _elHeight ); - } else { - _ctx.drawImage( _dotCanvas, _canvas.width - 1, _canvas.height - _current * _canvas.height / _max - _elHeight ); - } - } - - _init(); - - return { - draw: _draw - }; - - } - - function StackGraph ( _dom, _num ) { - - var _canvas = document.createElement( 'canvas' ), - _ctx = _canvas.getContext( '2d' ); - - function _init () { - - _canvas.width = _elWidth; - _canvas.height = _elHeight * _num; - _canvas.style.width = _canvas.width + 'px'; - _canvas.style.height = _canvas.height + 'px'; - _canvas.className = 'rs-canvas'; - _dom.appendChild( _canvas ); - - _ctx.fillStyle = '#444444'; - _ctx.fillRect( 0, 0, _canvas.width, _canvas.height ); - - } - - function _draw ( v ) { - _ctx.drawImage( _canvas, 1, 0, _canvas.width - 1, _canvas.height, 0, 0, _canvas.width - 1, _canvas.height ); - var th = 0; - iterateKeys( v, function ( j ) { - var h = v[ j ] * _canvas.height; - _ctx.fillStyle = _colours[ j ]; - _ctx.fillRect( _canvas.width - 1, th, 1, h ); - th += h; - } ); - } - - _init(); - - return { - draw: _draw - }; - - } - - function PerfCounter ( id, group ) { - - var _id = id, - _time, - _value = 0, - _total = 0, - _averageValue = 0, - _accumValue = 0, - _accumStart = performance.now(), - _accumSamples = 0, - _dom = document.createElement( 'div' ), - _spanId = document.createElement( 'span' ), - _spanValue = document.createElement( 'div' ), - _spanValueText = document.createTextNode( '' ), - _def = _settings ? _settings.values[ _id.toLowerCase() ] : null, - _graph = new Graph( _dom, _id, _def ), - _started = false; - - _spanId.className = 'rs-counter-id'; - _spanId.textContent = ( _def && _def.caption ) ? _def.caption : _id; - - _spanValue.className = 'rs-counter-value'; - _spanValue.appendChild( _spanValueText ); - - _dom.appendChild( _spanId ); - _dom.appendChild( _spanValue ); - if ( group ) group.div.appendChild( _dom ); - else _div.appendChild( _dom ); - - _time = performance.now(); - - function _average ( v ) { - if ( _def && _def.average ) { - _accumValue += v; - _accumSamples++; - var t = performance.now(); - if ( t - _accumStart >= ( _def.avgMs || 1000 ) ) { - _averageValue = _accumValue / _accumSamples; - _accumValue = 0; - _accumStart = t; - _accumSamples = 0; - } - } - } - - function _start () { - _time = performance.now(); - if( _settings.userTimingAPI ) performance.mark( _id + '-start' ); - _started = true; - } - - function _end () { - _value = performance.now() - _time; - if( _settings.userTimingAPI ) { - performance.mark( _id + '-end' ); - if( _started ) { - performance.measure( _id, _id + '-start', _id + '-end' ); - } - } - _average( _value ); - } - - function _tick () { - _end(); - _start(); - } - - function _draw () { - var v = ( _def && _def.average ) ? _averageValue : _value; - _spanValueText.nodeValue = Math.round( v * 100 ) / 100; - var a = ( _def && ( ( _def.below && _value < _def.below ) || ( _def.over && _value > _def.over ) ) ); - _graph.draw( _value, a ); - _dom.className = a ? 'rs-counter-base alarm' : 'rs-counter-base'; - - } - - function _frame () { - var t = performance.now(); - var e = t - _time; - _total++; - if ( e > 1000 ) { - if ( _def && _def.interpolate === false ) { - _value = _total; - } else { - _value = _total * 1000 / e; - } - _total = 0; - _time = t; - _average( _value ); - } - } - - function _set ( v ) { - _value = v; - _average( _value ); - } - - return { - set: _set, - start: _start, - tick: _tick, - end: _end, - frame: _frame, - value: function () { - return _value; - }, - draw: _draw - }; - - } - - function sample () { - - var _value = 0; - - function _set ( v ) { - _value = v; - } - - return { - set: _set, - value: function () { - return _value; - } - }; - - } - - function _perf ( idArg ) { - - var id = idArg.toLowerCase(); - if ( id === undefined ) id = 'default'; - if ( _perfCounters[ id ] ) return _perfCounters[ id ]; - - var group = null; - if ( _settings && _settings.groups ) { - iterateKeys( _settings.groups, function ( j ) { - var g = _settings.groups[ parseInt( j, 10 ) ]; - if ( !group && g.values.indexOf( id.toLowerCase() ) !== -1 ) { - group = g; - } - } ); - } - - var p = new PerfCounter( id, group ); - _perfCounters[ id ] = p; - return p; - - } - - function _init () { - - if ( _settings.plugins ) { - if ( !_settings.values ) _settings.values = {}; - if ( !_settings.groups ) _settings.groups = []; - if ( !_settings.fractions ) _settings.fractions = []; - for ( var j = 0; j < _settings.plugins.length; j++ ) { - _settings.plugins[ j ].attach( _perf ); - iterateKeys( _settings.plugins[ j ].values, function ( k ) { - _settings.values[ k ] = _settings.plugins[ j ].values[ k ]; - } ); - _settings.groups = _settings.groups.concat( _settings.plugins[ j ].groups ); - _settings.fractions = _settings.fractions.concat( _settings.plugins[ j ].fractions ); - } - } else { - _settings.plugins = {}; - } - - _base = document.createElement( 'div' ); - _base.className = 'rs-base'; - _div = document.createElement( 'div' ); - _div.className = 'rs-container'; - _div.style.height = 'auto'; - _base.appendChild( _div ); - document.body.appendChild( _base ); - - if ( !_settings ) return; - - if ( _settings.groups ) { - iterateKeys( _settings.groups, function ( j ) { - var g = _settings.groups[ parseInt( j, 10 ) ]; - var div = document.createElement( 'div' ); - div.className = 'rs-group'; - g.div = div; - var h1 = document.createElement( 'h1' ); - h1.textContent = g.caption; - h1.addEventListener( 'click', function ( e ) { - this.classList.toggle( 'hidden' ); - e.preventDefault(); - }.bind( div ) ); - _div.appendChild( h1 ); - _div.appendChild( div ); - } ); - } - - if ( _settings.fractions ) { - iterateKeys( _settings.fractions, function ( j ) { - var f = _settings.fractions[ parseInt( j, 10 ) ]; - var div = document.createElement( 'div' ); - div.className = 'rs-fraction'; - var legend = document.createElement( 'div' ); - legend.className = 'rs-legend'; - - var h = 0; - iterateKeys( _settings.fractions[ j ].steps, function ( k ) { - var p = document.createElement( 'p' ); - p.textContent = _settings.fractions[ j ].steps[ k ]; - p.style.color = _colours[ h ]; - legend.appendChild( p ); - h++; - } ); - div.appendChild( legend ); - div.style.height = h * _elHeight + 'px'; - f.div = div; - var graph = new StackGraph( div, h ); - f.graph = graph; - _div.appendChild( div ); - } ); - } - - } - - function _update () { - - iterateKeys( _settings.plugins, function ( j ) { - _settings.plugins[ j ].update(); - } ); - - iterateKeys( _perfCounters, function ( j ) { - _perfCounters[ j ].draw(); - } ); - - if ( _settings && _settings.fractions ) { - iterateKeys( _settings.fractions, function ( j ) { - var f = _settings.fractions[ parseInt( j, 10 ) ]; - var v = []; - var base = _perfCounters[ f.base.toLowerCase() ]; - if ( base ) { - base = base.value(); - iterateKeys( _settings.fractions[ j ].steps, function ( k ) { - var s = _settings.fractions[ j ].steps[ parseInt( k, 10 ) ].toLowerCase(); - var val = _perfCounters[ s ]; - if ( val ) { - v.push( val.value() / base ); - } - } ); - } - f.graph.draw( v ); - } ); - } - - /*if( _height != _div.clientHeight ) { - _height = _div.clientHeight; - _base.style.height = _height + 2 * _elHeight + 'px'; - console.log( _base.clientHeight ); - }*/ - - } - - _init(); - - return function ( id ) { - if ( id ) return _perf( id ); - return { - element: _base, - update: _update - }; - }; - -} - -if (typeof module === 'object') { - module.exports = window.rStats; -} diff --git a/build/public/assets/models/Teapot.json b/build/public/assets/models/Teapot.json deleted file mode 100644 index f75eb17..0000000 --- a/build/public/assets/models/Teapot.json +++ /dev/null @@ -1,2 +0,0 @@ - -{"metadata":{"version":4.3,"type":"Object","generator":"ObjectExporter"},"geometries":[{"uuid":"15930b1c-1b50-4926-a0ac-df433b9c4f96","type":"Geometry","data":{"vertices":[0.699999988079071,1.2000000476837158,0,0.6456999778747559,1.2000000476837158,0.27469998598098755,0.6366999745368958,1.236899971961975,0.27090001106262207,0.6901999711990356,1.236899971961975,0,0.6471999883651733,1.2491999864578247,0.2754000127315521,0.7016000151634216,1.2491999864578247,0,0.6685000061988831,1.236899971961975,0.28439998626708984,0.7246000170707703,1.236899971961975,0,0.6919000148773193,1.2000000476837158,0.29440000653266907,0.75,1.2000000476837158,0,0.4970000088214874,1.2000000476837158,0.4970000088214874,0.4900999963283539,1.236899971961975,0.4900999963283539,0.49810001254081726,1.2491999864578247,0.49810001254081726,0.5145000219345093,1.236899971961975,0.5145000219345093,0.5325000286102295,1.2000000476837158,0.5325000286102295,0.27469998598098755,1.2000000476837158,0.6456999778747559,0.27090001106262207,1.236899971961975,0.6366999745368958,0.2754000127315521,1.2491999864578247,0.6471999883651733,0.28439998626708984,1.236899971961975,0.6685000061988831,0.29440000653266907,1.2000000476837158,0.6919000148773193,0,1.2000000476837158,0.699999988079071,0,1.236899971961975,0.6901999711990356,0,1.2491999864578247,0.7016000151634216,0,1.236899971961975,0.7246000170707703,0,1.2000000476837158,0.75,-0.2937000095844269,1.2000000476837158,0.6456999778747559,-0.27889999747276306,1.236899971961975,0.6366999745368958,-0.2777000069618225,1.2491999864578247,0.6471999883651733,-0.2847000062465668,1.236899971961975,0.6685000061988831,-0.29440000653266907,1.2000000476837158,0.6919000148773193,-0.5138999819755554,1.2000000476837158,0.4970000088214874,-0.49720001220703125,1.236899971961975,0.4900999963283539,-0.5001999735832214,1.2491999864578247,0.49810001254081726,-0.5146999955177307,1.236899971961975,0.5145000219345093,-0.5325000286102295,1.2000000476837158,0.5325000286102295,-0.6521000266075134,1.2000000476837158,0.27469998598098755,-0.6394000053405762,1.236899971961975,0.27090001106262207,-0.6480000019073486,1.2491999864578247,0.2754000127315521,-0.6686000227928162,1.236899971961975,0.28439998626708984,-0.6919000148773193,1.2000000476837158,0.29440000653266907,-0.699999988079071,1.2000000476837158,0,-0.6901999711990356,1.236899971961975,0,-0.7016000151634216,1.2491999864578247,0,-0.7246000170707703,1.236899971961975,0,-0.75,1.2000000476837158,0,-0.6456999778747559,1.2000000476837158,-0.27469998598098755,-0.6366999745368958,1.236899971961975,-0.27090001106262207,-0.6471999883651733,1.2491999864578247,-0.2754000127315521,-0.6685000061988831,1.236899971961975,-0.28439998626708984,-0.6919000148773193,1.2000000476837158,-0.29440000653266907,-0.4970000088214874,1.2000000476837158,-0.4970000088214874,-0.4900999963283539,1.236899971961975,-0.4900999963283539,-0.49810001254081726,1.2491999864578247,-0.49810001254081726,-0.5145000219345093,1.236899971961975,-0.5145000219345093,-0.5325000286102295,1.2000000476837158,-0.5325000286102295,-0.27469998598098755,1.2000000476837158,-0.6456999778747559,-0.27090001106262207,1.236899971961975,-0.6366999745368958,-0.2754000127315521,1.2491999864578247,-0.6471999883651733,-0.28439998626708984,1.236899971961975,-0.6685000061988831,-0.29440000653266907,1.2000000476837158,-0.6919000148773193,0,1.2000000476837158,-0.699999988079071,0,1.236899971961975,-0.6901999711990356,0,1.2491999864578247,-0.7016000151634216,0,1.236899971961975,-0.7246000170707703,0,1.2000000476837158,-0.75,0.27469998598098755,1.2000000476837158,-0.6456999778747559,0.27090001106262207,1.236899971961975,-0.6366999745368958,0.2754000127315521,1.2491999864578247,-0.6471999883651733,0.28439998626708984,1.236899971961975,-0.6685000061988831,0.29440000653266907,1.2000000476837158,-0.6919000148773193,0.4970000088214874,1.2000000476837158,-0.4970000088214874,0.4900999963283539,1.236899971961975,-0.4900999963283539,0.49810001254081726,1.2491999864578247,-0.49810001254081726,0.5145000219345093,1.236899971961975,-0.5145000219345093,0.5325000286102295,1.2000000476837158,-0.5325000286102295,0.6456999778747559,1.2000000476837158,-0.27469998598098755,0.6366999745368958,1.236899971961975,-0.27090001106262207,0.6471999883651733,1.2491999864578247,-0.2754000127315521,0.6685000061988831,1.236899971961975,-0.28439998626708984,0.6919000148773193,1.2000000476837158,-0.29440000653266907,0.7766000032424927,1.0037000179290771,0.3303999900817871,0.8417999744415283,1.0037000179290771,0,0.8503999710083008,0.8108999729156494,0.3617999851703644,0.9218999743461609,0.8108999729156494,0,0.9027000069618225,0.6251999735832214,0.3840999901294708,0.9785000085830688,0.6251999735832214,0,0.9225000143051147,0.44999998807907104,0.39250001311302185,1,0.44999998807907104,0,0.5976999998092651,1.0037000179290771,0.5976999998092651,0.6545000076293945,0.8108999729156494,0.6545000076293945,0.6947000026702881,0.6251999735832214,0.6947000026702881,0.7099999785423279,0.44999998807907104,0.7099999785423279,0.3303999900817871,1.0037000179290771,0.7766000032424927,0.3617999851703644,0.8108999729156494,0.8503999710083008,0.3840999901294708,0.6251999735832214,0.9027000069618225,0.39250001311302185,0.44999998807907104,0.9225000143051147,0,1.0037000179290771,0.8417999744415283,0,0.8108999729156494,0.9218999743461609,0,0.6251999735832214,0.9785000085830688,0,0.44999998807907104,1,-0.3303999900817871,1.0037000179290771,0.7766000032424927,-0.3617999851703644,0.8108999729156494,0.8503999710083008,-0.3840999901294708,0.6251999735832214,0.9027000069618225,-0.39250001311302185,0.44999998807907104,0.9225000143051147,-0.5976999998092651,1.0037000179290771,0.5976999998092651,-0.6545000076293945,0.8108999729156494,0.6545000076293945,-0.6947000026702881,0.6251999735832214,0.6947000026702881,-0.7099999785423279,0.44999998807907104,0.7099999785423279,-0.7766000032424927,1.0037000179290771,0.3303999900817871,-0.8503999710083008,0.8108999729156494,0.3617999851703644,-0.9027000069618225,0.6251999735832214,0.3840999901294708,-0.9225000143051147,0.44999998807907104,0.39250001311302185,-0.8417999744415283,1.0037000179290771,0,-0.9218999743461609,0.8108999729156494,0,-0.9785000085830688,0.6251999735832214,0,-1,0.44999998807907104,0,-0.7766000032424927,1.0037000179290771,-0.3303999900817871,-0.8503999710083008,0.8108999729156494,-0.3617999851703644,-0.9027000069618225,0.6251999735832214,-0.3840999901294708,-0.9225000143051147,0.44999998807907104,-0.39250001311302185,-0.5976999998092651,1.0037000179290771,-0.5976999998092651,-0.6545000076293945,0.8108999729156494,-0.6545000076293945,-0.6947000026702881,0.6251999735832214,-0.6947000026702881,-0.7099999785423279,0.44999998807907104,-0.7099999785423279,-0.3303999900817871,1.0037000179290771,-0.7766000032424927,-0.3617999851703644,0.8108999729156494,-0.8503999710083008,-0.3840999901294708,0.6251999735832214,-0.9027000069618225,-0.39250001311302185,0.44999998807907104,-0.9225000143051147,0,1.0037000179290771,-0.8417999744415283,0,0.8108999729156494,-0.9218999743461609,0,0.6251999735832214,-0.9785000085830688,0,0.44999998807907104,-1,0.3303999900817871,1.0037000179290771,-0.7766000032424927,0.3617999851703644,0.8108999729156494,-0.8503999710083008,0.3840999901294708,0.6251999735832214,-0.9027000069618225,0.39250001311302185,0.44999998807907104,-0.9225000143051147,0.5976999998092651,1.0037000179290771,-0.5976999998092651,0.6545000076293945,0.8108999729156494,-0.6545000076293945,0.6947000026702881,0.6251999735832214,-0.6947000026702881,0.7099999785423279,0.44999998807907104,-0.7099999785423279,0.7766000032424927,1.0037000179290771,-0.3303999900817871,0.8503999710083008,0.8108999729156494,-0.3617999851703644,0.9027000069618225,0.6251999735832214,-0.3840999901294708,0.9225000143051147,0.44999998807907104,-0.39250001311302185,0.8865000009536743,0.301800012588501,0.37720000743865967,0.9609000086784363,0.301800012588501,0,0.807200014591217,0.19220000505447388,0.3434000015258789,0.875,0.19220000505447388,0,0.7279000282287598,0.11779999732971191,0.30970001220703125,0.7890999913215637,0.11779999732971191,0,0.6919000148773193,0.07500000298023224,0.29440000653266907,0.75,0.07500000298023224,0,0.6822999715805054,0.301800012588501,0.6822999715805054,0.6212999820709229,0.19220000505447388,0.6212999820709229,0.5601999759674072,0.11779999732971191,0.5601999759674072,0.5325000286102295,0.07500000298023224,0.5325000286102295,0.37720000743865967,0.301800012588501,0.8865000009536743,0.3434000015258789,0.19220000505447388,0.807200014591217,0.30970001220703125,0.11779999732971191,0.7279000282287598,0.29440000653266907,0.07500000298023224,0.6919000148773193,0,0.301800012588501,0.9609000086784363,0,0.19220000505447388,0.875,0,0.11779999732971191,0.7890999913215637,0,0.07500000298023224,0.75,-0.37720000743865967,0.301800012588501,0.8865000009536743,-0.3434000015258789,0.19220000505447388,0.807200014591217,-0.30970001220703125,0.11779999732971191,0.7279000282287598,-0.29440000653266907,0.07500000298023224,0.6919000148773193,-0.6822999715805054,0.301800012588501,0.6822999715805054,-0.6212999820709229,0.19220000505447388,0.6212999820709229,-0.5601999759674072,0.11779999732971191,0.5601999759674072,-0.5325000286102295,0.07500000298023224,0.5325000286102295,-0.8865000009536743,0.301800012588501,0.37720000743865967,-0.807200014591217,0.19220000505447388,0.3434000015258789,-0.7279000282287598,0.11779999732971191,0.30970001220703125,-0.6919000148773193,0.07500000298023224,0.29440000653266907,-0.9609000086784363,0.301800012588501,0,-0.875,0.19220000505447388,0,-0.7890999913215637,0.11779999732971191,0,-0.75,0.07500000298023224,0,-0.8865000009536743,0.301800012588501,-0.37720000743865967,-0.807200014591217,0.19220000505447388,-0.3434000015258789,-0.7279000282287598,0.11779999732971191,-0.30970001220703125,-0.6919000148773193,0.07500000298023224,-0.29440000653266907,-0.6822999715805054,0.301800012588501,-0.6822999715805054,-0.6212999820709229,0.19220000505447388,-0.6212999820709229,-0.5601999759674072,0.11779999732971191,-0.5601999759674072,-0.5325000286102295,0.07500000298023224,-0.5325000286102295,-0.37720000743865967,0.301800012588501,-0.8865000009536743,-0.3434000015258789,0.19220000505447388,-0.807200014591217,-0.30970001220703125,0.11779999732971191,-0.7279000282287598,-0.29440000653266907,0.07500000298023224,-0.6919000148773193,0,0.301800012588501,-0.9609000086784363,0,0.19220000505447388,-0.875,0,0.11779999732971191,-0.7890999913215637,0,0.07500000298023224,-0.75,0.37720000743865967,0.301800012588501,-0.8865000009536743,0.3434000015258789,0.19220000505447388,-0.807200014591217,0.30970001220703125,0.11779999732971191,-0.7279000282287598,0.29440000653266907,0.07500000298023224,-0.6919000148773193,0.6822999715805054,0.301800012588501,-0.6822999715805054,0.6212999820709229,0.19220000505447388,-0.6212999820709229,0.5601999759674072,0.11779999732971191,-0.5601999759674072,0.5325000286102295,0.07500000298023224,-0.5325000286102295,0.8865000009536743,0.301800012588501,-0.37720000743865967,0.807200014591217,0.19220000505447388,-0.3434000015258789,0.7279000282287598,0.11779999732971191,-0.30970001220703125,0.6919000148773193,0.07500000298023224,-0.29440000653266907,0.6761999726295471,0.04749999940395355,0.28769999742507935,0.7329999804496765,0.04749999940395355,0,0.5924000144004822,0.023399999365210533,0.25209999084472656,0.6421999931335449,0.023399999365210533,0,0.3853999972343445,0.006399999838322401,0.164000004529953,0.41780000925064087,0.006399999838322401,0,0,0,0,0.5203999876976013,0.04749999940395355,0.5203999876976013,0.4560000002384186,0.023399999365210533,0.4560000002384186,0.29660001397132874,0.006399999838322401,0.29660001397132874,0.28769999742507935,0.04749999940395355,0.6761999726295471,0.25209999084472656,0.023399999365210533,0.5924000144004822,0.164000004529953,0.006399999838322401,0.3853999972343445,0,0.04749999940395355,0.7329999804496765,0,0.023399999365210533,0.6421999931335449,0,0.006399999838322401,0.41780000925064087,-0.28769999742507935,0.04749999940395355,0.6761999726295471,-0.25209999084472656,0.023399999365210533,0.5924000144004822,-0.164000004529953,0.006399999838322401,0.3853999972343445,-0.5203999876976013,0.04749999940395355,0.5203999876976013,-0.4560000002384186,0.023399999365210533,0.4560000002384186,-0.29660001397132874,0.006399999838322401,0.29660001397132874,-0.6761999726295471,0.04749999940395355,0.28769999742507935,-0.5924000144004822,0.023399999365210533,0.25209999084472656,-0.3853999972343445,0.006399999838322401,0.164000004529953,-0.7329999804496765,0.04749999940395355,0,-0.6421999931335449,0.023399999365210533,0,-0.41780000925064087,0.006399999838322401,0,-0.6761999726295471,0.04749999940395355,-0.28769999742507935,-0.5924000144004822,0.023399999365210533,-0.25209999084472656,-0.3853999972343445,0.006399999838322401,-0.164000004529953,-0.5203999876976013,0.04749999940395355,-0.5203999876976013,-0.4560000002384186,0.023399999365210533,-0.4560000002384186,-0.29660001397132874,0.006399999838322401,-0.29660001397132874,-0.28769999742507935,0.04749999940395355,-0.6761999726295471,-0.25209999084472656,0.023399999365210533,-0.5924000144004822,-0.164000004529953,0.006399999838322401,-0.3853999972343445,0,0.04749999940395355,-0.7329999804496765,0,0.023399999365210533,-0.6421999931335449,0,0.006399999838322401,-0.41780000925064087,0.28769999742507935,0.04749999940395355,-0.6761999726295471,0.25209999084472656,0.023399999365210533,-0.5924000144004822,0.164000004529953,0.006399999838322401,-0.3853999972343445,0.5203999876976013,0.04749999940395355,-0.5203999876976013,0.4560000002384186,0.023399999365210533,-0.4560000002384186,0.29660001397132874,0.006399999838322401,-0.29660001397132874,0.6761999726295471,0.04749999940395355,-0.28769999742507935,0.5924000144004822,0.023399999365210533,-0.25209999084472656,0.3853999972343445,0.006399999838322401,-0.164000004529953,-0.800000011920929,1.0125000476837158,0,-0.7922000288963318,1.0300999879837036,0.0843999981880188,-1.0405999422073364,1.027999997138977,0.0843999981880188,-1.0335999727249146,1.010699987411499,0,-1.2229000329971313,1.013800024986267,0.0843999981880188,-1.2063000202178955,0.9983999729156494,0,-1.3351000547409058,0.9751999974250793,0.0843999981880188,-1.3133000135421753,0.9649999737739563,0,-1.3733999729156494,0.8999999761581421,0.0843999981880188,-1.350000023841858,0.8999999761581421,0,-0.7749999761581421,1.0687999725341797,0.11249999701976776,-1.055899977684021,1.066100001335144,0.11249999701976776,-1.2594000101089478,1.047700047492981,0.11249999701976776,-1.3832000494003296,0.9976000189781189,0.11249999701976776,-1.4249999523162842,0.8999999761581421,0.11249999701976776,-0.7577999830245972,1.1073999404907227,0.0843999981880188,-1.0712000131607056,1.104200005531311,0.0843999981880188,-1.2958999872207642,1.0815000534057617,0.0843999981880188,-1.4313000440597534,1.0198999643325806,0.0843999981880188,-1.4766000509262085,0.8999999761581421,0.0843999981880188,-0.75,1.125,0,-1.0780999660491943,1.121500015258789,0,-1.3125,1.0968999862670898,0,-1.4530999660491943,1.0300999879837036,0,-1.5,0.8999999761581421,0,-0.7577999830245972,1.1073999404907227,-0.0843999981880188,-1.0712000131607056,1.104200005531311,-0.0843999981880188,-1.2958999872207642,1.0815000534057617,-0.0843999981880188,-1.4313000440597534,1.0198999643325806,-0.0843999981880188,-1.4766000509262085,0.8999999761581421,-0.0843999981880188,-0.7749999761581421,1.0687999725341797,-0.11249999701976776,-1.055899977684021,1.066100001335144,-0.11249999701976776,-1.2594000101089478,1.047700047492981,-0.11249999701976776,-1.3832000494003296,0.9976000189781189,-0.11249999701976776,-1.4249999523162842,0.8999999761581421,-0.11249999701976776,-0.7922000288963318,1.0300999879837036,-0.0843999981880188,-1.0405999422073364,1.027999997138977,-0.0843999981880188,-1.2229000329971313,1.013800024986267,-0.0843999981880188,-1.3351000547409058,0.9751999974250793,-0.0843999981880188,-1.3733999729156494,0.8999999761581421,-0.0843999981880188,-1.3517999649047852,0.7882000207901001,0.0843999981880188,-1.3305000066757202,0.7979999780654907,0,-1.2839000225067139,0.6600000262260437,0.0843999981880188,-1.2687000036239624,0.675000011920929,0,-1.1655000448226929,0.5333999991416931,0.0843999981880188,-1.1601999998092651,0.5519999861717224,0,-0.9922000169754028,0.42660000920295715,0.0843999981880188,-1.3985999822616577,0.7666000127792358,0.11249999701976776,-1.317199945449829,0.6269999742507935,0.11249999701976776,-1.1770999431610107,0.4925999939441681,0.11249999701976776,-0.9750000238418579,0.375,0.11249999701976776,-1.4455000162124634,0.7448999881744385,0.0843999981880188,-1.3504999876022339,0.5939000248908997,0.0843999981880188,-1.1887999773025513,0.45179998874664307,0.0843999981880188,-0.9577999711036682,0.32339999079704285,0.0843999981880188,-1.4667999744415283,0.7350999712944031,0,-1.3655999898910522,0.5788999795913696,0,-1.194100022315979,0.4332999885082245,0,-0.949999988079071,0.30000001192092896,0,-1.4455000162124634,0.7448999881744385,-0.0843999981880188,-1.3504999876022339,0.5939000248908997,-0.0843999981880188,-1.1887999773025513,0.45179998874664307,-0.0843999981880188,-0.9577999711036682,0.32339999079704285,-0.0843999981880188,-1.3985999822616577,0.7666000127792358,-0.11249999701976776,-1.317199945449829,0.6269999742507935,-0.11249999701976776,-1.1770999431610107,0.4925999939441681,-0.11249999701976776,-0.9750000238418579,0.375,-0.11249999701976776,-1.3517999649047852,0.7882000207901001,-0.0843999981880188,-1.2839000225067139,0.6600000262260437,-0.0843999981880188,-1.1655000448226929,0.5333999991416931,-0.0843999981880188,-0.9922000169754028,0.42660000920295715,-0.0843999981880188,0.8500000238418579,0.7124999761581421,0,0.8500000238418579,0.6480000019073486,0.18559999763965607,1.108199954032898,0.7197999954223633,0.16760000586509705,1.0898000001907349,0.7675999999046326,0,1.2172000408172607,0.8722000122070312,0.12800000607967377,1.1937999725341797,0.8999999761581421,0,1.2792999744415283,1.0505000352859497,0.08829999715089798,1.2508000135421753,1.0605000257492065,0,1.3969000577926636,1.2000000476837158,0.07029999792575836,1.350000023841858,1.2000000476837158,0,0.8500000238418579,0.5062999725341797,0.2475000023841858,1.1483999490737915,0.6146000027656555,0.22349999845027924,1.2687000036239624,0.8108999729156494,0.17059999704360962,1.3422000408172607,1.0283000469207764,0.11779999732971191,1.5,1.2000000476837158,0.09380000084638596,0.8500000238418579,0.3644999861717224,0.18559999763965607,1.1886999607086182,0.5095000267028809,0.16760000586509705,1.3202999830245972,0.7497000098228455,0.12800000607967377,1.4049999713897705,1.0061999559402466,0.08829999715089798,1.6030999422073364,1.2000000476837158,0.07029999792575836,0.8500000238418579,0.30000001192092896,0,1.2070000171661377,0.4616999924182892,0,1.3437000513076782,0.7218999862670898,0,1.4335999488830566,0.9961000084877014,0,1.649999976158142,1.2000000476837158,0,0.8500000238418579,0.3644999861717224,-0.18559999763965607,1.1886999607086182,0.5095000267028809,-0.16760000586509705,1.3202999830245972,0.7497000098228455,-0.12800000607967377,1.4049999713897705,1.0061999559402466,-0.08829999715089798,1.6030999422073364,1.2000000476837158,-0.07029999792575836,0.8500000238418579,0.5062000155448914,-0.2475000023841858,1.1483999490737915,0.6146000027656555,-0.22349999845027924,1.2687000036239624,0.8108999729156494,-0.17059999704360962,1.3422000408172607,1.0283000469207764,-0.11779999732971191,1.5,1.2000000476837158,-0.09380000084638596,0.8500000238418579,0.6480000019073486,-0.18559999763965607,1.108199954032898,0.7197999954223633,-0.16760000586509705,1.2172000408172607,0.8722000122070312,-0.12800000607967377,1.2792999744415283,1.0505000352859497,-0.08829999715089798,1.3969000577926636,1.2000000476837158,-0.07029999792575836,1.4361000061035156,1.222100019454956,0.06589999794960022,1.3859000205993652,1.2210999727249146,0,1.4595999717712402,1.2297999858856201,0.056299999356269836,1.412500023841858,1.2280999422073364,0,1.4602999687194824,1.222499966621399,0.04659999907016754,1.420300006866455,1.2210999727249146,0,1.4312000274658203,1.2000000476837158,0.0421999990940094,1.399999976158142,1.2000000476837158,0,1.5465999841690063,1.2244000434875488,0.08789999783039093,1.5633000135421753,1.2333999872207642,0.07500000298023224,1.54830002784729,1.2257000207901,0.06210000067949295,1.5,1.2000000476837158,0.056299999356269836,1.656999945640564,1.226699948310852,0.06589999794960022,1.6669000387191772,1.2369999885559082,0.056299999356269836,1.6363999843597412,1.2288999557495117,0.04659999907016754,1.5687999725341797,1.2000000476837158,0.0421999990940094,1.707200050354004,1.2276999950408936,0,1.7141000032424927,1.238700032234192,0,1.6763999462127686,1.230299949645996,0,1.600000023841858,1.2000000476837158,0,1.656999945640564,1.226699948310852,-0.06589999794960022,1.6669000387191772,1.2369999885559082,-0.056299999356269836,1.6363999843597412,1.2288999557495117,-0.04659999907016754,1.5687999725341797,1.2000000476837158,-0.0421999990940094,1.5465999841690063,1.2244000434875488,-0.08789999783039093,1.5633000135421753,1.2333999872207642,-0.07500000298023224,1.54830002784729,1.2257000207901,-0.06210000067949295,1.5,1.2000000476837158,-0.056299999356269836,1.4361000061035156,1.222100019454956,-0.06589999794960022,1.4595999717712402,1.2297999858856201,-0.056299999356269836,1.4602999687194824,1.222499966621399,-0.04659999907016754,1.4312000274658203,1.2000000476837158,-0.0421999990940094,0.15719999372959137,1.5504000186920166,0.06700000166893005,0.17030000686645508,1.5504000186920166,0,0,1.5750000476837158,0,0.15000000596046448,1.4905999898910522,0.06390000134706497,0.16249999403953552,1.4905999898910522,0,0.09080000221729279,1.4168000221252441,0.03869999945163727,0.09839999675750732,1.4168000221252441,0,0.09229999780654907,1.350000023841858,0.03929999843239784,0.10000000149011612,1.350000023841858,0,0.12110000103712082,1.5504000186920166,0.12110000103712082,0.11550000309944153,1.4905999898910522,0.11550000309944153,0.06989999860525131,1.4168000221252441,0.06989999860525131,0.07100000232458115,1.350000023841858,0.07100000232458115,0.06700000166893005,1.5504000186920166,0.15719999372959137,0.06390000134706497,1.4905999898910522,0.15000000596046448,0.03869999945163727,1.4168000221252441,0.09080000221729279,0.03929999843239784,1.350000023841858,0.09229999780654907,0,1.5504000186920166,0.17030000686645508,0,1.4905999898910522,0.16249999403953552,0,1.4168000221252441,0.09839999675750732,0,1.350000023841858,0.10000000149011612,-0.06700000166893005,1.5504000186920166,0.15719999372959137,-0.06390000134706497,1.4905999898910522,0.15000000596046448,-0.03869999945163727,1.4168000221252441,0.09080000221729279,-0.03929999843239784,1.350000023841858,0.09229999780654907,-0.12110000103712082,1.5504000186920166,0.12110000103712082,-0.11550000309944153,1.4905999898910522,0.11550000309944153,-0.06989999860525131,1.4168000221252441,0.06989999860525131,-0.07100000232458115,1.350000023841858,0.07100000232458115,-0.15719999372959137,1.5504000186920166,0.06700000166893005,-0.15000000596046448,1.4905999898910522,0.06390000134706497,-0.09080000221729279,1.4168000221252441,0.03869999945163727,-0.09229999780654907,1.350000023841858,0.03929999843239784,-0.17030000686645508,1.5504000186920166,0,-0.16249999403953552,1.4905999898910522,0,-0.09839999675750732,1.4168000221252441,0,-0.10000000149011612,1.350000023841858,0,-0.15719999372959137,1.5504000186920166,-0.06700000166893005,-0.15000000596046448,1.4905999898910522,-0.06390000134706497,-0.09080000221729279,1.4168000221252441,-0.03869999945163727,-0.09229999780654907,1.350000023841858,-0.03929999843239784,-0.12110000103712082,1.5504000186920166,-0.12110000103712082,-0.11550000309944153,1.4905999898910522,-0.11550000309944153,-0.06989999860525131,1.4168000221252441,-0.06989999860525131,-0.07100000232458115,1.350000023841858,-0.07100000232458115,-0.06700000166893005,1.5504000186920166,-0.15719999372959137,-0.06390000134706497,1.4905999898910522,-0.15000000596046448,-0.03869999945163727,1.4168000221252441,-0.09080000221729279,-0.03929999843239784,1.350000023841858,-0.09229999780654907,0,1.5504000186920166,-0.17030000686645508,0,1.4905999898910522,-0.16249999403953552,0,1.4168000221252441,-0.09839999675750732,0,1.350000023841858,-0.10000000149011612,0.06700000166893005,1.5504000186920166,-0.15719999372959137,0.06390000134706497,1.4905999898910522,-0.15000000596046448,0.03869999945163727,1.4168000221252441,-0.09080000221729279,0.03929999843239784,1.350000023841858,-0.09229999780654907,0.12110000103712082,1.5504000186920166,-0.12110000103712082,0.11550000309944153,1.4905999898910522,-0.11550000309944153,0.06989999860525131,1.4168000221252441,-0.06989999860525131,0.07100000232458115,1.350000023841858,-0.07100000232458115,0.15719999372959137,1.5504000186920166,-0.06700000166893005,0.15000000596046448,1.4905999898910522,-0.06390000134706497,0.09080000221729279,1.4168000221252441,-0.03869999945163727,0.09229999780654907,1.350000023841858,-0.03929999843239784,0.21040000021457672,1.3055000305175781,0.08950000256299973,0.2281000018119812,1.3055000305175781,0,0.3804999887943268,1.274999976158142,0.16189999878406525,0.4124999940395355,1.274999976158142,0,0.53329998254776,1.2445000410079956,0.22689999639987946,0.5781000256538391,1.2445000410079956,0,0.5996000170707703,1.2000000476837158,0.2551000118255615,0.6499999761581421,1.2000000476837158,0,0.16200000047683716,1.3055000305175781,0.16200000047683716,0.2928999960422516,1.274999976158142,0.2928999960422516,0.4104999899864197,1.2445000410079956,0.4104999899864197,0.46149998903274536,1.2000000476837158,0.46149998903274536,0.08950000256299973,1.3055000305175781,0.21040000021457672,0.16189999878406525,1.274999976158142,0.3804999887943268,0.22689999639987946,1.2445000410079956,0.53329998254776,0.2551000118255615,1.2000000476837158,0.5996000170707703,0,1.3055000305175781,0.2281000018119812,0,1.274999976158142,0.4124999940395355,0,1.2445000410079956,0.5781000256538391,0,1.2000000476837158,0.6499999761581421,-0.08950000256299973,1.3055000305175781,0.21040000021457672,-0.16189999878406525,1.274999976158142,0.3804999887943268,-0.22689999639987946,1.2445000410079956,0.53329998254776,-0.2551000118255615,1.2000000476837158,0.5996000170707703,-0.16200000047683716,1.3055000305175781,0.16200000047683716,-0.2928999960422516,1.274999976158142,0.2928999960422516,-0.4104999899864197,1.2445000410079956,0.4104999899864197,-0.46149998903274536,1.2000000476837158,0.46149998903274536,-0.21040000021457672,1.3055000305175781,0.08950000256299973,-0.3804999887943268,1.274999976158142,0.16189999878406525,-0.53329998254776,1.2445000410079956,0.22689999639987946,-0.5996000170707703,1.2000000476837158,0.2551000118255615,-0.2281000018119812,1.3055000305175781,0,-0.4124999940395355,1.274999976158142,0,-0.5781000256538391,1.2445000410079956,0,-0.6499999761581421,1.2000000476837158,0,-0.21040000021457672,1.3055000305175781,-0.08950000256299973,-0.3804999887943268,1.274999976158142,-0.16189999878406525,-0.53329998254776,1.2445000410079956,-0.22689999639987946,-0.5996000170707703,1.2000000476837158,-0.2551000118255615,-0.16200000047683716,1.3055000305175781,-0.16200000047683716,-0.2928999960422516,1.274999976158142,-0.2928999960422516,-0.4104999899864197,1.2445000410079956,-0.4104999899864197,-0.46149998903274536,1.2000000476837158,-0.46149998903274536,-0.08950000256299973,1.3055000305175781,-0.21040000021457672,-0.16189999878406525,1.274999976158142,-0.3804999887943268,-0.22689999639987946,1.2445000410079956,-0.53329998254776,-0.2551000118255615,1.2000000476837158,-0.5996000170707703,0,1.3055000305175781,-0.2281000018119812,0,1.274999976158142,-0.4124999940395355,0,1.2445000410079956,-0.5781000256538391,0,1.2000000476837158,-0.6499999761581421,0.08950000256299973,1.3055000305175781,-0.21040000021457672,0.16189999878406525,1.274999976158142,-0.3804999887943268,0.22689999639987946,1.2445000410079956,-0.53329998254776,0.2551000118255615,1.2000000476837158,-0.5996000170707703,0.16200000047683716,1.3055000305175781,-0.16200000047683716,0.2928999960422516,1.274999976158142,-0.2928999960422516,0.4104999899864197,1.2445000410079956,-0.4104999899864197,0.46149998903274536,1.2000000476837158,-0.46149998903274536,0.21040000021457672,1.3055000305175781,-0.08950000256299973,0.3804999887943268,1.274999976158142,-0.16189999878406525,0.53329998254776,1.2445000410079956,-0.22689999639987946,0.5996000170707703,1.2000000476837158,-0.2551000118255615],"normals":[-0.9494920694323845,-0.2515364269786189,-0.1876012686200115,-0.96670001745224,-0.2558000087738037,0,-0.8930000066757202,-0.2563000023365021,-0.3698999881744385,-0.8934000134468079,0.25600001215934753,-0.36910000443458557,-0.9667999744415283,0.25540000200271606,0,-0.7260149722024023,0.6725622315424132,-0.14339562350586094,-0.08389999717473984,0.9958000183105469,-0.03550000116229057,-0.09210000187158585,0.9958000183105469,0,0.46895168053340897,0.8783596159888912,0.09256730699733487,0.6297000050544739,0.7318999767303467,0.2603999972343445,0.6819999814033508,0.7312999963760376,0,0.8131828855771891,0.5594560236122703,0.16044485734451933,0.8036999702453613,0.4934000074863434,0.3325999975204468,0.8702999949455261,0.4925000071525574,0,-0.8045241032084407,-0.25135180073328567,-0.5381108060843871,-0.6833999752998352,-0.2567000091075897,-0.6833999752998352,-0.6834999918937683,0.25609999895095825,-0.6834999918937683,-0.6154172153756186,0.6720670779897282,-0.41181002137110273,-0.0649000033736229,0.9958000183105469,-0.0649000033736229,0.39550647488952684,0.8794788320983019,0.2647482053035805,0.4814000129699707,0.7325000166893005,0.4814000129699707,0.6880720658725188,0.5607374353912905,0.4605761182657241,0.614799976348877,0.49399998784065247,0.614799976348877,-0.5381108060843871,-0.25135180073328567,-0.8045241032084407,-0.3698999881744385,-0.2563000023365021,-0.8930000066757202,-0.36910000443458557,0.25600001215934753,-0.8934000134468079,-0.41181002137110273,0.6720670779897282,-0.6154172153756186,-0.03550000116229057,0.9958000183105469,-0.08389999717473984,0.2647482053035805,0.8794788320983019,0.39550647488952684,0.2603999972343445,0.7318999767303467,0.6297000050544739,0.4605761182657241,0.5607374353912905,0.6880720658725188,0.3325999975204468,0.4934000074863434,0.8036999702453613,-0.1876012686200115,-0.2515364269786189,-0.9494920694323845,-0.00279999990016222,-0.2578999996185303,-0.9661999940872192,-0.0019000000320374966,0.2547000050544739,-0.9670000076293945,-0.14339562350586094,0.6725622315424132,-0.7260149722024023,-0.0003000000142492354,0.9957000017166138,-0.09229999780654907,0.09256730699733487,0.8783596159888912,0.46895168053340897,0,0.7312999963760376,0.6820999979972839,0.16044485734451933,0.5594560236122703,0.8131828855771891,0,0.4925000071525574,0.8702999949455261,0.17781356971082418,-0.2762617871652753,-0.94449021137275,0.3790999948978424,-0.35929998755455017,-0.8528000116348267,0.37709999084472656,0.14910000562667847,-0.9140999913215637,0.14395780863022883,0.6540767852077758,-0.7426033317906966,0.027499999850988388,0.9921000003814697,-0.1225999966263771,-0.09276555608813127,0.8766296536816158,0.47213875279382633,-0.26100000739097595,0.7268000245094299,0.6353999972343445,-0.16042337038321952,0.5590076148671953,0.8134954386813597,-0.33250001072883606,0.4925000071525574,0.8043000102043152,0.5155281298975289,-0.3849732031227696,-0.7655235986968341,0.6635000109672546,-0.4108000099658966,-0.6252999901771545,0.7127000093460083,0.07370000332593918,-0.6976000070571899,0.4638206739517661,0.5539062400248373,-0.691417572582934,0.09969999641180038,0.987500011920929,-0.12200000137090683,-0.2749668019071642,0.8694154310328366,0.4104997760424887,-0.48730000853538513,0.723800003528595,0.4885999858379364,-0.46145001001631164,0.5585924142572216,0.6892302974987636,-0.6151999831199646,0.4925999939441681,0.6154999732971191,0.7799397173089967,-0.38252671106395425,-0.495345690085779,0.8799999952316284,-0.3328999876976013,-0.33869999647140503,0.9172999858856201,0.1670999974012375,-0.36149999499320984,0.6935905336506715,0.5583449082267957,-0.4551737416497001,0.1136000007390976,0.9923999905586243,-0.04809999838471413,-0.41112556129251077,0.8694462651166909,0.2739324094125316,-0.6341000199317932,0.7275000214576721,0.26190000772476196,-0.6892193216130235,0.5588149346665281,0.46119691619624625,-0.804099977016449,0.4925999939441681,0.3327000141143799,0.940120720168391,-0.2953801644080805,-0.1700693681540597,0.96670001745224,-0.2556999921798706,0.010499999858438969,0.9674000144004822,0.2529999911785126,0.008100000210106373,0.7547291638439781,0.639985268644528,-0.1442315678392254,0.0934000015258789,0.9955999851226807,0.0013000000035390258,-0.4746532582851164,0.8752533177838288,0.09292961910888725,-0.682200014591217,0.7311999797821045,-0.0003000000142492354,-0.8137112475669765,0.5586976998809986,0.1604084964416667,-0.8702999949455261,0.4925000071525574,-0.00009999999747378752,0.9494920694323845,-0.2515364269786189,0.1876012686200115,0.8930000066757202,-0.2563000023365021,0.3698999881744385,0.8934000134468079,0.25600001215934753,0.36910000443458557,0.7260149722024023,0.6725622315424132,0.14339562350586094,0.08389999717473984,0.9958000183105469,0.03550000116229057,-0.46895168053340897,0.8783596159888912,-0.09256730699733487,-0.6297000050544739,0.7318999767303467,-0.2603999972343445,-0.8131828855771891,0.5594560236122703,-0.16044485734451933,-0.8036999702453613,0.4934000074863434,-0.3325999975204468,0.8045241032084407,-0.25135180073328567,0.5381108060843871,0.6833999752998352,-0.2567000091075897,0.6833999752998352,0.6834999918937683,0.25609999895095825,0.6834999918937683,0.6154172153756186,0.6720670779897282,0.41181002137110273,0.0649000033736229,0.9958000183105469,0.0649000033736229,-0.39550647488952684,0.8794788320983019,-0.2647482053035805,-0.4814000129699707,0.7325000166893005,-0.4814000129699707,-0.6880720658725188,0.5607374353912905,-0.4605761182657241,-0.614799976348877,0.49399998784065247,-0.614799976348877,0.5381108060843871,-0.25135180073328567,0.8045241032084407,0.3698999881744385,-0.2563000023365021,0.8930000066757202,0.36910000443458557,0.25600001215934753,0.8934000134468079,0.41181002137110273,0.6720670779897282,0.6154172153756186,0.03550000116229057,0.9958000183105469,0.08389999717473984,-0.2647482053035805,0.8794788320983019,-0.39550647488952684,-0.2603999972343445,0.7318999767303467,-0.6297000050544739,-0.4605761182657241,0.5607374353912905,-0.6880720658725188,-0.3325999975204468,0.4934000074863434,-0.8036999702453613,0.1876012686200115,-0.2515364269786189,0.9494920694323845,0,-0.2558000087738037,0.96670001745224,0,0.25540000200271606,0.9667999744415283,0.14339562350586094,0.6725622315424132,0.7260149722024023,0,0.9958000183105469,0.09210000187158585,-0.09256730699733487,0.8783596159888912,-0.46895168053340897,0,0.7312999963760376,-0.6819999814033508,-0.16044485734451933,0.5594560236122703,-0.8131828855771891,0,0.4925000071525574,-0.8702999949455261,-0.1876012686200115,-0.2515364269786189,0.9494920694323845,-0.3698999881744385,-0.2563000023365021,0.8930000066757202,-0.36910000443458557,0.25600001215934753,0.8934000134468079,-0.14339562350586094,0.6725622315424132,0.7260149722024023,-0.03550000116229057,0.9958000183105469,0.08389999717473984,0.09256730699733487,0.8783596159888912,-0.46895168053340897,0.2603999972343445,0.7318999767303467,-0.6297000050544739,0.16044485734451933,0.5594560236122703,-0.8131828855771891,0.3325999975204468,0.4934000074863434,-0.8036999702453613,-0.5381108060843871,-0.25135180073328567,0.8045241032084407,-0.6833999752998352,-0.2567000091075897,0.6833999752998352,-0.6834999918937683,0.25609999895095825,0.6834999918937683,-0.41181002137110273,0.6720670779897282,0.6154172153756186,-0.0649000033736229,0.9958000183105469,0.0649000033736229,0.2647482053035805,0.8794788320983019,-0.39550647488952684,0.4814000129699707,0.7325000166893005,-0.4814000129699707,0.4605761182657241,0.5607374353912905,-0.6880720658725188,0.614799976348877,0.49399998784065247,-0.614799976348877,-0.8045241032084407,-0.25135180073328567,0.5381108060843871,-0.8930000066757202,-0.2563000023365021,0.3698999881744385,-0.8934000134468079,0.25600001215934753,0.36910000443458557,-0.6154172153756186,0.6720670779897282,0.41181002137110273,-0.08389999717473984,0.9958000183105469,0.03550000116229057,0.39550647488952684,0.8794788320983019,-0.2647482053035805,0.6297000050544739,0.7318999767303467,-0.2603999972343445,0.6880720658725188,0.5607374353912905,-0.4605761182657241,0.8036999702453613,0.4934000074863434,-0.3325999975204468,-0.9494920694323845,-0.2515364269786189,0.1876012686200115,-0.7260149722024023,0.6725622315424132,0.14339562350586094,0.46895168053340897,0.8783596159888912,-0.09256730699733487,0.8131828855771891,0.5594560236122703,-0.16044485734451933,0.89170186696973,0.4170154906217081,0.175971193734185,0.8453999757766724,0.4034999907016754,0.3497999906539917,0.9153000116348267,0.4027000069618225,0,0.9085685972138349,0.37723739278916374,0.17942980142250198,0.8700000047683716,0.336899995803833,0.36000001430511475,0.9417999982833862,0.3361999988555908,0,0.9398615330526648,0.28672575430335634,0.18560344960982264,0.90420001745224,0.20579999685287476,0.3743000030517578,0.9786999821662903,0.2053000032901764,0,0.974048141581515,0.11941584930670929,0.19227603286929457,0.9218999743461609,-0.06639999896287918,0.38179999589920044,0.9977999925613403,-0.06620000302791595,0,0.7547722509117953,0.41841261984957023,0.5052224547703327,0.6467999815940857,0.4041000008583069,0.6467999815940857,0.7692780597174184,0.3783166747117983,0.5148667404993367,0.6657000184059143,0.33739998936653137,0.6657000184059143,0.7957963785535204,0.28785546405722773,0.5327732685613087,0.6919000148773193,0.2061000019311905,0.6919000148773193,0.8249659082595298,0.1199935753008835,0.5522977386302068,0.7055000066757202,-0.06650000065565109,0.7055000066757202,0.5052224547703327,0.41841261984957023,0.7547722509117953,0.3497999906539917,0.4034999907016754,0.8453999757766724,0.5148667404993367,0.3783166747117983,0.7692780597174184,0.36000001430511475,0.336899995803833,0.8700000047683716,0.5327732685613087,0.28785546405722773,0.7957963785535204,0.3743000030517578,0.20579999685287476,0.90420001745224,0.5522977386302068,0.1199935753008835,0.8249659082595298,0.38179999589920044,-0.06639999896287918,0.9218999743461609,0.175971193734185,0.4170154906217081,0.89170186696973,0,0.4027000069618225,0.9153000116348267,0.17942980142250198,0.37723739278916374,0.9085685972138349,0,0.3361999988555908,0.9417999982833862,0.18560344960982264,0.28672575430335634,0.9398615330526648,0,0.2053000032901764,0.9786999821662903,0.19227603286929457,0.11941584930670929,0.974048141581515,0,-0.06620000302791595,0.9977999925613403,-0.175971193734185,0.4170154906217081,0.89170186696973,-0.3497999906539917,0.4034999907016754,0.8453999757766724,-0.17942980142250198,0.37723739278916374,0.9085685972138349,-0.36000001430511475,0.336899995803833,0.8700000047683716,-0.18560344960982264,0.28672575430335634,0.9398615330526648,-0.3743000030517578,0.20579999685287476,0.90420001745224,-0.19227603286929457,0.11941584930670929,0.974048141581515,-0.38179999589920044,-0.06639999896287918,0.9218999743461609,-0.5052224547703327,0.41841261984957023,0.7547722509117953,-0.6467999815940857,0.4041000008583069,0.6467999815940857,-0.5148667404993367,0.3783166747117983,0.7692780597174184,-0.6657000184059143,0.33739998936653137,0.6657000184059143,-0.5327732685613087,0.28785546405722773,0.7957963785535204,-0.6919000148773193,0.2061000019311905,0.6919000148773193,-0.5522977386302068,0.1199935753008835,0.8249659082595298,-0.7055000066757202,-0.06650000065565109,0.7055000066757202,-0.7547722509117953,0.41841261984957023,0.5052224547703327,-0.8453999757766724,0.4034999907016754,0.3497999906539917,-0.7692780597174184,0.3783166747117983,0.5148667404993367,-0.8700000047683716,0.336899995803833,0.36000001430511475,-0.7957963785535204,0.28785546405722773,0.5327732685613087,-0.90420001745224,0.20579999685287476,0.3743000030517578,-0.8249659082595298,0.1199935753008835,0.5522977386302068,-0.9218999743461609,-0.06639999896287918,0.38179999589920044,-0.89170186696973,0.4170154906217081,0.175971193734185,-0.9153000116348267,0.4027000069618225,0,-0.9085685972138349,0.37723739278916374,0.17942980142250198,-0.9417999982833862,0.3361999988555908,0,-0.9398615330526648,0.28672575430335634,0.18560344960982264,-0.9786999821662903,0.2053000032901764,0,-0.974048141581515,0.11941584930670929,0.19227603286929457,-0.9977999925613403,-0.06620000302791595,0,-0.89170186696973,0.4170154906217081,-0.175971193734185,-0.8453999757766724,0.4034999907016754,-0.3497999906539917,-0.9085685972138349,0.37723739278916374,-0.17942980142250198,-0.8700000047683716,0.336899995803833,-0.36000001430511475,-0.9398615330526648,0.28672575430335634,-0.18560344960982264,-0.90420001745224,0.20579999685287476,-0.3743000030517578,-0.974048141581515,0.11941584930670929,-0.19227603286929457,-0.9218999743461609,-0.06639999896287918,-0.38179999589920044,-0.7547722509117953,0.41841261984957023,-0.5052224547703327,-0.6467999815940857,0.4041000008583069,-0.6467999815940857,-0.7692780597174184,0.3783166747117983,-0.5148667404993367,-0.6657000184059143,0.33739998936653137,-0.6657000184059143,-0.7957963785535204,0.28785546405722773,-0.5327732685613087,-0.6919000148773193,0.2061000019311905,-0.6919000148773193,-0.8249659082595298,0.1199935753008835,-0.5522977386302068,-0.7055000066757202,-0.06650000065565109,-0.7055000066757202,-0.5052224547703327,0.41841261984957023,-0.7547722509117953,-0.3497999906539917,0.4034999907016754,-0.8453999757766724,-0.5148667404993367,0.3783166747117983,-0.7692780597174184,-0.36000001430511475,0.336899995803833,-0.8700000047683716,-0.5327732685613087,0.28785546405722773,-0.7957963785535204,-0.3743000030517578,0.20579999685287476,-0.90420001745224,-0.5522977386302068,0.1199935753008835,-0.8249659082595298,-0.38179999589920044,-0.06639999896287918,-0.9218999743461609,-0.175971193734185,0.4170154906217081,-0.89170186696973,0,0.4027000069618225,-0.9153000116348267,-0.17942980142250198,0.37723739278916374,-0.9085685972138349,0,0.3361999988555908,-0.9417999982833862,-0.18560344960982264,0.28672575430335634,-0.9398615330526648,0,0.2053000032901764,-0.9786999821662903,-0.19227603286929457,0.11941584930670929,-0.974048141581515,0,-0.06620000302791595,-0.9977999925613403,0.175971193734185,0.4170154906217081,-0.89170186696973,0.3497999906539917,0.4034999907016754,-0.8453999757766724,0.17942980142250198,0.37723739278916374,-0.9085685972138349,0.36000001430511475,0.336899995803833,-0.8700000047683716,0.18560344960982264,0.28672575430335634,-0.9398615330526648,0.3743000030517578,0.20579999685287476,-0.90420001745224,0.19227603286929457,0.11941584930670929,-0.974048141581515,0.38179999589920044,-0.06639999896287918,-0.9218999743461609,0.5052224547703327,0.41841261984957023,-0.7547722509117953,0.6467999815940857,0.4041000008583069,-0.6467999815940857,0.5148667404993367,0.3783166747117983,-0.7692780597174184,0.6657000184059143,0.33739998936653137,-0.6657000184059143,0.5327732685613087,0.28785546405722773,-0.7957963785535204,0.6919000148773193,0.2061000019311905,-0.6919000148773193,0.5522977386302068,0.1199935753008835,-0.8249659082595298,0.7055000066757202,-0.06650000065565109,-0.7055000066757202,0.7547722509117953,0.41841261984957023,-0.5052224547703327,0.8453999757766724,0.4034999907016754,-0.3497999906539917,0.7692780597174184,0.3783166747117983,-0.5148667404993367,0.8700000047683716,0.336899995803833,-0.36000001430511475,0.7957963785535204,0.28785546405722773,-0.5327732685613087,0.90420001745224,0.20579999685287476,-0.3743000030517578,0.8249659082595298,0.1199935753008835,-0.5522977386302068,0.9218999743461609,-0.06639999896287918,-0.38179999589920044,0.89170186696973,0.4170154906217081,-0.175971193734185,0.9085685972138349,0.37723739278916374,-0.17942980142250198,0.9398615330526648,0.28672575430335634,-0.18560344960982264,0.974048141581515,0.11941584930670929,-0.19227603286929457,0.949837996375371,-0.25034021126228206,0.18745015141838892,0.8313999772071838,-0.43619999289512634,0.3441999852657318,0.9002000093460083,-0.43549999594688416,0,0.7776228852967049,-0.6097170963557023,0.15345263332507184,0.6735000014305115,-0.6847000122070312,0.2786000072956085,0.7296000123023987,-0.683899998664856,0,0.649169927361788,-0.7497580231546305,0.12822368004526918,0.6403999924659729,-0.7208999991416931,0.26489999890327454,0.6940000057220459,-0.7200000286102295,0,0.7309008795580111,-0.6670453977388504,0.14434106005134031,0.7329000234603882,-0.609000027179718,0.30320000648498535,0.7939000129699707,-0.6079999804496765,0,0.8044401026352556,-0.2509927077580416,0.5384039207922486,0.6360999941825867,-0.4368000030517578,0.6360999941825867,0.6577259751592633,-0.611316221873683,0.4401011457322989,0.5149999856948853,-0.6852999925613403,0.5149999856948853,0.5484574657551682,-0.7513248159850185,0.3670223823454051,0.48969998955726624,-0.7214000225067139,0.48969998955726624,0.6183258124965243,-0.6680727822223783,0.41394679278158897,0.5605999827384949,-0.6096000075340271,0.5605999827384949,0.5384039207922486,-0.2509927077580416,0.8044401026352556,0.3441999852657318,-0.43619999289512634,0.8313999772071838,0.44010114573229886,-0.6113162218736828,0.6577259751592632,0.2786000072956085,-0.6847000122070312,0.6735000014305115,0.3670223823454051,-0.7513248159850185,0.5484574657551682,0.26489999890327454,-0.7208999991416931,0.6403999924659729,0.41394679278158897,-0.6680727822223783,0.6183258124965243,0.30320000648498535,-0.609000027179718,0.7329000234603882,0.18745015141838892,-0.25034021126228206,0.949837996375371,0,-0.43549999594688416,0.9002000093460083,0.15345263332507184,-0.6097170963557023,0.7776228852967049,0,-0.683899998664856,0.7296000123023987,0.12822368004526918,-0.7497580231546305,0.649169927361788,0,-0.7200000286102295,0.6940000057220459,0.14434106005134031,-0.6670453977388504,0.7309008795580111,0,-0.6079999804496765,0.7939000129699707,-0.18745015141838892,-0.25034021126228206,0.949837996375371,-0.3441999852657318,-0.43619999289512634,0.8313999772071838,-0.15345263332507184,-0.6097170963557023,0.7776228852967049,-0.2786000072956085,-0.6847000122070312,0.6735000014305115,-0.12822368004526918,-0.7497580231546305,0.649169927361788,-0.26489999890327454,-0.7208999991416931,0.6403999924659729,-0.14434106005134031,-0.6670453977388504,0.7309008795580111,-0.30320000648498535,-0.609000027179718,0.7329000234603882,-0.5384039207922486,-0.2509927077580416,0.8044401026352556,-0.6360999941825867,-0.4368000030517578,0.6360999941825867,-0.44010114573229886,-0.6113162218736828,0.6577259751592632,-0.5149999856948853,-0.6852999925613403,0.5149999856948853,-0.3670223823454051,-0.7513248159850185,0.5484574657551682,-0.48969998955726624,-0.7214000225067139,0.48969998955726624,-0.41394679278158897,-0.6680727822223783,0.6183258124965243,-0.5605999827384949,-0.6096000075340271,0.5605999827384949,-0.8044401026352556,-0.2509927077580416,0.5384039207922486,-0.8313999772071838,-0.43619999289512634,0.3441999852657318,-0.6577259751592633,-0.611316221873683,0.4401011457322989,-0.6735000014305115,-0.6847000122070312,0.2786000072956085,-0.5484574657551682,-0.7513248159850185,0.3670223823454051,-0.6403999924659729,-0.7208999991416931,0.26489999890327454,-0.6183258124965243,-0.6680727822223783,0.41394679278158897,-0.7329000234603882,-0.609000027179718,0.30320000648498535,-0.949837996375371,-0.25034021126228206,0.18745015141838892,-0.9002000093460083,-0.43549999594688416,0,-0.7776228852967049,-0.6097170963557023,0.15345263332507184,-0.7296000123023987,-0.683899998664856,0,-0.649169927361788,-0.7497580231546305,0.12822368004526918,-0.6940000057220459,-0.7200000286102295,0,-0.7309008795580111,-0.6670453977388504,0.14434106005134031,-0.7939000129699707,-0.6079999804496765,0,-0.949837996375371,-0.25034021126228206,-0.18745015141838892,-0.8313999772071838,-0.43619999289512634,-0.3441999852657318,-0.7776228852967049,-0.6097170963557023,-0.15345263332507184,-0.6735000014305115,-0.6847000122070312,-0.2786000072956085,-0.649169927361788,-0.7497580231546305,-0.12822368004526918,-0.6403999924659729,-0.7208999991416931,-0.26489999890327454,-0.7309008795580111,-0.6670453977388504,-0.14434106005134031,-0.7329000234603882,-0.609000027179718,-0.30320000648498535,-0.8044401026352556,-0.2509927077580416,-0.5384039207922486,-0.6360999941825867,-0.4368000030517578,-0.6360999941825867,-0.6577259751592633,-0.611316221873683,-0.4401011457322989,-0.5149999856948853,-0.6852999925613403,-0.5149999856948853,-0.5484574657551682,-0.7513248159850185,-0.3670223823454051,-0.48969998955726624,-0.7214000225067139,-0.48969998955726624,-0.6183258124965243,-0.6680727822223783,-0.41394679278158897,-0.5605999827384949,-0.6096000075340271,-0.5605999827384949,-0.5384039207922486,-0.2509927077580416,-0.8044401026352556,-0.3441999852657318,-0.43619999289512634,-0.8313999772071838,-0.44010114573229886,-0.6113162218736828,-0.6577259751592632,-0.2786000072956085,-0.6847000122070312,-0.6735000014305115,-0.3670223823454051,-0.7513248159850185,-0.5484574657551682,-0.26489999890327454,-0.7208999991416931,-0.6403999924659729,-0.41394679278158897,-0.6680727822223783,-0.6183258124965243,-0.30320000648498535,-0.609000027179718,-0.7329000234603882,-0.18745015141838892,-0.25034021126228206,-0.949837996375371,0,-0.43549999594688416,-0.9002000093460083,-0.15345263332507184,-0.6097170963557023,-0.7776228852967049,0,-0.683899998664856,-0.7296000123023987,-0.12822368004526918,-0.7497580231546305,-0.649169927361788,0,-0.7200000286102295,-0.6940000057220459,-0.14434106005134031,-0.6670453977388504,-0.7309008795580111,0,-0.6079999804496765,-0.7939000129699707,0.18745015141838892,-0.25034021126228206,-0.949837996375371,0.3441999852657318,-0.43619999289512634,-0.8313999772071838,0.15345263332507184,-0.6097170963557023,-0.7776228852967049,0.2786000072956085,-0.6847000122070312,-0.6735000014305115,0.12822368004526918,-0.7497580231546305,-0.649169927361788,0.26489999890327454,-0.7208999991416931,-0.6403999924659729,0.14434106005134031,-0.6670453977388504,-0.7309008795580111,0.30320000648498535,-0.609000027179718,-0.7329000234603882,0.5384039207922486,-0.2509927077580416,-0.8044401026352556,0.6360999941825867,-0.4368000030517578,-0.6360999941825867,0.44010114573229886,-0.6113162218736828,-0.6577259751592632,0.5149999856948853,-0.6852999925613403,-0.5149999856948853,0.3670223823454051,-0.7513248159850185,-0.5484574657551682,0.48969998955726624,-0.7214000225067139,-0.48969998955726624,0.41394679278158897,-0.6680727822223783,-0.6183258124965243,0.5605999827384949,-0.6096000075340271,-0.5605999827384949,0.8044401026352556,-0.2509927077580416,-0.5384039207922486,0.8313999772071838,-0.43619999289512634,-0.3441999852657318,0.6577259751592633,-0.611316221873683,-0.4401011457322989,0.6735000014305115,-0.6847000122070312,-0.2786000072956085,0.5484574657551682,-0.7513248159850185,-0.3670223823454051,0.6403999924659729,-0.7208999991416931,-0.26489999890327454,0.6183258124965243,-0.6680727822223783,-0.41394679278158897,0.7329000234603882,-0.609000027179718,-0.30320000648498535,0.949837996375371,-0.25034021126228206,-0.18745015141838892,0.7776228852967049,-0.6097170963557023,-0.15345263332507184,0.649169927361788,-0.7497580231546305,-0.12822368004526918,0.7309008795580111,-0.6670453977388504,-0.14434106005134031,0.8387035316725441,-0.518815353093059,0.16555064287077373,0.576200008392334,-0.7817999720573425,0.23819999396800995,0.6238999962806702,-0.781499981880188,0,0.25616783727492487,-0.9653076593733025,0.050588159692990436,0.16359999775886536,-0.9842000007629395,0.06750000268220901,0.17730000615119934,-0.9842000007629395,0,0.07553202574448914,-0.9970317293860195,0.014921249426803469,0.04540000110864639,-0.9987999796867371,0.018699999898672104,0.04919999837875366,-0.9987999796867371,0,0.015316466366009897,-0.9998781173537434,0.003025937076820533,0,-1,0,0.7093394127545394,-0.5208703290912265,0.47490177698703395,0.44040000438690186,-0.7822999954223633,0.44040000438690186,0.21633036433079836,-0.9655254553343809,0.14478179640355507,0.12489999830722809,-0.9843000173568726,0.12489999830722809,0.06371717584979004,-0.9970565493361698,0.04264222001229404,0.034699998795986176,-0.9987999796867371,0.034699998795986176,0.01292177647076656,-0.9998790650449104,0.008653495117885388,0.47490177698703395,-0.5208703290912265,0.7093394127545394,0.23819999396800995,-0.7817999720573425,0.576200008392334,0.14478179640355507,-0.9655254553343809,0.21633036433079836,0.06750000268220901,-0.9842000007629395,0.16359999775886536,0.04264222001229404,-0.9970565493361698,0.06371717584979004,0.018699999898672104,-0.9987999796867371,0.04540000110864639,0.008653495117885388,-0.9998790650449104,0.01292177647076656,0.16555064287077373,-0.5188153530930589,0.838703531672544,0,-0.781499981880188,0.6238999962806702,0.050588159692990436,-0.9653076593733025,0.25616783727492487,0,-0.9842000007629395,0.17730000615119934,0.014921249426803469,-0.9970317293860195,0.07553202574448914,0,-0.9987999796867371,0.04919999837875366,0.003025937076820533,-0.9998781173537434,0.015316466366009897,-0.16555064287077373,-0.5188153530930589,0.838703531672544,-0.23819999396800995,-0.7817999720573425,0.576200008392334,-0.050588159692990436,-0.9653076593733025,0.25616783727492487,-0.06750000268220901,-0.9842000007629395,0.16359999775886536,-0.014921249426803469,-0.9970317293860195,0.07553202574448914,-0.018699999898672104,-0.9987999796867371,0.04540000110864639,-0.003025937076820533,-0.9998781173537434,0.015316466366009897,-0.47490177698703395,-0.5208703290912265,0.7093394127545394,-0.44040000438690186,-0.7822999954223633,0.44040000438690186,-0.14478179640355507,-0.9655254553343809,0.21633036433079836,-0.12489999830722809,-0.9843000173568726,0.12489999830722809,-0.04264222001229404,-0.9970565493361698,0.06371717584979004,-0.034699998795986176,-0.9987999796867371,0.034699998795986176,-0.008653495117885388,-0.9998790650449104,0.01292177647076656,-0.7093394127545394,-0.5208703290912265,0.47490177698703395,-0.576200008392334,-0.7817999720573425,0.23819999396800995,-0.21633036433079836,-0.9655254553343809,0.14478179640355507,-0.16359999775886536,-0.9842000007629395,0.06750000268220901,-0.06371717584979004,-0.9970565493361698,0.04264222001229404,-0.04540000110864639,-0.9987999796867371,0.018699999898672104,-0.01292177647076656,-0.9998790650449104,0.008653495117885388,-0.8387035316725441,-0.518815353093059,0.16555064287077373,-0.6238999962806702,-0.781499981880188,0,-0.25616783727492487,-0.9653076593733025,0.050588159692990436,-0.17730000615119934,-0.9842000007629395,0,-0.07553202574448914,-0.9970317293860195,0.014921249426803469,-0.04919999837875366,-0.9987999796867371,0,-0.015316466366009897,-0.9998781173537434,0.003025937076820533,-0.8387035316725441,-0.518815353093059,-0.16555064287077373,-0.576200008392334,-0.7817999720573425,-0.23819999396800995,-0.25616783727492487,-0.9653076593733025,-0.050588159692990436,-0.16359999775886536,-0.9842000007629395,-0.06750000268220901,-0.07553202574448914,-0.9970317293860195,-0.014921249426803469,-0.04540000110864639,-0.9987999796867371,-0.018699999898672104,-0.015316466366009897,-0.9998781173537434,-0.003025937076820533,-0.7093394127545394,-0.5208703290912265,-0.47490177698703395,-0.44040000438690186,-0.7822999954223633,-0.44040000438690186,-0.21633036433079836,-0.9655254553343809,-0.14478179640355507,-0.12489999830722809,-0.9843000173568726,-0.12489999830722809,-0.06371717584979004,-0.9970565493361698,-0.04264222001229404,-0.034699998795986176,-0.9987999796867371,-0.034699998795986176,-0.01292177647076656,-0.9998790650449104,-0.008653495117885388,-0.47490177698703395,-0.5208703290912265,-0.7093394127545394,-0.23819999396800995,-0.7817999720573425,-0.576200008392334,-0.14478179640355507,-0.9655254553343809,-0.21633036433079836,-0.06750000268220901,-0.9842000007629395,-0.16359999775886536,-0.04264222001229404,-0.9970565493361698,-0.06371717584979004,-0.018699999898672104,-0.9987999796867371,-0.04540000110864639,-0.008653495117885388,-0.9998790650449104,-0.01292177647076656,-0.16555064287077373,-0.5188153530930589,-0.838703531672544,0,-0.781499981880188,-0.6238999962806702,-0.050588159692990436,-0.9653076593733025,-0.25616783727492487,0,-0.9842000007629395,-0.17730000615119934,-0.014921249426803469,-0.9970317293860195,-0.07553202574448914,0,-0.9987999796867371,-0.04919999837875366,-0.003025937076820533,-0.9998781173537434,-0.015316466366009897,0.16555064287077373,-0.5188153530930589,-0.838703531672544,0.23819999396800995,-0.7817999720573425,-0.576200008392334,0.050588159692990436,-0.9653076593733025,-0.25616783727492487,0.06750000268220901,-0.9842000007629395,-0.16359999775886536,0.014921249426803469,-0.9970317293860195,-0.07553202574448914,0.018699999898672104,-0.9987999796867371,-0.04540000110864639,0.003025937076820533,-0.9998781173537434,-0.015316466366009897,0.47490177698703395,-0.5208703290912265,-0.7093394127545394,0.44040000438690186,-0.7822999954223633,-0.44040000438690186,0.14478179640355507,-0.9655254553343809,-0.21633036433079836,0.12489999830722809,-0.9843000173568726,-0.12489999830722809,0.04264222001229404,-0.9970565493361698,-0.06371717584979004,0.034699998795986176,-0.9987999796867371,-0.034699998795986176,0.008653495117885388,-0.9998790650449104,-0.01292177647076656,0.7093394127545394,-0.5208703290912265,-0.47490177698703395,0.576200008392334,-0.7817999720573425,-0.23819999396800995,0.21633036433079836,-0.9655254553343809,-0.14478179640355507,0.16359999775886536,-0.9842000007629395,-0.06750000268220901,0.06371717584979004,-0.9970565493361698,-0.04264222001229404,0.04540000110864639,-0.9987999796867371,-0.018699999898672104,0.01292177647076656,-0.9998790650449104,-0.008653495117885388,0.8387035316725441,-0.518815353093059,-0.16555064287077373,0.25616783727492487,-0.9653076593733025,-0.050588159692990436,0.07553202574448914,-0.9970317293860195,-0.014921249426803469,0.015316466366009897,-0.9998781173537434,-0.003025937076820533,0.007923619032407068,-0.9792649536215844,0.20242867106698378,0.007799999788403511,-1,-0.00019999999494757503,0.007000000216066837,-0.8125,0.5828999876976013,0.03610000014305115,-0.8373000025749207,0.5455999970436096,0.03909999877214432,-0.9991999864578247,-0.0010000000474974513,0.07294431178951416,-0.9771793893951642,0.19949829151861947,0.16179999709129333,-0.8104000091552734,0.5630000233650208,0.17949999868869781,-0.9836999773979187,-0.004399999976158142,0.30508737694808447,-0.9288212891929031,0.2102681744082329,0.48240000009536743,-0.5950999855995178,0.6427000164985657,0.6122999787330627,-0.7906000018119812,-0.010499999858438969,0.85242181732101,-0.45600261568139905,0.2558098118659036,0.7386999726295471,-0.11460000276565552,0.6642000079154968,0.9861999750137329,-0.1657000035047531,-0.0066999997943639755,0.005356055160839852,-0.5906212413030134,0.8069311383227207,-0.0019000000320374966,0.16210000216960907,0.9868000149726868,0.00279999990016222,0.017100000753998756,0.9998000264167786,0.050017369857379264,-0.5919248852555064,0.8044396763759266,0.010499999858438969,0.07339999824762344,0.9972000122070312,0.19813039646486702,-0.5271562130528779,0.8263477918143327,-0.06599999964237213,0.13009999692440033,0.989300012588501,0.4449202026559152,-0.20623851513417835,0.8714996776498938,-0.09440000355243683,0.016599999740719795,0.9954000115394592,-0.005868425724113912,0.5911289942558654,0.8065556854486675,-0.009200000204145908,0.8715000152587891,0.4902999997138977,-0.04859999939799309,0.8406000137329102,0.5394999980926514,-0.0565568733345604,0.5892386602454603,0.8059771221013369,-0.2232999950647354,0.8029000163078308,0.5526999831199646,-0.21826903582935248,0.5064932454046728,0.8341601886673605,-0.5964000225067139,0.5600000023841858,0.5751000046730042,-0.4519125123063575,0.18097256755074448,0.8735124561304479,-0.8033000230789185,0.0681999996304512,0.5916000008583069,-0.010227406140092809,0.9792477063934721,0.20240881820407414,-0.010599999688565731,0.9998999834060669,0.00009999999747378752,-0.058800000697374344,0.9983000159263611,0.000699999975040555,-0.1003582147149349,0.9740903926657386,0.2026724837158167,-0.2806999981403351,0.9598000049591064,0.0032999999821186066,-0.4107606469303811,0.8829429191860411,0.22734883415704424,-0.7497000098228455,0.6617000102996826,0.00430000014603138,-0.905303034236947,0.33387590683454604,0.26258959430409023,-0.9973999857902527,0.07270000129938126,0.002099999925121665,-0.010227406140092809,0.9792477063934721,-0.20240881820407414,-0.008799999952316284,0.8715000152587891,-0.4902999997138977,-0.04650000110268593,0.8411999940872192,-0.5388000011444092,-0.1003582147149349,0.9740903926657386,-0.2026724837158167,-0.21789999306201935,0.8068000078201294,-0.5491999983787537,-0.4107606469303811,0.8829429191860411,-0.22734883415704424,-0.5972999930381775,0.5600000023841858,-0.5741000175476074,-0.905303034236947,0.33387590683454604,-0.26258959430409023,-0.8040000200271606,0.06289999932050705,-0.5913000106811523,-0.005868425724113912,0.5911289942558654,-0.8065556854486675,-0.0017999999690800905,0.16169999539852142,-0.9868000149726868,0.0020000000949949026,0.014600000344216824,-0.9998999834060669,-0.0565568733345604,0.5892386602454603,-0.8059771221013369,0.009200000204145908,0.060100000351667404,-0.998199999332428,-0.21826903582935248,0.5064932454046728,-0.8341601886673605,-0.059300001710653305,0.11389999836683273,-0.9916999936103821,-0.4519125123063575,0.18097256755074448,-0.8735124561304479,-0.0869000032544136,0.012299999594688416,-0.9961000084877014,0.005356055160839852,-0.5906212413030134,-0.8069311383227207,0.006399999838322401,-0.8123999834060669,-0.5831000208854675,0.033799998462200165,-0.8374999761581421,-0.5454000234603882,0.050017369857379264,-0.5919248852555064,-0.8044396763759266,0.15710000693798065,-0.8119000196456909,-0.5622000098228455,0.19813039646486702,-0.5271562130528779,-0.8263477918143327,0.4844000041484833,-0.5893999934196472,-0.6464999914169312,0.4449202026559152,-0.20623851513417835,-0.8714996776498938,0.7389000058174133,-0.10130000114440918,-0.6661999821662903,0.007923619032407068,-0.9792649536215844,-0.20242867106698378,0.07294431178951416,-0.9771793893951642,-0.19949829151861947,0.30508737694808447,-0.9288212891929031,-0.2102681744082329,0.85242181732101,-0.45600261568139905,-0.2558098118659036,0.9478292644663923,0.18220680595344424,0.2615728680221666,0.725600004196167,0.25940001010894775,0.6373999714851379,0.9465000033378601,0.32269999384880066,-0.0034000000450760126,0.8600566042901111,0.44406573291460566,0.25121357898803404,0.6459000110626221,0.4620000123977661,0.607699990272522,0.8258000016212463,0.5638999938964844,-0.007499999832361937,0.722097468072962,0.6564257510605728,0.21835860401454446,0.5315999984741211,0.6366999745368958,0.5586000084877014,0.6499999761581421,0.7598999738693237,-0.006899999920278788,0.5200506551893511,0.8306365796457171,0.1989728338029867,0.42500001192092896,0.6816999912261963,0.5954999923706055,0.5324000120162964,0.8464999794960022,-0.005200000014156103,0.4781972352408055,0.09361119253153362,0.8732493050904043,-0.04960000142455101,-0.01979999989271164,0.9986000061035156,0.4393956565632051,0.2449654752923344,0.8642472868966327,-0.03779999911785126,-0.035599999129772186,0.9986000061035156,0.39562746673558924,0.3918378901601171,0.830627458852191,-0.03790000081062317,-0.0364999994635582,0.9986000061035156,0.3039318735441624,0.5084492756925236,0.8056703732244866,-0.1688999980688095,-0.29789999127388,0.9394999742507935,-0.47742285385863215,-0.09515362565485244,0.8735062713788696,-0.7422999739646912,-0.29919999837875366,0.5995000004768372,-0.42856464276720363,-0.26014738661504994,0.8652489145946263,-0.6195999979972839,-0.5293999910354614,0.5795000195503235,-0.3729119034765285,-0.40703367257705336,0.8338227039568712,-0.4837000072002411,-0.6858000159263611,0.5437999963760376,-0.2896259899317443,-0.5099064991908379,0.8100074987547963,-0.44530001282691956,-0.7943999767303467,0.4131999909877777,-0.9462576942087682,-0.19013883790828634,0.26161727479199826,-0.9265000224113464,-0.37630000710487366,0.0020000000949949026,-0.8154980530103969,-0.5208357818286896,0.25237474894123124,-0.7538999915122986,-0.6570000052452087,0.00430000014603138,-0.6370197706643513,-0.7377648710591707,0.22340279052371467,-0.5662000179290771,-0.8241999745368958,0.0035000001080334187,-0.4721523712289914,-0.8571632880733152,0.2057747212905012,-0.48179998993873596,-0.8762999773025513,0.0019000000320374966,-0.9462576942087682,-0.19013883790828634,-0.26161727479199826,-0.744700014591217,-0.29440000653266907,-0.5989999771118164,-0.8154980530103969,-0.5208357818286896,-0.25237474894123124,-0.6219000220298767,-0.5281000137329102,-0.5781999826431274,-0.6370197706643513,-0.7377648710591707,-0.22340279052371467,-0.4812000095844269,-0.6883000135421753,-0.5428000092506409,-0.4721523712289914,-0.8571632880733152,-0.2057747212905012,-0.43810001015663147,-0.796999990940094,-0.4156999886035919,-0.47742285385863215,-0.09515362565485244,-0.8735062713788696,-0.04430000111460686,-0.017100000753998756,-0.9988999962806702,-0.42856464276720363,-0.26014738661504994,-0.8652489145946263,-0.026200000196695328,-0.028200000524520874,-0.9993000030517578,-0.3729119034765285,-0.40703367257705336,-0.8338227039568712,-0.025299999862909317,-0.028300000354647636,-0.9993000030517578,-0.2896259899317443,-0.5099064991908379,-0.8100074987547963,-0.1574999988079071,-0.28940001130104065,-0.9441999793052673,0.4781972352408055,0.09361119253153362,-0.8732493050904043,0.7282000184059143,0.2524000108242035,-0.6370999813079834,0.4393956565632051,0.2449654752923344,-0.8642472868966327,0.6470999717712402,0.45969998836517334,-0.608299970626831,0.39562746673558924,0.3918378901601171,-0.830627458852191,0.5230000019073486,0.6406999826431274,-0.5622000098228455,0.3039318735441624,0.5084492756925236,-0.8056703732244866,0.4099999964237213,0.6829000115394592,-0.6047000288963318,0.9478292644663923,0.18220680595344424,-0.2615728680221666,0.8600566042901111,0.44406573291460566,-0.25121357898803404,0.722097468072962,0.6564257510605728,-0.21835860401454446,0.5200506551893511,0.8306365796457171,-0.1989728338029867,-0.22469814643301808,0.9251791464063235,0.30586645786099653,-0.23080000281333923,0.9729999899864197,-0.006500000134110451,-0.15289999544620514,0.6872000098228455,0.7102000117301941,-0.3167000114917755,0.6377999782562256,0.7020999789237976,-0.5489000082015991,0.8359000086784363,-0.001500000013038516,-0.7554159687089509,0.6012029555014725,0.260579585761839,-0.6011000275611877,0.4715000092983246,0.6452999711036682,-0.8756999969482422,0.4828000068664551,0.00989999994635582,-0.8962608931532676,0.34737987822914146,0.2757600979213887,-0.6359000205993652,0.44609999656677246,0.629800021648407,-0.8776000142097473,0.47909998893737793,0.019099999219179153,-0.7277298905609964,0.5697090903460769,0.38189102995635527,-0.435699999332428,0.6010000109672546,0.6700000166893005,-0.6962000131607056,0.7174000144004822,0.02449999935925007,-0.06782871702682407,0.42060539852275436,0.9047045727086881,0.11110000312328339,-0.08510000258684158,0.9901999831199646,0.2232999950647354,0.006500000134110451,0.9746999740600586,-0.2397267208313023,0.393118607711727,0.8876873659066373,0.19009999930858612,0.1550000011920929,0.9695000052452087,-0.3269428225776823,0.3199115704344181,0.8892496712774892,0.0052999998442828655,0.18950000405311584,0.9818999767303467,-0.24664197962623152,0.33059209207256196,0.9109756322455285,-0.011800000444054604,0.2467000037431717,0.968999981880188,0.21474893554810956,-0.3917948594999005,0.8946394149322995,0.34389999508857727,-0.7228000164031982,0.599399983882904,0.5724999904632568,-0.5677000284194946,0.5916000008583069,0.5724729014296546,-0.15995477083527343,0.8041699126526359,0.7874000072479248,-0.2565000057220459,0.5605000257492065,0.5277329114283671,-0.01038778030367959,0.8493468480048075,0.6470999717712402,-0.30640000104904175,0.6980999708175659,0.2802675583364272,-0.16422675916009252,0.9457693520726449,0.42750000953674316,-0.4993000030517578,0.753600001335144,0.39159473040680615,-0.8708293307411027,0.2971697222777314,0.4108999967575073,-0.9117000102996826,0.0013000000035390258,0.671500027179718,-0.7409999966621399,-0.0008999999845400453,0.8641399116222908,-0.44467986513529173,0.23563113267282512,0.921999990940094,-0.3871000111103058,-0.007300000172108412,0.9202642753550175,-0.2825130464997946,0.2707398050946873,0.8468999862670898,-0.5315999984741211,-0.013899999670684338,0.6553517759350307,-0.6669930474005048,0.35444932571270243,0.5358999967575073,-0.8442000150680542,-0.010499999858438969,0.39159473040680615,-0.8708293307411027,-0.2971697222777314,0.34119999408721924,-0.7228000164031982,-0.6008999943733215,0.5787000060081482,-0.5611000061035156,-0.5917999744415283,0.8641399116222908,-0.44467986513529173,-0.23563113267282512,0.7849000096321106,-0.25099998712539673,-0.5665000081062317,0.9202642753550175,-0.2825130464997946,-0.2707398050946873,0.6427000164985657,-0.30230000615119934,-0.7039999961853027,0.6553517759350307,-0.6669930474005048,-0.35444932571270243,0.4185999929904938,-0.5,-0.7580999732017517,0.21484877208785355,-0.39190315580348,-0.894568008372541,0.11580000072717667,-0.07909999787807465,-0.9901000261306763,0.23280000686645508,0.012600000016391277,-0.9724000096321106,0.5724729014296546,-0.15995477083527343,-0.8041699126526359,0.20669999718666077,0.15360000729560852,-0.9663000106811523,0.5277329114283671,-0.01038778030367959,-0.8493468480048075,0.02449999935925007,0.16140000522136688,-0.9865999817848206,0.2802675583364272,-0.16422675916009252,-0.9457693520726449,0.0034000000450760126,0.2110999971628189,-0.9775000214576721,-0.06785298017190203,0.4204621294822817,-0.9047693467138552,-0.13490000367164612,0.6875,-0.7135999798774719,-0.31949999928474426,0.6330999732017517,-0.7050999999046326,-0.2397267208313023,0.393118607711727,-0.8876873659066373,-0.6039000153541565,0.46140000224113464,-0.6499000191688538,-0.3269428225776823,0.3199115704344181,-0.8892496712774892,-0.6317999958992004,0.43720000982284546,-0.6401000022888184,-0.24664197962623152,0.33059209207256196,-0.9109756322455285,-0.4242999851703644,0.6126999855041504,-0.666700005531311,-0.22469814643301808,0.9251791464063235,-0.30586645786099653,-0.7554159687089509,0.6012029555014725,-0.260579585761839,-0.8962608931532676,0.34737987822914146,-0.2757600979213887,-0.7277298905609964,0.5697090903460769,-0.38189102995635527,-0.4581346849192706,0.8290808733288989,0.32052693483404915,-0.2599000036716461,0.7918999791145325,0.5525000095367432,-0.42579999566078186,0.9047999978065491,0.01080000028014183,-0.246185208210748,0.9533009586111941,0.17495749646473896,0.009499999694526196,0.9997000098228455,-0.021700000390410423,0.02199999988079071,0.9998000264167786,0.0015999999595806003,0.5588645441304007,0.6666977641221954,-0.49313741759106583,0.41019999980926514,0.3328999876976013,-0.8490999937057495,0.9995999932289124,0.02590000070631504,0.011599999852478504,0.6055606832628622,-0.6381346851214208,-0.47547910840666874,0.5414999723434448,-0.5486000180244446,-0.6370000243186951,0.7095999717712402,-0.7045999765396118,0.009700000286102295,-0.18304741452057446,0.5222477728722519,0.8329171073806239,0.046300001442432404,0.4551999866962433,0.88919997215271,-0.11108392464029737,0.8826749299553293,0.45666763593981924,-0.010700000450015068,0.9887999892234802,0.14890000224113464,0.07555097805976921,0.8081131026014043,-0.5841620178667426,-0.04439999908208847,0.6829000115394592,-0.7290999889373779,0.1865265036320752,-0.09254615883689393,-0.9780813217352277,0.12280000001192093,0.009200000204145908,-0.9923999905586243,0.20586843545090303,-0.21233995694823685,0.9552643246600484,0.48179998993873596,-0.18039999902248383,0.8575000166893005,0.11889342221748984,0.6798112027299875,0.723685762466156,0.4553000032901764,0.7366999983787537,0.4999000132083893,-0.10639578264983571,0.9027074902947484,-0.4168922215634223,-0.22050000727176666,0.9071999788284302,-0.35830000042915344,-0.16898371149150437,0.5156251093433941,-0.8399852688381916,-0.23589999973773956,0.6572999954223633,-0.7157999873161316,0.4290978121327757,-0.8521036390277623,0.29965723081299106,0.7281000018119812,-0.6852999925613403,-0.015599999576807022,0.7436424021085918,-0.3226049926539566,0.5855954204917456,0.888700008392334,0.45809999108314514,-0.016699999570846558,-0.2121657419347905,0.9655431048711052,-0.15070570853529733,-0.26010000705718994,0.9656000137329102,0.0007999999797903001,-0.3585820114624871,0.8925522270977658,-0.2734400536833164,-0.3716000020503998,0.9283999800682068,-0.004399999976158142,0.4290978121327757,-0.8521036390277623,-0.29965723081299106,0.48019999265670776,-0.17839999496936798,-0.8589000105857849,0.7436424021085918,-0.3226049926539566,-0.5855954204917456,0.48809999227523804,0.7167999744415283,-0.49790000915527344,-0.2121657419347905,0.9655431048711052,0.15070570853529733,-0.22200000286102295,0.9053999781608582,0.3619000017642975,-0.3585820114624871,0.8925522270977658,0.2734400536833164,-0.2354000061750412,0.6632000207901001,0.7105000019073486,0.20586843545090303,-0.21233995694823685,-0.9552643246600484,0.05869999900460243,0.4377000033855438,-0.8971999883651733,0.11889342221748984,0.6798112027299875,-0.723685762466156,0.0013000000035390258,0.9865000247955322,-0.164000004529953,-0.10639578264983571,0.9027074902947484,0.4168922215634223,-0.044199999421834946,0.6816999912261963,0.7303000092506409,-0.16898371149150437,0.5156251093433941,0.8399852688381916,0.1387999951839447,-0.03420000150799751,0.9897000193595886,-0.18304741452057446,0.5222477728722519,-0.8329171073806239,-0.258899986743927,0.7972000241279602,-0.5454000234603882,-0.11108392464029737,0.8826749299553293,-0.45666763593981924,0.012299999594688416,0.9997000098228455,0.019300000742077827,0.07555097805976921,0.8081131026014043,0.5841620178667426,0.3986000120639801,0.3549000024795532,0.8457000255584717,0.1865265036320752,-0.09254615883689393,0.9780813217352277,0.5375999808311462,-0.5813999772071838,0.6107000112533569,-0.4581346849192706,0.8290808733288989,-0.32052693483404915,-0.246185208210748,0.9533009586111941,-0.17495749646473896,0.5588645441304007,0.6666977641221954,0.49313741759106583,0.6055606832628622,-0.6381346851214208,0.47547910840666874,0.14291142372842203,0.9893409658361559,0.02794241017337756,0.7626000046730042,0.5649999976158142,0.3147999942302704,0.8245000243186951,0.5658000111579895,0,0,1,0,0.973458284214919,-0.12702375109433608,0.1903784009578562,0.8479999899864197,-0.39800000190734863,0.3499999940395355,0.9176999926567078,-0.39730000495910645,0,0.746764468277477,-0.6487991657292128,0.14629583544084326,0.8640999794006348,-0.35530000925064087,0.3564000129699707,0.9352999925613403,-0.3538999855518341,0.00009999999747378752,0.981025828088616,0.023627540802087,0.19243197223614078,0.7210000157356262,0.6255999803543091,0.29789999127388,0.7807000279426575,0.6248999834060669,0.00009999999747378752,0.12055154584358733,0.9894424773820601,0.08044195886956569,0.5834000110626221,0.5651999711990356,0.583299994468689,0.8246900772851533,-0.12832997885984362,0.5508336345515219,0.6485000252723694,-0.3986999988555908,0.6484000086784363,0.6311228589976491,-0.650668419605885,0.422273068734218,0.6608999967575073,-0.35589998960494995,0.6607000231742859,0.8301974890908831,0.023243924461984086,0.5569846039908094,0.5519000291824341,0.6252999901771545,0.551800012588501,0.08044195886956569,0.9894424773820601,0.12055154584358733,0.3147999942302704,0.5651000142097473,0.7626000046730042,0.5508336345515219,-0.12832997885984362,0.8246900772851533,0.3499999940395355,-0.39800000190734863,0.8479999899864197,0.422273068734218,-0.650668419605885,0.6311228589976491,0.3564999997615814,-0.35519999265670776,0.8641999959945679,0.5569846039908094,0.023243924461984086,0.8301974890908831,0.2980000078678131,0.6255000233650208,0.7210999727249146,0.02794241017337756,0.9893409658361559,0.14291142372842203,0,0.5658000111579895,0.8245000243186951,0.1903784009578562,-0.12702375109433608,0.973458284214919,0,-0.39730000495910645,0.9176999926567078,0.14629583544084326,-0.6487991657292128,0.746764468277477,-0.00009999999747378752,-0.3538999855518341,0.9352999925613403,0.19243197223614078,0.023627540802087,0.981025828088616,-0.00009999999747378752,0.6248999834060669,0.7807000279426575,-0.02794241017337756,0.9893409658361559,0.14291142372842203,-0.3147999942302704,0.5649999976158142,0.7626000046730042,-0.1903784009578562,-0.12702375109433608,0.973458284214919,-0.3499999940395355,-0.39800000190734863,0.8479999899864197,-0.14629583544084326,-0.6487991657292128,0.746764468277477,-0.3564000129699707,-0.35530000925064087,0.8640999794006348,-0.19243197223614078,0.023627540802087,0.981025828088616,-0.29789999127388,0.6255999803543091,0.7210000157356262,-0.08044195886956569,0.9894424773820601,0.12055154584358733,-0.583299994468689,0.5651999711990356,0.5834000110626221,-0.5508336345515219,-0.12832997885984362,0.8246900772851533,-0.6484000086784363,-0.3986999988555908,0.6485000252723694,-0.422273068734218,-0.650668419605885,0.6311228589976491,-0.6607000231742859,-0.35589998960494995,0.6608999967575073,-0.5569846039908094,0.023243924461984086,0.8301974890908831,-0.551800012588501,0.6252999901771545,0.5519000291824341,-0.12055154584358733,0.9894424773820601,0.08044195886956569,-0.7626000046730042,0.5651000142097473,0.3147999942302704,-0.8246900772851533,-0.12832997885984362,0.5508336345515219,-0.8479999899864197,-0.39800000190734863,0.3499999940395355,-0.6311228589976491,-0.650668419605885,0.422273068734218,-0.8641999959945679,-0.35519999265670776,0.3564999997615814,-0.8301974890908831,0.023243924461984086,0.5569846039908094,-0.7210999727249146,0.6255000233650208,0.2980000078678131,-0.14291142372842203,0.9893409658361559,0.02794241017337756,-0.8245000243186951,0.5658000111579895,0,-0.973458284214919,-0.12702375109433608,0.1903784009578562,-0.9176999926567078,-0.39730000495910645,0,-0.746764468277477,-0.6487991657292128,0.14629583544084326,-0.9352999925613403,-0.3538999855518341,-0.00009999999747378752,-0.981025828088616,0.023627540802087,0.19243197223614078,-0.7807000279426575,0.6248999834060669,-0.00009999999747378752,-0.14291142372842203,0.9893409658361559,-0.02794241017337756,-0.7626000046730042,0.5649999976158142,-0.3147999942302704,-0.973458284214919,-0.12702375109433608,-0.1903784009578562,-0.8479999899864197,-0.39800000190734863,-0.3499999940395355,-0.746764468277477,-0.6487991657292128,-0.14629583544084326,-0.8640999794006348,-0.35530000925064087,-0.3564000129699707,-0.981025828088616,0.023627540802087,-0.19243197223614078,-0.7210000157356262,0.6255999803543091,-0.29789999127388,-0.12055154584358733,0.9894424773820601,-0.08044195886956569,-0.5834000110626221,0.5651999711990356,-0.583299994468689,-0.8246900772851533,-0.12832997885984362,-0.5508336345515219,-0.6485000252723694,-0.3986999988555908,-0.6484000086784363,-0.6311228589976491,-0.650668419605885,-0.422273068734218,-0.6608999967575073,-0.35589998960494995,-0.6607000231742859,-0.8301974890908831,0.023243924461984086,-0.5569846039908094,-0.5519000291824341,0.6252999901771545,-0.551800012588501,-0.08044195886956569,0.9894424773820601,-0.12055154584358733,-0.3147999942302704,0.5651000142097473,-0.7626000046730042,-0.5508336345515219,-0.12832997885984362,-0.8246900772851533,-0.3499999940395355,-0.39800000190734863,-0.8479999899864197,-0.422273068734218,-0.650668419605885,-0.6311228589976491,-0.3564999997615814,-0.35519999265670776,-0.8641999959945679,-0.5569846039908094,0.023243924461984086,-0.8301974890908831,-0.2980000078678131,0.6255000233650208,-0.7210999727249146,-0.02794241017337756,0.9893409658361559,-0.14291142372842203,0,0.5658000111579895,-0.8245000243186951,-0.1903784009578562,-0.12702375109433608,-0.973458284214919,0,-0.39730000495910645,-0.9176999926567078,-0.14629583544084326,-0.6487991657292128,-0.746764468277477,0.00009999999747378752,-0.3538999855518341,-0.9352999925613403,-0.19243197223614078,0.023627540802087,-0.981025828088616,0.00009999999747378752,0.6248999834060669,-0.7807000279426575,0.02794241017337756,0.9893409658361559,-0.14291142372842203,0.3147999942302704,0.5649999976158142,-0.7626000046730042,0.1903784009578562,-0.12702375109433608,-0.973458284214919,0.3499999940395355,-0.39800000190734863,-0.8479999899864197,0.14629583544084326,-0.6487991657292128,-0.746764468277477,0.3564000129699707,-0.35530000925064087,-0.8640999794006348,0.19243197223614078,0.023627540802087,-0.981025828088616,0.29789999127388,0.6255999803543091,-0.7210000157356262,0.08044195886956569,0.9894424773820601,-0.12055154584358733,0.583299994468689,0.5651999711990356,-0.5834000110626221,0.5508336345515219,-0.12832997885984362,-0.8246900772851533,0.6484000086784363,-0.3986999988555908,-0.6485000252723694,0.422273068734218,-0.650668419605885,-0.6311228589976491,0.6607000231742859,-0.35589998960494995,-0.6608999967575073,0.5569846039908094,0.023243924461984086,-0.8301974890908831,0.551800012588501,0.6252999901771545,-0.5519000291824341,0.12055154584358733,0.9894424773820601,-0.08044195886956569,0.7626000046730042,0.5651000142097473,-0.3147999942302704,0.8246900772851533,-0.12832997885984362,-0.5508336345515219,0.8479999899864197,-0.39800000190734863,-0.3499999940395355,0.6311228589976491,-0.650668419605885,-0.422273068734218,0.8641999959945679,-0.35519999265670776,-0.3564999997615814,0.8301974890908831,0.023243924461984086,-0.5569846039908094,0.7210999727249146,0.6255000233650208,-0.2980000078678131,0.14291142372842203,0.9893409658361559,-0.02794241017337756,0.973458284214919,-0.12702375109433608,-0.1903784009578562,0.746764468277477,-0.6487991657292128,-0.14629583544084326,0.981025828088616,0.023627540802087,-0.19243197223614078,0.3275777539387444,0.9426132072697088,0.06459997372414784,0.21799999475479126,0.9718000292778015,0.09019999951124191,0.23659999668598175,0.9715999960899353,0,0.16309406473662258,0.9860835381794821,0.03224254610169826,0.15960000455379486,0.9850000143051147,0.06599999964237213,0.17309999465942383,0.9848999977111816,0,0.18099512760445208,0.982833937027952,0.035752146922720544,0.3504999876022339,0.9253000020980835,0.14470000565052032,0.3797000050544739,0.9251000285148621,0,0.5235316128339348,0.8457082744477594,0.10340292497841669,0.48559999465942383,0.8507000207901001,0.20149999856948853,0.5267000198364258,0.8500999808311462,0,0.27649957959472143,0.9430486026192276,0.18495219809957497,0.16660000383853912,0.9718000292778015,0.16660000383853912,0.13770263578303485,0.9861891086646662,0.09202731143305214,0.12189999967813492,0.9850000143051147,0.12189999967813492,0.15275889985296257,0.9829686899991592,0.1021629727300915,0.2676999866962433,0.925599992275238,0.2676999866962433,0.44245158541572593,0.8465383737127242,0.29598881126645027,0.37130001187324524,0.8510000109672546,0.37130001187324524,0.18495219809957497,0.9430486026192276,0.27649957959472143,0.09019999951124191,0.9718000292778015,0.21799999475479126,0.09202731143305214,0.9861891086646662,0.13770263578303485,0.06599999964237213,0.9850000143051147,0.15960000455379486,0.1021629727300915,0.9829686899991592,0.15275889985296257,0.14470000565052032,0.9253000020980835,0.3504999876022339,0.29598881126645027,0.8465383737127242,0.44245158541572593,0.20149999856948853,0.8507000207901001,0.48559999465942383,0.06459997372414784,0.9426132072697088,0.3275777539387444,0,0.9715999960899353,0.23659999668598175,0.03224254610169826,0.9860835381794821,0.16309406473662258,0,0.9848999977111816,0.17309999465942383,0.035752146922720544,0.982833937027952,0.18099512760445208,0,0.9251000285148621,0.3797000050544739,0.1034029249784167,0.8457082744477595,0.5235316128339349,0,0.8500999808311462,0.5267000198364258,-0.06459997372414784,0.9426132072697088,0.3275777539387444,-0.09019999951124191,0.9718000292778015,0.21799999475479126,-0.03224254610169826,0.9860835381794821,0.16309406473662258,-0.06599999964237213,0.9850000143051147,0.15960000455379486,-0.035752146922720544,0.982833937027952,0.18099512760445208,-0.14470000565052032,0.9253000020980835,0.3504999876022339,-0.1034029249784167,0.8457082744477595,0.5235316128339349,-0.20149999856948853,0.8507000207901001,0.48559999465942383,-0.18495219809957497,0.9430486026192276,0.27649957959472143,-0.16660000383853912,0.9718000292778015,0.16660000383853912,-0.09202731143305214,0.9861891086646662,0.13770263578303485,-0.12189999967813492,0.9850000143051147,0.12189999967813492,-0.1021629727300915,0.9829686899991592,0.15275889985296257,-0.2676999866962433,0.925599992275238,0.2676999866962433,-0.29598881126645027,0.8465383737127242,0.44245158541572593,-0.37130001187324524,0.8510000109672546,0.37130001187324524,-0.27649957959472143,0.9430486026192276,0.18495219809957497,-0.21799999475479126,0.9718000292778015,0.09019999951124191,-0.13770263578303485,0.9861891086646662,0.09202731143305214,-0.15960000455379486,0.9850000143051147,0.06599999964237213,-0.15275889985296257,0.9829686899991592,0.1021629727300915,-0.3504999876022339,0.9253000020980835,0.14470000565052032,-0.44245158541572593,0.8465383737127242,0.29598881126645027,-0.48559999465942383,0.8507000207901001,0.20149999856948853,-0.3275777539387444,0.9426132072697088,0.06459997372414784,-0.23659999668598175,0.9715999960899353,0,-0.16309406473662258,0.9860835381794821,0.03224254610169826,-0.17309999465942383,0.9848999977111816,0,-0.18099512760445208,0.982833937027952,0.035752146922720544,-0.3797000050544739,0.9251000285148621,0,-0.5235316128339348,0.8457082744477594,0.10340292497841669,-0.5267000198364258,0.8500999808311462,0,-0.3275777539387444,0.9426132072697088,-0.06459997372414784,-0.21799999475479126,0.9718000292778015,-0.09019999951124191,-0.16309406473662258,0.9860835381794821,-0.03224254610169826,-0.15960000455379486,0.9850000143051147,-0.06599999964237213,-0.18099512760445208,0.982833937027952,-0.035752146922720544,-0.3504999876022339,0.9253000020980835,-0.14470000565052032,-0.5235316128339348,0.8457082744477594,-0.10340292497841669,-0.48559999465942383,0.8507000207901001,-0.20149999856948853,-0.27649957959472143,0.9430486026192276,-0.18495219809957497,-0.16660000383853912,0.9718000292778015,-0.16660000383853912,-0.13770263578303485,0.9861891086646662,-0.09202731143305214,-0.12189999967813492,0.9850000143051147,-0.12189999967813492,-0.15275889985296257,0.9829686899991592,-0.1021629727300915,-0.2676999866962433,0.925599992275238,-0.2676999866962433,-0.44245158541572593,0.8465383737127242,-0.29598881126645027,-0.37130001187324524,0.8510000109672546,-0.37130001187324524,-0.18495219809957497,0.9430486026192276,-0.27649957959472143,-0.09019999951124191,0.9718000292778015,-0.21799999475479126,-0.09202731143305214,0.9861891086646662,-0.13770263578303485,-0.06599999964237213,0.9850000143051147,-0.15960000455379486,-0.1021629727300915,0.9829686899991592,-0.15275889985296257,-0.14470000565052032,0.9253000020980835,-0.3504999876022339,-0.29598881126645027,0.8465383737127242,-0.44245158541572593,-0.20149999856948853,0.8507000207901001,-0.48559999465942383,-0.06459997372414784,0.9426132072697088,-0.3275777539387444,0,0.9715999960899353,-0.23659999668598175,-0.03224254610169826,0.9860835381794821,-0.16309406473662258,0,0.9848999977111816,-0.17309999465942383,-0.035752146922720544,0.982833937027952,-0.18099512760445208,0,0.9251000285148621,-0.3797000050544739,-0.1034029249784167,0.8457082744477595,-0.5235316128339349,0,0.8500999808311462,-0.5267000198364258,0.06459997372414784,0.9426132072697088,-0.3275777539387444,0.09019999951124191,0.9718000292778015,-0.21799999475479126,0.03224254610169826,0.9860835381794821,-0.16309406473662258,0.06599999964237213,0.9850000143051147,-0.15960000455379486,0.035752146922720544,0.982833937027952,-0.18099512760445208,0.14470000565052032,0.9253000020980835,-0.3504999876022339,0.1034029249784167,0.8457082744477595,-0.5235316128339349,0.20149999856948853,0.8507000207901001,-0.48559999465942383,0.18495219809957497,0.9430486026192276,-0.27649957959472143,0.16660000383853912,0.9718000292778015,-0.16660000383853912,0.09202731143305214,0.9861891086646662,-0.13770263578303485,0.12189999967813492,0.9850000143051147,-0.12189999967813492,0.1021629727300915,0.9829686899991592,-0.15275889985296257,0.2676999866962433,0.925599992275238,-0.2676999866962433,0.29598881126645027,0.8465383737127242,-0.44245158541572593,0.37130001187324524,0.8510000109672546,-0.37130001187324524,0.27649957959472143,0.9430486026192276,-0.18495219809957497,0.21799999475479126,0.9718000292778015,-0.09019999951124191,0.13770263578303485,0.9861891086646662,-0.09202731143305214,0.15960000455379486,0.9850000143051147,-0.06599999964237213,0.15275889985296257,0.9829686899991592,-0.1021629727300915,0.3504999876022339,0.9253000020980835,-0.14470000565052032,0.44245158541572593,0.8465383737127242,-0.29598881126645027,0.48559999465942383,0.8507000207901001,-0.20149999856948853,0.3275777539387444,0.9426132072697088,-0.06459997372414784,0.16309406473662258,0.9860835381794821,-0.03224254610169826,0.18099512760445208,0.982833937027952,-0.035752146922720544,0.5235316128339348,0.8457082744477594,-0.10340292497841669],"uvs":[[2,2,1.75,2,1.75,1.975000023841858,2,1.975000023841858,1.75,1.9500000476837158,2,1.9500000476837158,1.75,1.9249999523162842,2,1.9249999523162842,1.75,1.899999976158142,2,1.899999976158142,1.5,2,1.5,1.975000023841858,1.5,1.9500000476837158,1.5,1.9249999523162842,1.5,1.899999976158142,1.25,2,1.25,1.975000023841858,1.25,1.9500000476837158,1.25,1.9249999523162842,1.25,1.899999976158142,1,2,1,1.975000023841858,1,1.9500000476837158,1,1.9249999523162842,1,1.899999976158142,0.75,2,0.75,1.975000023841858,0.75,1.9500000476837158,0.75,1.9249999523162842,0.75,1.899999976158142,0.5,2,0.5,1.975000023841858,0.5,1.9500000476837158,0.5,1.9249999523162842,0.5,1.899999976158142,0.25,2,0.25,1.975000023841858,0.25,1.9500000476837158,0.25,1.9249999523162842,0.25,1.899999976158142,0,2,0,1.975000023841858,0,1.9500000476837158,0,1.9249999523162842,0,1.899999976158142,1.75,1.6749999523162842,2,1.6749999523162842,1.75,1.4500000476837158,2,1.4500000476837158,1.75,1.225000023841858,2,1.225000023841858,1.75,1,2,1,1.5,1.6749999523162842,1.5,1.4500000476837158,1.5,1.225000023841858,1.5,1,1.25,1.6749999523162842,1.25,1.4500000476837158,1.25,1.225000023841858,1.25,1,1,1.6749999523162842,1,1.4500000476837158,1,1.225000023841858,1,1,0.75,1.6749999523162842,0.75,1.4500000476837158,0.75,1.225000023841858,0.75,1,0.5,1.6749999523162842,0.5,1.4500000476837158,0.5,1.225000023841858,0.5,1,0.25,1.6749999523162842,0.25,1.4500000476837158,0.25,1.225000023841858,0.25,1,0,1.6749999523162842,0,1.4500000476837158,0,1.225000023841858,0,1,1.75,0.8500000238418579,2,0.8500000238418579,1.75,0.699999988079071,2,0.699999988079071,1.75,0.550000011920929,2,0.550000011920929,1.75,0.4000000059604645,2,0.4000000059604645,1.5,0.8500000238418579,1.5,0.699999988079071,1.5,0.550000011920929,1.5,0.4000000059604645,1.25,0.8500000238418579,1.25,0.699999988079071,1.25,0.550000011920929,1.25,0.4000000059604645,1,0.8500000238418579,1,0.699999988079071,1,0.550000011920929,1,0.4000000059604645,0.75,0.8500000238418579,0.75,0.699999988079071,0.75,0.550000011920929,0.75,0.4000000059604645,0.5,0.8500000238418579,0.5,0.699999988079071,0.5,0.550000011920929,0.5,0.4000000059604645,0.25,0.8500000238418579,0.25,0.699999988079071,0.25,0.550000011920929,0.25,0.4000000059604645,0,0.8500000238418579,0,0.699999988079071,0,0.550000011920929,0,0.4000000059604645,1.75,0.30000001192092896,2,0.30000001192092896,1.75,0.20000000298023224,2,0.20000000298023224,1.75,0.10000000149011612,2,0.10000000149011612,1.75,0,1.5,0.30000001192092896,1.5,0.20000000298023224,1.5,0.10000000149011612,1.5,0,1.25,0.30000001192092896,1.25,0.20000000298023224,1.25,0.10000000149011612,1.25,0,1,0.30000001192092896,1,0.20000000298023224,1,0.10000000149011612,1,0,0.75,0.30000001192092896,0.75,0.20000000298023224,0.75,0.10000000149011612,0.75,0,0.5,0.30000001192092896,0.5,0.20000000298023224,0.5,0.10000000149011612,0.5,0,0.25,0.30000001192092896,0.25,0.20000000298023224,0.25,0.10000000149011612,0.25,0,0,0.30000001192092896,0,0.20000000298023224,0,0.10000000149011612,0,0,0.875,1,0.875,0.875,1,0.875,0.875,0.75,1,0.75,0.875,0.625,1,0.625,0.875,0.5,1,0.5,0.75,0.875,0.75,0.75,0.75,0.625,0.75,0.5,0.625,1,0.625,0.875,0.625,0.75,0.625,0.625,0.625,0.5,0.5,0.875,0.5,0.75,0.5,0.625,0.5,0.5,0.375,1,0.375,0.875,0.375,0.75,0.375,0.625,0.375,0.5,0.25,0.875,0.25,0.75,0.25,0.625,0.25,0.5,0.125,1,0.125,0.875,0.125,0.75,0.125,0.625,0.125,0.5,0,0.875,0,0.75,0,0.625,0,0.5,0.875,0.375,1,0.375,0.875,0.25,1,0.25,0.875,0.125,1,0.125,0.875,0,0.75,0.375,0.75,0.25,0.75,0.125,0.625,0.375,0.625,0.25,0.625,0.125,0.625,0,0.5,0.375,0.5,0.25,0.5,0.125,0.375,0.375,0.375,0.25,0.375,0.125,0.375,0,0.25,0.375,0.25,0.25,0.25,0.125,0.125,0.375,0.125,0.25,0.125,0.125,0.125,0,0,0.375,0,0.25,0,0.125,0.625,0.22499999403953552,0.5,0.22499999403953552,0.625,0.44999998807907104,0.5,0.44999998807907104,0.625,0.675000011920929,0.5,0.675000011920929,0.625,0.8999999761581421,0.5,0.8999999761581421,0.75,0.22499999403953552,0.75,0.44999998807907104,0.75,0.675000011920929,0.75,0.8999999761581421,0.875,0.22499999403953552,0.875,0.44999998807907104,0.875,0.675000011920929,0.875,0.8999999761581421,1,0.22499999403953552,1,0.44999998807907104,1,0.675000011920929,1,0.8999999761581421,0.125,0.22499999403953552,0,0.22499999403953552,0.125,0.44999998807907104,0,0.44999998807907104,0.125,0.675000011920929,0,0.675000011920929,0.125,0.8999999761581421,0,0.8999999761581421,0.25,0.22499999403953552,0.25,0.44999998807907104,0.25,0.675000011920929,0.25,0.8999999761581421,0.375,0.22499999403953552,0.375,0.44999998807907104,0.375,0.675000011920929,0.375,0.8999999761581421,0.625,0.925000011920929,0.5,0.925000011920929,0.625,0.949999988079071,0.5,0.949999988079071,0.625,0.9750000238418579,0.5,0.9750000238418579,0.75,0.925000011920929,0.75,0.949999988079071,0.75,0.9750000238418579,0.875,0.925000011920929,0.875,0.949999988079071,0.875,0.9750000238418579,1,0.925000011920929,1,0.949999988079071,1,0.9750000238418579,0.125,0.925000011920929,0,0.925000011920929,0.125,0.949999988079071,0,0.949999988079071,0.125,0.9750000238418579,0,0.9750000238418579,0.25,0.925000011920929,0.25,0.949999988079071,0.25,0.9750000238418579,0.375,0.925000011920929,0.375,0.949999988079071,0.375,0.9750000238418579]],"faces":[56,0,1,2,0,1,2,0,1,2,3,56,0,2,3,0,2,3,0,1,3,4,56,3,2,4,3,2,4,5,4,3,6,56,3,4,5,3,4,5,5,4,6,7,56,5,4,6,5,4,6,8,7,6,9,56,5,6,7,5,6,7,8,7,9,10,56,7,6,8,7,6,8,11,10,9,12,56,7,8,9,7,8,9,11,10,12,13,56,1,10,11,1,10,11,14,2,15,16,56,1,11,2,1,11,2,14,2,16,3,56,2,11,12,2,11,12,17,3,16,18,56,2,12,4,2,12,4,17,3,18,6,56,4,12,13,4,12,13,19,6,18,20,56,4,13,6,4,13,6,19,6,20,9,56,6,13,14,6,13,14,21,9,20,22,56,6,14,8,6,14,8,21,9,22,12,56,10,15,16,10,15,16,23,15,24,25,56,10,16,11,10,16,11,23,15,25,16,56,11,16,17,11,16,17,26,16,25,27,56,11,17,12,11,17,12,26,16,27,18,56,12,17,18,12,17,18,28,18,27,29,56,12,18,13,12,18,13,28,18,29,20,56,13,18,19,13,18,19,30,20,29,31,56,13,19,14,13,19,14,30,20,31,22,56,15,20,21,15,20,21,32,24,33,34,56,15,21,16,15,21,16,32,24,34,25,56,16,21,22,16,21,22,35,25,34,36,56,16,22,17,16,22,17,35,25,36,27,56,17,22,23,17,22,23,37,27,36,38,56,17,23,18,17,23,18,37,27,38,29,56,18,23,24,18,23,24,39,29,38,40,56,18,24,19,18,24,19,39,29,40,31,56,20,25,26,20,25,26,41,33,42,43,56,20,26,21,20,26,21,41,33,43,34,56,21,26,27,21,26,27,44,34,43,45,56,21,27,22,21,27,22,44,34,45,36,56,22,27,28,22,27,28,46,36,45,47,56,22,28,23,22,28,23,46,36,47,38,56,23,28,29,23,28,29,48,38,47,49,56,23,29,24,23,29,24,48,38,49,40,56,25,30,31,25,30,31,50,42,51,52,56,25,31,26,25,31,26,50,42,52,43,56,26,31,32,26,31,32,53,43,52,54,56,26,32,27,26,32,27,53,43,54,45,56,27,32,33,27,32,33,55,45,54,56,56,27,33,28,27,33,28,55,45,56,47,56,28,33,34,28,33,34,57,47,56,58,56,28,34,29,28,34,29,57,47,58,49,56,30,35,36,30,35,36,59,51,60,61,56,30,36,31,30,36,31,59,51,61,52,56,31,36,37,31,36,37,62,52,61,63,56,31,37,32,31,37,32,62,52,63,54,56,32,37,38,32,37,38,64,54,63,65,56,32,38,33,32,38,33,64,54,65,56,56,33,38,39,33,38,39,66,56,65,67,56,33,39,34,33,39,34,66,56,67,58,56,35,40,41,35,40,41,68,60,69,70,56,35,41,36,35,41,36,68,60,70,61,56,36,41,42,36,41,42,71,61,70,72,56,36,42,37,36,42,37,71,61,72,63,56,37,42,43,37,42,43,73,63,72,74,56,37,43,38,37,43,38,73,63,74,65,56,38,43,44,38,43,44,75,65,74,76,56,38,44,39,38,44,39,75,65,76,67,56,40,45,46,0,1,2,77,69,78,79,56,40,46,41,0,2,3,77,69,79,70,56,41,46,47,3,2,4,80,70,79,81,56,41,47,42,3,4,5,80,70,81,72,56,42,47,48,5,4,6,82,72,81,83,56,42,48,43,5,6,7,82,72,83,74,56,43,48,49,7,6,8,84,74,83,85,56,43,49,44,7,8,9,84,74,85,76,56,45,50,51,1,10,11,86,78,87,88,56,45,51,46,1,11,2,86,78,88,79,56,46,51,52,2,11,12,89,79,88,90,56,46,52,47,2,12,4,89,79,90,81,56,47,52,53,4,12,13,91,81,90,92,56,47,53,48,4,13,6,91,81,92,83,56,48,53,54,6,13,14,93,83,92,94,56,48,54,49,6,14,8,93,83,94,85,56,50,55,56,10,15,16,95,87,96,97,56,50,56,51,10,16,11,95,87,97,88,56,51,56,57,11,16,17,98,88,97,99,56,51,57,52,11,17,12,98,88,99,90,56,52,57,58,12,17,18,100,90,99,101,56,52,58,53,12,18,13,100,90,101,92,56,53,58,59,13,18,19,102,92,101,103,56,53,59,54,13,19,14,102,92,103,94,56,55,60,61,15,20,21,104,96,105,106,56,55,61,56,15,21,16,104,96,106,97,56,56,61,62,16,21,22,107,97,106,108,56,56,62,57,16,22,17,107,97,108,99,56,57,62,63,17,22,23,109,99,108,110,56,57,63,58,17,23,18,109,99,110,101,56,58,63,64,18,23,24,111,101,110,112,56,58,64,59,18,24,19,111,101,112,103,56,60,65,66,20,25,26,113,105,114,115,56,60,66,61,20,26,21,113,105,115,106,56,61,66,67,21,26,27,116,106,115,117,56,61,67,62,21,27,22,116,106,117,108,56,62,67,68,22,27,28,118,108,117,119,56,62,68,63,22,28,23,118,108,119,110,56,63,68,69,23,28,29,120,110,119,121,56,63,69,64,23,29,24,120,110,121,112,56,65,70,71,25,30,31,122,114,123,124,56,65,71,66,25,31,26,122,114,124,115,56,66,71,72,26,31,32,125,115,124,126,56,66,72,67,26,32,27,125,115,126,117,56,67,72,73,27,32,33,127,117,126,128,56,67,73,68,27,33,28,127,117,128,119,56,68,73,74,28,33,34,129,119,128,130,56,68,74,69,28,34,29,129,119,130,121,56,70,75,76,30,35,36,131,123,132,133,56,70,76,71,30,36,31,131,123,133,124,56,71,76,77,31,36,37,134,124,133,135,56,71,77,72,31,37,32,134,124,135,126,56,72,77,78,32,37,38,136,126,135,137,56,72,78,73,32,38,33,136,126,137,128,56,73,78,79,33,38,39,138,128,137,139,56,73,79,74,33,39,34,138,128,139,130,56,75,0,3,35,40,41,140,132,1,4,56,75,3,76,35,41,36,140,132,4,133,56,76,3,5,36,41,42,141,133,4,7,56,76,5,77,36,42,37,141,133,7,135,56,77,5,7,37,42,43,142,135,7,10,56,77,7,78,37,43,38,142,135,10,137,56,78,7,9,38,43,44,143,137,10,13,56,78,9,79,38,44,39,143,137,13,139,56,9,8,80,9,8,45,144,13,12,145,56,9,80,81,9,45,46,144,13,145,146,56,81,80,82,46,45,47,147,146,145,148,56,81,82,83,46,47,48,147,146,148,149,56,83,82,84,48,47,49,150,149,148,151,56,83,84,85,48,49,50,150,149,151,152,56,85,84,86,50,49,51,153,152,151,154,56,85,86,87,50,51,52,153,152,154,155,56,8,14,88,8,14,53,156,12,22,157,56,8,88,80,8,53,45,156,12,157,145,56,80,88,89,45,53,54,158,145,157,159,56,80,89,82,45,54,47,158,145,159,148,56,82,89,90,47,54,55,160,148,159,161,56,82,90,84,47,55,49,160,148,161,151,56,84,90,91,49,55,56,162,151,161,163,56,84,91,86,49,56,51,162,151,163,154,56,14,19,92,14,19,57,164,22,31,165,56,14,92,88,14,57,53,164,22,165,157,56,88,92,93,53,57,58,166,157,165,167,56,88,93,89,53,58,54,166,157,167,159,56,89,93,94,54,58,59,168,159,167,169,56,89,94,90,54,59,55,168,159,169,161,56,90,94,95,55,59,60,170,161,169,171,56,90,95,91,55,60,56,170,161,171,163,56,19,24,96,19,24,61,172,31,40,173,56,19,96,92,19,61,57,172,31,173,165,56,92,96,97,57,61,62,174,165,173,175,56,92,97,93,57,62,58,174,165,175,167,56,93,97,98,58,62,63,176,167,175,177,56,93,98,94,58,63,59,176,167,177,169,56,94,98,99,59,63,64,178,169,177,179,56,94,99,95,59,64,60,178,169,179,171,56,24,29,100,24,29,65,180,40,49,181,56,24,100,96,24,65,61,180,40,181,173,56,96,100,101,61,65,66,182,173,181,183,56,96,101,97,61,66,62,182,173,183,175,56,97,101,102,62,66,67,184,175,183,185,56,97,102,98,62,67,63,184,175,185,177,56,98,102,103,63,67,68,186,177,185,187,56,98,103,99,63,68,64,186,177,187,179,56,29,34,104,29,34,69,188,49,58,189,56,29,104,100,29,69,65,188,49,189,181,56,100,104,105,65,69,70,190,181,189,191,56,100,105,101,65,70,66,190,181,191,183,56,101,105,106,66,70,71,192,183,191,193,56,101,106,102,66,71,67,192,183,193,185,56,102,106,107,67,71,72,194,185,193,195,56,102,107,103,67,72,68,194,185,195,187,56,34,39,108,34,39,73,196,58,67,197,56,34,108,104,34,73,69,196,58,197,189,56,104,108,109,69,73,74,198,189,197,199,56,104,109,105,69,74,70,198,189,199,191,56,105,109,110,70,74,75,200,191,199,201,56,105,110,106,70,75,71,200,191,201,193,56,106,110,111,71,75,76,202,193,201,203,56,106,111,107,71,76,72,202,193,203,195,56,39,44,112,39,44,77,204,67,76,205,56,39,112,108,39,77,73,204,67,205,197,56,108,112,113,73,77,78,206,197,205,207,56,108,113,109,73,78,74,206,197,207,199,56,109,113,114,74,78,79,208,199,207,209,56,109,114,110,74,79,75,208,199,209,201,56,110,114,115,75,79,80,210,201,209,211,56,110,115,111,75,80,76,210,201,211,203,56,44,49,116,9,8,45,212,76,85,213,56,44,116,112,9,45,46,212,76,213,205,56,112,116,117,46,45,47,214,205,213,215,56,112,117,113,46,47,48,214,205,215,207,56,113,117,118,48,47,49,216,207,215,217,56,113,118,114,48,49,50,216,207,217,209,56,114,118,119,50,49,51,218,209,217,219,56,114,119,115,50,51,52,218,209,219,211,56,49,54,120,8,14,53,220,85,94,221,56,49,120,116,8,53,45,220,85,221,213,56,116,120,121,45,53,54,222,213,221,223,56,116,121,117,45,54,47,222,213,223,215,56,117,121,122,47,54,55,224,215,223,225,56,117,122,118,47,55,49,224,215,225,217,56,118,122,123,49,55,56,226,217,225,227,56,118,123,119,49,56,51,226,217,227,219,56,54,59,124,14,19,57,228,94,103,229,56,54,124,120,14,57,53,228,94,229,221,56,120,124,125,53,57,58,230,221,229,231,56,120,125,121,53,58,54,230,221,231,223,56,121,125,126,54,58,59,232,223,231,233,56,121,126,122,54,59,55,232,223,233,225,56,122,126,127,55,59,60,234,225,233,235,56,122,127,123,55,60,56,234,225,235,227,56,59,64,128,19,24,61,236,103,112,237,56,59,128,124,19,61,57,236,103,237,229,56,124,128,129,57,61,62,238,229,237,239,56,124,129,125,57,62,58,238,229,239,231,56,125,129,130,58,62,63,240,231,239,241,56,125,130,126,58,63,59,240,231,241,233,56,126,130,131,59,63,64,242,233,241,243,56,126,131,127,59,64,60,242,233,243,235,56,64,69,132,24,29,65,244,112,121,245,56,64,132,128,24,65,61,244,112,245,237,56,128,132,133,61,65,66,246,237,245,247,56,128,133,129,61,66,62,246,237,247,239,56,129,133,134,62,66,67,248,239,247,249,56,129,134,130,62,67,63,248,239,249,241,56,130,134,135,63,67,68,250,241,249,251,56,130,135,131,63,68,64,250,241,251,243,56,69,74,136,29,34,69,252,121,130,253,56,69,136,132,29,69,65,252,121,253,245,56,132,136,137,65,69,70,254,245,253,255,56,132,137,133,65,70,66,254,245,255,247,56,133,137,138,66,70,71,256,247,255,257,56,133,138,134,66,71,67,256,247,257,249,56,134,138,139,67,71,72,258,249,257,259,56,134,139,135,67,72,68,258,249,259,251,56,74,79,140,34,39,73,260,130,139,261,56,74,140,136,34,73,69,260,130,261,253,56,136,140,141,69,73,74,262,253,261,263,56,136,141,137,69,74,70,262,253,263,255,56,137,141,142,70,74,75,264,255,263,265,56,137,142,138,70,75,71,264,255,265,257,56,138,142,143,71,75,76,266,257,265,267,56,138,143,139,71,76,72,266,257,267,259,56,79,9,81,39,44,77,268,139,13,146,56,79,81,140,39,77,73,268,139,146,261,56,140,81,83,73,77,78,269,261,146,149,56,140,83,141,73,78,74,269,261,149,263,56,141,83,85,74,78,79,270,263,149,152,56,141,85,142,74,79,75,270,263,152,265,56,142,85,87,75,79,80,271,265,152,155,56,142,87,143,75,80,76,271,265,155,267,56,87,86,144,52,51,81,272,155,154,273,56,87,144,145,52,81,82,272,155,273,274,56,145,144,146,82,81,83,275,274,273,276,56,145,146,147,82,83,84,275,274,276,277,56,147,146,148,84,83,85,278,277,276,279,56,147,148,149,84,85,86,278,277,279,280,56,149,148,150,86,85,87,281,280,279,282,56,149,150,151,86,87,88,281,280,282,283,56,86,91,152,51,56,89,284,154,163,285,56,86,152,144,51,89,81,284,154,285,273,56,144,152,153,81,89,90,286,273,285,287,56,144,153,146,81,90,83,286,273,287,276,56,146,153,154,83,90,91,288,276,287,289,56,146,154,148,83,91,85,288,276,289,279,56,148,154,155,85,91,92,290,279,289,291,56,148,155,150,85,92,87,290,279,291,282,56,91,95,156,56,60,93,292,163,171,293,56,91,156,152,56,93,89,292,163,293,285,56,152,156,157,89,93,94,294,285,293,295,56,152,157,153,89,94,90,294,285,295,287,56,153,157,158,90,94,95,296,287,295,297,56,153,158,154,90,95,91,296,287,297,289,56,154,158,159,91,95,96,298,289,297,299,56,154,159,155,91,96,92,298,289,299,291,56,95,99,160,60,64,97,300,171,179,301,56,95,160,156,60,97,93,300,171,301,293,56,156,160,161,93,97,98,302,293,301,303,56,156,161,157,93,98,94,302,293,303,295,56,157,161,162,94,98,99,304,295,303,305,56,157,162,158,94,99,95,304,295,305,297,56,158,162,163,95,99,100,306,297,305,307,56,158,163,159,95,100,96,306,297,307,299,56,99,103,164,64,68,101,308,179,187,309,56,99,164,160,64,101,97,308,179,309,301,56,160,164,165,97,101,102,310,301,309,311,56,160,165,161,97,102,98,310,301,311,303,56,161,165,166,98,102,103,312,303,311,313,56,161,166,162,98,103,99,312,303,313,305,56,162,166,167,99,103,104,314,305,313,315,56,162,167,163,99,104,100,314,305,315,307,56,103,107,168,68,72,105,316,187,195,317,56,103,168,164,68,105,101,316,187,317,309,56,164,168,169,101,105,106,318,309,317,319,56,164,169,165,101,106,102,318,309,319,311,56,165,169,170,102,106,107,320,311,319,321,56,165,170,166,102,107,103,320,311,321,313,56,166,170,171,103,107,108,322,313,321,323,56,166,171,167,103,108,104,322,313,323,315,56,107,111,172,72,76,109,324,195,203,325,56,107,172,168,72,109,105,324,195,325,317,56,168,172,173,105,109,110,326,317,325,327,56,168,173,169,105,110,106,326,317,327,319,56,169,173,174,106,110,111,328,319,327,329,56,169,174,170,106,111,107,328,319,329,321,56,170,174,175,107,111,112,330,321,329,331,56,170,175,171,107,112,108,330,321,331,323,56,111,115,176,76,80,113,332,203,211,333,56,111,176,172,76,113,109,332,203,333,325,56,172,176,177,109,113,114,334,325,333,335,56,172,177,173,109,114,110,334,325,335,327,56,173,177,178,110,114,115,336,327,335,337,56,173,178,174,110,115,111,336,327,337,329,56,174,178,179,111,115,116,338,329,337,339,56,174,179,175,111,116,112,338,329,339,331,56,115,119,180,52,51,81,340,211,219,341,56,115,180,176,52,81,82,340,211,341,333,56,176,180,181,82,81,83,342,333,341,343,56,176,181,177,82,83,84,342,333,343,335,56,177,181,182,84,83,85,344,335,343,345,56,177,182,178,84,85,86,344,335,345,337,56,178,182,183,86,85,87,346,337,345,347,56,178,183,179,86,87,88,346,337,347,339,56,119,123,184,51,56,89,348,219,227,349,56,119,184,180,51,89,81,348,219,349,341,56,180,184,185,81,89,90,350,341,349,351,56,180,185,181,81,90,83,350,341,351,343,56,181,185,186,83,90,91,352,343,351,353,56,181,186,182,83,91,85,352,343,353,345,56,182,186,187,85,91,92,354,345,353,355,56,182,187,183,85,92,87,354,345,355,347,56,123,127,188,56,60,93,356,227,235,357,56,123,188,184,56,93,89,356,227,357,349,56,184,188,189,89,93,94,358,349,357,359,56,184,189,185,89,94,90,358,349,359,351,56,185,189,190,90,94,95,360,351,359,361,56,185,190,186,90,95,91,360,351,361,353,56,186,190,191,91,95,96,362,353,361,363,56,186,191,187,91,96,92,362,353,363,355,56,127,131,192,60,64,97,364,235,243,365,56,127,192,188,60,97,93,364,235,365,357,56,188,192,193,93,97,98,366,357,365,367,56,188,193,189,93,98,94,366,357,367,359,56,189,193,194,94,98,99,368,359,367,369,56,189,194,190,94,99,95,368,359,369,361,56,190,194,195,95,99,100,370,361,369,371,56,190,195,191,95,100,96,370,361,371,363,56,131,135,196,64,68,101,372,243,251,373,56,131,196,192,64,101,97,372,243,373,365,56,192,196,197,97,101,102,374,365,373,375,56,192,197,193,97,102,98,374,365,375,367,56,193,197,198,98,102,103,376,367,375,377,56,193,198,194,98,103,99,376,367,377,369,56,194,198,199,99,103,104,378,369,377,379,56,194,199,195,99,104,100,378,369,379,371,56,135,139,200,68,72,105,380,251,259,381,56,135,200,196,68,105,101,380,251,381,373,56,196,200,201,101,105,106,382,373,381,383,56,196,201,197,101,106,102,382,373,383,375,56,197,201,202,102,106,107,384,375,383,385,56,197,202,198,102,107,103,384,375,385,377,56,198,202,203,103,107,108,386,377,385,387,56,198,203,199,103,108,104,386,377,387,379,56,139,143,204,72,76,109,388,259,267,389,56,139,204,200,72,109,105,388,259,389,381,56,200,204,205,105,109,110,390,381,389,391,56,200,205,201,105,110,106,390,381,391,383,56,201,205,206,106,110,111,392,383,391,393,56,201,206,202,106,111,107,392,383,393,385,56,202,206,207,107,111,112,394,385,393,395,56,202,207,203,107,112,108,394,385,395,387,56,143,87,145,76,80,113,396,267,155,274,56,143,145,204,76,113,109,396,267,274,389,56,204,145,147,109,113,114,397,389,274,277,56,204,147,205,109,114,110,397,389,277,391,56,205,147,149,110,114,115,398,391,277,280,56,205,149,206,110,115,111,398,391,280,393,56,206,149,151,111,115,116,399,393,280,283,56,206,151,207,111,116,112,399,393,283,395,56,151,150,208,88,87,117,400,283,282,401,56,151,208,209,88,117,118,400,283,401,402,56,209,208,210,118,117,119,403,402,401,404,56,209,210,211,118,119,120,403,402,404,405,56,211,210,212,120,119,121,406,405,404,407,56,211,212,213,120,121,122,406,405,407,408,56,213,212,214,122,121,123,409,408,407,410,56,150,155,215,87,92,124,411,282,291,412,56,150,215,208,87,124,117,411,282,412,401,56,208,215,216,117,124,125,413,401,412,414,56,208,216,210,117,125,119,413,401,414,404,56,210,216,217,119,125,126,415,404,414,416,56,210,217,212,119,126,121,415,404,416,407,56,212,217,214,121,126,127,417,407,416,410,56,155,159,218,92,96,128,418,291,299,419,56,155,218,215,92,128,124,418,291,419,412,56,215,218,219,124,128,129,420,412,419,421,56,215,219,216,124,129,125,420,412,421,414,56,216,219,220,125,129,130,422,414,421,423,56,216,220,217,125,130,126,422,414,423,416,56,217,220,214,126,130,131,424,416,423,410,56,159,163,221,96,100,132,425,299,307,426,56,159,221,218,96,132,128,425,299,426,419,56,218,221,222,128,132,133,427,419,426,428,56,218,222,219,128,133,129,427,419,428,421,56,219,222,223,129,133,134,429,421,428,430,56,219,223,220,129,134,130,429,421,430,423,56,220,223,214,130,134,135,431,423,430,410,56,163,167,224,100,104,136,432,307,315,433,56,163,224,221,100,136,132,432,307,433,426,56,221,224,225,132,136,137,434,426,433,435,56,221,225,222,132,137,133,434,426,435,428,56,222,225,226,133,137,138,436,428,435,437,56,222,226,223,133,138,134,436,428,437,430,56,223,226,214,134,138,139,438,430,437,410,56,167,171,227,104,108,140,439,315,323,440,56,167,227,224,104,140,136,439,315,440,433,56,224,227,228,136,140,141,441,433,440,442,56,224,228,225,136,141,137,441,433,442,435,56,225,228,229,137,141,142,443,435,442,444,56,225,229,226,137,142,138,443,435,444,437,56,226,229,214,138,142,143,445,437,444,410,56,171,175,230,108,112,144,446,323,331,447,56,171,230,227,108,144,140,446,323,447,440,56,227,230,231,140,144,145,448,440,447,449,56,227,231,228,140,145,141,448,440,449,442,56,228,231,232,141,145,146,450,442,449,451,56,228,232,229,141,146,142,450,442,451,444,56,229,232,214,142,146,147,452,444,451,410,56,175,179,233,112,116,148,453,331,339,454,56,175,233,230,112,148,144,453,331,454,447,56,230,233,234,144,148,149,455,447,454,456,56,230,234,231,144,149,145,455,447,456,449,56,231,234,235,145,149,150,457,449,456,458,56,231,235,232,145,150,146,457,449,458,451,56,232,235,214,146,150,151,459,451,458,410,56,179,183,236,88,87,117,460,339,347,461,56,179,236,233,88,117,118,460,339,461,454,56,233,236,237,118,117,119,462,454,461,463,56,233,237,234,118,119,120,462,454,463,456,56,234,237,238,120,119,121,464,456,463,465,56,234,238,235,120,121,122,464,456,465,458,56,235,238,214,122,121,123,466,458,465,410,56,183,187,239,87,92,124,467,347,355,468,56,183,239,236,87,124,117,467,347,468,461,56,236,239,240,117,124,125,469,461,468,470,56,236,240,237,117,125,119,469,461,470,463,56,237,240,241,119,125,126,471,463,470,472,56,237,241,238,119,126,121,471,463,472,465,56,238,241,214,121,126,127,473,465,472,410,56,187,191,242,92,96,128,474,355,363,475,56,187,242,239,92,128,124,474,355,475,468,56,239,242,243,124,128,129,476,468,475,477,56,239,243,240,124,129,125,476,468,477,470,56,240,243,244,125,129,130,478,470,477,479,56,240,244,241,125,130,126,478,470,479,472,56,241,244,214,126,130,131,480,472,479,410,56,191,195,245,96,100,132,481,363,371,482,56,191,245,242,96,132,128,481,363,482,475,56,242,245,246,128,132,133,483,475,482,484,56,242,246,243,128,133,129,483,475,484,477,56,243,246,247,129,133,134,485,477,484,486,56,243,247,244,129,134,130,485,477,486,479,56,244,247,214,130,134,135,487,479,486,410,56,195,199,248,100,104,136,488,371,379,489,56,195,248,245,100,136,132,488,371,489,482,56,245,248,249,132,136,137,490,482,489,491,56,245,249,246,132,137,133,490,482,491,484,56,246,249,250,133,137,138,492,484,491,493,56,246,250,247,133,138,134,492,484,493,486,56,247,250,214,134,138,139,494,486,493,410,56,199,203,251,104,108,140,495,379,387,496,56,199,251,248,104,140,136,495,379,496,489,56,248,251,252,136,140,141,497,489,496,498,56,248,252,249,136,141,137,497,489,498,491,56,249,252,253,137,141,142,499,491,498,500,56,249,253,250,137,142,138,499,491,500,493,56,250,253,214,138,142,143,501,493,500,410,56,203,207,254,108,112,144,502,387,395,503,56,203,254,251,108,144,140,502,387,503,496,56,251,254,255,140,144,145,504,496,503,505,56,251,255,252,140,145,141,504,496,505,498,56,252,255,256,141,145,146,506,498,505,507,56,252,256,253,141,146,142,506,498,507,500,56,253,256,214,142,146,147,508,500,507,410,56,207,151,209,112,116,148,509,395,283,402,56,207,209,254,112,148,144,509,395,402,503,56,254,209,211,144,148,149,510,503,402,405,56,254,211,255,144,149,145,510,503,405,505,56,255,211,213,145,149,150,511,505,405,408,56,255,213,256,145,150,146,511,505,408,507,56,256,213,214,146,150,151,512,507,408,410,56,257,258,259,64,152,153,513,514,515,516,56,257,259,260,64,153,154,513,514,516,517,56,260,259,261,154,153,155,518,517,516,519,56,260,261,262,154,155,156,518,517,519,520,56,262,261,263,156,155,157,521,520,519,522,56,262,263,264,156,157,158,521,520,522,523,56,264,263,265,158,157,159,524,523,522,525,56,264,265,266,158,159,160,524,523,525,526,56,258,267,268,152,68,161,527,515,528,529,56,258,268,259,152,161,153,527,515,529,516,56,259,268,269,153,161,162,530,516,529,531,56,259,269,261,153,162,155,530,516,531,519,56,261,269,270,155,162,163,532,519,531,533,56,261,270,263,155,163,157,532,519,533,522,56,263,270,271,157,163,164,534,522,533,535,56,263,271,265,157,164,159,534,522,535,525,56,267,272,273,68,165,166,536,528,537,538,56,267,273,268,68,166,161,536,528,538,529,56,268,273,274,161,166,167,539,529,538,540,56,268,274,269,161,167,162,539,529,540,531,56,269,274,275,162,167,168,541,531,540,542,56,269,275,270,162,168,163,541,531,542,533,56,270,275,276,163,168,169,543,533,542,544,56,270,276,271,163,169,164,543,533,544,535,56,272,277,278,165,72,170,545,537,546,547,56,272,278,273,165,170,166,545,537,547,538,56,273,278,279,166,170,171,548,538,547,549,56,273,279,274,166,171,167,548,538,549,540,56,274,279,280,167,171,172,550,540,549,551,56,274,280,275,167,172,168,550,540,551,542,56,275,280,281,168,172,173,552,542,551,553,56,275,281,276,168,173,169,552,542,553,544,56,277,282,283,72,174,175,554,546,555,556,56,277,283,278,72,175,170,554,546,556,547,56,278,283,284,170,175,176,557,547,556,558,56,278,284,279,170,176,171,557,547,558,549,56,279,284,285,171,176,177,559,549,558,560,56,279,285,280,171,177,172,559,549,560,551,56,280,285,286,172,177,178,561,551,560,562,56,280,286,281,172,178,173,561,551,562,553,56,282,287,288,174,76,179,563,555,564,565,56,282,288,283,174,179,175,563,555,565,556,56,283,288,289,175,179,180,566,556,565,567,56,283,289,284,175,180,176,566,556,567,558,56,284,289,290,176,180,181,568,558,567,569,56,284,290,285,176,181,177,568,558,569,560,56,285,290,291,177,181,182,570,560,569,571,56,285,291,286,177,182,178,570,560,571,562,56,287,292,293,76,183,184,572,564,573,574,56,287,293,288,76,184,179,572,564,574,565,56,288,293,294,179,184,185,575,565,574,576,56,288,294,289,179,185,180,575,565,576,567,56,289,294,295,180,185,186,577,567,576,578,56,289,295,290,180,186,181,577,567,578,569,56,290,295,296,181,186,187,579,569,578,580,56,290,296,291,181,187,182,579,569,580,571,56,292,257,260,183,80,188,581,573,514,517,56,292,260,293,183,188,184,581,573,517,574,56,293,260,262,184,188,189,582,574,517,520,56,293,262,294,184,189,185,582,574,520,576,56,294,262,264,185,189,190,583,576,520,523,56,294,264,295,185,190,186,583,576,523,578,56,295,264,266,186,190,191,584,578,523,526,56,295,266,296,186,191,187,584,578,526,580,56,266,265,297,160,159,192,585,526,525,586,56,266,297,298,160,192,193,585,526,586,587,56,298,297,299,193,192,194,588,587,586,589,56,298,299,300,193,194,195,588,587,589,590,56,300,299,301,195,194,196,591,590,589,592,56,300,301,302,195,196,197,591,590,592,593,56,302,301,303,197,196,198,594,593,592,595,56,302,303,115,197,198,135,594,593,595,596,56,265,271,304,159,164,199,597,525,535,598,56,265,304,297,159,199,192,597,525,598,586,56,297,304,305,192,199,200,599,586,598,600,56,297,305,299,192,200,194,599,586,600,589,56,299,305,306,194,200,201,601,589,600,602,56,299,306,301,194,201,196,601,589,602,592,56,301,306,307,196,201,139,603,592,602,604,56,301,307,303,196,139,198,603,592,604,595,56,271,276,308,164,169,202,605,535,544,606,56,271,308,304,164,202,199,605,535,606,598,56,304,308,309,199,202,203,607,598,606,608,56,304,309,305,199,203,200,607,598,608,600,56,305,309,310,200,203,204,609,600,608,610,56,305,310,306,200,204,201,609,600,610,602,56,306,310,311,201,204,205,611,602,610,612,56,306,311,307,201,205,139,611,602,612,604,56,276,281,312,169,173,206,613,544,553,614,56,276,312,308,169,206,202,613,544,614,606,56,308,312,313,202,206,207,615,606,614,616,56,308,313,309,202,207,203,615,606,616,608,56,309,313,314,203,207,208,617,608,616,618,56,309,314,310,203,208,204,617,608,618,610,56,310,314,315,204,208,143,619,610,618,620,56,310,315,311,204,143,205,619,610,620,612,56,281,286,316,173,178,209,621,553,562,622,56,281,316,312,173,209,206,621,553,622,614,56,312,316,317,206,209,210,623,614,622,624,56,312,317,313,206,210,207,623,614,624,616,56,313,317,318,207,210,211,625,616,624,626,56,313,318,314,207,211,208,625,616,626,618,56,314,318,319,208,211,212,627,618,626,628,56,314,319,315,208,212,143,627,618,628,620,56,286,291,320,178,182,213,629,562,571,630,56,286,320,316,178,213,209,629,562,630,622,56,316,320,321,209,213,214,631,622,630,632,56,316,321,317,209,214,210,631,622,632,624,56,317,321,322,210,214,215,633,624,632,634,56,317,322,318,210,215,211,633,624,634,626,56,318,322,323,211,215,147,635,626,634,636,56,318,323,319,211,147,212,635,626,636,628,56,291,296,324,182,187,216,637,571,580,638,56,291,324,320,182,216,213,637,571,638,630,56,320,324,325,213,216,217,639,630,638,640,56,320,325,321,213,217,214,639,630,640,632,56,321,325,326,214,217,218,641,632,640,642,56,321,326,322,214,218,215,641,632,642,634,56,322,326,327,215,218,219,643,634,642,644,56,322,327,323,215,219,147,643,634,644,636,56,296,266,298,187,191,220,645,580,526,587,56,296,298,324,187,220,216,645,580,587,638,56,324,298,300,216,220,221,646,638,587,590,56,324,300,325,216,221,217,646,638,590,640,56,325,300,302,217,221,222,647,640,590,593,56,325,302,326,217,222,218,647,640,593,642,56,326,302,115,218,222,151,648,642,593,596,56,326,115,327,218,151,219,648,642,596,644,56,328,329,330,143,205,223,649,650,651,652,56,328,330,331,143,223,224,649,650,652,653,56,331,330,332,224,223,225,654,653,652,655,56,331,332,333,224,225,226,654,653,655,656,56,333,332,334,226,225,227,657,656,655,658,56,333,334,335,226,227,228,657,656,658,659,56,335,334,336,228,227,229,660,659,658,661,56,335,336,337,228,229,230,660,659,661,662,56,329,338,339,205,139,231,663,651,664,665,56,329,339,330,205,231,223,663,651,665,652,56,330,339,340,223,231,232,666,652,665,667,56,330,340,332,223,232,225,666,652,667,655,56,332,340,341,225,232,233,668,655,667,669,56,332,341,334,225,233,227,668,655,669,658,56,334,341,342,227,233,234,670,658,669,671,56,334,342,336,227,234,229,670,658,671,661,56,338,343,344,139,198,235,672,664,673,674,56,338,344,339,139,235,231,672,664,674,665,56,339,344,345,231,235,236,675,665,674,676,56,339,345,340,231,236,232,675,665,676,667,56,340,345,346,232,236,237,677,667,676,678,56,340,346,341,232,237,233,677,667,678,669,56,341,346,347,233,237,238,679,669,678,680,56,341,347,342,233,238,234,679,669,680,671,56,343,348,349,198,135,239,681,673,682,683,56,343,349,344,198,239,235,681,673,683,674,56,344,349,350,235,239,240,684,674,683,685,56,344,350,345,235,240,236,684,674,685,676,56,345,350,351,236,240,241,686,676,685,687,56,345,351,346,236,241,237,686,676,687,678,56,346,351,352,237,241,242,688,678,687,689,56,346,352,347,237,242,238,688,678,689,680,56,348,353,354,151,219,243,690,682,691,692,56,348,354,349,151,243,244,690,682,692,683,56,349,354,355,244,243,245,693,683,692,694,56,349,355,350,244,245,246,693,683,694,685,56,350,355,356,246,245,247,695,685,694,696,56,350,356,351,246,247,248,695,685,696,687,56,351,356,357,248,247,249,697,687,696,698,56,351,357,352,248,249,250,697,687,698,689,56,353,358,359,219,147,251,699,691,700,701,56,353,359,354,219,251,243,699,691,701,692,56,354,359,360,243,251,252,702,692,701,703,56,354,360,355,243,252,245,702,692,703,694,56,355,360,361,245,252,253,704,694,703,705,56,355,361,356,245,253,247,704,694,705,696,56,356,361,362,247,253,254,706,696,705,707,56,356,362,357,247,254,249,706,696,707,698,56,358,363,364,147,212,255,708,700,709,710,56,358,364,359,147,255,251,708,700,710,701,56,359,364,365,251,255,256,711,701,710,712,56,359,365,360,251,256,252,711,701,712,703,56,360,365,366,252,256,257,713,703,712,714,56,360,366,361,252,257,253,713,703,714,705,56,361,366,367,253,257,258,715,705,714,716,56,361,367,362,253,258,254,715,705,716,707,56,363,328,331,212,143,224,717,709,650,653,56,363,331,364,212,224,255,717,709,653,710,56,364,331,333,255,224,226,718,710,653,656,56,364,333,365,255,226,256,718,710,656,712,56,365,333,335,256,226,228,719,712,656,659,56,365,335,366,256,228,257,719,712,659,714,56,366,335,337,257,228,230,720,714,659,662,56,366,337,367,257,230,258,720,714,662,716,56,337,336,368,230,229,259,721,662,661,722,56,337,368,369,230,259,260,721,662,722,723,56,369,368,370,260,259,261,724,723,722,725,56,369,370,371,260,261,262,724,723,725,726,56,371,370,372,262,261,263,727,726,725,728,56,371,372,373,262,263,264,727,726,728,729,56,373,372,374,264,263,165,730,729,728,731,56,373,374,375,264,165,72,730,729,731,732,56,336,342,376,229,234,265,733,661,671,734,56,336,376,368,229,265,259,733,661,734,722,56,368,376,377,259,265,266,735,722,734,736,56,368,377,370,259,266,261,735,722,736,725,56,370,377,378,261,266,267,737,725,736,738,56,370,378,372,261,267,263,737,725,738,728,56,372,378,379,263,267,68,739,728,738,740,56,372,379,374,263,68,165,739,728,740,731,56,342,347,380,234,238,268,741,671,680,742,56,342,380,376,234,268,265,741,671,742,734,56,376,380,381,265,268,269,743,734,742,744,56,376,381,377,265,269,266,743,734,744,736,56,377,381,382,266,269,270,745,736,744,746,56,377,382,378,266,270,267,745,736,746,738,56,378,382,383,267,270,152,747,738,746,748,56,378,383,379,267,152,68,747,738,748,740,56,347,352,384,238,242,271,749,680,689,750,56,347,384,380,238,271,268,749,680,750,742,56,380,384,385,268,271,272,751,742,750,752,56,380,385,381,268,272,269,751,742,752,744,56,381,385,386,269,272,273,753,744,752,754,56,381,386,382,269,273,270,753,744,754,746,56,382,386,387,270,273,64,755,746,754,756,56,382,387,383,270,64,152,755,746,756,748,56,352,357,388,250,249,274,757,689,698,758,56,352,388,384,250,274,275,757,689,758,750,56,384,388,389,275,274,276,759,750,758,760,56,384,389,385,275,276,277,759,750,760,752,56,385,389,390,277,276,278,761,752,760,762,56,385,390,386,277,278,279,761,752,762,754,56,386,390,391,279,278,183,763,754,762,764,56,386,391,387,279,183,80,763,754,764,756,56,357,362,392,249,254,280,765,698,707,766,56,357,392,388,249,280,274,765,698,766,758,56,388,392,393,274,280,281,767,758,766,768,56,388,393,389,274,281,276,767,758,768,760,56,389,393,394,276,281,282,769,760,768,770,56,389,394,390,276,282,278,769,760,770,762,56,390,394,395,278,282,76,771,762,770,772,56,390,395,391,278,76,183,771,762,772,764,56,362,367,396,254,258,283,773,707,716,774,56,362,396,392,254,283,280,773,707,774,766,56,392,396,397,280,283,284,775,766,774,776,56,392,397,393,280,284,281,775,766,776,768,56,393,397,398,281,284,285,777,768,776,778,56,393,398,394,281,285,282,777,768,778,770,56,394,398,399,282,285,174,779,770,778,780,56,394,399,395,282,174,76,779,770,780,772,56,367,337,369,258,230,260,781,716,662,723,56,367,369,396,258,260,283,781,716,723,774,56,396,369,371,283,260,262,782,774,723,726,56,396,371,397,283,262,284,782,774,726,776,56,397,371,373,284,262,264,783,776,726,729,56,397,373,398,284,264,285,783,776,729,778,56,398,373,375,285,264,72,784,778,729,732,56,398,375,399,285,72,174,784,778,732,780,56,400,401,402,155,156,64,785,786,787,788,56,401,400,403,156,155,159,789,787,786,790,56,401,403,404,156,159,160,789,787,790,791,56,404,403,405,160,159,194,792,791,790,793,56,404,405,406,160,194,195,792,791,793,794,56,406,405,407,195,194,198,795,794,793,796,56,406,407,408,195,198,135,795,794,796,797,56,409,400,402,162,155,152,798,799,786,788,56,400,409,410,155,162,164,800,786,799,801,56,400,410,403,155,164,159,800,786,801,790,56,403,410,411,159,164,200,802,790,801,803,56,403,411,405,159,200,194,802,790,803,793,56,405,411,412,194,200,139,804,793,803,805,56,405,412,407,194,139,198,804,793,805,796,56,413,409,402,167,162,68,806,807,799,788,56,409,413,414,162,167,169,808,799,807,809,56,409,414,410,162,169,164,808,799,809,801,56,410,414,415,164,169,203,810,801,809,811,56,410,415,411,164,203,200,810,801,811,803,56,411,415,416,200,203,205,812,803,811,813,56,411,416,412,200,205,139,812,803,813,805,56,417,413,402,171,167,165,814,815,807,788,56,413,417,418,167,171,173,816,807,815,817,56,413,418,414,167,173,169,816,807,817,809,56,414,418,419,169,173,207,818,809,817,819,56,414,419,415,169,207,203,818,809,819,811,56,415,419,420,203,207,143,820,811,819,821,56,415,420,416,203,143,205,820,811,821,813,56,421,417,402,176,171,72,822,823,815,788,56,417,421,422,171,176,178,824,815,823,825,56,417,422,418,171,178,173,824,815,825,817,56,418,422,423,173,178,210,826,817,825,827,56,418,423,419,173,210,207,826,817,827,819,56,419,423,424,207,210,212,828,819,827,829,56,419,424,420,207,212,143,828,819,829,821,56,425,421,402,180,176,174,830,831,823,788,56,421,425,426,176,180,182,832,823,831,833,56,421,426,422,176,182,178,832,823,833,825,56,422,426,427,178,182,214,834,825,833,835,56,422,427,423,178,214,210,834,825,835,827,56,423,427,428,210,214,147,836,827,835,837,56,423,428,424,210,147,212,836,827,837,829,56,429,425,402,185,180,76,838,839,831,788,56,425,429,430,180,185,187,840,831,839,841,56,425,430,426,180,187,182,840,831,841,833,56,426,430,431,182,187,217,842,833,841,843,56,426,431,427,182,217,214,842,833,843,835,56,427,431,432,214,217,219,844,835,843,845,56,427,432,428,214,219,147,844,835,845,837,56,433,429,402,189,185,183,846,847,839,788,56,429,433,434,185,189,191,848,839,847,849,56,429,434,430,185,191,187,848,839,849,841,56,430,434,435,187,191,221,850,841,849,851,56,430,435,431,187,221,217,850,841,851,843,56,431,435,436,217,221,151,852,843,851,853,56,431,436,432,217,151,219,852,843,853,845,56,437,433,402,155,156,64,854,855,847,788,56,433,437,438,156,155,159,856,847,855,857,56,433,438,434,156,159,160,856,847,857,849,56,434,438,439,160,159,194,858,849,857,859,56,434,439,435,160,194,195,858,849,859,851,56,435,439,440,195,194,198,860,851,859,861,56,435,440,436,195,198,135,860,851,861,853,56,441,437,402,162,155,152,862,863,855,788,56,437,441,442,155,162,164,864,855,863,865,56,437,442,438,155,164,159,864,855,865,857,56,438,442,443,159,164,200,866,857,865,867,56,438,443,439,159,200,194,866,857,867,859,56,439,443,444,194,200,139,868,859,867,869,56,439,444,440,194,139,198,868,859,869,861,56,445,441,402,167,162,68,870,871,863,788,56,441,445,446,162,167,169,872,863,871,873,56,441,446,442,162,169,164,872,863,873,865,56,442,446,447,164,169,203,874,865,873,875,56,442,447,443,164,203,200,874,865,875,867,56,443,447,448,200,203,205,876,867,875,877,56,443,448,444,200,205,139,876,867,877,869,56,449,445,402,171,167,165,878,879,871,788,56,445,449,450,167,171,173,880,871,879,881,56,445,450,446,167,173,169,880,871,881,873,56,446,450,451,169,173,207,882,873,881,883,56,446,451,447,169,207,203,882,873,883,875,56,447,451,452,203,207,143,884,875,883,885,56,447,452,448,203,143,205,884,875,885,877,56,453,449,402,176,171,72,886,887,879,788,56,449,453,454,171,176,178,888,879,887,889,56,449,454,450,171,178,173,888,879,889,881,56,450,454,455,173,178,210,890,881,889,891,56,450,455,451,173,210,207,890,881,891,883,56,451,455,456,207,210,212,892,883,891,893,56,451,456,452,207,212,143,892,883,893,885,56,457,453,402,180,176,174,894,895,887,788,56,453,457,458,176,180,182,896,887,895,897,56,453,458,454,176,182,178,896,887,897,889,56,454,458,459,178,182,214,898,889,897,899,56,454,459,455,178,214,210,898,889,899,891,56,455,459,460,210,214,147,900,891,899,901,56,455,460,456,210,147,212,900,891,901,893,56,461,457,402,185,180,76,902,903,895,788,56,457,461,462,180,185,187,904,895,903,905,56,457,462,458,180,187,182,904,895,905,897,56,458,462,463,182,187,217,906,897,905,907,56,458,463,459,182,217,214,906,897,907,899,56,459,463,464,214,217,219,908,899,907,909,56,459,464,460,214,219,147,908,899,909,901,56,401,461,402,189,185,183,910,787,903,788,56,461,401,404,185,189,191,911,903,787,791,56,461,404,462,185,191,187,911,903,791,905,56,462,404,406,187,191,221,912,905,791,794,56,462,406,463,187,221,217,912,905,794,907,56,463,406,408,217,221,151,913,907,794,797,56,463,408,464,217,151,219,913,907,797,909,56,408,407,465,64,152,155,914,797,796,915,56,408,465,466,64,155,156,914,797,915,916,56,466,465,467,156,155,159,917,916,915,918,56,466,467,468,156,159,160,917,916,918,919,56,468,467,469,160,159,194,920,919,918,921,56,468,469,470,160,194,195,920,919,921,922,56,470,469,471,195,194,198,923,922,921,924,56,470,471,472,195,198,135,923,922,924,925,56,407,412,473,152,68,162,926,796,805,927,56,407,473,465,152,162,155,926,796,927,915,56,465,473,474,155,162,164,928,915,927,929,56,465,474,467,155,164,159,928,915,929,918,56,467,474,475,159,164,200,930,918,929,931,56,467,475,469,159,200,194,930,918,931,921,56,469,475,476,194,200,139,932,921,931,933,56,469,476,471,194,139,198,932,921,933,924,56,412,416,477,68,165,167,934,805,813,935,56,412,477,473,68,167,162,934,805,935,927,56,473,477,478,162,167,169,936,927,935,937,56,473,478,474,162,169,164,936,927,937,929,56,474,478,479,164,169,203,938,929,937,939,56,474,479,475,164,203,200,938,929,939,931,56,475,479,480,200,203,205,940,931,939,941,56,475,480,476,200,205,139,940,931,941,933,56,416,420,481,165,72,171,942,813,821,943,56,416,481,477,165,171,167,942,813,943,935,56,477,481,482,167,171,173,944,935,943,945,56,477,482,478,167,173,169,944,935,945,937,56,478,482,483,169,173,207,946,937,945,947,56,478,483,479,169,207,203,946,937,947,939,56,479,483,484,203,207,143,948,939,947,949,56,479,484,480,203,143,205,948,939,949,941,56,420,424,485,72,174,176,950,821,829,951,56,420,485,481,72,176,171,950,821,951,943,56,481,485,486,171,176,178,952,943,951,953,56,481,486,482,171,178,173,952,943,953,945,56,482,486,487,173,178,210,954,945,953,955,56,482,487,483,173,210,207,954,945,955,947,56,483,487,488,207,210,212,956,947,955,957,56,483,488,484,207,212,143,956,947,957,949,56,424,428,489,174,76,180,958,829,837,959,56,424,489,485,174,180,176,958,829,959,951,56,485,489,490,176,180,182,960,951,959,961,56,485,490,486,176,182,178,960,951,961,953,56,486,490,491,178,182,214,962,953,961,963,56,486,491,487,178,214,210,962,953,963,955,56,487,491,492,210,214,147,964,955,963,965,56,487,492,488,210,147,212,964,955,965,957,56,428,432,493,76,183,185,966,837,845,967,56,428,493,489,76,185,180,966,837,967,959,56,489,493,494,180,185,187,968,959,967,969,56,489,494,490,180,187,182,968,959,969,961,56,490,494,495,182,187,217,970,961,969,971,56,490,495,491,182,217,214,970,961,971,963,56,491,495,496,214,217,219,972,963,971,973,56,491,496,492,214,219,147,972,963,973,965,56,432,436,497,183,80,189,974,845,853,975,56,432,497,493,183,189,185,974,845,975,967,56,493,497,498,185,189,191,976,967,975,977,56,493,498,494,185,191,187,976,967,977,969,56,494,498,499,187,191,221,978,969,977,979,56,494,499,495,187,221,217,978,969,979,971,56,495,499,500,217,221,151,980,971,979,981,56,495,500,496,217,151,219,980,971,981,973,56,436,440,501,64,152,155,982,853,861,983,56,436,501,497,64,155,156,982,853,983,975,56,497,501,502,156,155,159,984,975,983,985,56,497,502,498,156,159,160,984,975,985,977,56,498,502,503,160,159,194,986,977,985,987,56,498,503,499,160,194,195,986,977,987,979,56,499,503,504,195,194,198,988,979,987,989,56,499,504,500,195,198,135,988,979,989,981,56,440,444,505,152,68,162,990,861,869,991,56,440,505,501,152,162,155,990,861,991,983,56,501,505,506,155,162,164,992,983,991,993,56,501,506,502,155,164,159,992,983,993,985,56,502,506,507,159,164,200,994,985,993,995,56,502,507,503,159,200,194,994,985,995,987,56,503,507,508,194,200,139,996,987,995,997,56,503,508,504,194,139,198,996,987,997,989,56,444,448,509,68,165,167,998,869,877,999,56,444,509,505,68,167,162,998,869,999,991,56,505,509,510,162,167,169,1000,991,999,1001,56,505,510,506,162,169,164,1000,991,1001,993,56,506,510,511,164,169,203,1002,993,1001,1003,56,506,511,507,164,203,200,1002,993,1003,995,56,507,511,512,200,203,205,1004,995,1003,1005,56,507,512,508,200,205,139,1004,995,1005,997,56,448,452,513,165,72,171,1006,877,885,1007,56,448,513,509,165,171,167,1006,877,1007,999,56,509,513,514,167,171,173,1008,999,1007,1009,56,509,514,510,167,173,169,1008,999,1009,1001,56,510,514,515,169,173,207,1010,1001,1009,1011,56,510,515,511,169,207,203,1010,1001,1011,1003,56,511,515,516,203,207,143,1012,1003,1011,1013,56,511,516,512,203,143,205,1012,1003,1013,1005,56,452,456,517,72,174,176,1014,885,893,1015,56,452,517,513,72,176,171,1014,885,1015,1007,56,513,517,518,171,176,178,1016,1007,1015,1017,56,513,518,514,171,178,173,1016,1007,1017,1009,56,514,518,519,173,178,210,1018,1009,1017,1019,56,514,519,515,173,210,207,1018,1009,1019,1011,56,515,519,520,207,210,212,1020,1011,1019,1021,56,515,520,516,207,212,143,1020,1011,1021,1013,56,456,460,521,174,76,180,1022,893,901,1023,56,456,521,517,174,180,176,1022,893,1023,1015,56,517,521,522,176,180,182,1024,1015,1023,1025,56,517,522,518,176,182,178,1024,1015,1025,1017,56,518,522,523,178,182,214,1026,1017,1025,1027,56,518,523,519,178,214,210,1026,1017,1027,1019,56,519,523,524,210,214,147,1028,1019,1027,1029,56,519,524,520,210,147,212,1028,1019,1029,1021,56,460,464,525,76,183,185,1030,901,909,1031,56,460,525,521,76,185,180,1030,901,1031,1023,56,521,525,526,180,185,187,1032,1023,1031,1033,56,521,526,522,180,187,182,1032,1023,1033,1025,56,522,526,527,182,187,217,1034,1025,1033,1035,56,522,527,523,182,217,214,1034,1025,1035,1027,56,523,527,528,214,217,219,1036,1027,1035,1037,56,523,528,524,214,219,147,1036,1027,1037,1029,56,464,408,466,183,80,189,1038,909,797,916,56,464,466,525,183,189,185,1038,909,916,1031,56,525,466,468,185,189,191,1039,1031,916,919,56,525,468,526,185,191,187,1039,1031,919,1033,56,526,468,470,187,191,221,1040,1033,919,922,56,526,470,527,187,221,217,1040,1033,922,1035,56,527,470,472,217,221,151,1041,1035,922,925,56,527,472,528,217,151,219,1041,1035,925,1037]}}],"materials":[{"uuid":"7AAB18E5-FF88-4A82-8018-4DF34EDB7539","type":"MeshPhongMaterial","color":16714940,"ambient":16714940,"emissive":0,"specular":0,"shininess":50,"opacity":1,"transparent":false,"wireframe":false}],"object":{"uuid":"0D4F494E-35AD-4D5B-9696-7DF60B73E7F0","name":"Teapot001","type":"Mesh","geometry":"15930b1c-1b50-4926-a0ac-df433b9c4f96","material":"7AAB18E5-FF88-4A82-8018-4DF34EDB7539","castShadow":true,"receiveShadow":true,"matrix":[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]}} diff --git a/build/public/assets/textures/UV_Grid_Sm.jpg b/build/public/assets/textures/UV_Grid_Sm.jpg deleted file mode 100644 index bcc6ee1e5fb6cdb7270cbea10f97dec9bfaaceeb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 650948 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

5xUxZd*XWY)ZWRZQ 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�#-!>SlUHqTW+}6Zaje==v-4jafyw0gPeB$#8$9HGw*HO+ zsY36jJMu&FcxY2b;S9IUEr;oNCX#(2lqd2{8rqb9N+50UaQ$<5?%gyzu&~BS^-cNaB8k`eA|PF+eLG-Fm`V!$!@)Gg%WI{tu6M5`6A5*97)aMgUuK zH&vKA_pv469;m!WV@J+^Fo0U}Sdb}rDH}w0hC8`iSpsdF;rZISY?W_w;glQUzmY#Q zin(QDy+=N(LtnarmLB`Dpz!>Our}cJ;)&>a`~=)j$&LiyJ^V1Ee7DTMb^zE%s5aii zAiAwRjkanO)&~9c4T{nGhlf`l4+Ov@YEwieBXj>)$85S|-yl^~5qud(l?tf_yN+1O z6Cvfs%Cl&JP@=iCxIkxF#DjLd6DY*}UzP*$Z!w}aoqM3piV(~-k@SZlc?D|3_HIjlv8>&W5T_WpN@#BRp71y+cfVApkujhhQwbe3RHfD@Py> zSQllDn$35)c+?&;cp@(z;2nL33IV787dV=S1?Vq^?_yf8&#rnHWVm@Uk>y`Ett3zr zS0vDNRcjm@!(iupV_9r^ckz@<-EuRqNzaz>Rvc3+DU@ph-oWudgDxaNn|c*aSHE+f ziJZhj(+{9@WIXGx$3_|UX4?B^-KQSK;fB``k^l}pfNIbih~bUbO_Jb^yjY7Wm-+K~ zEQBrrrnx%huv)l|!was8U(hu)Ls5t+fnR;tiYtQJN>7as)6K)aYayP4=ffuI;J*rU zP#oTZ7tdRxfr){`d+->h^cqE6>zJB~bfS=$jgpa_JmjsniB`6UuOa$dh!or5eYyqq zow;KN=7rZpb>1{g!>k%kESho9P(W&Z4av5so(Wq&>YowQxjRGL{`>k%12OocWqTNGF)9%EO5TfST~tjTA@kvtyDz60NdtvN zQA++Zt?7VkE4pM-21>++UIE1+yJg#g)#N~CGq7Z(wd9F9@(bzGdA-S_2-y{HL3_7m zP7V?=NklWHhps(C8@$Ze;YU_iGPalI9M&_@1uxYeIS4v&5>>gyW8H@pJ|P7-ocfDz z^|Ce54M3A*4WFriqR}|4zX=EP?@CM=M5}-Nh|MT}KCL$++FjwE&ArMohYdhr1 zktCcM@%Ch^l8~G&1keH055&1bQ}QlhLiEBzcUcb?kixk3XGM-OhNU`W!WY_}O|MCc ziX$an614*HOk92BUNn`6ndrq(Y}b$OpI7>q^wC(=zbb>Yf&^5l{0w(b?t*-yFJ*(ZBbj;9X_04a?5wy2oX@J#?^nViQyJZC-Am_V648$T{bG-WL02geId{i z&ekBU;#StT+W{Kz;*-RFG$wG`FS=tK8Z&maN#cik8#>0_SK`nx-=rKU(3XrUNTnEwk* zRBXVDQYY4@*kOVac<@%yGzU#uo=w~cTy+vFRv((U;8RBDnqGtcu4WSGr?%P9p| zz4F_TJp-*1nb*9M;+^32K_DwHj17#8M z<3agW0{a4aUL};HQnz*kRIXS6GH7{GLfxf))gNhrsyJScV z@53=s(8j{14Y=VhfqY7fBg-Hkts_NoCG0Bjx}h~i3;=5hmYY&Av`d*|y>o&%MIcbz zWr92&{i`WgU{NbzRG0sF9~U^~mzPPmiL)1nzm)i_4>%K$lBof@H})yRV?y0xZV7s{ zE^qDaF#ynR9Femf_(2mmKaN{GO!2t%D4j65Nu@g0Jw?u0L>>SYruzT4{y#jRmfSTq zz;Xd9h6l~Jk7$mt$j{zp>dRcwUyf$uufKlB4(vIw_JuAUsLfZrWZTwscN-N-D)bl# z^e2tU*g6>t-Uq)5m{w>1e@v^=fc4TA zEO0tTz!CnO9WKqWWCx&}(B0RNnZR_SYDsybsvybORCDS7RX{f;Ip;P6R%j_6l!^Z; zpoU^(Em8@rRmxooEy6CmM$QP1ZxjK8xl|fAT=s{cQ=;ns2s#agSX}k_bTu?(eheAc z$@#wgn#cf$lVH|!9NEIu+hC9eRIBp-MC5naKM{1jHY9`iFGXiY3s0FzlJ(~r7EIA3 z-5b*)sEjlC0fa0#446b*qBkZE?%IIjX%PsD6F8O=IrV~cS7?@7v&oBQaKVD0h62?~ z|bWheP9{9==wNgDd) z?#$>lh5BacJ`CJ&Hx`*2$`a>@Y9lb~ALzfN;(Dzo)5W%QQlpvv0Kf^YF2m1CHpD|= zGgTs!{1OmN4)?W_)5{Ad271;9Sb^_F&wnEjUX62X&fpj( zV9ymaM!d}DK8?UnU}!>JQ6LMHjaeC5MJ+v|D)yk)NGuTUH3ZkK?V->F_ki8PT6sdo zvdjW#3P;jmff#2Q+idl4rvLc5-sBsW}BkSsFgn;>DZ3+ucWIRTE> zU?P`^&0~cNz1FmaFc7bq@v|l?i0s^!KyN>I^N@|=iUH*BY^b?e-=4gbZuTQ!h9S1` z*TZg!^g^oq|s6z&^=xW)cXMTy3oR6 zM7-#AeNw3iEHlu_z6q42kHH<}_hX}U?sv}V!qJ=B!v{HY!|So_86R+Eb;jx9A)?CQ zNX9IP;wTAEX)pB@!NEcwxDVkt4xzxUi3n`Kb9xb$bX2SY#p;K56PH6c+t4~QN}O8H zHmHdNa^ptp`1Ma{pF7u(9@=DX1Q1TdFVQOqJbk=>tk5>Dl~g6mu>$bAI~;yiK)=nS z#l&J{H*(g1g)$5W+5-|mf^@V-a$HHyJOq9(BCro{8{OjdGnF$(T&!L|uI`{o!t5J} zip_0^#dC&mu#yTc7zkSe2F@-;&M$bI@~$mDNtkn%GQC2WMavA=vL)1BbU>;id~+I>d%rRPG~I zLFLk&tS%l$NCUwuV4Qn^V3!urt8ABtyMS}u!A3Dq`VFf~VJMxMwS{BgpvTR7FXYXY zXM$)6RQ-aSxz_;a+znsi-wI&bH(f|~72nROR}^5Rvb%V5%dtUFqAWKF*bf9pk0HS7 zw^;1I%}ejC`HyvuicaE6%?)rs7*L+h1Q6!MR1J~-YYE}V{*0)<_@1w_ym1Vaene+qjxrb0>upB6>1(b!H2||J&KNg2G;%9>$2!`pD*zKU8wppjF zsTGUXCFKKw|8QoR^&9|}*4eRK(OC+a4?jJBh6`?L;|shoMW7-uVf4=e_)#*I-5&Bmfv_7<2T z=;ITM!U5Y`Hd(zG1aQwfO0-qrw|G{F>st(w>%}oO^*U#YH*H(gogs}*YDOl2#sM{z z(^yb;o81nLq$4<$;_wX*_poI?Y&yzwem|bT*yLw2KxtD!xd6!EKRou7SgCF)e)L{w zL=nL)p+fAJFX$GSZb4Xlv#N$73(%UuGwAr&tj}^m3=tD}{cBEks|DfA0oXzhR{R_4 z>)mKN-9RCqR1F{Q3n0NZmOwwe5fn}*U0vg5lc%C`}9iayXwdn5C($)KrFmY2b@vmUJG>w*Dypfk@M=!xrUtDsGHsc zz`#rfSGWIGxxPTk09Pe`hrS+z=5K^7sPuNuz*|T{;_Cu4pl%-uufppT>76v&1yaIc zpnI*Lc(5B{mp8MEA^_UR+pLx4^DI8(BACp8CrTG#B6^)mxHH==DeAxvN|^Z=gIE>X zX4MRQJO79$G!2eYNp>S}Pm_ydR{r7171icng&PB}H}q%IZPQi>bZ|kzzjd>DITVsC z0;>evS6tSpMSwqEtRofzb+nZ{=jy}pwqkSUM2{Qq*XF#KjnM2~Vv+^-N)W&n<9Su} zE!OkWlujw!+!AIZK3#WgLVy{j76&K!0=U+~DpqjwVjzKU*|&7uaczD_Oo0DaJpJ4& zm<-I zlBH8Fys~PJLh^5mI*sC22{aPF+G>rlu=rM%&hwRiaFv)pC} z069hP`U9v**qFq1fwV+>U#|-v-gUF0WwG(PjG&Vo)NK72{>Z);f$cgt|NE0)s&6BL z#67f*fLCr}9{Sct2&jSvRo_A21XR3ZFn;g;;gLH+q(uOSL^-7K;x&>qa@jOW{qnR0 ze<2M;vH?KF80wo-A3F||o(y2Cd6>@r06%ArctH~Ui6lrPOYy8P>}z2`=m2)WogCV{ zx4pn24Gt6ys-2^l8Yf#|L%N~P4pLlbK9WiJgGB-79s7nw?o;08LdFzqPNcRKgW9I^ z#`Ml0bn7PMbdOtq_b=eo{9&pwik$wkF zX<~?M_R8&^PJQmi0RU7~T`@3E#i-wQQK-KtkwzXqD{G|BMTXt^L*-6s&ODK^c_vP^ zdgQ_+P+o-k#lTEH+NuIOpawm?`VY?q)!(x4g^C#=?%lzVZ`LVN4+BBF9Jumxy**+K zf^|l~mb~2P08kg7{eypYP~fPyQiTaG&boe4woD&8W7Tm=gcbY>SmR0nP(B@GBijN{ z`?!`w5{@y69jDPVKh-Ot4Q_e`rAu-uH(T6%kk9`=roKELs{Q|;R7z#qw22{=J*lLG zlcb4a>=K!ZvXn$9>q(LjV+m1A*0F@LM7B|qt+Ma?7BluShS|>jy+`+czQ2F&R zIq&85e!gGJ^YwbU27|L7a+U$drUS%XM{qJdTH#{wXx_&--gR1mZ9WC$@J<8>Qd;85 z{JPcKKqYd2Q;ZYTX{M4tj4=4xyRdmHoJvMqR0G2QJn!CD|f2 zAfV@0^k1jAftPdYMPyYB&G;Xli+~6)MuvUUu#H)YOH=cp9J%Jiz;Z9_QUf~Q8+gUz1)X{9KqX;9 zMC=`sidzEb3NY4^Xuy~l$~5YFw_N7~b*(tK#x=!a_k&{C1ZH6i;CN#n93P5%$$pt;?I)Rh>|EtL?63TFWhW*PX)30sg;7bh? z6eTTd+gTl;OV=4+pUp$RLy*P?;Eme}7vTBAuPpUHiZ>b&N3hKYMKG29a0AdQ4b0Zq zWV~PtZ_NZIy-QF5VU0@`NXJQdPD`>ZBLlL%Y)b_gqvD9hFN2z$K3&*6ZJVX(Hvm&V zu22NS>)U=~*gw!n2e@L~%~4(t_`psH_2!i%v*a^^H%nm4S=tWU-DlJkkAJFGeZmodYggpuLKEi%5#yBic5a-sM(OfS;S{ZKWRI;ex>oz)ro%v8eO?RAU|3xrt>w?S?h1E{#1gf0EYO^ss*CjFEw2;?>7_~}c95@8vW8xZVee2CY{Z{NgO=Lm}$ap3IarD4$ zgIaCl$6-l)pgtN`J3OfXUUi2bkwt3zE_%{}HQLGuD=01GtXv%UnGQN#-$~VMGXQ!i zSp%+eD-`U5CIuaNFXaC>cet;RU9%PN8LG3reQ%}wuAgwaO; zt7ypuxIfmEMK66~u`rRn(g)ldoBWX_WMxiGB7>sQRTloaOWEi z#clquHwn0bWtq=?2*VUHXdXQ;0rVr9a7fZK-n=XMqvdfL>+^z;q~Y;I2?BW+5!D1icA)3SPgM zXMfEsc}3Lc>=<^w4kiam!r;ZjmE_sv6Ou9El?RrsNhrJ`^LbU0zM z?1F7mzk7%VqTb=?7^pFu$ssljahMhs{Q_Cbd#qd53^V(It71mFQ!ptZ{)$DhOdz}!GrpfPLEpy@ou zT!X~cp!Zy-waNPqCOCQPz<-rPU%HkU;~vnTuiweZWA}4)LxCdFD5mgLVuJXcT$G`; z6WAM|7|wXveJ5Qh)7S?ipjB7AGq~IwJ&aBoU_Jat9Hn`ub8a=L!I;SrL^wLiuHY{~-jX5`YbQ2>N0j znvAdz**OV`t_+bFg00aMJ{`aVHBFN9z<*%OQVn_vZavp=iJkDTlgN&CJw5w}cVUd?LM%%t6e$~#28k<5|;M4#=T>&e?C&f^$p$E?< z0sM^N1frMreeptKz`=aF3~q(r`;VvmAvP|`iyEY&rI7QR52!{Tl7N`k21qdy_liBRS+NC`8&S+&Hq1@>B}5pI)2GDMR#(s23Z)Qq4nAg zhe?5VNp&tm3!-?$st{fyH-UNV)=K->uZGEBxJEiZkqoR<2qN*po59k#woH758^VCe zu3iXpY*+HyXimM*ueNb3LhW8wHQemuf_lboo**qvgA2S9_T@mAI4SG_} zrw&(+#-3?y{RycEt{VCQ6Wh#UHvrG} zStrnz4k$r{!EAIAhcx3#|KG~xkQk75u-e!y<@QL(o~TL zxEQI#NU&X@3ZRR5MFc|Ne$-9bz6?3@56>Wq!{23fRb$v-oU}9s)TGWlciuDMuoFu} zpJTRIi!8uX>IvC6L8%4MV8TOTl@DT<+ryLgKpV?8D=Q96d-%i?Z$u^UzA#@CpNIYd z@gf@#f^Onf0MoBkV-atAnAtIZQ}PW|2)`w6`rk*}(nYVHsW$|1X!xBn(85lUD8fjN z)m)-zl0OUXCU2YX5Pp1MY=q6<#esAOuR`q1|3*miP4-xOW>y(ji)MWVX`IZu!_|J^ zmZRbri@)pgohP~vsWm+`_21I9XPpJ> z>!yofzzX|q2Rg=&SZ@8j>lG!XO1zr2U7WDU-^X6vSE|*OTtH)KoJYA)g7>odK{bzI z6AX7H$FhM>EN|eYPNc@zG*Wx@(y{X0^Y{_;QzlHLoQ*;Of$>maueJh#$sVjS8s|>R zI3)ML7%1Nj(a;z>^^@HCdtY}KA-q(Hv6TpQCgJCA-3QOWfCQU^N#O=Tpw7TEd8p%F z`2nA+RGF!)^FcyU*lZ_$7ZRUAIIT7HNrqOZsCe&w_(s96wutP zKLk2It~Q3}B@zGW@YwZOHg6+XQnR(gU2MB1!qq-pS)p=eWhrtPcpZ&_3t@t!3$ZJJ zvN>UjW)^t46>dyhdtWjO&e}5^i*H&W7;)6&ua-azg9gCkTmz~>`rk#?jc}{Agy;DY ze{vK07;0u|X#6a0wFoG^T$CETMWXzg9T(8N*_udFq>_cIN*50u7(<$oU2GJ1C%Xh9 zc27J3GP(v*6{~hMsF)L0_-%?12Ceu5>|1VZ^hZ~Ud;QuYQO8Sj-2RGv z;)&MbsvoFNU~Dy@Sr8Xh9w8qF=V}~|KLKjTrxx!ElcX9aT zzw@A+B1mur`HOlwX(wDx00MabR0&i@UE)1LVIU%#4d; z1kT+R=agmy!2H#3W2;e|aqhsZh&JlVh%lC68IzuS{2lxgzfPdnS;nH0T%KsIr~09k z5S@P{a3e4dZ+i_uC3L3$HyB#I$#COy$#~0g_h@}pTI6Ul3sGP6pZmnZUM$ppSBHG+zL4&D_zJbQNvE(d{DH~r-#4ekaafyVi3ufSM@6w8moiIx@+@1_9aO1An>*S?+LHj zqp!JJ8mSFV!rJ<7A?iNCk0`D^G&&~9JzS?+U~slr>pBDRc`T8=B>Xb}7j@K#I*DBR z;_!FCIlwwe6yWNg{{;;qicId(9=Hc4fl#C!id7VnmmN;aI43ujlvU z4lCF|3FU%Rb7wmC8q5^X$+RQDOqU63GmQ>{C|&c8sh_@bkM!leKNien7w{5O5Xjm- zdI%Uu5q=ip+s#}~6};9J~$bhk9{zH{Ph?>nmrq+P%XM5CAQuT&05 z@;7oURW!xkez(jcL@?kh85gcI?R7bOf0HQeQoT`!MO-&L#a%Rjtxvz8 z*{eqIa`8}^bQM=PE{-}lgWsD#JY({3P2R8IPX0^DYA$rIBp>T8mP;uAXE~}y(~+~Nnb~}tCYUeT6WPB zO=wF0dJKgayO3~eP=5ze&UU;Jlfx+ik2rgHOA@i^4Omm~yif?+#=alDkHBGqmQfCq?+`IMAI3Ib}JK zr3uEx%=7&!!I`yXGErXZwE3t$?+0iI?aNnW5DSqBv6mhFedLUZbgnVK&*nQorCd!Q znXhQ3Oj7-cgEsc0i4iQg;g)gB_kpeBr6TZ9)d#HE?x$TD zx3A*ZSzQ2?R!e~F7W7@jOmXi%@yH6Boxo=@VJ6OjN4bC9+2k0FC2%jQR0XSq6Op$` zL1x!u#evW24z&0X9ByNn(l>9oUeEyrlK)iBbF|DAalw{>z{vAk8{5~GwKpHWsq!d2 zYA@Yffod7Zh<9ROi9kq8xPM%QN&EQ3la2h2R8o0%7^w7MYGim7&Heh&{c!&}?y15Y zP0Zh{2vf7enK*>M4P2qc1A_Q98CdV<`6w@H?;n3QcU(M*wcvNS;Wc{Mam9R{ncuJ~ zg0sDxmM%+fH#n-WcqJSmEvUZ*8b@Wf%3mDxqp_Li&|3(iw?Vrs;s*=woeUY9E;Bw# z$m$;S_4Ift+GR{j*n236E;XShsry6qertUp1W-CQ~mzR;)i5Q1t6kaj*W{efn!ha+tjpn_FkN?45Wh_udU{O39jH9 z_ozd|TPKlYu7sr`fB_xE0o-|$3{^E>+lf|fSF#X4o!!)!v5xz?2~h9}#PFGIvr!{V zG*Gcyy#3VHM4$Ldt^_yw8Xot+E#} z*my~J)I%2jqGDk&>kKX1ub3{d6<@64-_X#eRiZ8Zb-y3*Tz(f z+)!^jj&C8^0lP$tx~bp=*9`+U(q;NwPmLxYY5p2Gzq#TJRe*seYX{u0A=^JYZ? zH3!FmhTR|#m#TRB_S>2T)b1ha&z47M(3I$x=^tpur95DtQedQ*Ww)xi8`wxwqLGll z)ixFe6rX0le$!O(mK{&xbih;!Ond<`i@j*yKFHecSn@auRQ)vWVhw#(_YBqRosh}3_APty(m05KP zY=?IOYEe3b(WDnwQ=lL?rCsCbNyH@k157R@;5oJ|9q(fsEa-S9f2yE(-Z!vt&1#SH z4nPwJNZ<;{1O<$SW($V7<|qxN-B)!e-ikyH_3L#dRY5?*fA1N5_y^oj1VdObW3Vhb-*&BD=Ss(W&-2Iz-@PE{ z0A8e})}L4It7wT*i* z^bUnbqu^NkNP!=(TD`LuKDdQTq?KXrF;v6aPsqi;CEu|?<#6f_j*Xz5JWP`^iO%U5 zb}F%vJ)m9A0SbJM?UBeFqTaOL2-t_9+G6&A$@|zH0IK5@7SZ2hHXt z3zPrh`FD72xd$vUi}!6AN3S6KtrncRHn`RmOxu>EIsAld0>AVXpGIP{zS4$__Jd=y zkFD9oQ7|yQuQ54$LYa*p-90pqo;%rl^cw$&C!7wZuJv0!@ZWzmkFmtCvuttzX=+X1 zv0Ft0Fq+py{K!$Xe|Y};_pZj5$WFp|oC07SHZ2O^7^WdePU4(5A3t~ky@&#W=~(%e zoSlxHMU9I3Ges`!9EB!~Bw*GxLjc>L$dwp6fQ-BW(j)GaHkOWEN#YiGk2&kC(jI&@ zv>L^DV)O{WUbb!9z@}o!5qRx)+SfhAg?jG#3%;X1x-E!3@~=`Di~cT60<=WtXRoxn zr+UNLY|J7GN2@TLC;KL!H^qjMwl71?6tURt>aXMes%izjx8?u0qOC`n1~oQoV#Tjl z*g6X8?K*PR&9j=di$FUBj+Tys!P>UfV*(^0w&o;9G&jAgD(bVI>}p^WQ$z#IZTJ6P zYbb{NE1=rg)a-626zBmk)Ubu%7sCG z=EzER6f3vdpBKavtdXFp_|48FOVo;=^}+qDX|FNLXQCGK$XwYKaC;kz1!rt;$O4@7#J)XD0F zk@xg>tD+A7ipYMZ)2S%V6x=N0LbXP9#+Lz1u;*gJ9AWf-!b1rplV1G0;p(|pABLb2 ztR-9rPq-5hQwj)B`}akL_(*HP{;PqD$}~@xF>+yzaTE(0MSmY^rtFOs28X0$h|$9j z;@Vy}U;cM$TOIn~^#s6>eoApayGU~VOaxM_Wb$`P)NEzWaW5A>r%|@TSJHM+cun+O z@tzk>&(6CRkD5u4{R=AD7_@Kq==3a2Q_=nK+zEGPW|`PJtZrz5*M@)IuQ9+wbi!oAt|OR25Xwf zVgInV%?@Z5*+s1@w7Uj>z&|1l}S zBh8Zo{UWxrWcj#tt=#Z<2n!It2=e5%oJ}A?)k9(iCjY}T5CGhXJULtfUZgd10Z>jr zUmx;E9`#Bx-Id|g)0HXwGqU(xed>6Lo4Q2W@|^)zaoN>z3gpZyU~ccr^AX~ zF4aT9be5e6{jv21dh!oVuX}=aEr}gqr0?ykz_jG=} zC-~JbhHxV=DlaIPy-yL00Ee$+mJV|AWFYlry+p~z+@>;Ka+^&TQG3Hj8r-!Sa|u-J zYYd@Joa0p|vJ=GRk<-I)WgA3 z{t(-e0uKXpV1=NH-x-u13nFQl%>t?mIhECovns4rQ?d3)ZGwBV(44_r73C>Kl}*&J z@P2gr%YS&PQEX@Cy_I1pm9~R!ja2>$*SIj1Ck-5D(nt_6F`rPq$^`uAuDJc_1)P&@ z*vX+xjj*^!&pe-i>!hllG;5RqqyyA+$vD#m;M6~Px`25TuHJ=!R6l(EN|ssH*;*_0 zxeY3M16Gp&$NLIM(Zqi#lt?=LNCkQ>$|)}u+&m9~&xOcQ%XI~<^ornKVOJdzA7`bj zM_$JB^}9*pRb}>#MVQX5O4a|esZ1&f?WEO(0Zq$jfo%Q^KEPF6p_rwos=08R2G4@f zr(OyouLyWJz+zcBpy1xt2WX7S^hu5a$egQf2U|8*p)5Wv2WLXV)u3xJm***sT~*=c zQiY^rkd$c|m&@}*7e3qD)^;i+unpP7FHkEemg z#b8olVc;JRpb2yIQin6}Fj{00{+4U8aaG%j3*<5>fn{7|Jj99sM9SpA8S?Hy9GTSA zc9V%-=1iyNyM_Dsbfp@?vBXz+#w!I5P`4Nok)kscJN4foZ$n^U42qEp;qNRbtoC8@ zgdp44odIFC9;J=7eR5bgyZU+62pw%y?0JDv& z5v)2#@&^c{UsicZn!hyIeTP5wzKR=I`KRX4LNKs4T}D^*(?hxN7O_g>R`dXpuiht- z>LQr`x7tT@j;E#=xk(K6L@m6pg+H_QskLe;u|c&HO(|}e7O*bOQg;f5&40^Vf{v4_ zhv9lWr+HK@h+zO-9n+A*JNpHdFh1UTd z<#o7@OQQt9QD%v+I5UeYU=vfL1Y5Xl%0Xxd&Y3-@063C~$BCSJ01l0SKd0%HCAiqC z1484OVA$Yg>fI8lhJyKkWC-{Tj`>Vi5F4)sj@)=W(&+(lYQD3wQLQ{c7vaXn52w(` zOVF^$d45D`_N0I-PK@FRghMv9cr<+-L~-c%x~F^1r{eIPIiY2WqkV;&6R1!U0Wu8; zy&ii@y1G&y3I1VWuYudq;~yR`dP0E8g|Td()z|RM4T3ajQQeiqf=4`@tV0Wp`Z$e< zmm|Op&x5np$gR#vu;0M69#-Q8T6Z~%_e9q$Mb$YmpAT95N^e9RizuayM2(g@Epx93 zMHVfk9O#{m>A4$hB!E|mU;isTE;dzACfZ&E=LX;S=gm+i5l{Fh!ykyEtpU(fHw3IGv3^41_FT>s z#O*7&mm93b?n2Vs(cDORCAS>sRgAv5z9-?Lk5VT@4fr=k4ly;69UUXrH_IX{XhcM_ z0x9>>GY*Rs%CpP`ZF`gSJ@4nJ5KLhwv^B_cmjLsla0ZQMu`~jRlFwGngdpIfO~2aD zv8=Vp;u;g}GtS@;;23v+np#re<-*G(M1kGc>&x6_yJ`XG5P^?oLnTrRr_218MW<8R zvZDF%Mo0K&q-GougB#2L@H}f_dH5~-E!c7HFg#k19fcVy8CH2;Ni1QOEmnK0jfd-9 zWdAM@aJw{wc=h8rn<1bo-T^`qQ2;kNfNUF!?j-DE#@}FhY>scGb8`pjm(v@$!Vb9{ zYSj1^>1#*CU(z5xb_l!`3r z)-`BCFdG<96CmM9E!xgWvpsaIhJ6JrHd)i0Es(;F%tns26Xt^83B6)Y%0M9+(fmV0`Y3Zu`U5uE>kd_j0%#(vO zv}R}d6A(MMBX_B3nX_#r5pA%bd_c)_y@GrIq+u@?Ek|2^ytdq*5VFJ^?x{yue82{< z6|Z%&;l|DIRFh*%1xjb@0{%Ox&^6`jtrLt>xj(EIql-)!du#MtjI^-QAheSwuZ`7R ze=}pFc6zwfB*ka&%m5{8v-Nq%Zt63g+1a1=z4cJ_KKI*~-ah(GJ4MOS!yF5c)MbvU_tJWIw(F5zY@}vLV&yFY6m<52NB(u%k+F^5mdP|7XTof^DCpaEy_KO#Mmu_D`4ei05TO zZX6BPIFmg6^~lMOp7SotpK1MXg&!K!v&|fB(rViqb+^vy8v7YK=uj>_Y3Yp;*E;p6 zCex(cWy{kCyjnFMI@^lM{VQ~#9@eHNL#uj{V;{Z6sl4Y5^WMv9p351k`}OQIuL+&1 z(MTfd%tp1|Na){R5Zo<%JzGf~+Er{*e|dTLHHxL1+MTV6nnq?ukr`ulU&k<{c#PS4)Z*nlnCAUgh5-O zo=lSRqF{35>ne6n2cQ;kK?4r6pxs{PT_75x<>p2+)v+1|6>T*-psIZ9BVUyM(TR zv_2Sg2#e_wzOzpr$%O5uzlCK_)7Qq9$Bvro#qywZPqpxJN2lI4dLm9hRd<8X zh8tRU+#h6xMJAp(d;)7^wCB)1@$<&(s0|~SRlV1`e=)a?i2ZoQW8Z1k=L- z=0S&^@`+1QMGojBz9i3nDN!7-FJlS28PQGbY7NcIZqb*OOlzy|=C^#Ky(wi(KAEOG zcQo4P5z%`50QE_Q#i+aHmDRqhe64XFQxeJN2m8$<$)7MReM(nmiezzdkrjEVD`I zrg59l#ssyQxwIM4=HC;}WwH;9C(@HLx^NP@S2T1rwwYXQsZqPSywoQ4>do7L_DSvh zs9Upja&yNlKj>&5^v(pi0s~)CtS6?=%qiPs|lEj zLPmkO-t$Jojzq=_Oz%~S)*RmpC>f) zhJ(L72=?bv8xOiAYMJmaWFEL@=#}y4s@c=2C)XYDtM<5915SBw-#E6mHFMPG>h8|| zfHoKYf-|qf%u1J;FG-E_%4tR#BBs9(yttc}3qN;8|x4 z1esLm);N<5p!t6g-Yq@Muia}`5`zON2fvy-UqxdWA||vp5U5clQL|AjOmTudVrQAald2?|ZAF0O%=BG5^4d8Vv%BZpq_&38doth&Q5=_R(5qJZ zzU8mM*oY3=-cIU8E3#2-*OEVw*z19jk-3w51x#tsrkmt!55&^Lz6i)PM$x08=D%`##b6v99wzZKu^efBd*Dty*e7W!H7Z&=9q zNN&RHBkln35-FNtAQ+R;pI>(em|g^Uhw*2y-@4Iw*Lc# zdY%@MT^RDEZ#-7uF@Nx`(LJC>Z%rSoxht0OjSuzuIxtMJc+d!s(u*(B*Ww_|T} zlW3%_?#N~B9(Rz~#?57XcGjSa<9@ce-N>rrA09i$7C9E+Jep>(;nFqGizKTjXwM(g zPtc^($S+c}5QSGDpO_E~6tKHk#x*>LIMA_83q#Oaaglt=K=Up!MBfWs&xPxWU~DJg zmP$@4;aHrDb;53xp4Z693}qj5L3sw&=yY?~s$;x5(^OLpTcjws$`?Z~|`l z0MDwgqy_u>h@X&r1!@E02>Jm>%pd@`0MQpgvj0lXDKgP*8D0D#qSeF!OLf4vljh=} z4*09jjI?B`OR23yVBRH3N4H~rv5tSdlnYOK43LV@k4%S;?;EIi6;|y0K<>4RuDs>z zXCHmil!OkYNPF;_x;`}DWN>J_2w!bKxB1%gb{?U_G*rdl1Fcp^3uEVc_d|j+vlq2$ zWUod#`;B7`w&3$i381sWT+dM7UWLg1K9n2QTm!3q<$&GECs%)MhSen$v3oMEn@a=? zN^h4b3H@+t%0pT$EQ2K zyA*RxsSB1aJf`%WTKDh1-oDI(ifwvdXj$v%Qzjo8VOA_vlla``;krWhFW_DXPs7M6I~<_@UVVPiL~KC}(d1}g2IPsmg(;%>eRNg3=v=#wBOS9CuN z8W&L(kogVQ%lMMOaDcSg(FagO?ZdYyDh7`CkKv9aysypppz=MuFWWQE; z-A#Ipye)3FoPJlzDr84QM#htTliSMKK~_)3!?>5Sk50(1gsd~g(cOCXRqoHcO9hKK z=>sXg;u+c%KoODBT;Mbv#q)h?}gc z-Je)-jNJbeO|@9vE!EONfe*@DN0K5LzTFs2$S<+d67EZCy9C;Xno)2V9? zr_0R$Ih<^J+xrl{CSbya83MFwbXD@qj<6!8$(wPR8rr{+n!1c-u2BsRig&P?!Ay}vrIKS3_vrU_(CI%d9XD6f`;2^U#Yy&(E z?vJK$uMg#-N|*|$bmSRaSOih?AZY0>P*nTmLYK(9oXNHYrxTqXPu%W16R#~S@iw!z zxy{2mT0AH%C$Qe&-1ECSp4T+B#d*SmFY}YAn*}tNRZ1c*xDJH>|jHY;*G6IwOBM)V|k+FE7*fYnxc32Rg9| ztr!W;<%~?LZgoCN z%~K7#Kd&hp;+m4?g)mB+M&E~&0?G8n_s%}N@}MS zMPG!OkK0W~%gEdbi`Tt%DD2Yh^TkD{`y4yQ@Y}F2HmwIfQ}8UDiJ&&h)m!#dGM-+>^C2JPQq zhq{CxvE20mI_{<^Ls>;rZ|qqtX|LrA6i6P6f&6BcqD`K66``rW3G6LxWp?6o&}0lZ z;D;GkiJhcufCrv#eBT0k;(;_NExwlN&wrx`R*kXTv^DonG zwu#bFSzR>|8M4yZ1Ak0+909pY=Xhq4m2uX^!o91ZBYi*iCuCmd;phE>jRirbp4mV2 z^h+&H`{ZVIngt$;+A!b@*W5;0t<{6jh_c6lR~|Ty#AZ&f+EaxI_nj<{$Zyp1-u>&) zm4s^JF-NSDl4Q_$q@>|ASLwP?Z|~lyJ)2t6mv~80AiuP^ZPjnz`z2AruS`1l|2EwJ zZr_u~J^qAtK&tlzN;EXj z%v*nuHE~k7*ljHToYU=eKBW>xk88HIO1=*1XYLY&v04{@nHvb5`k>T!xaE?ngNa_U zoU?snvGT3lW4qIGU)*#yrM<5w{tOd2&_kW*=)U(hz^1VIr=ZN>>;0z~5!K1b(lWrh zG$kUbR{%mp`UEs6zfoI%IJ5#~y0UmI(V1Q5YnY;OqU`bHmGE@Qt>P^feUR!8@Bvh5Uc`dCM`j7sr(tnXrz%I-gRk9lu{dd3 zj0lvvXy9C>7!$Az$v(N~4ADqc$0<*jdZTuq@uBf0xRf+txK>K4koBSNo2EY8u5$a2 z^5W(sDwW~JW7N*)w0>xW1yrd^teZdj?L03ol9D(HXInH3=nQQ4TfjI$C@`aE3_#k{ zrCzJ2Y*4eA*7Tf--dO4brB-NdH}>(~1>A*M*uGEI+s&i@&xJGNF=?3rW(*}Y zd712WbDQp(uFn)WNbj=yd>U6?jEOv_^ISi~?9rsoFi;&AmbPEN9}`-s!w9>Laboy!|yUVS)|jq254pk;R6sJQ>Ix3~JsY`$vW z{qYRBLRaUSYg>(*!!ZZIuYO<0T!eb|Wn@ZGj%Iy$_Bkd-DAZrqz(CVrtD^MHto`E; zH`EPV5Eg6UW6+h8leDX?xlLx#@u7?F3gD}b;hYpmSs{F z%`>R0y>btBp0$@TZtge}=2=QlV}(Z+6wfBt?Z1#<9nSl!OYX+CnfVgj#w&h@0oK&Krnfi~(-npy0m9~^J;Kp7z(?c=Yh)I^hs``FtYRK6j2$19wE;wy{=St{l z%iR;7z54k$rwAiNi{-?rC%SU6YbqJu&&xk5ic`}e$MdPQ18L%V@(}fh z9yC5=f7K8r!BRQDP|rR}x-~79mOaLf2Tp(gktiTpEkPjr3HcpWeqzT0q1*Gxba94UyWw!&p+e`Uxh?t8caOvseQjY+h4O=YClcZ==<$%o_774 z;Tr4XpFW*^kmXDIP-QyeV)Vc!orx)}Q*NBxXO=X%bVZdmvT%F6PXPQhV~oUw?iWW`g~-%b4ZRtv{@Fs_c4zgzpy zI(~`r3w>}XhkWNrN_h2&r}-L2o25S7$|AZ(9OG^MHY}>ku}ZS{SJ}-0<>(!bE&KOtcZ4Ttq-{Qo*IXj| zwloS49nbn&Ska#E z<6Vc`I;oVR6Aghs_U+lSe3<1G=Z@~Tc=<6jj=WP*a`ojesf{vSw z2B#KxA*w1Hme^Z3#-s%UH_o;u9$D;$X?Aw!F;E4upD^>Co~qb64hJdQ&K<7JYH!~x z#{k26zUc)B`c_#BhB)7|7$`>VT6y(FrQ8VH7gkh%r8rEh?^>!aPhWC}A9m(PDdLuQ z!S?sh*MZ}?G##DZrwe25uS}9v;?4`<2E2`9Zhqi#)>-6Z(DQt6KUQwVZpdTRO)1XI z@G<@ET9cdW6|eg(tTrLnX{PxeuL_lR{{ej}4mn?Y=gIVxXdI(O8Pv3W zvs1On=vJ@<=-Vn-vC>hC7=bWivJ(>;$U=x&ryk;~idg)59Yq}^+ZP~l8C>m8PXb}Q zIJ8t)2a1?~IT{jG4agG5t5KoKx7pTpAYRien~i6u17G*WAsSo(gjGj%AM6L;BzK{1 zTt8tP^C62AzV-?V8c0#|=l2et7?0hM9w(%_*|qQgAHz`AATj$*(z;SGxGz4-PVC(O z-rCMgj8nX*>#8s#vNb{ahWJcn3ahmKCz^ata8qRRg%?J+r@NVcUT{??gu6HM>5*Ux zemDHw6*ajpmRV8yL`Mmk^W}NiCJ#q@jt!WYw+*U=?lkEV_%m~Gv_+=rjFz~w#L914#*+;+IlZgl?5RhV3qwXTP41GE0LafXtRgR1qEXibw{pTsoUNIbH_(Bfkfx4e zOF>(mIs!f`-(#XP>z75QNs$8&f+>2~#Vl}}Ufu!6zK>Zs2rpc8=?%C6m8_t|DHR6I zb>q;4X94iH18;H)CxBA>b2%KpTlExJeRr3$>&~+%O%%8R{Fs+Gx5YCtvi{(y^k|Mh z(ee*QoNbuGE-hFKjR0uj#zt_(*Gsds^Rzk_HHR~rD}6QFY0WNYQ4A{(n*N;$?q)#U z$Xr<U)b+51g~kKg){&rG<`xpF^%fT#TDPJ~Zn)llJmH1CWQFjY@f63kyJ+8K`03 z_#YTCezxF;NhE%4tSqIm&Uh&}0KPf>rfyswM8T)wJhlJ7~*kr`s?Vz+4#j^r{xVEA@x+Pr&mE6j&+KKQ zZp(hFz4Ni@^$;Kwu6IcmU$ICyE+yTiN$ODSzys30%cg1nDZk8xs8z@Xa^_ZVp0{c&!!Z+F{6n&0pu~#$#sMhiv>0 z0E`)C>4Rscxi4{HQTkBShFqAuhFbyN^+DJg>6;NdACN0REaM`G%+V;+>{aa5}?RdMZ!d zD=iD7RT8*Uv1<_hv0fsf_pkosN9(_!PC{m;f^G5LZ?n?nK|ycgjscsbn-*o}f3_-^ ztRLg~B~p8Me?VC!2~k$&^L5Yiwmk}0{0lyGEc^#(P&4s^#vj7d;G&M9Z8YO^@W-2v zC=k9XioRbOC$?lmBLDjuQ0m;4J9=0UJcw}{<2u#&=hmcJ4I1yku}O-nlo?)kN4SYG;)IW77?+VFB=> zN;u@mcWfA!w#fv)A&kwhS10!MmM{UwC`Jx|8-ZG4=2QhcHR(8g3Z#Xv9aM`u8!Z+gC z=?6Cg`w~vRFWI+CZ^u}q?JCZ(OwZc5aZ&baDW9KGK=XMS-Zs$Awg4t0leVT>$YQJX&`XUV zRrFV+@oez7K$-#Ip9Y5Md+Q9ej~G+NJ)lJ?>ouuv2dY48S88O}A%2mRZ38X9cgzA6 z^4v9qc71|Tm*OZuRl(hwEYJUzl73I`fXx>X`z^rt;U^sBGasnFG(Xq)5E^X(2nk<& zuKTM8B1IXkW$usMed6oPRrYOk_!{qY|Ac>Hq0m=H^0z_<;s}!wL9*^^jLdEj0QI8n zTFZpxS(IyE6{GQ9ym@9dMAjj9vIM~M$vk#7r)?*jxp`)V^ z_Ezab-J>;u`J?7D4Vvwb617Tt>5Enm__ezve|$L4&dQ!lYvJQ)&X^J~k@jw+Hnn2UK?pZ~A}^HMwkYW!GH zUgmu#nerp*F%|_yr&*Bo!|EJNh%cx=Y*L07Wi815N+4E<$Iv`3+Z?lOWII_ybdq8p zqRZH?T>WP1thi6J98eRqDpSz!cOCeFrEjnRZffg_nySf|G}68uu`mS{ky6n32`pi0 zZAL<6Q?^b=5_()s>_cgIB$DETJtPE-k|oHmqiKJwl6@1_sPk!jQ6%ZR;4y3NjWBL0 zf%^x&cmfN?AN4I{XWvRz6VG-W@p%@vjS5~waEr&Wcy8>x$^ms-2K{BQPg2p2mybc2 z+dwTeo&NV%5!T)Gh|9zH)aY*cp4=siv9bZXi*sKc58>aeclah*iiC07fBrqRx7R$Nq*c0ZXRDJRf%HSzAR9pN>%=Y`~& z!nPR;UH+8I8V$4c-KSI&lScXy**-T#xof-1etrUnk-+tLYTth8QotFg1;)}D#f_ai z*-(BH84lQcF0dXM&ZUl6TI#|wl&HLweMJO+_sZ3kJ@GCA|gR?PmQ*c(ss0e!!ziAG%ZXS>?=%T^x}FIgi8bsoNlW%EWs|i z#Ge%;f0Pqn^9H2U8+S=bQ zY~^kR8_er+>4xp6ni)>UrmH)qG}ALa-1y)X&=VD-D?}M7n5ONf>YJ~p2EvzyFcXOzE^O@?d+gbCK zZW3=N#xH48v2DEkLyaeeuXa;BCy@geVD*SummfJ|C-5%w?c7sN-Tzz4D zbNxxz`+HQM0fhbRDG!&qbBEPaF3EQd!<}jyMD691Ch}e_L*INv7NdJ2o<16;id$Zf zkiGjS>Rh|@8SA3&5gX1$@Uwi?pQowf-7*t+&6smjHCvB*9}Zt=dMGh#)VeCGv1nop zH}_}|$BRG0O~c>BeyFz3Pi>x;5Y}YS6}S^QSz&+rXjAT)iNe$Brn3*?HDvL{jC{-c zXHKX2$Cj!sE`M(Q!~0Fdyf-Ic5Yq;B&eCBv%hpywYlF0ymEv18_|%2-qH{ z1Md-0>tcFhk|8UBk(3zXhh2Q}Z*UtN^^sTqub)Uf5cwrpVq}Hwf%o=LN=_JEQBS;j z`z3awFayoT%0e`__|g3%hcX#S?~7XgE|Vxd>mkd2V4xhtP1EIRa;!^Bw5{I|?Wa>{ z5h`Gzkg(>gfv;wyHa%m5vtgvFJ6(41hI?Y$Et#9N90ivSdieXtGR{tVMb_t^#01j! zkR(FPiOq>9-gob(mPJ<-NyuEVzMixRfkx_9ZzE)fjm9=!n90i8d`-Jb=vE2lXw>NU z5nj=1$-#Gfji$Ng!~MgSjgs@nnwGRbzMI6nL7db?CnUnX58IfTRl7QCHRa(1(a~To ztE8O#bl4A7kDk}x%=d2VZp~3MqHXaFoI75qb=-d<*R++p%6BSq%aNcv4z;$Eo#Deu zLX)hbZn+XCiyvgllUH6Daf#0|nx1VJ?7mobgtLD^@7P%Odb2mHaZlT`-4%w$qIneq zE$0rbHZ2=j$#&kq{qiofD3^hrUOUxJuQP%YgDuoU@7-dy;ycWNP<`8%6Tta;9yc5K>O8OS?gTsz@P5OF zjr|=Qpc!{CFQYuI7*|gzUg19^j-24(@!O=Da|L>{fa-pB1FizH9@+s$aTPm>qbq7R zO!#S>O{uOy&Wk==zXDHy9){TTJpNH0 zvC;_NvO=jLk+OPgRBVYO%aNcP4CF4S+!hvg6*1^BExdYw&pZ9;z1o!IH0_ID4Rlvp zYH8`d+|+?(e`aYL*!l<`8!$ql?`wdZOwW&WBPGKFeBCii6jeV~Rjlca_WInTTZg2wLv(doD z>i`D(R%wSDN$5$!7u5_zen(@#F8xV+v490fKhu=Bof=|~#lV=b{e-f?c3T?>87GVO zm(7I-)(PzBD0cy=^g^;X-$^$9`mH{ z0OOSa97nZn!n0)DG~S0qMJ<4yM8~hCi@v@ruO;hIWn#crF|-#Gu5&T>pS0xqi>CB; z5BFLP`8`4u64gH4DEY(Q75Fi^#kxoBb14x$Bdr?Y(3#4)yemF)S+9=k07wSMdS-TqhI?b6sAdc8l6 z^V>M*eMF=Op0F~+BSm#998Q*&TFbwCbs^(i+>Vp!@6$RCiek6Wq@R2__2ejdc0RG8 z{(bM1k$g(Tg}qQyx1Eycheva`yJRnGRLo%hwtG9}u8qZn+|T%$DU`3F#~;46l={%H zt>4>{_p3@Ls6c#hpJ|Kf>zv#Rm0E>|wkDtNai{skTyH#Zdf(Nvb|Ys54a$l;Z_9Sa zE$r5^_%SL$Q&rx*aD*u3O81p%aA!#K8RTW>zRi%oAuq1GWMid-zhr6m58vq=s2Aws zQettdRAVZu?VdF~l`Fh8k=PGU+j!PhLIE(};_rfk)&+<-*T{4+!%DV-gUfHUSdgb^ zzMBScK7LtM<*S)bFIMWmmo#7G23;Dy^$W_jxJ$0a3Kglw7f-R;?Dh2OdMoI{2SHnv za|GK1q$&lMmU#}mTHVXkjy;RoLB=m}X z5Wv3wfOS6l6_00YYRRBxG!PI=1N?2G|AxNYv$Ns9ee(r4$~tWUPgl{(+2v9`K}zRK zE=cJO6)SqS9=7(KTU~u4DOvPO`KwHEXx@bh2dPz0u?EGE=IqK}j^&ov$4-=28U1#3 z-R|2dp8F}e0cp9LxPl^Lav7PL=u^g+4;jBvu{uMY!-?>lUx#A}K38(HJq2VqJ{rU1 zV3mp!gJyG~GH*?icGiS>zB>QuJNwp~gG%Frk>UT)xCjgR;7OB67t zO-!p#@0x8j4R&SpEEuh!#k!o)0i*xW5&wMtq9#{(PIe1ZQV?@u$Nf!*`X{Dun z^o(;@c@0TEIL9I1e*Ri-;-8ZH@ki{BJXw)V^TqOZIzO5iL4bIJ*3NfxZC{K1+gXIg zuu?=>l79(RjvS6!_9F}cEz=Rd;$KpxP=cHOSR-vL8ghZXs3taXI+nST=2%ZC2BADxYxlAPfuobkfJ93Ph8G^4-u%4{z6}(55k*TfnlFclr*gxXgA*AbmUn=*i~q;4pAjaqm~6 zq1*7{1JFwA){@J+D5Er@EaM?A%*@Ig0;J^WzCpc9Z&7{ z;RfNa3&#$ex2QW*rV!dqwl69@&?$g<{dL>4oN=_-wuv5#4=rQjS_4_7Zhprb>xIAA zWWU8+2sb&|cU}66OMB+5g=a6rP1oB?Hl$onPfv%Bf0N-D|MGWbhhg7XtaFe+74~80 z+*{@A>Zn7;p(%MvTV`qJyT+_i&xxhK3T%{jXnor`?WBHoMsXyfP&>*X;F(dVpHFT{ zNkfLD+u6jHf{kwtgbbe~i4fI=b-sH-iwJ(u(wcj?jqB@f!<1cWA5n*jIR_>0aAg1B z?jf-30Huk!6>nUe;8v2LS5Stp?;&u|bM#O@V*QZKUV`LcHiUNwAU*)wSFt~7t`@e{dN86+p}GH3C(eekD3#M{5|MdVc(aHm zb-+gh^geq7Ui(l766+c8LZc}4(I)=>PVW(a3T;<{Cd01-;Ic=l+$+pR$EOfdl61@m z(3Lr9nJ?e!VvO}PRlAq#N24Mn4difNMHnxFHo8pJdhCd|kn&ON;>OH8o%r48`D$^h z^TWcCM;E5kn!21T<9FiX+wUEHd&Kj1(;W@5mlF6h*M`@PYc6FxRNY-XeDSA5gw!BP z`8Q5fKQOm!Fzw-hWTu^VgVYz1qX1=Z>mA>R0nTlM!jS`qrO^X>osC=dECcfh7kp0A z%p^iG9VI^_=$Nxt-h@I&cC*@23ug|DA8+09-M-J#G4u$G-BqJjuzSnt!SDOuid;Z{ z811+Vam|+CmBZ1XBE)5w^xl1K7LgnPj0QOK9f?Cj1SC!|>Tns0pXv6sEdK)vcTV-oWB?zr=!Giw z#dD*ap$Tw(-59pkhkxOJefYPaCCr1yTrlfr3<8Dsyc~NXQz&~V=qsE4hJ`E2*szRz z;XHcYrKJ1=0=>SK0svTEX&lV%wnXH?_jNQ5-M?{=S99#W#~utc8|Jj9OXAS9O%d|| z#(pey@Poa{4gd*;w$@tsoGN$8a_d?B=TS{y#&M`ddG|Zb$)RM=m)x7I?f}ScTKadl zyV|a$*+I{HRj|{~EJV0pzQydk_qLj^^3H<|6LNdBg`FLOciX4ZZeAy;Y$0FHbbGjY zELX9&=~%^EAxpHHu>oc;zjj==(DR{=(`8Jn;{gfY@DoOj`dstEQztzI6 zdG>-CKvV8F_M6AVe^Syjyp5lk44_Bv)*kufw6S!{RP80w z_x(V|l_9pnC2*&Ic*xjpG_9B_d=VtX_p6f%`_gut>%HSwsHuHlcvqsvz>2UL)9B`1 zdoTT-p)->T!%G9vJ$rAE9xj%+e@N68zG;8%h6yR+>5VBrsfE&&+ouYv6^zBNeEAdI zJ@V-}xOjlErX|%1_al=3JT~rTzw@sH7!=0NGE={PwS|;>O6YscKWs`LCg@bvsU-~V zom}={H7g0(JwAV`^SHri^}8$i_qx8f=9DSd3^;x3Kb_Qvef?cLz4UbEYxE0%;XvH0;kXa^khsSivj$numK8raVfc^l?o!&GYS!_t2olBWIY_n#O2 z+7g0@1Z+9#^Wm2^Q`T(@efy%-!xsZ->yJvHZmcvNn*Xf+)N#C1HS)5P$>7zEe`fCI zX|+2^E{|HvL|K{wm^a)L=SR#%XcPe7C`^nGQ0%!FmMQs2cRs3i833RCVEdEjiEVb4 zUOY!ZuML-y2j|Hko%YfCZ-!MHQVh*O_aKir-!`9n<1jD^*)18*z$ft1 zAK*0>YA)Px!9-?yx)5nxYf418w38jtA^$nBbN>G^Zos7;you(5n$iDRS6DT^m#) zvyGqk)J|?Rfvd{4T<^X5%3LAl+HX5Q6uxzp?(JAb*0{^TyFY8cYcPAQYie+-(MR-k z7xfxBEYgrRbYX7SFY=T9168t*w#7F5X}BM~Vl2=Tl0}e=$_*EFcw6D@9*jQtaNTR? zJUP!DYo=b{XR&@O{TO>dg@NyD=Z5BLjIH&m6vjB>7k8IB)2Fj zzU%E|V{r3*t zwy^vuG9d8$>ebyl9WFYQt!pHWH>N4}nUs}n7yn#IPWf^(LpkfKIl){;@0$8;pYSjW z@j-7zZ8ah=j>wm16pfx`4ycpo{-g)ZLqWU*b~O$QOC&n^+AA<`4yvl9=w*CZ@KpmAD+?$=kr*+F7e|ak8>TW>$zjS^nyRM01^2V$b-pX(3_Uo(@LO* zU?$OB+A6Y;Eh4N;;nm^kh`0nY(nxJ3CgXsZfWZ!*i5xdDx`PiU!!^Fw!9cs~#WPni zGr(8LvOqILXXhiHeRP>lRBF8D8dY()Nmp@{$)8~mF-?pQd?18RajG@~rz6qCU4zcU>P^_9C+>^lUVT}WC8k2| zBhjN7eR!-QF>}1d@|gyHI^A1-CNKAXynUCX&QiDIl=6;1*vciOla`x4#V<^(Fq%TRuRvInhcxsneB8>V8=d(j7bb3d)e zbZ;lemHGxp4`Cn4Q+3vLiyc?+*uSeu|9Ie`KaI&8xAdf7r~DQsX&(g8uXiAp(Ec=%x#O*6h}gI~lJqC4^4l^(S7Z zlD^%#ZPCBuaE@Lj=p@KL-5F~rr5~PIzUS4q#q}RmS9h3G^J|$3%e5Bb%X&G5=j<%? zbauO!tbc5%e~_T{MhhV6tpHdf0V4f0y6}~CC#Hnh)Cn4P3XNE6qd{!@Rc3j|oDUXJ z>Yx`-mM+X$5BNQRlEQba|L$1f=`V|??-EvU-d)l9GLO6BkK z_pIL_D9_h-^vH(EzF(T9+-c_95(f27X@7<7J)B+GgMwRPkuLYWk6GBg(4YP^<#jQq z#V9R8%DzJoX||^21GJ-hwgf0k=NABgHaI)T!xhI(w}gKlL;PQ9Ceh#s`0w|)=Wq>)wh z0&lS<$H-Tz85UOSWqSXhrUr64(+-#fdQkbDVAOGrx zg_aUp?oOEndknK6F^-Bf)Y4_EWn~`BTntAL7Giz`4IC0P8_0Nx<_1HqQaGIQ^ZIHp4<%v zlo=yce&dbYnQG!cd~OPBV3mpCtT=A2)vX=GGyYns+jjV5=m$2OIV-+@>-I?QeX}I_ zjbUFEn4V-M^OUk!RsPl8pz=tMUxhdJ?To(3uPwb4T9>nO2+U6~fcmu&6NvfYe@ib@ zDOE}q|9@%yfA}mB8j;>i13;s#2>^lf3lv*+6_%|nAA(L44cXI-s>Uj0Qvo=X ztok*0S{;q#GKt%xp>df}#04(uCHnCupy}9O(87HffX_;$AUD1x2#&E`XyP^;?b@NB z#*sELxL(>rC9H;iCc&J%$_J~@*^Ha7Tk$#qQLN7`Ps?F(-j~Fp#zS6JHo!ySqo3jA zY5h+uz;9u^amtT&oW$3gL0!`2x8Hr#AM%?yEB z!oubBa#)=RwBN*O=L)vwx5ZGex^XvOWjR3N1XUVoeJYe;t#4o1Hutt)C%Hm&euGxH zSregA$E=Y^5bV!Td=@J#kQ<=+RFI=~iwb+61+4bH4sed>8W8UvG%ftdKYT@AG{Ak@ zivTzgTeXFK>$l~<8?!GXR=*x?Q4w6**oN*&%(yI9F2NM+>o|&-x738REcKH7YN6(r z>dco{J1%i!Akq+5#?vpGg?}C zW=oTKj~QOv%DgLhDi9gJZHm~#MWnq{=*hPiil-mBCj(rcH)}}JO}C&ZP$cZFZu#_$ znfeHPoY2^NhcM=(bC~MAj;PMKJDxQ$15O`Mfn*3?4;OklUK1Lx$t}hJsO@|d%l;Uk zmIn>!l79(Q^SZ*e`M)>%5_~xIA4M#Ffw8b_I}LkP|BKjy%O}P{O==Zo{@P4qYcpdn zQ=_)3GWQ{UJ4Jnd_YNWRklc{(^A2xKQ(JA^_G2w45~wM5@zRN#_DF^PF8hVMSAMlT ziX0bdWcNe;BI=CWB+@Ehi}hcrqgpk(c@)fR6J>flkG-&*d8-v)D}BCX)1fV4I;@8! z%b92Ulvu&s+%WXqpQjPv2AUs`V79%`u#84UXWoMa##cV@#3xK3sC^Wbh zS>&!De%%n>|NTc^Agew1U1th;^(++Tc|etTc~dJFqS$mlUDZ~U=Pc#Pachb;TQvwo2Ngcmp`u5It%p(&Tae2;agZ+;#fD~Oq5QoZ33YR#?8Ij+U53Wx35LnBA z4ZUYjoRd)V44CG23lf9rm+!%=Ko4KZ4`YS@U2#^g6=4}6T8ANCtRkRLsN#qOji~cx z2PEsSsWlOJGKbK?ie4{yHrie#kZThYdf=fU`zXrG;&gEHh%-NL2dEPDI?_VDdl7wa zfUmn+)*>_+Q#ad#@aQTxPCR+w-*16fG%YR2gra_yguiOaj%|{vhc9P=u2E;GYn~2VFZ$RoqbM zWX-q*1N{869&oc4E1I9oEn;sM1J?(7e?nH*b&6QaJ?X?z)uh_*U`B^xPQT9o48Ams zmlSc^Icf0&&Z?#4d0HR$@hbdzMiAszC4Eus7VLWfjg0|h>Pg}r{}sg5NVwHF9yBJpVt6p+!1-vWk0b0?ag!1QyIo8avHVCu1w$dhh%6j2Ust)3p^?<2@%5c z5}@}^47!QnN07)A)1#(!Gi0?HrI8R&T`RwsNSTa`^8-qLc zrjm@D*+6qX4L-=9aqL&)sw#yFt^%T&C=WMFyfa{jRIrbgbD($;|NU}RJFRi-xW2Sh z^^e5$bD6S<+_$;Rq|c`1{4}-s6nZ7fp9gMOUbRS8Ka z1w3x{&>QI@dd=*>!qZsaMFkynUp#IajD$H-hK$b&l~!$=M8t5*9y>q|CW-?p#3*975yvzAzy0u%BITLowZ2Ya zKu0XQyTNgajk3>%f@wDwLfhEKhE!zTyH{WnBY49=jhS}kS?R!(ft&7}heXzAmv61o zatVHtSrWnZS6#I~p2;?#komF6t6EA6CvhSWg*UXmKjs*5&;K=I5x1 zMY>PEbI30m1(b&-W_Gi%+(LEY+z=OdSe^S`uNjpZKlP^n&c)ho(#`yr8EA5GL!7J7 zyPz0NXgL-Zh3HpDpf%m4TL=>;{$4rSrnQ$Z;}b*h+zDu6`g_rzN!rgROW!cD=;Prx z0NMxSp!^a@PyuB}54BjZ!+U%#fhID6fEe-vTE{ii-sT3Y z!tKHJAbc6pD{cJ$`a{3(W9yRvAUi*e5a$Y15Y(bjhq#W88J6)_)qgiOJ6$RZHul%k z=z3T+0jbzQlM)=^3oYPi>_7VLccS%;U3?=Y9j_>S_;v5k*=yn^)}u!@ZYhNlIGv@x zGNA7#{@qzfo)_de*IN7_l(QM8_#fYQv_F>yQ9(pJDXe0W3Mtd%*_b?7%Zdx z3>s5>+E9aBXNIDDt_<>$MX29KR`qY^okLabdul5P1vfs}I3;)UAU8k$q{Dea{CU(} z*q)lpxK{I_MfKYi>F$jg{Dv8uE0U*!JqH_#eU87wzbaNPf4dEqdHyv4xyc0tHu3t0 z4|#0{uVxRNa|BKSEnJZczRxySWx>it6ImfWYXiAPQb-I%%9r_-+2Ih$+t8As%UBWG zEivT!S$;3P(U;lfir|Tq8)fTJoX~Gk=M=9tZ<8Ht_>{$K z&nWtZUSwLQj@O)sHAOGK^WoJaj|I1fZa+p(t%c>`k1&ETGbwckg;ofX z6?kebM6Cx0*JDLi_(%YB^MaON1E(ZRggki)SXW`$mo85?4=II(C%{=Mpq9W(&EI;& z)YHZ*z_v1zF>_~i`Iufn%8*5*z`2sk_lusqb`W*&IhUq?Yk9h>(L$h1HYfH(?}*ol zp9VdlQP&;reoym8sV5bNVS8kQL?iC_^w?`OXtBAKN3Vbwi3aR+HG$2~gD12`;MJu$ z^+#;ep9_9J!yqeu1eB=uXy-+t#=#+bThoADx*940++>ldM-|t>eP;`9EtAk? zQu2#CnZWxECQnFU!OMWTLDO8ivz_Fa(;d#4<;h2t8RVBM`|FNvS{hs;}| zPfB~c)$!8^QWu+w1?Lug5E7I_@D zOb?%{@B;IM*x#Xc(yKKea9n4=D`?#M$5wIFl;-sH8`%mmtNASnE>vBc=3~!STfk=8 z_8|U|Jk%-RUApFhkmfu{)Vxy%NqZStPILQvXjN9@UIs{6Me7eG$m$#|WHZjxB_?Ig1mFM`T|s?V6!E$pYOcNxQm zoe3>#kZYg9V%q^JWNAPvS7));0a6(KOA6tth%l~x72se|E>Fy_DDo*a543KqZTNGHEj=T8-O!;&n<=bOYb53rF{HEuLvHF++n<;3<){S2u8Z5-Qf>d!fdKSwIbb z_G*jK5}NHHZ>$S7ha#p9Z{m7j-d5szaJ1YCsEKume;CeW z1^()s$&#jY;$gI^TfdS(b66_(_;b<>{G<5 z*mfGWIzm??Q!wqp19XW<1Zr^Ey?|-J@a1^eL#IT0vQ zZKR1|Kk;x{a-A0OwLyQBUwh`efdiC|NES1>jN^ALebiUSmV4VL45t@TMi!QVeHQkU za7%Z&S5~cxXO1?5E#o*%KWUQ)_Z^XEG!KwoK_C5Eupd zjz9z7Se-zXUVeL45&l>+w`XdyIW{Xd2Pv ze>)^0>JZ$M9LC0c4pa4|CwP_J>Z!1Pj9xkdY67*$IRTsH}!BVF9Nl?J(GS28c%-+qni8|JUOZ_ z>)g}cZoC|TZ|&pYdX6Z+Mn{~c>X!LpGe~a4Tom`3$g5gELj{8U1|jU>ME5f8)g$NQ z5n26|9kH|y@P%Cpl;6HqG@8J$hw?ney!2S0= zH;e`%l&rMIAGXenR=CCJF^CNABK{woviqrOv*7No@a)>8Pe&DMcI^R1Y(v<~!iOr9 zl0}|xP&#`P65_S%Tu$cfIh8EcuzUBeQ6C{9S$Q9S|Jb<5}T;7XpStU+C9yvL~e zhNn6;>J!)+BDm?w&T+zn9p`zRDtnL>KdJj2{MT!B8Ia~7aGHi!fa|Xm0$hK5>8`Ky zwmf0xzZ|X|cFI@u3zbadh0F3b^~tkpxV3esYxTV{6%U}NybiTPjAG`Md|#6%3!G?p zG77MaJnt6cBAP9`0CF6ciF83DNB^@=`5b2YBFFl?#llPty1v(_g*?y}vX#lAG$?KR z{sr-yakggU{1_RjW}BJ$(Vty*67=59w_fl+Jv&>i$aIF`yAqj-bb z^Th8!I!R>y*cw2M)bEqv5Cg#>o*jp6P{M!1kwTEI`BaJH|BiWf{B42YSmTpoeR{fy z8WghQrMcxgQx;D7jUtl7Q1TrJKMYre`~%d8#OsSIfulB8tRNknb23&7CiD~G* zv=qelN7VJaaLAiE>_2?BdHLR61K@N|C$=L^{Jc$FM$N+wyHvkc|HIe64FvOkUPy}| z4a88@@l+reQNCbLeHahbs(D48h!?~WvtHevC1T6~*7;}M+Dq%#UJ}86+`i~5JS?r< zpEy3CV&Pub$MZc@|J!HSsp)dLo#)W0!~VInhdW$LtgdX|u}@DZdCP)k+VJ^swRSSE zBrC={huq;6{kPlepvkFG+1NHHTU`+zmRhe0wyx%NCG2nkcc{Z&I5@8@d2{=-MQ zQUmt`1M#UcPTP!I;oieSw7hh~ieX9Tcn@iG%wZ6wNUof5bV1bT5^Rgrx`!2^7r>jk zGy{F^N$sx*Or4$(p8PEjWcr8{nD}dG$}Pt>Hpu{CwBYR^g3hGU(7t*8q~%Ju|KQp( z`kvNz;OXRH;@q<}y~H7m0~_akYzSUG0rs1<)^1z`B;98SntKNxFk;H)qv@SkYo;tv z)J6^tAZr^M+(c8Uyy=IZ-$Qz&+rTtdFGageV^1Vwr}%4{N;zs8J=F^~W#|!`ml%3w zHCZBG+{p9{^-2+XWCQr08pm!-C2|{PMhLIb<^c#K@MP;MwM4*wz0?0G5v6{0Dg~?y z|GVxWP=1EQW{zqZj~q9;cQn3h};@}rTrsRwr9QQ+y+VUQ@cf~M5dwT-xy>OW&m ze+*CU@y_BpE4u`rn@*<%5Z%5Qrc-*6L8r2Q%2vl3=XeKr-H-b+l3VBi_gd%sgpK*KD-V)K^=sl`ietoOf-7BYZ_z!eRUJ8uRu(LN8 za-EaO9U8LH(B3?ro)QrzZ@9@Br4&R6ln!XS@mc?>3-@h+>^mw?EmUb(` z*8WVvVV&810edCy+bV21^furgS?{-z-sX!^H_x2rD2E+q>PC-8JFaNoq1jo)KJOih zFRl-IMo2ih;mxPb&qVC(Tkc=lxX0|m(cs-z-e2N>uUR;0wQOw_r0_^R<{Ze0Tk>YL zrfH3MAq;CnG_c_NiJS!fvi+X%Pl+>>lb<4rL=UfgW7OhTd!sUuk()D zYj1ZiE4Zr`UffkMOWh3D{~b41gF_(Mo9GqBjtx1fCu(-^EIT;V(vxmV)#$||Cwj?U z8k=pss5^QThRFK`++Nt(rTys62{~;fmen8{!o5o}v$W52DtW=YSZTk9aKPrGy79`C zMC;oSNg2MwB}*EJNsHMlbtZZ2fD)xfbhTWT1B?;aiW% z9mQSSMKN*YxS5+RCdGv#h28iDrDr#onUF!=9qkc{maLfGL%$N*J*v{ zoNhO*$T`i8*nQsqmr;}tJntAYdG+F^&>r&uKDkX`U^ADaoBq*fZ;_9?tdoDvP*2tI zveJl{Eef9d9(OqPJ7iheIY`sYwhXic2hR@(mD{y^N~{k4RK9-VxAfaylNUqlRxf2T zBBwj7A5WYv74A`bT%htX|NOIUyR(Sj9Stm$HFnxPao_VC26g9;j8Yj6+mfn425i%6y*wQF#q&u<4vzD z?F$=sT;>NW>3#wx&nS)|L0)d@vtG7>7DWo$KcbM0f~Rq-mln`VV^bMnvvXOA*H3|A zemgkml(Ibb7lqk?R41pz{GO1o)SuK-D+-jxvDwj6g*R+O?#GyC?&(Or6CgL!e6X$|s44t(ZY`Ru48WbhWRqH=G+ zxq8UM0`{g67CA9pu@88_3vvh5xE_?C>LbR7AxjZ(E+`A|{m66t}Pw>>ia z>g~>LUFFweG`+>|zuj{5l|qEJaI|QM?peNl3*q&&@~Z+ib)N;9jD!bivCN;MCGU(s zu)TNeh|uF(pBBN_erD{>(CQ_D!c!Hn^C-Mdw7cICHhiLS@zwZM(!E< zFz6#d`IFwQn5rq?gMVLdL~<*_cs(W@7Y+C>fWXjTYSJ55-9Z$(E1|LGMxt?hteGIq zZy~AX%=g4Y@PsI^;rqB*n!GbyU^glMkE*whi|UKsg)vbS5Ctg#38g`#1c4Ed?k;H% zX+gS1KtXcohLIe)TLx4*q`RdXsexhQd$<1Xz3+Yh;X@32&YZLNif29RS-)y<=}ywP z@#!%z81rI>c`XtE?mr;T=ouAUmxjL2`sD+je9YaV_@m_IP}(!kI!JvjTWTuEI~6Ge(-(p?3*?`eA=QN*-6psIf*>v|Djji5QAT2B=Z$X~25abvpj&Xn?zQdZu0X ztdW%bj~Xo}JLPp>xvxdJB+EYcSw@Da(jF2&VB?ULBzz2u-BR2cOk5I23YpipP&JFm z&LhH0T$~)c6M}CyJd4%#z5!WUD;B)Mf@kH3&4cAD-6ManuPijGW=u}>BL1T&%fk6L zx@>jhhqn0wuVuLQRRuJ*cWeQ{8fEk9aIkD91=*Vz@8ratpERT(BlE3Z*CX9!f3qCJ zEfucV^N`&vGl_7lTu^TKhknc}S0e+)NRezQuV9T4;}C#aH=BsJn6P--Q#}Rgv-${E$`MeYpaZT@je+^X4m~A}{DOP9R6#{h%MD571*=^Uv#7z@$E2 z)W4C71vQ7#1?dPo(~H`5$a=XjKBVZ}{QIdf1Qme>rlX(=eD%lq@2XWOSb@=xu=6Fj z@7HaXEPn?PY#+$0@{8Jz?ws1-G2F<#LqCev|I^PR)4BxhYXa^5|5Sn4=%AC|N~-O5 z+3F{_g+nP6?N3A;GT-R$3DJii7UVvOfsYV1Mb#FEco224>sZ`jYKZe-d~qdy4fOm` zq9!?LTT8mTi%1bHpigO@@Zyio}3-G>#r1KdVx@gCr|O+!`L= zib~aeZES9&AZj=$Uh=a!?enb_VmX;uCy%MJ-*QDZnz!{d%hU{g+{j>~;&~_ATBncC zD)bM^C+A5UJW9#CayS(1OE|0V_p3#AkI7gYaB?sriergi4^(xP(AK>47YMNqp!Mcq zcx{RLvsL1P4C>;gakVuhc&>nckG)j1QtxQonw`zfem6TGQ6Po9ef^`O%YK7a;PG~j zdVVu^F(^7lrTv8A_s)Ghp(HGLC(x5@?gm*!Y15)R}qMhP(V$G3(z$x(F`i7l_?p z^dGt-6dp^8hagaH17u=#%v)I%yFmR$ik;5^Wgw5Og&NWyhQ$RY% z@O&Fly@a6aqnZ@7X5AA7Gc7mSpaJPv7cV$&O3Sx2B34ZjPZIxPhX8UYG0l|86yvfp z4KiH=z~3u6MgSawe+^73taq-W44OLVTqdY*y{7PP9=t;_F_1i22YPBT~6jxq!zDc{XJK_?R z_x=mV=Ep5>Q<%{v{e=6yH6ah1Cqam~29f&rzG?ByO)lDhy1KH9kHTmSz7i(Nd074o zVY%9}cdnp$*I|o8$FP(Tz9 zHA0VMj&a%UQoE?vgkL(B1CpViCz1lkhk_rwwZq03K*3q=31pNgUY%`Ya0&5E3UCE^RXyF4GogV|}B<)#Nwmy7zbQK@RDsIZa|k zPiO^JSzJ>n#fyhq~ubeir z%Q`oYQw9>bP7Ut*tIgu#Y=;2POp+=fu}+vr!)!BV96 zI zodA#Cvh)?hmi{xWuZDe%vFYo#pStb|zD&9HhMsVLTP3>NyYZ(@1K;(#dQCsmK9XKr z&l2Z3hEnj3G)Y&GBOxYtGLZ+#{~Ky5-?B{jAYGW zAJsFJ$UJ7n1NH@~G_MV3b>1Y`j!$r#__+=pCCLUi3%J01>(g!8yKYCJ(Bss=ODOTc ze*^%maiLf`q~8hCm1zDuveNc`slS^r*6r*r!}-#<8NzlI?e|uF`{Pf22A&EZf$vrTeG_`iM?ooDv7e6wtVUH zGRwPn{UNrjsVWNgsYa06(&nm^gc9CW!fi{#vDc`-R#W(6GO4V7mW+YEZlm<>mOS%d z=9M$IME%R=G@>2vBF=X^PxDI(GHKY0cFbaP(r)LPQL}{0a7bQ~?eTK)KB#rQTFw4A zxPvT+bY_^tizP@lT!)jR>MqGG=IdlTq)K%0Qy5sl(3=$b!r!?a-xEb5TXn0sJQygi zf9_B-G8UY;TOc%AOx>d^R9!_>DineIm16Xn>}$!(d&RkZrT+f>*k*&eJv~f+W9==* zFFFg;9FN8B@SUAfykPw(&gPk{=j52!Q20U6^>@t+n!SvKKQ{G~np|Bh6aGm2%#MZr zBKw!HvZAZ?aaUN#_V>FjTjt6h{vL2OtQi(_ptDz{VAud&B&mV8pp$2vPwDNky267{ z#j(#aZ125bm8TSc{A0+5wWFID{|>sJ;04i?vB)-3P+X-4e$HqNBAdiF0M9!=FB&_` zf_FgMC!BQS+b%!g>2sFwa{D4CanHv>NixhJYl2IEd?cW2?8rTCCOaS4@mZbWcaTj3 zgsafJtpWqJ4UdjZ+yxo=H0&Ji#yQ5-nh8pAzqA3wX#fK171r%G+;Wvf_u>gJHcAD$ zesc_8%BnfENNs-rc4odc43{f6a(9N7`Gd#9fOJPkF<&d!#M>-;1@g-UdAY%A^LlzZ z%KgOLEHqsR%l_xZL3_oP#%=a33r?T&!|hYTF9`_ms}T?uVQ$LPNvG@nYIOE2F>jDt zdGn0*3jy28fGPn!V(_DOjOhJyR@p=G#D?l`Id)|=O+se^H-njzXJ#%Pa6C-)hT%Hl z>1>Sph&-FvAUifo5~-vc34EEG+)gjuOBNs8o&0F~Hmvlc})x$6xp=c1Vs%y8tJAyV6|Ig{|<|hv( z9qFpSg_9S}r68x8Y@f|!VDEnxI9}x&j91*%DfQ|I5iB zlcx8v+!o^{f@N*docDjRDXe7{|=nHAFuA>p@936FA23-3lKn*!f>}G4-VRL;P%jX#5^>D^%7Lc;66@`pfs?bDgK0gq#bXH zz<-ci{S3p7&kN&jYaK|U@?V|P+H?cp`1p(iLsNV1nLLDJu>|rWTlH8F%~w~WrGdW1 zg9Rw&xIwt3c##lO{}1hh0JLwep%#HR*W&`4w5nPQSjGi<2Q11=V$!U zO&?4kij(VnGcwuPak&atKzh&1FaE(>`!3nO}E?+?#CoL;pS1U{VUggaVwY{5}yyqqdMou!wXK~b6 z0oF@yj++c=6KXxDofGLLf*QyCZ=DP{Y(yM3->oJy^1t-9R_V`r6QIj#zx28`m0BHE z5bum=p8bYDQm|hf4adI?MbjsJkeGXywPfO0SaMpq4+Bh$o80oyr>_F$PluK+F5j4X zpzgIBw_&uUPb{4Yg`l9nIcv{_yPPp+dv7_BgpXwKSSw34>WUwcofhyVZe*|1l>SRW+BB* zN_o+~P&m2<#H!Uc@n%_Ml#+|W7Y1_*P|8yZ@s2v}58YbVlvK1H z)t-@+Rt5DkRloQhcpYYaN5`!Fi{Or0WBAK2^ow>Wc~S+Rf@R4Cm_C^uT_;=5DmDLR z3r3S@)Jo&_iO^zWE> zDRLJvpETpM_rIs)<^mPAb9~&ABPl3xWz}#@Xees`rQ9sEcl4Dlz;#YkAge=T>I{Gx z(CqFZuwzV#CC&p{RmITD*{r>sP`W26_;iLX_#gLpMv$xSw(UGG!8f$E33mi60*R0( zr=yS`9tIr)1PY86`7XyD1R6>GUd{I`eGRbx{ATnuK+%@mqT7f|-uEP_FVp9%AZ zbe@XSMOAn}re-q#Fq(%2T)78HUB#2+s>>0q$e-1Nco-0soX&kbdc5{cn%?* z&8(~S%Vna+v08^JZJYL~`JF4SBN~?3o=p1`kH~M`GwFK-#EkkYi8Dw7cz&a=jjDqE zOu4atFvw+;6r$)&=*HE(Z_(9SyG68X(mCKB;#2c}`P~*rwYwKr0a2FXdXc3hR>vah znEYu{PS)$5SFy3Q_qFYWwf3L1lwC_DC)Q?0p>ar}hW(^D{~Dv0_3nYz3bzbB-xZBc z5Z0p6t1#IQUxkv?3OG5weXH3qvN2<;M`=83Bs%9i$lTS5#TdS`Ev$5q(a*cD&6TC_ z^UC9>9x@Y|XVqb4Va@Qmt7)V{75#bvaqdZu9e{C#}ETajZy4~UrnL6LG5!V<}O@UuL z5XO~!V89fWp;p4-i9jG((#`i3J`LI(s;>_>VxP4m!(xriXm+C1=P}PW$(ip*mGt@rd_73KL#n=6H7ejW`s^%!ktwIoei)Z zDcESpj}iJ`Hclc^w05L7l|&ncI;4J?{(`BQzBo$IABr&YT1Pei#m5+}HXnrZy6k@K`L2N*d>gnh~?}(DS zq)2`e_T3?Bq>b+-?7dAvc1c=mk|Z4oZ@&>Yx1?PQJrC8x(lIV>#-!&u<*!hqFH^8Y zfwa#6+r6ZJDEH;B)+_#)JX|#w zZ3%etD|`E1XYW1{Pd39rw>s-E+Na7@tok(XZ-1{K5!W+a#hss_^frgr2h|L;uzS!y zz_4V8BHf}c7-|q)Ls%2nB~*0NZNWKD z1eK}Ap-Xzi!uNggheNnR45>=+Vr^DDB>7Dn!(m$ma#%0V$!Gcl8oY8waSXabxiy4C z8Trl(p5Zq@+*}JnsOX#}XOLcj3U^@%?6P^``ipZ1-j0j~o!fllPJ;`1?bhp&+uklI zd-tu1-mP0dPGK&~oxFnWfmYNm+g1v!jH=@jw*AJFQ`I52%9MC#4L{-AvCZ)D@)@=0 z{|K0lC?ZWFi0ONWR&{zgRpLwf)NUvbV~r}koD_o-O~WGGmNNnq!ydaKRnb@i-@`^707J1fbM_I`d+!>P+ATkf!jteh_}1bpPPPRq|~z_G77) zQYbL>%iXVE^5b2TvFzXuE@Vm17zLa5=l=eVH(jO^BrO8uf;k@_HC9zG_yrC8j1=70 zMjZ((rTAlbAhxZ2To8-N))=*%)BtfP*+IUX0s}$>x-tU;s%NGDz{*Y;h%;LB6;^G1 zoDq#$AXEUmmRA0i76^c?ZzDZ&Bcqhs{nEGL+5WY=ozrP+@>{;R33+oTP5alHjqo9|8wvP?{%CM#v zUUNDVkpF89=6ZoOAj+vOakfm#@B2vL6UKDhg#8wOCUMqOkY10-Bt52Mg7J~$pXzEA zZ}~VkS1v>$IfSOpzdflex^a^vnk#9qcLlYmSRyDWaX;EKIt$WLnk5it3;Rq#QsG|z z?2fJO+p)rO!UxK$dGS~E?}_`YPcQIKHATUieJ%4noqqpX@d$aF7UAdUxDLzCou3xy z8!rwVBg#;ZDl4*N5E`e#_woU=;>GbaI?QbguY&0 z97z@%bY&^!Z^0Ojfvbv7DG;27OOAN~fNPdHPm@I4isA4L#-UK0F~;pE9?}MUzukZW z1Nxxg+<<)C9|Vw3T*mJ~7yT>c!o`X7>-fUY9 z<+qflp7%y|9#9t+GQAb6b*oe_l*GksESb6^OZJnhg}bg*tkDFcwDQjVQR@7D+UDqM z(M?#*E`LBy8k%eu=YA@Er_z&Nj?~z|xuJXgX*@%CNVBDdE{)go=gE(0*&$O49{P30 z{6vKMDM4P>0!=qZ9qR<&@S8pF8fWcU)D?Vou=NZ0Oew9Oqg zxz7vFxw#JGf}%2uIoUhkh^|d&l?4S|>X&tvIquJ{sze_9zq|SA<29eLA&5k3$SoQ> zgT9q5-A|Fi6_+p>8u_&l1M^fGk(}6-G$9&85lf5m$hM&JTg*p$0$Y*@xa5>pjMv#T zMC}idrvHbAx{SqxSiL+2I_B@*Hi_}`Y_1-;f(B@4n&hP=4iK?e)d?q;_L0>xA4Y}g z6!RhL-ZKg><#k7O~AMV+Pn14DtTzw$W{=`Y()Hd$3OiBm>)_+569j^WPf zXRIsaGrUi2`3dozfyaP3`Jh402w$L$p_nCdmBB&Rc}R~>*}#0*tMhW$)*tw56B?%l zLNMVuq)m8_Z1wPzb7l?koBISKLj?V!Ewu-TU^*#wSwJg6-Je@A@VsRS{nS^74v%yr zoXa-wR%x5oaamcPTv2qJZQ_#-y+^z7kjkZM zyRNNbbK%?|4|l|MCc&iq&R>9r^bbk;A|m~KZEXA^Ol0hM_+8sF9e053>NdC~Obyw2 zuOsy|_e&$Ug8Dd$g*N!?9!1}5TI6MB=of)#?GL_-((+Eqpkl|K!Y*2ogM1v$H56FM z+ZaXgV+6$wIupfa7_H>>ME4n@Vjm6;ec7U7PL2(E_U#qZeFcG0jzVnwo+y)z*%ywr zVN%WaqPM@KDO`WYvG?lQc*d2H@&k@$)rL9FBaD;U1D0d6V0txWV=9phO=UefY_{@P&HIfQaxn7%FL(skoF0hpm9 zbHI8@4EXKhQhE)SONVl^x~ehqSpohwgt+r%j9CRjf!Y@3{s9AE*6FskWE&7C7J};X z1Zfj(if&72f8r|0UGbxoMV4vZ*mfQbh7mx%-RJhX?$a6qXP=&f;OI_O(3gMn*y89@ZLW1ed>Uwrz zE%xKK3ECZU)@&cA7D2aZd-`Yo24b4rZTr|TIxV8Hfp?DMYe_J%(euZZ6c1L|I)TZZsACZ$L_^G4t#P4Qx4qI%2tKiK`{Rk0Hd*TWX zF(ZeZ9m2+&a&*mXH*N;cbG)Ju7lGP1oA(?`)(r4ET7A<^dnIt8O+@bXwp8%m&0M^O zR01hvb?>U)RAE)}!24Y$*M6M)U%*v`g&|qRc1ZIWa`YaAj)i>{my7sw(O`Z+Acp+j zonop%LL)&H?(7}|nzDA?-vPyna~)+hN0q_M40M9i%A=k4gej!SI?Q zQ%Wnr(}lx&4kKM=&Jj!nv)-LJ3yQ|@47V3MWnwTv)*}N0+8spf;e5v3h$e$J6lsHe z_h_-60!B7hwQm37DBi0w9@iQFE;Ys5PAXe%RxplK#!y%$mU_&vq{yv_X8ajf@}nqe zm{}B49aC=MG{LRH!U_@?p_jV{=78=bdTGH~ntp2<1H1AOb|WUYclB}3+@BG3nHz68 zA16}8WN4{RlvelUOXVu|`PGt%uKwuQ6Y3mrW`mQ@kpF5lF|{YN;V9_f2%vx+0j> zNN?QNVQQUy{Xu7PQu>qh0vJ!tJnrX|9Nom>jtu?i2P{$Yqyv>$NSC-WvHQJ2LA}A& z)=WxFkyEUbk+1!I#W^d(44P2JwJW=uh3_TINWvdh{6Sse95+(U1M-u1XyyHjSz2bcAwiXLO(gMf>=nzsk1QJAA&pxX8$;}0t{2N5LqZdov z{{UC}A`}EwN_y5YONwnppnVc>F!J*c0GivjWI+2|kubLA%tf0Xdq1=$f-`svGcv{3 zm71}!_F+w9^lJ<4Sar!2(o3W$?}A6vQgTzZiOr0|EXElbcz=Z=h9&&y<9(U&ckS|5 zg9`G)3P|;R)dKeYgtZ;B;Jd$iFx3%c%~lIW4IYsOUFsXcbS4tb(OGaxIh}j(y`yne z^>4;jqn{NXVcr5#5NOnwc>ne(c2)mlITa+m?Q zhzPZc&kw-dn)2z8~`#@ZNh0Vb*CDT6#0GA3p0iFq2AS*y8c9 zx}e}jettpcWDoaCTRk%Fx#PZJeQC%y4F)JY0>ayd9;RK)@{muTCCn}oA=<|)R$mJZq+&)9vf{H|fsqx(yTNv@d5 z@7?H(^QpRc;t*#qzkI+`3#hZEM}OUnmi}jb zIZ~^`{fJp4Ljp-euHyg+OR?h^* zOZDQ{C554;Hurwr=uD~0>~NLsC?Nw!h4_UHHd6*uKl1JPTu5mE^CaEWajKH(ja1zA zSd(X0<(s3ZYzfr0$EyT>?2>w-OvdLH6ebtQCXLF@3;2oS`VJjek;(U51gIB=bhP5T zHAgMj>=`MphEghURn#@oQ&ef+n(GVp zXUD?_BKf6nlIS^n_H;!Rindmw9~$UTKk9k)!O|-Ji^lhQNBcbOSY>o%;BbirZT>=S zobzOuy&J2wjDcXtmn-?bdS-X-Pf%Rf`dA_T^yhvgF=^NS`jor((Zh>h9?_(b@bb=sjj z?8PR4C)@CsSj>Sw>N8w&2ZrBSN@#>J;5VdR%6!VZ)oUC<-1kb zm@RGDd*8Xr!UvLQbe|Qh1xTWvR1=x}AYc=8)*J@)_UDgPbpf(EL;Zv!es`}x# z90i=>6|Wz$^wfTNSZF}qcmDC?a6MJft-|d?ez}RcZbtavfoW2mcWI{eeVXv*!IVW3 z^N5RjiPzy-%-T#rNy3cGAy4F2iMI(zou2<-wDAqnhb>Fw=3u-%_v@(~xxC#i8g#!K zO}n}YDda1NDbd7l_^=C7D>iOsz2MZ%Ay0c9lDp3sF?7F4f8$6@X65)Rao%x56)Gt2 z5zVRiy)JeBGMZG1r=g>Dzr=l(UD2c$2W@9ea6Hm?ntQ{?`fKPI8h&!R4aUwxdI&S1 zo%PAUAmgXN&_?89+4}bAt>sU<-K!E{OA7-gcMr7N1sp5jC8j|&4|(xmcf#ISo&cgtSigrB6O(m8h1?P-xvN} zX?F@~C;sjSg%^|`AJ7E;xuOC6|NSW(ecCQfq57A^2$5Aohpg>pU(jMp)}qa-)ud14 z`ux=ED;QiI&QxihmzY5xw$+G#hc9?&|3?r44pX-VD@!N!`O6IL$eXhOI3T+$M3%Ll z-yEHv^K@IaV-_K9Nbj_Hmn8rAs8083GttF;W4@bwEtLe{{k7p%N8e;uBs*yEgZX#n z?%4MmfQdi|E{9Oo;H#t;J`(QnSg$>kxz2Mp+}Oj}pVlWSj$_TD%?-AC6Hc8&?c7}G zM|3xI#9xl+Xl-z2KPlFFZ~CKhuZp3|ShlH6pY zSnpq<4_2oNvLgy^zdjsb#$#HA3iUqEI$jjd|5k16U0YLRq!Uq^`?KD)Inl+fR)3); zEGwBIqEBHhomR2cn?lS&y<7ddaWIP~B{564B0W__52-{n)0`8EE}WLTn41J`~3`|B^TpI0>^9S z#0fo<)K*d>3$K#)?sc>p@ps<%CPQoQ$&^O~DCX=ojn1@K+Nk}ex|+JE+LC8B9)54( zx2RUPH{aZs%;?jHCcvUs0HIH&jE zS39h;7uK$BQ8__=V)_2`X*uH)t3y3Z6w`uKO;J_l`CGouYf@1~=`4Yf@98MZkiQO= zlczMO%)i_VSJ96*j8~=Vlo$+Z&Oq_oNKavME6&TT-=0L@b~Oq~^LwPxUUwp}5i=q! zkG`uoVl`^YGR0vdxk`B%QSgLm_(;&|r285=@-(mWNx#yKwO2;E;qHD)X_Fzj{bOJf zl$KxZ-jk(i{#m-9rTHikH89+g>Mcz)Q;Vh79L8g%A@HvoK3Ftrg@3sMUT@VkxDIQW4d=k%=sQ%ciGj_gnLWt75$d$3c@w24sG)%|uzcu0CdYJ}eo#%tR_Hm2H$byi2IV{I{@UMbi&Ws3c? z2JNPT>`v7WR+z+-n>0n1xrZK-kYZhefnlEn0LKzzy%(@0iyc~)2Rhw9|b1Z=1B7eMQmyE25V` z5bQ%0oMQO%z#0#8hxwP8ru-YaW%&;{V+lDH$q5z zUuCkGXXL&E;U?U{iQ;m*1|JD@g;ysWUtLl`H{zh(a<86FEg9g7nmkZj-P*GDr~`Y- zj9i1qh$G}*OT2Yo1z2LS+GWAkVzpYkgXl+^UxP8CPVXiXik9W%8X$T{yOqLLnIn4h z3iT+I9^}h{QAL>@D&JpsM|q7r?pOSGb#1^{d7>?n)|gT!WgiXU)SvBCeq-3rI!?{@ zDM&Z90->UNwwnZx=K{J8>(k@8SlRL=Ad_J zrlO-M!^-#g=S8wO!sEuQ*=`@ z49S-fCzW5c=anBXQ>U3KdsI_^Dgq*ixY2 ztg{UTB8TxNalK=m5AB~|A^doC0CZ4;VR)xY$88`W6!PCGzp_o9DSUTP39n1YjDMj8 zoq{_)bc*dYslGd@1UnAIK?eT*&W+_XT=DcM;n!Nr>C*bONE24v2ne7>XPtpDjians z6O~_hMO~TnyjZ44U_8sWRt?-bOEQgcC|MWwwtghPoKMkE!- z#@EJ5X?ZI>8uUHN6^;yia1&DoT*j)i<-L)f(^fl2)Zs+zoOTwuMR_@?EMNP&FAd0B zTl`fs2tdCr1Tx0(ha_J9*H@bXunpbs0L?eb6Of${;(SnD z1>1M{qiaUj?OQiU7a2Blz%1t<0LY-kJ7R`y?n*2rEA&g0OZdMn>C^LH&^sjIUC@u|>>O&WW=BB6pCvV210qp%H{WyY7rtR%8b60!s#j`*qeWlu;b_EKr7G~W57zeZ z>MW{fTW7jQo!@QkoCGdT(}8{gimlEDpKm(8xdV0|uavJIbcY*#a@hm zm7GPDLy=U^zONAbh|J8E2QQ_gUxt@7Sk5(yWg0(Ro5z6(9J|GyQX7o=Z+p$(*_k1H z6boG^-p5VcE@M8fy7`?#41TUNv2^&bapb|hU(}jLdMWg>h@s7qg`Sy%Lx@k^;1~T6 zukibqE#vpt?EJ7L!}d*{8xsfgCyPe#YGGYz3rD{J*YVZjZ9d|Z(gHjKtb5oI`)2&~ z#eDp3Qb?xXVA1ORtL_BeJdI7kE(;bau|N4t21(C)T%GkDph>Rtx_r&Il{&9~U zP=9w_VWO{?Q%dkzW3zFN*W>y7zV%~7+J9IDzJF(phVn$zzbvtL9DJF6K6c&R`BPdY zT`obE$Z0oyi~-$t#(b0UZez(#ot_PS1+R7&8!a}MxruMWH6o>4$HW2*+OV!s<2qL2 z&pI!H*qZsUrS15Jy={y+N9yD9e{4VF7hyo_Km1#{#zH4~-=%`6&hU_x2%N0aVE$MT zuLVNUmTE&d3skSoS+|0Tf;cp0d+tdpK)4!#?Fw}Mod7>bgQ7w5B80ru3z%j2DHf_S zuf%Fwu}m+G1x7CehV^6sX&3ymeV<<}tF6cF^LlcW3ySo_?eNRMn#6|b-&LC6=Q0q6 z1EvPNqi?ZTS~T>IH|cM2J9cZX4;QpO(Azt=2G*eK=FUKJhaLSNL8-}Ds?`}@I!}eG zg%ef@O)u?D>+!$4vUL0t4!dkWMa{j;2!>a>#jYiwH}@Deb~YQLrAlxy4C}vn6TF{h zqm_+YGz@AzUn{nFot7nEUV#oZT}v_OW_H~^$v?;C@oFXuwgk_qYCb-vm~RQi=JU$b z+-`n8{b-O?SdN3HR6;eBUAcmsk;aFpusBC=j7pSxh2TGe&`JSHEhE)rvaHkh?biU$ z@p*k~V_j49&T}#SOnoyK&0B!YBOC4A9PfEJ%hMZQmD_G|9t25v0zkdP%6ZA@qn{AJ^PXJ&LNqUsV>LYKS`S5RjW0iV z+3f7-!}NJg&+D#LZ|OY)$*Z6E9=YC7Tcgr*rfZu)rZ;+$oDWUxbCD=(4@qmOMTv-} z+#nYi*SEWEo|j$b=&JEuteo=IdzDUHoQk*OH>c70gTMP(^Oo^zb%LCa42*ENWJ%P| zp@1bs%fefGdl3%p&*QQ&6yzVvE@V~MP2fULPv#5;8~e{Z4(5q#i&^Gf4*YJeI@s%3 z8kTCx$nm^nzrhmlZX{Qhld*c?K%TAm!0|jOnN~Sne6RHmwcl%hLBrvzr8l7vcwY!c zb=};vs=ptT&^0r#qQ5>?WdADv%@vbtgdqX1C`&_DXK|hr=@svmg`*@c=3j0;2@h{B zp^c1-C;rs6qCdeCX1B`VYoN7eefs`dkkl5vl8TE>-QJk~>>v+Mxv`y&{A-;d_A>rAbc6H^BmSDV@Ku{SWv z(DcHyf)wx_Bi^a{scM5J{tq*#-!^Bj!qGPSNLM}BF=(5J7noSZhN7D@V|ynvK0^<$ z;SF@~J0LONTmt5L{8(Y74*CU6YFbnF=9h5vsmP>XXvNGpWJMmSuByfF)R(ERoJ=eXsO zk+0*#5ap3!T5(#>zPP*FYmTl+Lsl6U!#!o@#<_a#=6$Y%q+OS$PhA4pI`X|VVXR@y zJ?{m!Mmdp)L{!Aq9&ggQXUoS9B1Y|SCfRDGyEP;PR`|<)K z-I$b@Mcoid-~-}DhmrYi*KTkAdq?l~^|!{&F5Tkf-`KH=@eS`AD2%-HUO`5DG-m#>b zid9*I*)H*=RQ-yb0iI8u)z$V9b|; zHXPb0eNp}3d%ziRu32G_)y;~!zeTF;N!KYnC&m+(BR%4YGR<>;?6y{qCk4~+w%g7h zRxF%GLEz|1MfuArK=~WOdiyw5L4F@<(}|gu|D0PY^vPy9-30k-L_QQJ19B8;xQDyw z(A=nz+BpSeG&cN4f<|u-bZTxtdRn7`&wzGQ7Qg`o0+)AY3uf?SR>F_mL7bd~ zz}K}kkoktnJN@FG+uP1vYW`5py3m|0xV_`biLY4^Hip@-FTi-W>}coASk#(+3L1QPVDCVs%@ltXrQ-CoIU z&KQ$Q&4{{n<0C_HC2Qb;oZ?ZGu$fWnRz?&Mlqj^^#kbG-$cS2BZsEnJN#Yt*-P<;* zpr~>%HGAjK*O|8_k97zqj1~=&fd4PD-aH`2z5O50=77LrWoPD?n2$ov0r%&5FTTM48pBfZKHr&>SQfbs$enIq(XqHucy+=&oZ6 z=BeI{jVk%ykHpX6$sLHDws&UA&Sj|Lx2%@GX^7QzOh0an8il3?kY;oPGAAKbmfmb5 znikHzR)@Q?b)J8T>4Mp5`#QwNQ(P5PAZCD=$DW+mei=($8Pjid+M3z;(JAC z{{bM>Jmp}(;XZA=Nk_Cc96SnZNQVdEGBbY&B^Fj-k zEKCk9Je-bn1~6q)EitiAuydd{l@sj>X7CQ`uIL>p<((^NQe@+D`Wf z)s2pQJC0(*6XA7ZLLNM@oa#zZ{cB(>$(#>wr^L6;f79_L<(3yFr~~xZkHFjQL5!Q@ z5*jFtspDp3F%5PQ$H(yr$Ko=D?ez$&_{A^XM@ZhP#7k=QRWLN&(+g3b;d6%Fghcwn zZ#oCaETMq;UW5S z`uB(EAh0}0|K`JcMNkBScCrz%;^~D}v-tc|2#vD++OSL=`|) zA5b~+NvAxb%>Ltuo&lkv^z|-r=XuZbQA;`y`;&^Jw zmkERFYmd804pz7gdn^>Ol|fJ5lLdlHS>)6jkhV`DEnNU&U}exrIMwUUOky9E_{FSX zoYmCOB)ssfvy|D-9F~n23L59oZEd*jm`t&=aC@4?dZ__wnv+|86b>>hHWgKzdmB72 zxCrSu@J(mC6DB(x6cb7^Re$S}F*!_mBz1SrTs4|w)g})3={ZXj<+Fr7ghtqbo)i@} zPy1C{N{jAvIrtE@5^2@jI2o-2c7;L|!44k!`wYAYTGu?(6+N%8o-KM9!QDEdS)aL* zY^Mvzq~5}Y-Te$Hr_<7%^_b823Qu_BQu~?hq_A)L8WBD`7~4KPIwVvXmyPP*MW~!{UpyQ+KhZBM4iy6)<3BwpBBW09?9F z2*qcpZ6fk6*4+{(Loe&sSJD^`QS@P@4_>QmtiWsfj0wnDvyd0+D0ID%VI^cx?v&d& zHpfShx2M1Z_C&kR+UaX>o{Gj_85J4VVa9qE*;YPtQ?S9Qo7X%_ULC$Q#LAjT{H#A5 z9k5YT-BE-38uBEZSf)2w(_~|r*_pWT`uV5FRgXRKo%1^15J?YZxE09J^4{4HL(ZZS z-tuspVFMN5st2tvqlpp2el{5{sx^^@Q_M7XOVN@~v78wmzOm9Lq@R5g1b zVkZw!SyqZxb{n+s-oq5DEceyrElE2 z^ptSGb1r!>mZ*h|$MhiL+JQG49O&8=+8#-8T+2)`oZ7|t2jvRR)PpJhsT<5*?a>@n zJQ=Hu(0+}ftVW9t5szR<+2At}8}XmaMrW-Z44VULn?$>Mx17~gPvg9Rnw9s51Jz7Z z%aQd$We%`jvkO~QCjd4}Z~n6RBz;V;NY09CY1ckaKFgkUYRp!K)i{os|?9MXGz}MlGVAjwC%nm+izKd%I}gnLZfhY{ce)&K{D&X z_9>s&O;wl3r&LnzaJ#`LaUk>1H=U4o8n~uJwPHw&sDuYmv4cN&&5HhWYi8}`|8vCG z`8)2dm_=G%&K(j*g_wUrn@SmEMoaV32V3YA4)06#wEWnTJ3k##^6#UsF@Y#u888d( zO>RggcO&ZZfqc3IUU8ks@Vt&D{+O2arv1_6y;q5fgXkxY!oi<3#|W3g=3kG_*3!(P zf&?ZPt%{DwK&4cBT|GLGULS+7{e;S5g@1W`V8dwfX1{^RKSVs!Qc9qQR|SqeLu7{L zaJ5(ioC@jl|_&IvQcJxJx3iK51AOog`#<5w2RxvjV5HHSN3Sv9x+mw49~*r zIm+n_QUqoTf7j@s%O^;*-(7O=ti?L3X`G)&7z`=lU)G)mHm5WCvX6mJdJOLQZnV7s z=q9%L{h5q2HTe-2(?-b`X|VRN*_ z=r?T=^Y^rAb&1+JTTHUCfefsh2^(n291rAf z<8fER|2~;|VyeX24pqMLu*ZJPg-<&>1&7R@+P$7|92gwOMD8~GU(A~A$SxD1QQz4sNJ#YdSVE-3jzQ@LZ?=$Lg0 z&Rn^##u19_UVo5+;qHLYjf|C`?VSs}bo{jRX6Vf%z(kO6)Dx2yWoPkyvH zDLGgxUkS#M9X?$gw}lo3BZs|}fZ5{DA&$uHHad)|l}GzJQAHy(XomXW3BS)0BkgxM z3d_rYZenI?xWJG`CTMM3bIgWIbSg)cZ(I;V0z=u8Q@e_w61eyJ|1E%8@M#p2?+55S zdVo-@nl~vxkF7~~OQ7vhS|QaknA8OxjQnlGnD$275h#cMO{W-G>pcBCf5#F6NXLz_ z!Nea28vd9!I_)3BNDX=f-0P3Q#7z}tDFgJdHUd`p$XrN1*9^Ge=F+D`8%y_U9x5W5usxxK*EBMmOxzn-U#h84P!tQPsNXK!dXEMORHmz&|9 zP)YoAtR5XVTt;^LF}wXZ1NXbt`5YKAZ-@0J?Y>vtXnLPyeG(}iCS&cx^=wfP5odvl z%qz&O;Ln^pTFJMe!11fEvH}XHFNjL&){5Eh0v@&yq?MjGZ4J<|sP@KkrjduFPmy;t zr;wOwy2LLmuc{SifBUTGnfuzOc;jmC{j1CiixR0v8lO^~JNHf08f;rE&V4WsI&TXc zmj}BF%dL1gVd*2-{LGLu#MW|D#`|)F!%+rJFL+@Ep(8j>4%Z^!mvz_Jnmc^7q=>0- zawRti&{|&e1xZ=!h-g}7LxfKV)0k6{cHzoB1!)qcM)@mpVeA*o94W>9?wMn9PA3_b zzZQJjxqP%HBNxOI(YIW!-AnWu)3B*HRw0NvJ{<}plARKvHXI&x)>q}8Im&0h>nBA3 zcPv=Z+{|T{SB9uBEPeD6>NqL~dH5;qdYf5r1;sFw4PVI^23Lc_oyW_43mFPypm~!$ z$j45!b88~{DNA_4^Y0PSzx!ATg114?_hI|zEBE-s2Ml(7i5*8t*QR6W0m1zDkue*n*M+KZcP8v9gsY`8 zb^Lc>xhLLJ_Z%Dqvi;(8Q?R}UVaLZiQT3OBdsZGmN^!|Ir}hNG?yCxv)9wBhQmPy% zkA4^v`}}DKecsvmgFR`|N3qmt`#F;RmYEIJao3h4wd-SDJ<);4K+!R3IGk#_QCG=0 zBfMO7qW^B`+mFM(MR$_|v&OZrYzWS{<*&corhLIVn#*mdgGjfkFJekWk#sq)7pHgD z9;;B^+Jk&C#91tt@mA4n#fGaLuJ|WkU{VN(G_2;Bd`{+Z8B^Lt$OQ(Fv)f^Bq}d!( z?b3=rL>Vk`Z?V#j|8e2Z7Qf(aXHRyUgtSSJfsDF3<#98@g{T#D zt*0dB zxLkj!MHvW$p4*%Clk^TxV+lvJ-No4bKthfES+l+y2FWLqMv-;*Zd-;tkEdA4Zj16& zxI2pQO}XTg1aZ&O)u3n@<;l;NmX0F6ngw)wDY+7emeL68lI4P7m8O+D6VpJI;?0bb zD#5jjW}4f4GK=hekEZ#mbAlTZYgTLJmxs+t?F|J?+UZE3S1M6!%~=MSqd8Psv`zc* zpFQ6Zh0Ddo2;T39ha$eq0BH!1WqW*#7|}xd_;KsCcNDLGlcU^ctht@oRa7L*z15C$ z<^nDd26&a8-!hNEEAOm6`>U5SVrp-X)jsQKx8NDYi|>0!VDI5SV7+K!BDp{-fNSm@ zrJ;G}(CLXt;YScr(`Zz5>IpqyZ0!Z(aKpP2edO)n?(j5)gIFvx5Bm5 zp?aoav@&MK?LqgbC84t^zfHfLTGrlY(aDjd%tCisUVgG2b>#iAkh7b@gCM}7^E1_v zVWty859t?0bk-U@`Na?)kZ@Wx<{UCRc-&e$+>QxD(?7!gegnBN5^#NcHDIQ}*(CDf zE&y42&OOtS!`jO-D#hMn@ZAlaJ&(3*IkhIRBAGgnQGs+wLeVCA{>R^XEz7m*70jHn zz~5=Fhq4f{%>0|6QU`S#-bo zW%M!(18O30I|-sT60Nk{aL~&;tjqPtGYp^`z<{iIXx^1U7_<7%eD*1PCGHMaU~oAg z`bpS$(zq3=694*8Ydn5l4XC$#O$GTpG{r0SV=QS3BIQoBQlK69583w{>77mHUR?vE z%{g`_LSl^jfZiD5O1QWWd0yO;d(nbA1ah$a1@d>*#jVs^>LtsrOFpLOKQt^I_wy|; z3%#TFiB;x``My=*@8%Vmj@cO8%c*0=?mT1q7VGtUAHMV4%v0nF*oX0C;gH~A_A+k> zE`JvcAwUKj>VJO7T*p+_sq(Mfn@0U{g5}fg999Qv4lf1Iwwb;K2S3eF=LXlDG_;KEiSft|E0c~EOcWF@2d>(23%noxWD+shKp5-GJxJU>OtSSddt!xe^rdJ0p2=Sq0ma}&+|BZ8QM zK+hJ6i$MyvMmwTxGI%L^0s0TJhMcfD90gEQYRELh)uS^%`Z8xP+6LD$u=5;xyY{5V zI{?9F5pnaN_sjDZXEH8JsD?6t!!;Z2U?Us0Qe>~rB4lpx{(p*2 zj1p;b6Df50Js z-}xPh0_CKJlc!k*WPAr`$NWL>4@UTZxM|CNhN3MDWLIKPryPbI$r?Rzm|FATqD4Ha z-LCyy*1ScGdT2yK*+d!HlX`)1J7$||`Eq~qa{jTvPWHlz15f?tn||eg)Qb~aI_K6< zJkZl^zkKYty@OorQ;H47NOd1Egn2h!;?WDkHTmVb@al&9Fd;o~hXDQ5JqHzix2D=g z{)PUy;RlfSI#@%17Wf0)cS$K#H-DIE<+7{B02D=-xNe~8b#|Ck35{!!B*6{WQtQuu zDk;%wb`MJ^XBGDX9?V==4jP2lxMcBvxXxgmh$Oa#YR3&I+aaK;LfRPwtsIykz`eKC z@cT`RFSQ^)4u$5QnUwl#+mpL|ieetp?1HM8qqr}3@#P8Jpb%=c3>b5yamgK!E^EH@ zK#vn)rTC|mR3M?!wP5LI6aoU<-5>sMv=n=$rQEpy$%KzIRPvliFvZqZkq*XNF`iH$ zn&B=S8qX!4gbhynnb+>1t1P5QgHE+HAagZ)lxES8>rO`4x7`FmwI1Mv!*j(qo#Xfl z>akf^H08M6Uta@9qzz7g8El|40uFG>oA#pj0ML?iu}%ir^HjfL z-NrbK@gNQ#n}I5bbkFzaPyslL_?_Z#;xF2}ggmzdU4dHjg67RBJ1J^kP%?QUSzAlh z&MqlVc#s6pg+!x+eQ1#V6si$ znw&E5e6lV!=02-Y|Nby0Imsa>>XPjx{iW`G(o0j-;16lFGz+!Smyb88yHm*$Z3gh| zkI0`~g|`?=-s#ZPc#Ri3|(@?vTr&*-VoHJo=zM)A{xu7Lquq~fcX`DGWc5mo<~9!o%Dlb0a7s- zM7Qa%_qzRo|=1pSG9F;wp$C*Nxnk^JVEpo7*?@ypP*DzMCM=LwwWz?MW$cwA0LF6OZhd?Vud{k~ z9yJ?{Nb`Y!VdW#yrPewVQZ|snu%)scqS2BpDrss?RnLeJUWrFIHgnsM*zI%y;W2QJ zVSA`Yh=aT4`Fo|d{MDt=@>iJ+HRMnPf&3ZF$D={6*aT(x#-VZ-Y!xQ)3?2c_&g_%l zQ&KbI$fFn@D6_M0v4%7lM{SY*u?;&Zu3@I4wl!qyl5aZmQjEzqCpbEZ9*1M&<~c0N zrYgewpVMsT_s$1g%!b=tNhmr`upSWT2}0?UDt#bxVdAHvY$<_XfMje??GqcLdft8anVa^jlZs2#K| z?UoyLd(e97u^7E2ezjTX(r9qHFgkseArn*!NLf~BeBVTME;3SLtkiXInJhxP;8vm& zhp37K`csvD;Zz%17o`$ndRC1P8a2~1uN{p)@3bf1qEntIoZTo{I5+v`q{$CJd{5W^ zVpP3M*J1r99}z&pSl{#aA2tT@Zeg}<+@i;++A;@lL2Xnho&Cl>0d8a zZ{+oxrek13-C}X_|S| zjoGXZ4cC_SK`OPUm+Cj_xB)>UvrK&UQss4+BVf- zBa_W{q4ZObHOZ(dV*L<5)`pK?3L6hIVz zYU4O<<(Tfze_EyFsvqz*Q~C>Mi*CL^thk3Ty+$pwvx*UPWwi>k`^tup9#schJI180V;09@9u=?QrT-*0DaB>Vrhq7}9X0_Z9oOZq6v!g#g%W`vj0chC#e%vZtd80noEcrabu6E2eji#*@xNf5 zMg}m+h3#QB@?PVfOp8W5-h7dVNC0idpi0VFiV}qk43GXugXB_LkQ8n_HeJ}oFMa0A z^E!Yc{nL@wKL7rQ0?uiksu!wLFVQT|R=6HSq}Lfk`sb;!9Jv!>2u}Tj8-RVo96A-z z1%Pu3jMyrkA;?Dg`F>jv==;i1X<{P~^l$oCv20q{K1#m-4zjfi6kxm=*;cD5+<;m| zQxz-FkHB8~?r~t$Fj)_VMZ+!er*g6Fvc1wyP{;o}pK#D}Nj3-$s9q_`A!W%dm9NA7 zv^Q(beO1~p^UJ5fCv~PtZ+fV!oNK@uV{F&S&EK97Z&;UESZ}-wklSJ1LBanZx6{jw zRFomsy{4)kS%od*3f1xZ?&Zy+J>_*uz>R>BYkoktPdNwTc&fHo$dk|&3dqIpA=B$P zRiX+?EV9jQueVvMcPPso@pK~-6v+wq4F7-Ggwv>=sv!E53<1ieN=ihDntDe;vTAbt z@BdFCp)Dj53j0JEly{2!vy(GEx))fCmK*hoQM8QNS$ zBY*#dsRE>M+xmXw8Dh(B^s_>d z^;S@qdT=c?ili%PR|hu+J+cbjM|o?k3E+_*>Age`=F)(1Fz4me&=X)pkksh=7X+vRW+F z+O}D45#7y?Aj!wP=RImd(ah&{?uO(N#1v7C90QDHHiqo&N4f^_z<{a4V0Pb$`$QGx zV542L!a{F33LfpNh-J*8C=1&dgj)})SOVK^GU~0Kn4~r)fseye!v|gm1#IbkCRH3a zudr?E=E7EH%mVU1KAJ)J+C#r^z6ab;KL9vSDX6`{28O+PTTnSwRS#uAwHU5O&mg*0 zRK5m)!F`O#NC&C8oOyb`E#hl)i@X922dG~~PcZ$ybjT7EaJMp)*@v;t95XU!cW~Y; z%lWs+ha}n|${M!pwG~B-^xlElo@z5+ZKc6ZfBA%=DFY>wtsT-snX#YNA!Z%gXza)NP^bmx>AhTcm zs~UZ#*k`%AJCjZt2+!#)Lapu_p�je!znK+Lpc+rl&3CZJ2O)a$>ktv6mG?(EI_T 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%0D386wl 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%0DKh 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

VL@*(Cm}AvDo=SWgEV6k&DhSNQo!pVI zgR>Ta)4_ZBope>pjqEW)%6#VY*|9gw$-hf+2jMAedsYk@XGqzNgU#IOtCxwEZMO> zolysC4z^HgxWivWU(&bSMYvC^n!NfN;ANFrQHPpb|Err7G?`y z!+{qXfpJWv%%xi^;>quk6r;m*{+*U z`v~Rf_FceSf)<(mzh}4xK)4@DN-C_=&7R<%4BRv^Lw>xjh?j|KXGqI-8;2%%4#04~ zOu%{!T!Z3uP$N6?|E$j{8;)Kdw~0CjzHi9c_XT$cF)&%m!9pv+MX&l_r;p3>9Y7h7 z;AhX)2)gCg>bs62bLpk^{QLYlI^(Zetrxn`vS(d=)GDnMl+}{)dL^QkiLa2@m<)F8 zt4P(5Hcm8O(?fa(0_!9gGsEV{U$32UZ3hi3E|4#e`i1Pz5zLYdZoNovH`(ayp?Jl< zRNCJ7BBo6$ru~R=|B)OdV{vu?6Nq?yPG2OomLeHl1!->7g!uS>`9K-yhrFpq|L~H( zbE7ZyX{D5}tOm34o>BGCb8+q)-0z~=70Yy@+tPQrHd#t2prIHe7_c)-8qc2d?)k^~ zySJCu0rS4EWUl2oPgFyyZGga1b2{(yvX;{y(9c2Ktg^(s?T)CN%z`nDp!V^)S$6*D z`I@w3v7=xIrHAepTy_SwcPfV;$750}yBn^&RKQ(Nj!KT3ReQ}Et%RGM94HQ~M3u z$89!1<(v?WJL8p5cJsM@5@ctmM^eQ=_9wH`0YG&JtZI1|lBQL(Ix1j$y3s%`oE zhQ29%^;P}ruTva09hxo%)m!cs8?X%8q>>?KL-LH`C3}}>A#S3ro^>-0x9yu8N}Ho= z?3>84Sn9|GGCOq-B`E?=n+P_*j6~2*1n)CrNq05C_#z=Ek^mQMOh0gEOZUQqXzQQn zSN;VW_W%TOW2tPvXRozF^Kqd~b`0`b!ZXE~Bp6n0NZZ$Hac01QfkbDvNSP86aRQWC z(`U);4XJcyx4;XqWwiT6a1D4e6cafE+)Wz5$u`nGflBOv17z*UoPZ&8=t%AQzJe~- z{P{zFU>}PGfTb65Y7V=sM##r3Zm(9Kxsfs0nHv$D-Nso1CsD|F<|GoJi93C~^MzD6 zZhXoT4ilZbYXOfK`3lON?;xsAXAx2;Ut3EyOdk*tWgOUAr}eEu<)^66+S}wF6QI_r zt5`oj&k1F+ID&GNc*$g`(D{d&{XKYT{e; zxUPhdw%3RnZaE{Uq5APw4_D3DQmj&rr#Y4-4)qITjbv|r zHfw+WI*}BlWehSQkBnE(uQwpR0H}hF#d@f~0vA+L?xjaIeqo7Ui?BPTWd1AY^Lu%S}m^~}LkuTz;jGglUhhBM3GO1WP%)e1X z9*8|?s!2Z_9Yt$qwO))brqI=LQlRtQ_bo)ZipGfeHz-Uiyu5-_<@9mFyEgvNt2UHus7XkhrV2Lwg6qK5iT)?O|#3LOX^x zU7V$v7%dxnm$+fEvQayA2qP1JcjTG}C&I+T!uDp%r}ttJjg_lu8VIcEx(F@K%Q2v2 zxw4FD-P_>P@R!R>QH84Tc=!P+1j8W-a+|wC`*WNnPN)OVkt2MJ;q*6 zeHUfMwzP#e*9B$Sjp5WoY;$^wnegsoF%~UC8G71e&)1}AX~%=w2j~sPp4KVi1C|gq zxU%XVC{?FloeiYB2m3KV>OO{Tm0-389APQq9S9TQe?KFT&&^%!e-7Cn0&d3#SVk_L z-hMT~%z1((_Ecf}@u1dtz7=xsU4atK=RwnLLeUo34YyHA_yu%r*4Lc`%Dhu3|Nc7N z^jSFnupqxJ7M%l`RMGzE~N^Mc~v2u$H`(8@`{-y zip={L&75VMr9iAS_2pb0Xb$wlZ0>o#O`S^`PB zB$s2@4G_}QIb%K1F(Dl*iqTP}W@5632YM3aH!`lqdNGW4fM5M4QO~UIwz@kwcwX(_jV>TllnTsD2kA+(X;MnXQfa6ESap+_hpwIDHfWbCZh70Q{)#y{ zggdBr2h|eu%VKSrl1W+FR7Q)gtOgy^f@xC3=pj?Cs~{dad4{v^+(V$u-K?{?vTqi0 zP_*b?ytyI9KjmGR$TVgDJ9(cniTjoA#ig4x@2@`&3>>6@Ci3f^^&@g+3Sm3m}#}0=t5-uf2*r;h2HTw?? z3cMq9AWb*nsKn7rc#L_j^q*ZOy3+Jw%(N&lWY4cdH3aM82exy=OO(^;UhdhUq%Jv+ zZY97x82@;MH+npA;hj(?ec1jy7QiH4aKs#T;mlXL>`+w!0_^|TXkYJXlb3NT&L=T} z@FHC_r%O+ns-0mh_FrH^v+X_kG@iW92-k{w|FZx&^Y)(nA~2Qg)+7&lCVy>64G1x6 znm`CQ%j*Frc*UKGljbpiEayM_)Up<4F2VB^->8y9cmWZ+70yQM_Y(DTzg49yzoo;I z%i!vF4a|$^Ftw9bq!ZXnE85I{-!mS7IF)&SJ$QvaHtW=i7dg%WPlO#1C4@=X!)fc& zUbsDEpdsl1YHynm~GDbCfu$kZDT zFys2|S&C~!r;tQd;e#sY+Z}2(Sp&OTzu`SiO(`q4olM?tahHqKG!MkixL5WYQIoL` z>_j3%S~O9OWszgrepvgqJ+aoiC+jTH=cE?WJsOA581L%kBLv1y6oE|k*bIHjFLp09 z`;o%r&y4#3Qn)``!$mzGY8I~_{^3E|6W!bb2}rj!HU|8jv>0nbAo$Obb?q*QzRB@| z|3u$8hJ@~P1TSjyCP9m_H;%B2tcM)Z!a$FVVAWb zR+J5jf`mwp?hs$x>&kDxEQA*MBgp;m8Hy~We5lHY&yMut?7IY1F2 zGZ7h-F@Z#qkelnfXy5z3_Y2POt-a4$YoBxW3|HK2qXteIK`rlFyE}{<;%DPAiR3?r zlGfPfHnvK;W+LACN62yvisM~}PH%;wRVp+%^*vUz#{xb}WYb`NPc?}p=s+kXCx@d% zTD|_B|F0$sYQQTkZmvX4?t$7so}#p3_KTd^FcE3h+9=`;mTSdQP-9I3CU^62BesE z8r&$Zzq@WKgJs}nSa3ws8HX>(i_bn(HlwS(ln8rRIa>4hUDbqb`3irU2Iw4oUdYBv z{QvoGzE30_xEmKaWnTOQzoIFWnt0!vZlfVTMPsbp$hpno))IMqYzv2Deo|$hp2L2h zvyN(4o<501C)#M3Dmi5*+`vcF#)F$3tD?M&@?s1xI-CjFR)!+u4A8KW-%L_FTl| zk~S^)6lWk)(F1b~TILSj9FD^V>c;0D$+!BnSaQAz?JBd9yAx1k{4hUV<5GD#g?xuH-!e)j}D2Bad6+ z_6LGpBF{aNy2v**4IV}4GK z2keAmpNgTW+sBB@M$Qp}#Dh0UGf~@m%eJ)0-`{%q)~jR6{Q|dnlQ79#cmX=ttg*Dz zPZQ($6q|9-@|=&)16${OC+cK0)G(8uo=^Xf5ZK$xp0c7-*X_%3RR3(2-0Jl9w+WdQ zn(9MCOi9$vb>maG0=MrY*YB5;$W>0$d;*-`UoH87tX?Ge;cnh#@(0grTII(2TXZ8I z$fL!DEtf1{`<2J($7v9rb^>e|X+qd=D%&lP>_GTW$~^SHWv%@8FlZVRx0( zRG|u}THRTAE1Bza(k?DN)Y|VLfi#-s5_MuzYQMK_bA^^j+JEzj_xO}9Ds!L=Gi3h_+cFidbpDkw(HtOqcEC;I zjnK1|akp^K`Q2T0uSl^|4- zBV%FLa>*#yyBrLSXy8_uOZ}rfhq-P)ml!3c$jooQ>=?`PYzR=PUBBBr#4~6)QEShR zKW=EGX;IE8Kt_m-auh-G0UjV*ivVYa8={6?s%x-^&ogLn0Chznk2=!F<?W!?__Rvo%&K7)b$M%PAMx88V<6vX z<_(jXdPAgjGHn?J12$kmBc`-IUVuCqy{r#2mKh|0#_I&hV0pq<|32IF!We#z`hqn^ z1v2|&W0s-dCnE%Q=cN_Ub}Rzb9{W zl2Ivl3lD8V;uYGS^Ebi}T1vdeU>TCS2(q3kd#S370-OU6P^YMIol`zVC?)t8H=GCQ z1oTYhUizJx1D6ZaI8N3ssd%&=BW$}H=)FhUA{+Tw8lyhyIe>l}8-1Z-4w^g-JpwY{+ETgCJj?Kxt zG;!b6(vB+;IoKdLfuN542#ZseZ$xWDPk^i@&-o_e7_a5w)5i}Qtq(h7KD&dt+!s$> zC=L*xnck%vt--C3w#kMWMPIGGr@E>GR1(I{NMx-6cHt&#TKTeRN&3WXy;8&eYF47YBq zVhJ_A(v}Gnv<6%4HCcoSL}W3G3jdoJ4_;420(AP>An*}U6pum+21F*{ zrPb)z6}`lSFCA{U?*MBB>ttNNb>R3=_X=9NBEc9-h@0|G0<$Pz3lVvF>xHw!oKiXW zr!u>wCzkw`sCV&QRpUZbG#y9fbAbOJ5Rsj?Jp1)mt}K5G+%hRO2)VQf%uRP~g`Rzp z%ScseN3*s_(=p1QTMNpC7q2AW%EzGi`ZJyHl@_u6Rnm6pI(}jer*wM(*o{y59#nGv zgBtkaVrT@#6+amTwYxqdt0*ahdgmTxE^IFNCXHi<3$PS~o7FJrHKqEJ=@pQa6dqn8C!J7T>*%1xp9)jI{T63WZZc~62D)ChP``CWz zuiOxzTG(Sv-ql@Vrg(4vTLNyQ{TeTCTMjGeYUG9!dr6(yIzSpzu&3o*yCZQ?r$(o6 zN;ALkdHv3;Ob5B#CplL>rvIY+T>xHwFr#jX72L9Ct3`+D;a_W1+*fOc795+dS1ERi zX;PD8to9U1K={=0.0.4: - version "1.0.1" - resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" - -ansi-escapes@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.0.0.tgz#ec3e8b4e9f8064fc02c3ac9b65f1c275bda8ef92" - -ansi-html@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" - -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - -ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" - -ansi-styles@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" - -ansi-styles@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.0.tgz#c159b8d5be0f9e5a6f346dab94f16ce022161b88" - dependencies: - color-convert "^1.9.0" - -anymatch@^1.3.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a" - dependencies: - micromatch "^2.1.5" - normalize-path "^2.0.0" - -anymatch@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" - dependencies: - micromatch "^3.1.4" - normalize-path "^2.1.1" - -aproba@^1.0.3, aproba@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" - -are-we-there-yet@~1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d" - dependencies: - delegates "^1.0.0" - readable-stream "^2.0.6" - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - dependencies: - sprintf-js "~1.0.2" - -arr-diff@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" - dependencies: - arr-flatten "^1.0.1" - -arr-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - -arr-flatten@^1.0.1, arr-flatten@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" - -arr-union@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - -array-filter@~0.0.0: - version "0.0.1" - resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec" - -array-find-index@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" - -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - -array-flatten@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.1.tgz#426bb9da84090c1838d812c8150af20a8331e296" - -array-includes@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d" - dependencies: - define-properties "^1.1.2" - es-abstract "^1.7.0" - -array-map@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662" - -array-reduce@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b" - -array-union@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" - dependencies: - array-uniq "^1.0.1" - -array-uniq@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - -array-unique@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" - -array-unique@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" - -arrify@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" - -asn1.js@^4.0.0: - version "4.10.1" - resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" - dependencies: - bn.js "^4.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - -asn1@~0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" - -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - -assert-plus@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" - -assert@^1.1.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91" - dependencies: - util "0.10.3" - -assign-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - -async-each@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" - -async-foreach@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/async-foreach/-/async-foreach-0.1.3.tgz#36121f845c0578172de419a97dbeb1d16ec34542" - -async@^1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" - -async@^2.1.2: - version "2.6.0" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.0.tgz#61a29abb6fcc026fea77e56d1c6ec53a795951f4" - dependencies: - lodash "^4.14.0" - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - -atob@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.0.3.tgz#19c7a760473774468f20b2d2d03372ad7d4cbf5d" - -aws-sign2@~0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" - -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - -aws4@^1.2.1, aws4@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" - -babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" - dependencies: - chalk "^1.1.3" - esutils "^2.0.2" - js-tokens "^3.0.2" - -babel-core@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.0.tgz#af32f78b31a6fcef119c87b0fd8d9753f03a0bb8" - dependencies: - babel-code-frame "^6.26.0" - babel-generator "^6.26.0" - babel-helpers "^6.24.1" - babel-messages "^6.23.0" - babel-register "^6.26.0" - babel-runtime "^6.26.0" - babel-template "^6.26.0" - babel-traverse "^6.26.0" - babel-types "^6.26.0" - babylon "^6.18.0" - convert-source-map "^1.5.0" - debug "^2.6.8" - json5 "^0.5.1" - lodash "^4.17.4" - minimatch "^3.0.4" - path-is-absolute "^1.0.1" - private "^0.1.7" - slash "^1.0.0" - source-map "^0.5.6" - -babel-generator@^6.26.0: - version "6.26.1" - resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" - dependencies: - babel-messages "^6.23.0" - babel-runtime "^6.26.0" - babel-types "^6.26.0" - detect-indent "^4.0.0" - jsesc "^1.3.0" - lodash "^4.17.4" - source-map "^0.5.7" - trim-right "^1.0.1" - -babel-helper-call-delegate@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d" - dependencies: - babel-helper-hoist-variables "^6.24.1" - babel-runtime "^6.22.0" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helper-define-map@^6.24.1: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f" - dependencies: - babel-helper-function-name "^6.24.1" - babel-runtime "^6.26.0" - babel-types "^6.26.0" - lodash "^4.17.4" - -babel-helper-function-name@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" - dependencies: - babel-helper-get-function-arity "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helper-get-function-arity@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-helper-hoist-variables@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-helper-optimise-call-expression@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-helper-regex@^6.24.1: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72" - dependencies: - babel-runtime "^6.26.0" - babel-types "^6.26.0" - lodash "^4.17.4" - -babel-helper-replace-supers@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" - dependencies: - babel-helper-optimise-call-expression "^6.24.1" - babel-messages "^6.23.0" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helpers@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" - dependencies: - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-loader@^7.1.2: - version "7.1.2" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-7.1.2.tgz#f6cbe122710f1aa2af4d881c6d5b54358ca24126" - dependencies: - find-cache-dir "^1.0.0" - loader-utils "^1.0.2" - mkdirp "^0.5.1" - -babel-messages@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-check-es2015-constants@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-arrow-functions@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-block-scoping@^6.24.1: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f" - dependencies: - babel-runtime "^6.26.0" - babel-template "^6.26.0" - babel-traverse "^6.26.0" - babel-types "^6.26.0" - lodash "^4.17.4" - -babel-plugin-transform-es2015-classes@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" - dependencies: - babel-helper-define-map "^6.24.1" - babel-helper-function-name "^6.24.1" - babel-helper-optimise-call-expression "^6.24.1" - babel-helper-replace-supers "^6.24.1" - babel-messages "^6.23.0" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-computed-properties@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" - dependencies: - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-plugin-transform-es2015-destructuring@^6.22.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-duplicate-keys@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-for-of@^6.22.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-function-name@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" - dependencies: - babel-helper-function-name "^6.24.1" - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-literals@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-modules-amd@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154" - dependencies: - babel-plugin-transform-es2015-modules-commonjs "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-plugin-transform-es2015-modules-commonjs@^6.24.1: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz#0d8394029b7dc6abe1a97ef181e00758dd2e5d8a" - dependencies: - babel-plugin-transform-strict-mode "^6.24.1" - babel-runtime "^6.26.0" - babel-template "^6.26.0" - babel-types "^6.26.0" - -babel-plugin-transform-es2015-modules-systemjs@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23" - dependencies: - babel-helper-hoist-variables "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-plugin-transform-es2015-modules-umd@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468" - dependencies: - babel-plugin-transform-es2015-modules-amd "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-plugin-transform-es2015-object-super@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" - dependencies: - babel-helper-replace-supers "^6.24.1" - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-parameters@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" - dependencies: - babel-helper-call-delegate "^6.24.1" - babel-helper-get-function-arity "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-shorthand-properties@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-spread@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-sticky-regex@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" - dependencies: - babel-helper-regex "^6.24.1" - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-template-literals@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-typeof-symbol@^6.22.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-unicode-regex@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" - dependencies: - babel-helper-regex "^6.24.1" - babel-runtime "^6.22.0" - regexpu-core "^2.0.0" - -babel-plugin-transform-regenerator@^6.24.1: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f" - dependencies: - regenerator-transform "^0.10.0" - -babel-plugin-transform-strict-mode@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-preset-es2015@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz#d44050d6bc2c9feea702aaf38d727a0210538939" - dependencies: - babel-plugin-check-es2015-constants "^6.22.0" - babel-plugin-transform-es2015-arrow-functions "^6.22.0" - babel-plugin-transform-es2015-block-scoped-functions "^6.22.0" - babel-plugin-transform-es2015-block-scoping "^6.24.1" - babel-plugin-transform-es2015-classes "^6.24.1" - babel-plugin-transform-es2015-computed-properties "^6.24.1" - babel-plugin-transform-es2015-destructuring "^6.22.0" - babel-plugin-transform-es2015-duplicate-keys "^6.24.1" - babel-plugin-transform-es2015-for-of "^6.22.0" - babel-plugin-transform-es2015-function-name "^6.24.1" - babel-plugin-transform-es2015-literals "^6.22.0" - babel-plugin-transform-es2015-modules-amd "^6.24.1" - babel-plugin-transform-es2015-modules-commonjs "^6.24.1" - babel-plugin-transform-es2015-modules-systemjs "^6.24.1" - babel-plugin-transform-es2015-modules-umd "^6.24.1" - babel-plugin-transform-es2015-object-super "^6.24.1" - babel-plugin-transform-es2015-parameters "^6.24.1" - babel-plugin-transform-es2015-shorthand-properties "^6.24.1" - babel-plugin-transform-es2015-spread "^6.22.0" - babel-plugin-transform-es2015-sticky-regex "^6.24.1" - babel-plugin-transform-es2015-template-literals "^6.22.0" - babel-plugin-transform-es2015-typeof-symbol "^6.22.0" - babel-plugin-transform-es2015-unicode-regex "^6.24.1" - babel-plugin-transform-regenerator "^6.24.1" - -babel-register@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" - dependencies: - babel-core "^6.26.0" - babel-runtime "^6.26.0" - core-js "^2.5.0" - home-or-tmp "^2.0.0" - lodash "^4.17.4" - mkdirp "^0.5.1" - source-map-support "^0.4.15" - -babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" - dependencies: - core-js "^2.4.0" - regenerator-runtime "^0.11.0" - -babel-template@^6.24.1, babel-template@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" - dependencies: - babel-runtime "^6.26.0" - babel-traverse "^6.26.0" - babel-types "^6.26.0" - babylon "^6.18.0" - lodash "^4.17.4" - -babel-traverse@^6.24.1, babel-traverse@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" - dependencies: - babel-code-frame "^6.26.0" - babel-messages "^6.23.0" - babel-runtime "^6.26.0" - babel-types "^6.26.0" - babylon "^6.18.0" - debug "^2.6.8" - globals "^9.18.0" - invariant "^2.2.2" - lodash "^4.17.4" - -babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" - dependencies: - babel-runtime "^6.26.0" - esutils "^2.0.2" - lodash "^4.17.4" - to-fast-properties "^1.0.3" - -babylon@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" - -balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - -base64-js@^1.0.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.3.tgz#fb13668233d9614cf5fb4bce95a9ba4096cdf801" - -base@^0.11.1: - version "0.11.2" - resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" - dependencies: - cache-base "^1.0.1" - class-utils "^0.3.5" - component-emitter "^1.2.1" - define-property "^1.0.0" - isobject "^3.0.1" - mixin-deep "^1.2.0" - pascalcase "^0.1.1" - -batch@0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" - -bcrypt-pbkdf@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" - dependencies: - tweetnacl "^0.14.3" - -big.js@^3.1.3: - version "3.2.0" - resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" - -binary-extensions@^1.0.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.11.0.tgz#46aa1751fb6a2f93ee5e689bb1087d4b14c6c205" - -block-stream@*: - version "0.0.9" - resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" - dependencies: - inherits "~2.0.0" - -bluebird@^3.5.1: - version "3.5.1" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9" - -bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: - version "4.11.8" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" - -body-parser@1.18.2: - version "1.18.2" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.2.tgz#87678a19d84b47d859b83199bd59bce222b10454" - dependencies: - bytes "3.0.0" - content-type "~1.0.4" - debug "2.6.9" - depd "~1.1.1" - http-errors "~1.6.2" - iconv-lite "0.4.19" - on-finished "~2.3.0" - qs "6.5.1" - raw-body "2.3.2" - type-is "~1.6.15" - -bonjour@^3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" - dependencies: - array-flatten "^2.1.0" - deep-equal "^1.0.1" - dns-equal "^1.0.0" - dns-txt "^2.0.2" - multicast-dns "^6.0.1" - multicast-dns-service-types "^1.1.0" - -boom@2.x.x: - version "2.10.1" - resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" - dependencies: - hoek "2.x.x" - -boom@4.x.x: - version "4.3.1" - resolved "https://registry.yarnpkg.com/boom/-/boom-4.3.1.tgz#4f8a3005cb4a7e3889f749030fd25b96e01d2e31" - dependencies: - hoek "4.x.x" - -boom@5.x.x: - version "5.2.0" - resolved "https://registry.yarnpkg.com/boom/-/boom-5.2.0.tgz#5dd9da6ee3a5f302077436290cb717d3f4a54e02" - dependencies: - hoek "4.x.x" - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -braces@^1.8.2: - version "1.8.5" - resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" - dependencies: - expand-range "^1.8.1" - preserve "^0.2.0" - repeat-element "^1.1.2" - -braces@^2.3.0, braces@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.1.tgz#7086c913b4e5a08dbe37ac0ee6a2500c4ba691bb" - dependencies: - arr-flatten "^1.1.0" - array-unique "^0.3.2" - define-property "^1.0.0" - extend-shallow "^2.0.1" - fill-range "^4.0.0" - isobject "^3.0.1" - kind-of "^6.0.2" - repeat-element "^1.1.2" - snapdragon "^0.8.1" - snapdragon-node "^2.0.1" - split-string "^3.0.2" - to-regex "^3.0.1" - -brorand@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - -browserify-aes@^1.0.0, browserify-aes@^1.0.4: - version "1.1.1" - resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.1.1.tgz#38b7ab55edb806ff2dcda1a7f1620773a477c49f" - dependencies: - buffer-xor "^1.0.3" - cipher-base "^1.0.0" - create-hash "^1.1.0" - evp_bytestokey "^1.0.3" - inherits "^2.0.1" - safe-buffer "^5.0.1" - -browserify-cipher@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.0.tgz#9988244874bf5ed4e28da95666dcd66ac8fc363a" - dependencies: - browserify-aes "^1.0.4" - browserify-des "^1.0.0" - evp_bytestokey "^1.0.0" - -browserify-des@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.0.tgz#daa277717470922ed2fe18594118a175439721dd" - dependencies: - cipher-base "^1.0.1" - des.js "^1.0.0" - inherits "^2.0.1" - -browserify-rsa@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" - dependencies: - bn.js "^4.1.0" - randombytes "^2.0.1" - -browserify-sign@^4.0.0: - version "4.0.4" - resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" - dependencies: - bn.js "^4.1.1" - browserify-rsa "^4.0.0" - create-hash "^1.1.0" - create-hmac "^1.1.2" - elliptic "^6.0.0" - inherits "^2.0.1" - parse-asn1 "^5.0.0" - -browserify-zlib@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" - dependencies: - pako "~1.0.5" - -buffer-indexof@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" - -buffer-xor@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" - -buffer@^4.3.0: - version "4.9.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" - dependencies: - base64-js "^1.0.2" - ieee754 "^1.1.4" - isarray "^1.0.0" - -builtin-modules@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" - -builtin-status-codes@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" - -bytes@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" - -cacache@^10.0.1: - version "10.0.4" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-10.0.4.tgz#6452367999eff9d4188aefd9a14e9d7c6a263460" - dependencies: - bluebird "^3.5.1" - chownr "^1.0.1" - glob "^7.1.2" - graceful-fs "^4.1.11" - lru-cache "^4.1.1" - mississippi "^2.0.0" - mkdirp "^0.5.1" - move-concurrently "^1.0.1" - promise-inflight "^1.0.1" - rimraf "^2.6.2" - ssri "^5.2.4" - unique-filename "^1.1.0" - y18n "^4.0.0" - -cache-base@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" - dependencies: - collection-visit "^1.0.0" - component-emitter "^1.2.1" - get-value "^2.0.6" - has-value "^1.0.0" - isobject "^3.0.1" - set-value "^2.0.0" - to-object-path "^0.3.0" - union-value "^1.0.0" - unset-value "^1.0.0" - -caller-path@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" - dependencies: - callsites "^0.2.0" - -callsites@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" - -camelcase-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" - dependencies: - camelcase "^2.0.0" - map-obj "^1.0.0" - -camelcase@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" - -camelcase@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" - -caseless@~0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7" - -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - -chalk@^1.1.1, chalk@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - dependencies: - ansi-styles "^2.2.1" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" - -chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.1.tgz#523fe2678aec7b04e8041909292fe8b17059b796" - dependencies: - ansi-styles "^3.2.0" - escape-string-regexp "^1.0.5" - supports-color "^5.2.0" - -chardet@^0.4.0: - version "0.4.2" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" - -chokidar@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" - dependencies: - anymatch "^1.3.0" - async-each "^1.0.0" - glob-parent "^2.0.0" - inherits "^2.0.1" - is-binary-path "^1.0.0" - is-glob "^2.0.0" - path-is-absolute "^1.0.0" - readdirp "^2.0.0" - optionalDependencies: - fsevents "^1.0.0" - -chokidar@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.0.2.tgz#4dc65139eeb2714977735b6a35d06e97b494dfd7" - dependencies: - anymatch "^2.0.0" - async-each "^1.0.0" - braces "^2.3.0" - glob-parent "^3.1.0" - inherits "^2.0.1" - is-binary-path "^1.0.0" - is-glob "^4.0.0" - normalize-path "^2.1.1" - path-is-absolute "^1.0.0" - readdirp "^2.0.0" - upath "^1.0.0" - optionalDependencies: - fsevents "^1.0.0" - -chownr@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.0.1.tgz#e2a75042a9551908bebd25b8523d5f9769d79181" - -chrome-trace-event@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-0.1.2.tgz#90f36885d5345a50621332f0717b595883d5d982" - -cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -circular-json@^0.3.1: - version "0.3.3" - resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" - -class-utils@^0.3.5: - version "0.3.6" - resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" - dependencies: - arr-union "^3.1.0" - define-property "^0.2.5" - isobject "^3.0.0" - static-extend "^0.1.1" - -cli-cursor@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" - dependencies: - restore-cursor "^2.0.0" - -cli-width@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" - -cliui@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - wrap-ansi "^2.0.0" - -co@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - -collection-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" - dependencies: - map-visit "^1.0.0" - object-visit "^1.0.0" - -color-convert@^1.9.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed" - dependencies: - color-name "^1.1.1" - -color-name@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - -combined-stream@1.0.6, combined-stream@^1.0.5, combined-stream@~1.0.5: - version "1.0.6" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818" - dependencies: - delayed-stream "~1.0.0" - -commander@^2.9.0: - version "2.14.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.14.1.tgz#2235123e37af8ca3c65df45b026dbd357b01b9aa" - -commander@~2.13.0: - version "2.13.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c" - -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - -component-emitter@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" - -compressible@~2.0.13: - version "2.0.13" - resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.13.tgz#0d1020ab924b2fdb4d6279875c7d6daba6baa7a9" - dependencies: - mime-db ">= 1.33.0 < 2" - -compression@^1.5.2: - version "1.7.2" - resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.2.tgz#aaffbcd6aaf854b44ebb280353d5ad1651f59a69" - dependencies: - accepts "~1.3.4" - bytes "3.0.0" - compressible "~2.0.13" - debug "2.6.9" - on-headers "~1.0.1" - safe-buffer "5.1.1" - vary "~1.1.2" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - -concat-stream@^1.5.0, concat-stream@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" - dependencies: - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - -connect-history-api-fallback@^1.3.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz#b06873934bc5e344fef611a196a6faae0aee015a" - -console-browserify@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" - dependencies: - date-now "^0.1.4" - -console-control-strings@^1.0.0, console-control-strings@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - -constants-browserify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" - -content-disposition@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" - -content-type@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" - -convert-source-map@^1.5.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5" - -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - -cookie@0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" - -copy-concurrently@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" - dependencies: - aproba "^1.1.1" - fs-write-stream-atomic "^1.0.8" - iferr "^0.1.5" - mkdirp "^0.5.1" - rimraf "^2.5.4" - run-queue "^1.0.0" - -copy-descriptor@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" - -copyfiles@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/copyfiles/-/copyfiles-1.2.0.tgz#a8da3ac41aa2220ae29bd3c58b6984294f2c593c" - dependencies: - glob "^7.0.5" - ltcdr "^2.2.1" - minimatch "^3.0.3" - mkdirp "^0.5.1" - noms "0.0.0" - through2 "^2.0.1" - -core-js@^2.4.0, core-js@^2.5.0: - version "2.5.3" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.3.tgz#8acc38345824f16d8365b7c9b4259168e8ed603e" - -core-util-is@1.0.2, core-util-is@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - -create-ecdh@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.0.tgz#888c723596cdf7612f6498233eebd7a35301737d" - dependencies: - bn.js "^4.1.0" - elliptic "^6.0.0" - -create-hash@^1.1.0, create-hash@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.1.3.tgz#606042ac8b9262750f483caddab0f5819172d8fd" - dependencies: - cipher-base "^1.0.1" - inherits "^2.0.1" - ripemd160 "^2.0.0" - sha.js "^2.4.0" - -create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: - version "1.1.6" - resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.6.tgz#acb9e221a4e17bdb076e90657c42b93e3726cf06" - dependencies: - cipher-base "^1.0.3" - create-hash "^1.1.0" - inherits "^2.0.1" - ripemd160 "^2.0.0" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -cross-spawn@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-3.0.1.tgz#1256037ecb9f0c5f79e3d6ef135e30770184b982" - dependencies: - lru-cache "^4.0.1" - which "^1.2.9" - -cross-spawn@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" - dependencies: - lru-cache "^4.0.1" - shebang-command "^1.2.0" - which "^1.2.9" - -cryptiles@2.x.x: - version "2.0.5" - resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" - dependencies: - boom "2.x.x" - -cryptiles@3.x.x: - version "3.1.2" - resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-3.1.2.tgz#a89fbb220f5ce25ec56e8c4aa8a4fd7b5b0d29fe" - dependencies: - boom "5.x.x" - -crypto-browserify@^3.11.0: - version "3.12.0" - resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" - dependencies: - browserify-cipher "^1.0.0" - browserify-sign "^4.0.0" - create-ecdh "^4.0.0" - create-hash "^1.1.0" - create-hmac "^1.1.0" - diffie-hellman "^5.0.0" - inherits "^2.0.1" - pbkdf2 "^3.0.3" - public-encrypt "^4.0.0" - randombytes "^2.0.0" - randomfill "^1.0.3" - -currently-unhandled@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" - dependencies: - array-find-index "^1.0.1" - -cyclist@~0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640" - -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - dependencies: - assert-plus "^1.0.0" - -date-now@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" - -debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.6, debug@^2.6.8: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - dependencies: - ms "2.0.0" - -debug@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - dependencies: - ms "2.0.0" - -decamelize@^1.1.1, decamelize@^1.1.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - -decode-uri-component@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" - -deep-equal@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" - -deep-extend@~0.4.0: - version "0.4.2" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.2.tgz#48b699c27e334bf89f10892be432f6e4c7d34a7f" - -deep-is@~0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" - -define-properties@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" - dependencies: - foreach "^2.0.5" - object-keys "^1.0.8" - -define-property@^0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" - dependencies: - is-descriptor "^0.1.0" - -define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" - dependencies: - is-descriptor "^1.0.0" - -define-property@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" - dependencies: - is-descriptor "^1.0.2" - isobject "^3.0.1" - -del@^2.0.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" - dependencies: - globby "^5.0.0" - is-path-cwd "^1.0.0" - is-path-in-cwd "^1.0.0" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - rimraf "^2.2.8" - -del@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/del/-/del-3.0.0.tgz#53ecf699ffcbcb39637691ab13baf160819766e5" - dependencies: - globby "^6.1.0" - is-path-cwd "^1.0.0" - is-path-in-cwd "^1.0.0" - p-map "^1.1.1" - pify "^3.0.0" - rimraf "^2.2.8" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - -depd@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359" - -depd@~1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - -des.js@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc" - dependencies: - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - -destroy@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" - -detect-indent@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" - dependencies: - repeating "^2.0.0" - -detect-libc@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" - -detect-node@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.3.tgz#a2033c09cc8e158d37748fbde7507832bd6ce127" - -diffie-hellman@^5.0.0: - version "5.0.2" - resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.2.tgz#b5835739270cfe26acf632099fded2a07f209e5e" - dependencies: - bn.js "^4.1.0" - miller-rabin "^4.0.0" - randombytes "^2.0.0" - -dns-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" - -dns-packet@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.1.tgz#12aa426981075be500b910eedcd0b47dd7deda5a" - dependencies: - ip "^1.1.0" - safe-buffer "^5.0.1" - -dns-txt@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6" - dependencies: - buffer-indexof "^1.0.0" - -doctrine@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" - dependencies: - esutils "^2.0.2" - -domain-browser@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" - -duplexer@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" - -duplexify@^3.4.2, duplexify@^3.5.3: - version "3.5.3" - resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.5.3.tgz#8b5818800df92fd0125b27ab896491912858243e" - dependencies: - end-of-stream "^1.0.0" - inherits "^2.0.1" - readable-stream "^2.0.0" - stream-shift "^1.0.0" - -ecc-jsbn@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" - dependencies: - jsbn "~0.1.0" - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - -elliptic@^6.0.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.0.tgz#cac9af8762c85836187003c8dfe193e5e2eae5df" - dependencies: - bn.js "^4.4.0" - brorand "^1.0.1" - hash.js "^1.0.0" - hmac-drbg "^1.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.0" - -emojis-list@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" - -encodeurl@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - -end-of-stream@^1.0.0, end-of-stream@^1.1.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" - dependencies: - once "^1.4.0" - -enhanced-resolve@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.0.0.tgz#e34a6eaa790f62fccd71d93959f56b2b432db10a" - dependencies: - graceful-fs "^4.1.2" - memory-fs "^0.4.0" - tapable "^1.0.0" - -errno@^0.1.3, errno@^0.1.4: - version "0.1.7" - resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" - dependencies: - prr "~1.0.1" - -error-ex@^1.2.0, error-ex@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" - dependencies: - is-arrayish "^0.2.1" - -es-abstract@^1.4.3, es-abstract@^1.7.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.10.0.tgz#1ecb36c197842a00d8ee4c2dfd8646bb97d60864" - dependencies: - es-to-primitive "^1.1.1" - function-bind "^1.1.1" - has "^1.0.1" - is-callable "^1.1.3" - is-regex "^1.0.4" - -es-to-primitive@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d" - dependencies: - is-callable "^1.1.1" - is-date-object "^1.0.1" - is-symbol "^1.0.1" - -es6-promise@^4.2.4: - version "4.2.4" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.4.tgz#dc4221c2b16518760bd8c39a52d8f356fc00ed29" - -escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - -escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - -eslint-scope@^3.7.1: - version "3.7.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8" - dependencies: - esrecurse "^4.1.0" - estraverse "^4.1.1" - -eslint-visitor-keys@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d" - -eslint@^4.18.1: - version "4.18.1" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.18.1.tgz#b9138440cb1e98b2f44a0d578c6ecf8eae6150b0" - dependencies: - ajv "^5.3.0" - babel-code-frame "^6.22.0" - chalk "^2.1.0" - concat-stream "^1.6.0" - cross-spawn "^5.1.0" - debug "^3.1.0" - doctrine "^2.1.0" - eslint-scope "^3.7.1" - eslint-visitor-keys "^1.0.0" - espree "^3.5.2" - esquery "^1.0.0" - esutils "^2.0.2" - file-entry-cache "^2.0.0" - functional-red-black-tree "^1.0.1" - glob "^7.1.2" - globals "^11.0.1" - ignore "^3.3.3" - imurmurhash "^0.1.4" - inquirer "^3.0.6" - is-resolvable "^1.0.0" - js-yaml "^3.9.1" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.3.0" - lodash "^4.17.4" - minimatch "^3.0.2" - mkdirp "^0.5.1" - natural-compare "^1.4.0" - optionator "^0.8.2" - path-is-inside "^1.0.2" - pluralize "^7.0.0" - progress "^2.0.0" - require-uncached "^1.0.3" - semver "^5.3.0" - strip-ansi "^4.0.0" - strip-json-comments "~2.0.1" - table "^4.0.1" - text-table "~0.2.0" - -espree@^3.5.2: - version "3.5.3" - resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.3.tgz#931e0af64e7fbbed26b050a29daad1fc64799fa6" - dependencies: - acorn "^5.4.0" - acorn-jsx "^3.0.0" - -esprima@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" - -esquery@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.0.tgz#cfba8b57d7fba93f17298a8a006a04cda13d80fa" - dependencies: - estraverse "^4.0.0" - -esrecurse@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.0.tgz#fa9568d98d3823f9a41d91e902dcab9ea6e5b163" - dependencies: - estraverse "^4.1.0" - object-assign "^4.0.1" - -estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1: - version "4.2.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" - -esutils@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" - -etag@~1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - -event-stream@~3.3.0: - version "3.3.4" - resolved "https://registry.yarnpkg.com/event-stream/-/event-stream-3.3.4.tgz#4ab4c9a0f5a54db9338b4c34d86bfce8f4b35571" - dependencies: - duplexer "~0.1.1" - from "~0" - map-stream "~0.1.0" - pause-stream "0.0.11" - split "0.3" - stream-combiner "~0.0.4" - through "~2.3.1" - -eventemitter3@1.x.x: - version "1.2.0" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-1.2.0.tgz#1c86991d816ad1e504750e73874224ecf3bec508" - -events@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" - -eventsource@0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-0.1.6.tgz#0acede849ed7dd1ccc32c811bb11b944d4f29232" - dependencies: - original ">=0.0.5" - -evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" - dependencies: - md5.js "^1.3.4" - safe-buffer "^5.1.1" - -expand-brackets@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" - dependencies: - is-posix-bracket "^0.1.0" - -expand-brackets@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - dependencies: - debug "^2.3.3" - define-property "^0.2.5" - extend-shallow "^2.0.1" - posix-character-classes "^0.1.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -expand-range@^1.8.1: - version "1.8.2" - resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" - dependencies: - fill-range "^2.1.0" - -express@^4.16.2: - version "4.16.2" - resolved "https://registry.yarnpkg.com/express/-/express-4.16.2.tgz#e35c6dfe2d64b7dca0a5cd4f21781be3299e076c" - dependencies: - accepts "~1.3.4" - array-flatten "1.1.1" - body-parser "1.18.2" - content-disposition "0.5.2" - content-type "~1.0.4" - cookie "0.3.1" - cookie-signature "1.0.6" - debug "2.6.9" - depd "~1.1.1" - encodeurl "~1.0.1" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "1.1.0" - fresh "0.5.2" - merge-descriptors "1.0.1" - methods "~1.1.2" - on-finished "~2.3.0" - parseurl "~1.3.2" - path-to-regexp "0.1.7" - proxy-addr "~2.0.2" - qs "6.5.1" - range-parser "~1.2.0" - safe-buffer "5.1.1" - send "0.16.1" - serve-static "1.13.1" - setprototypeof "1.1.0" - statuses "~1.3.1" - type-is "~1.6.15" - utils-merge "1.0.1" - vary "~1.1.2" - -extend-shallow@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - dependencies: - is-extendable "^0.1.0" - -extend-shallow@^3.0.0, extend-shallow@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" - dependencies: - assign-symbols "^1.0.0" - is-extendable "^1.0.1" - -extend@~3.0.0, extend@~3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" - -external-editor@^2.0.4: - version "2.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.1.0.tgz#3d026a21b7f95b5726387d4200ac160d372c3b48" - dependencies: - chardet "^0.4.0" - iconv-lite "^0.4.17" - tmp "^0.0.33" - -extglob@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" - dependencies: - is-extglob "^1.0.0" - -extglob@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" - dependencies: - array-unique "^0.3.2" - define-property "^1.0.0" - expand-brackets "^2.1.4" - extend-shallow "^2.0.1" - fragment-cache "^0.2.1" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -extsprintf@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - -extsprintf@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" - -fast-deep-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz#96256a3bc975595eb36d82e9929d060d893439ff" - -fast-json-stable-stringify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" - -fast-levenshtein@~2.0.4: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - -faye-websocket@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" - dependencies: - websocket-driver ">=0.5.1" - -faye-websocket@~0.11.0: - version "0.11.1" - resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.1.tgz#f0efe18c4f56e4f40afc7e06c719fd5ee6188f38" - dependencies: - websocket-driver ">=0.5.1" - -figures@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" - dependencies: - escape-string-regexp "^1.0.5" - -file-entry-cache@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" - dependencies: - flat-cache "^1.2.1" - object-assign "^4.0.1" - -filename-regex@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" - -fill-range@^2.1.0: - version "2.2.3" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" - dependencies: - is-number "^2.1.0" - isobject "^2.0.0" - randomatic "^1.1.3" - repeat-element "^1.1.2" - repeat-string "^1.5.2" - -fill-range@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - dependencies: - extend-shallow "^2.0.1" - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range "^2.1.0" - -finalhandler@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.0.tgz#ce0b6855b45853e791b2fcc680046d88253dd7f5" - dependencies: - debug "2.6.9" - encodeurl "~1.0.1" - escape-html "~1.0.3" - on-finished "~2.3.0" - parseurl "~1.3.2" - statuses "~1.3.1" - unpipe "~1.0.0" - -find-cache-dir@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-1.0.0.tgz#9288e3e9e3cc3748717d39eade17cf71fc30ee6f" - dependencies: - commondir "^1.0.1" - make-dir "^1.0.0" - pkg-dir "^2.0.0" - -find-up@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" - dependencies: - path-exists "^2.0.0" - pinkie-promise "^2.0.0" - -find-up@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - dependencies: - locate-path "^2.0.0" - -flat-cache@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.0.tgz#d3030b32b38154f4e3b7e9c709f490f7ef97c481" - dependencies: - circular-json "^0.3.1" - del "^2.0.2" - graceful-fs "^4.1.2" - write "^0.2.1" - -flush-write-stream@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.0.2.tgz#c81b90d8746766f1a609a46809946c45dd8ae417" - dependencies: - inherits "^2.0.1" - readable-stream "^2.0.4" - -for-in@^1.0.1, for-in@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - -for-own@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" - dependencies: - for-in "^1.0.1" - -foreach@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" - -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - -form-data@~2.1.1: - version "2.1.4" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1" - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.5" - mime-types "^2.1.12" - -form-data@~2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.2.tgz#4970498be604c20c005d4f5c23aecd21d6b49099" - dependencies: - asynckit "^0.4.0" - combined-stream "1.0.6" - mime-types "^2.1.12" - -forwarded@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" - -fragment-cache@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" - dependencies: - map-cache "^0.2.2" - -fresh@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - -from2@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" - dependencies: - inherits "^2.0.1" - readable-stream "^2.0.0" - -from@~0: - version "0.1.7" - resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe" - -fs-write-stream-atomic@^1.0.8: - version "1.0.10" - resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" - dependencies: - graceful-fs "^4.1.2" - iferr "^0.1.5" - imurmurhash "^0.1.4" - readable-stream "1 || 2" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - -fsevents@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.3.tgz#11f82318f5fe7bb2cd22965a108e9306208216d8" - dependencies: - nan "^2.3.0" - node-pre-gyp "^0.6.39" - -fstream-ignore@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105" - dependencies: - fstream "^1.0.0" - inherits "2" - minimatch "^3.0.0" - -fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2: - version "1.0.11" - resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" - dependencies: - graceful-fs "^4.1.2" - inherits "~2.0.0" - mkdirp ">=0.5 0" - rimraf "2" - -function-bind@^1.0.2, function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - -gauge@~2.7.3: - version "2.7.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" - dependencies: - aproba "^1.0.3" - console-control-strings "^1.0.0" - has-unicode "^2.0.0" - object-assign "^4.1.0" - signal-exit "^3.0.0" - string-width "^1.0.1" - strip-ansi "^3.0.1" - wide-align "^1.1.0" - -gaze@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.2.tgz#847224677adb8870d679257ed3388fdb61e40105" - dependencies: - globule "^1.0.0" - -generate-function@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74" - -generate-object-property@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0" - dependencies: - is-property "^1.0.0" - -get-caller-file@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" - -get-stdin@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" - -get-value@^2.0.3, get-value@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" - -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - dependencies: - assert-plus "^1.0.0" - -glob-base@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" - dependencies: - glob-parent "^2.0.0" - is-glob "^2.0.0" - -glob-parent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" - dependencies: - is-glob "^2.0.0" - -glob-parent@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" - dependencies: - is-glob "^3.1.0" - path-dirname "^1.0.0" - -glob@^6.0.4: - version "6.0.4" - resolved "https://registry.yarnpkg.com/glob/-/glob-6.0.4.tgz#0f08860f6a155127b2fadd4f9ce24b1aab6e4d22" - dependencies: - inflight "^1.0.4" - inherits "2" - minimatch "2 || 3" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.2, glob@~7.1.1: - version "7.1.2" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -globals@^11.0.1: - version "11.3.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.3.0.tgz#e04fdb7b9796d8adac9c8f64c14837b2313378b0" - -globals@^9.18.0: - version "9.18.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" - -globby@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" - dependencies: - array-union "^1.0.1" - arrify "^1.0.0" - glob "^7.0.3" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -globby@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" - dependencies: - array-union "^1.0.1" - glob "^7.0.3" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -globule@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/globule/-/globule-1.2.0.tgz#1dc49c6822dd9e8a2fa00ba2a295006e8664bd09" - dependencies: - glob "~7.1.1" - lodash "~4.17.4" - minimatch "~3.0.2" - -graceful-fs@^4.1.11, graceful-fs@^4.1.2: - version "4.1.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" - -handle-thing@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-1.2.5.tgz#fd7aad726bf1a5fd16dfc29b2f7a6601d27139c4" - -har-schema@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" - -har-schema@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - -har-validator@~2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d" - dependencies: - chalk "^1.1.1" - commander "^2.9.0" - is-my-json-valid "^2.12.4" - pinkie-promise "^2.0.0" - -har-validator@~4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" - dependencies: - ajv "^4.9.1" - har-schema "^1.0.5" - -har-validator@~5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd" - dependencies: - ajv "^5.1.0" - har-schema "^2.0.0" - -has-ansi@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" - dependencies: - ansi-regex "^2.0.0" - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - -has-unicode@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - -has-value@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - dependencies: - get-value "^2.0.3" - has-values "^0.1.4" - isobject "^2.0.0" - -has-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" - dependencies: - get-value "^2.0.6" - has-values "^1.0.0" - isobject "^3.0.0" - -has-values@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" - -has-values@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - -has@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" - dependencies: - function-bind "^1.0.2" - -hash-base@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-2.0.2.tgz#66ea1d856db4e8a5470cadf6fce23ae5244ef2e1" - dependencies: - inherits "^2.0.1" - -hash-base@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -hash.js@^1.0.0, hash.js@^1.0.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.3.tgz#340dedbe6290187151c1ea1d777a3448935df846" - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.0" - -hawk@3.1.3, hawk@~3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" - dependencies: - boom "2.x.x" - cryptiles "2.x.x" - hoek "2.x.x" - sntp "1.x.x" - -hawk@~6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/hawk/-/hawk-6.0.2.tgz#af4d914eb065f9b5ce4d9d11c1cb2126eecc3038" - dependencies: - boom "4.x.x" - cryptiles "3.x.x" - hoek "4.x.x" - sntp "2.x.x" - -hmac-drbg@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" - dependencies: - hash.js "^1.0.3" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.1" - -hoek@2.x.x: - version "2.16.3" - resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" - -hoek@4.x.x: - version "4.2.1" - resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.1.tgz#9634502aa12c445dd5a7c5734b572bb8738aacbb" - -home-or-tmp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.1" - -hosted-git-info@^2.1.4: - version "2.5.0" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c" - -hpack.js@^2.1.6: - version "2.1.6" - resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" - dependencies: - inherits "^2.0.1" - obuf "^1.0.0" - readable-stream "^2.0.1" - wbuf "^1.1.0" - -html-entities@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f" - -http-deceiver@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" - -http-errors@1.6.2, http-errors@~1.6.2: - version "1.6.2" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.2.tgz#0a002cc85707192a7e7946ceedc11155f60ec736" - dependencies: - depd "1.1.1" - inherits "2.0.3" - setprototypeof "1.0.3" - statuses ">= 1.3.1 < 2" - -http-parser-js@>=0.4.0: - version "0.4.10" - resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.10.tgz#92c9c1374c35085f75db359ec56cc257cbb93fa4" - -http-proxy-middleware@~0.17.4: - version "0.17.4" - resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz#642e8848851d66f09d4f124912846dbaeb41b833" - dependencies: - http-proxy "^1.16.2" - is-glob "^3.1.0" - lodash "^4.17.2" - micromatch "^2.3.11" - -http-proxy@^1.16.2: - version "1.16.2" - resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.16.2.tgz#06dff292952bf64dbe8471fa9df73066d4f37742" - dependencies: - eventemitter3 "1.x.x" - requires-port "1.x.x" - -http-signature@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" - dependencies: - assert-plus "^0.2.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - -http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - -https-browserify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" - -iconv-lite@0.4.19, iconv-lite@^0.4.17: - version "0.4.19" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" - -ieee754@^1.1.4: - version "1.1.8" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4" - -iferr@^0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" - -ignore@^3.3.3: - version "3.3.7" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.7.tgz#612289bfb3c220e186a58118618d5be8c1bab021" - -import-local@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-1.0.0.tgz#5e4ffdc03f4fe6c009c6729beb29631c2f8227bc" - dependencies: - pkg-dir "^2.0.0" - resolve-cwd "^2.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - -in-publish@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/in-publish/-/in-publish-2.0.0.tgz#e20ff5e3a2afc2690320b6dc552682a9c7fadf51" - -indent-string@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" - dependencies: - repeating "^2.0.0" - -indexof@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - -inherits@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" - -ini@~1.3.0: - version "1.3.5" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" - -inquirer@^3.0.6: - version "3.3.0" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" - dependencies: - ansi-escapes "^3.0.0" - chalk "^2.0.0" - cli-cursor "^2.1.0" - cli-width "^2.0.0" - external-editor "^2.0.4" - figures "^2.0.0" - lodash "^4.3.0" - mute-stream "0.0.7" - run-async "^2.2.0" - rx-lite "^4.0.8" - rx-lite-aggregates "^4.0.8" - string-width "^2.1.0" - strip-ansi "^4.0.0" - through "^2.3.6" - -internal-ip@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-1.2.0.tgz#ae9fbf93b984878785d50a8de1b356956058cf5c" - dependencies: - meow "^3.3.0" - -invariant@^2.2.2: - version "2.2.3" - resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.3.tgz#1a827dfde7dcbd7c323f0ca826be8fa7c5e9d688" - dependencies: - loose-envify "^1.0.0" - -invert-kv@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" - -ip@^1.1.0, ip@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" - -ipaddr.js@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.6.0.tgz#e3fa357b773da619f26e95f049d055c72796f86b" - -is-accessor-descriptor@^0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" - dependencies: - kind-of "^3.0.2" - -is-accessor-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" - dependencies: - kind-of "^6.0.0" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - -is-binary-path@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" - dependencies: - binary-extensions "^1.0.0" - -is-buffer@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - -is-builtin-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" - dependencies: - builtin-modules "^1.0.0" - -is-callable@^1.1.1, is-callable@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2" - -is-data-descriptor@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" - dependencies: - kind-of "^3.0.2" - -is-data-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" - dependencies: - kind-of "^6.0.0" - -is-date-object@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" - -is-descriptor@^0.1.0: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" - dependencies: - is-accessor-descriptor "^0.1.6" - is-data-descriptor "^0.1.4" - kind-of "^5.0.0" - -is-descriptor@^1.0.0, is-descriptor@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" - dependencies: - is-accessor-descriptor "^1.0.0" - is-data-descriptor "^1.0.0" - kind-of "^6.0.2" - -is-dotfile@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" - -is-equal-shallow@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" - dependencies: - is-primitive "^2.0.0" - -is-extendable@^0.1.0, is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - -is-extendable@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" - dependencies: - is-plain-object "^2.0.4" - -is-extglob@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" - -is-extglob@^2.1.0, is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - -is-finite@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" - dependencies: - number-is-nan "^1.0.0" - -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - dependencies: - number-is-nan "^1.0.0" - -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - -is-glob@^2.0.0, is-glob@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" - dependencies: - is-extglob "^1.0.0" - -is-glob@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" - dependencies: - is-extglob "^2.1.0" - -is-glob@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0" - dependencies: - is-extglob "^2.1.1" - -is-my-ip-valid@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz#7b351b8e8edd4d3995d4d066680e664d94696824" - -is-my-json-valid@^2.12.4: - version "2.17.2" - resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.17.2.tgz#6b2103a288e94ef3de5cf15d29dd85fc4b78d65c" - dependencies: - generate-function "^2.0.0" - generate-object-property "^1.1.0" - is-my-ip-valid "^1.0.0" - jsonpointer "^4.0.0" - xtend "^4.0.0" - -is-number@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" - dependencies: - kind-of "^3.0.2" - -is-number@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - dependencies: - kind-of "^3.0.2" - -is-number@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" - -is-odd@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-odd/-/is-odd-2.0.0.tgz#7646624671fd7ea558ccd9a2795182f2958f1b24" - dependencies: - is-number "^4.0.0" - -is-path-cwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" - -is-path-in-cwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc" - dependencies: - is-path-inside "^1.0.0" - -is-path-inside@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" - dependencies: - path-is-inside "^1.0.1" - -is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - dependencies: - isobject "^3.0.1" - -is-posix-bracket@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" - -is-primitive@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" - -is-promise@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" - -is-property@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" - -is-regex@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" - dependencies: - has "^1.0.1" - -is-resolvable@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" - -is-symbol@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572" - -is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - -is-utf8@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" - -is-windows@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" - -is-wsl@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" - -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - -isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - dependencies: - isarray "1.0.0" - -isobject@^3.0.0, isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - -js-base64@^2.1.8: - version "2.4.3" - resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.3.tgz#2e545ec2b0f2957f41356510205214e98fad6582" - -js-tokens@^3.0.0, js-tokens@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" - -js-yaml@^3.9.1: - version "3.10.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc" - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - -jsesc@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" - -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - -json-parse-better-errors@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.1.tgz#50183cd1b2d25275de069e9e71b467ac9eab973a" - -json-schema-traverse@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" - -json-schema@0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - -json-stable-stringify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" - dependencies: - jsonify "~0.0.0" - -json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - -json3@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" - -json5@^0.5.0, json5@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" - -jsonify@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" - -jsonpointer@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" - -jsprim@^1.2.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.2.3" - verror "1.10.0" - -killable@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.0.tgz#da8b84bd47de5395878f95d64d02f2449fe05e6b" - -kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - dependencies: - is-buffer "^1.1.5" - -kind-of@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - dependencies: - is-buffer "^1.1.5" - -kind-of@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" - -kind-of@^6.0.0, kind-of@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" - -lazy-cache@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-2.0.2.tgz#b9190a4f913354694840859f8a8f7084d8822264" - dependencies: - set-getter "^0.1.0" - -lcid@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" - dependencies: - invert-kv "^1.0.0" - -levn@^0.3.0, levn@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" - -load-json-file@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - pinkie-promise "^2.0.0" - strip-bom "^2.0.0" - -load-json-file@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" - dependencies: - graceful-fs "^4.1.2" - parse-json "^4.0.0" - pify "^3.0.0" - strip-bom "^3.0.0" - -loader-runner@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.3.0.tgz#f482aea82d543e07921700d5a46ef26fdac6b8a2" - -loader-utils@^1.0.2, loader-utils@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.1.0.tgz#c98aef488bcceda2ffb5e2de646d6a754429f5cd" - dependencies: - big.js "^3.1.3" - emojis-list "^2.0.0" - json5 "^0.5.0" - -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - -lodash.assign@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" - -lodash.clonedeep@^4.3.2: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" - -lodash.endswith@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/lodash.endswith/-/lodash.endswith-4.2.1.tgz#fed59ac1738ed3e236edd7064ec456448b37bc09" - -lodash.isfunction@^3.0.8: - version "3.0.9" - resolved "https://registry.yarnpkg.com/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz#06de25df4db327ac931981d1bdb067e5af68d051" - -lodash.isstring@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" - -lodash.mergewith@^4.6.0: - version "4.6.1" - resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz#639057e726c3afbdb3e7d42741caa8d6e4335927" - -lodash.startswith@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/lodash.startswith/-/lodash.startswith-4.2.1.tgz#c598c4adce188a27e53145731cdc6c0e7177600c" - -lodash@^4.0.0, lodash@^4.14.0, lodash@^4.17.2, lodash@^4.17.4, lodash@^4.3.0, lodash@~4.17.4: - version "4.17.5" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.5.tgz#99a92d65c0272debe8c96b6057bc8fbfa3bed511" - -log-symbols@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" - dependencies: - chalk "^2.0.1" - -loglevel@^1.4.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.1.tgz#e0fc95133b6ef276cdc8887cdaf24aa6f156f8fa" - -loglevelnext@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/loglevelnext/-/loglevelnext-1.0.3.tgz#0f69277e73bbbf2cd61b94d82313216bf87ac66e" - -loose-envify@^1.0.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" - dependencies: - js-tokens "^3.0.0" - -loud-rejection@^1.0.0, loud-rejection@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" - dependencies: - currently-unhandled "^0.4.1" - signal-exit "^3.0.0" - -lru-cache@^4.0.1, lru-cache@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.1.tgz#622e32e82488b49279114a4f9ecf45e7cd6bba55" - dependencies: - pseudomap "^1.0.2" - yallist "^2.1.2" - -ltcdr@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ltcdr/-/ltcdr-2.2.1.tgz#5ab87ad1d4c1dab8e8c08bbf037ee0c1902287cf" - -make-dir@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.2.0.tgz#6d6a49eead4aae296c53bbf3a1a008bd6c89469b" - dependencies: - pify "^3.0.0" - -map-cache@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" - -map-obj@^1.0.0, map-obj@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" - -map-stream@~0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.1.0.tgz#e56aa94c4c8055a16404a0674b78f215f7c8e194" - -map-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" - dependencies: - object-visit "^1.0.0" - -md5.js@^1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.4.tgz#e9bdbde94a20a5ac18b04340fc5764d5b09d901d" - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - -memory-fs@^0.4.0, memory-fs@~0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" - dependencies: - errno "^0.1.3" - readable-stream "^2.0.1" - -memorystream@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" - -meow@^3.3.0, meow@^3.7.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" - dependencies: - camelcase-keys "^2.0.0" - decamelize "^1.1.2" - loud-rejection "^1.0.0" - map-obj "^1.0.1" - minimist "^1.1.3" - normalize-package-data "^2.3.4" - object-assign "^4.0.1" - read-pkg-up "^1.0.1" - redent "^1.0.0" - trim-newlines "^1.0.0" - -merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - -methods@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - -micromatch@^2.1.5, micromatch@^2.3.11: - version "2.3.11" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" - dependencies: - arr-diff "^2.0.0" - array-unique "^0.2.1" - braces "^1.8.2" - expand-brackets "^0.1.4" - extglob "^0.3.1" - filename-regex "^2.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.1" - kind-of "^3.0.2" - normalize-path "^2.0.1" - object.omit "^2.0.0" - parse-glob "^3.0.4" - regex-cache "^0.4.2" - -micromatch@^3.1.4, micromatch@^3.1.8: - version "3.1.9" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.9.tgz#15dc93175ae39e52e93087847096effc73efcf89" - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - braces "^2.3.1" - define-property "^2.0.2" - extend-shallow "^3.0.2" - extglob "^2.0.4" - fragment-cache "^0.2.1" - kind-of "^6.0.2" - nanomatch "^1.2.9" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -miller-rabin@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" - dependencies: - bn.js "^4.0.0" - brorand "^1.0.1" - -"mime-db@>= 1.33.0 < 2", mime-db@~1.33.0: - version "1.33.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" - -mime-types@^2.1.12, mime-types@~2.1.16, mime-types@~2.1.17, mime-types@~2.1.18, mime-types@~2.1.7: - version "2.1.18" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8" - dependencies: - mime-db "~1.33.0" - -mime@1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" - -mime@^1.5.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - -mime@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.2.0.tgz#161e541965551d3b549fa1114391e3a3d55b923b" - -mimic-fn@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" - -minimalistic-assert@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz#702be2dda6b37f4836bcb3f5db56641b64a1d3d3" - -minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" - -"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4, minimatch@~3.0.2: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - dependencies: - brace-expansion "^1.1.7" - -minimist@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" - -minimist@^1.1.3, minimist@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" - -mississippi@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-2.0.0.tgz#3442a508fafc28500486feea99409676e4ee5a6f" - dependencies: - concat-stream "^1.5.0" - duplexify "^3.4.2" - end-of-stream "^1.1.0" - flush-write-stream "^1.0.0" - from2 "^2.1.0" - parallel-transform "^1.1.0" - pump "^2.0.1" - pumpify "^1.3.3" - stream-each "^1.1.0" - through2 "^2.0.0" - -mixin-deep@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe" - dependencies: - for-in "^1.0.2" - is-extendable "^1.0.1" - -mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0: - version "0.5.1" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" - dependencies: - minimist "0.0.8" - -move-concurrently@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" - dependencies: - aproba "^1.1.1" - copy-concurrently "^1.0.0" - fs-write-stream-atomic "^1.0.8" - mkdirp "^0.5.1" - rimraf "^2.5.4" - run-queue "^1.0.3" - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - -multicast-dns-service-types@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" - -multicast-dns@^6.0.1: - version "6.2.3" - resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229" - dependencies: - dns-packet "^1.3.1" - thunky "^1.0.2" - -mute-stream@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" - -nan@^2.3.0, nan@^2.3.2: - version "2.9.2" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.9.2.tgz#f564d75f5f8f36a6d9456cca7a6c4fe488ab7866" - -nanomatch@^1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.9.tgz#879f7150cb2dab7a471259066c104eee6e0fa7c2" - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - define-property "^2.0.2" - extend-shallow "^3.0.2" - fragment-cache "^0.2.1" - is-odd "^2.0.0" - is-windows "^1.0.2" - kind-of "^6.0.2" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - -negotiator@0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" - -neo-async@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.5.0.tgz#76b1c823130cca26acfbaccc8fbaf0a2fa33b18f" - -node-forge@0.7.1: - version "0.7.1" - resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.7.1.tgz#9da611ea08982f4b94206b3beb4cc9665f20c300" - -node-gyp@^3.3.1: - version "3.6.2" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.6.2.tgz#9bfbe54562286284838e750eac05295853fa1c60" - dependencies: - fstream "^1.0.0" - glob "^7.0.3" - graceful-fs "^4.1.2" - minimatch "^3.0.2" - mkdirp "^0.5.0" - nopt "2 || 3" - npmlog "0 || 1 || 2 || 3 || 4" - osenv "0" - request "2" - rimraf "2" - semver "~5.3.0" - tar "^2.0.0" - which "1" - -node-libs-browser@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.1.0.tgz#5f94263d404f6e44767d726901fff05478d600df" - dependencies: - assert "^1.1.1" - browserify-zlib "^0.2.0" - buffer "^4.3.0" - console-browserify "^1.1.0" - constants-browserify "^1.0.0" - crypto-browserify "^3.11.0" - domain-browser "^1.1.1" - events "^1.0.0" - https-browserify "^1.0.0" - os-browserify "^0.3.0" - path-browserify "0.0.0" - process "^0.11.10" - punycode "^1.2.4" - querystring-es3 "^0.2.0" - readable-stream "^2.3.3" - stream-browserify "^2.0.1" - stream-http "^2.7.2" - string_decoder "^1.0.0" - timers-browserify "^2.0.4" - tty-browserify "0.0.0" - url "^0.11.0" - util "^0.10.3" - vm-browserify "0.0.4" - -node-pre-gyp@^0.6.39: - version "0.6.39" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.39.tgz#c00e96860b23c0e1420ac7befc5044e1d78d8649" - dependencies: - detect-libc "^1.0.2" - hawk "3.1.3" - mkdirp "^0.5.1" - nopt "^4.0.1" - npmlog "^4.0.2" - rc "^1.1.7" - request "2.81.0" - rimraf "^2.6.1" - semver "^5.3.0" - tar "^2.2.1" - tar-pack "^3.4.0" - -node-sass@^4.7.2: - version "4.7.2" - resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.7.2.tgz#9366778ba1469eb01438a9e8592f4262bcb6794e" - dependencies: - async-foreach "^0.1.3" - chalk "^1.1.1" - cross-spawn "^3.0.0" - gaze "^1.0.0" - get-stdin "^4.0.1" - glob "^7.0.3" - in-publish "^2.0.0" - lodash.assign "^4.2.0" - lodash.clonedeep "^4.3.2" - lodash.mergewith "^4.6.0" - meow "^3.7.0" - mkdirp "^0.5.1" - nan "^2.3.2" - node-gyp "^3.3.1" - npmlog "^4.0.0" - request "~2.79.0" - sass-graph "^2.2.4" - stdout-stream "^1.4.0" - "true-case-path" "^1.0.2" - -noms@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/noms/-/noms-0.0.0.tgz#da8ebd9f3af9d6760919b27d9cdc8092a7332859" - dependencies: - inherits "^2.0.1" - readable-stream "~1.0.31" - -"nopt@2 || 3": - version "3.0.6" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" - dependencies: - abbrev "1" - -nopt@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" - dependencies: - abbrev "1" - osenv "^0.1.4" - -normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: - version "2.4.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" - dependencies: - hosted-git-info "^2.1.4" - is-builtin-module "^1.0.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -normalize-path@^2.0.0, normalize-path@^2.0.1, normalize-path@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - dependencies: - remove-trailing-separator "^1.0.1" - -npm-run-all@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/npm-run-all/-/npm-run-all-4.1.2.tgz#90d62d078792d20669139e718621186656cea056" - dependencies: - ansi-styles "^3.2.0" - chalk "^2.1.0" - cross-spawn "^5.1.0" - memorystream "^0.3.1" - minimatch "^3.0.4" - ps-tree "^1.1.0" - read-pkg "^3.0.0" - shell-quote "^1.6.1" - string.prototype.padend "^3.0.0" - -"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0, npmlog@^4.0.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" - dependencies: - are-we-there-yet "~1.1.2" - console-control-strings "~1.1.0" - gauge "~2.7.3" - set-blocking "~2.0.0" - -number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - -oauth-sign@~0.8.1, oauth-sign@~0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" - -object-assign@^4.0.1, object-assign@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - -object-copy@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" - dependencies: - copy-descriptor "^0.1.0" - define-property "^0.2.5" - kind-of "^3.0.3" - -object-keys@^1.0.8: - version "1.0.11" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" - -object-visit@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" - dependencies: - isobject "^3.0.0" - -object.omit@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" - dependencies: - for-own "^0.1.4" - is-extendable "^0.1.1" - -object.pick@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" - dependencies: - isobject "^3.0.1" - -obuf@^1.0.0, obuf@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.1.tgz#104124b6c602c6796881a042541d36db43a5264e" - -on-finished@~2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" - dependencies: - ee-first "1.1.1" - -on-headers@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7" - -once@^1.3.0, once@^1.3.1, once@^1.3.3, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - dependencies: - wrappy "1" - -onetime@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" - dependencies: - mimic-fn "^1.0.0" - -opn@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/opn/-/opn-5.2.0.tgz#71fdf934d6827d676cecbea1531f95d354641225" - dependencies: - is-wsl "^1.1.0" - -optionator@^0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" - dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.4" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - wordwrap "~1.0.0" - -original@>=0.0.5: - version "1.0.0" - resolved "https://registry.yarnpkg.com/original/-/original-1.0.0.tgz#9147f93fa1696d04be61e01bd50baeaca656bd3b" - dependencies: - url-parse "1.0.x" - -os-browserify@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" - -os-homedir@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" - -os-locale@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" - dependencies: - lcid "^1.0.0" - -os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - -osenv@0, osenv@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.0" - -p-limit@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.2.0.tgz#0e92b6bedcb59f022c13d0f1949dc82d15909f1c" - dependencies: - p-try "^1.0.0" - -p-locate@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - dependencies: - p-limit "^1.1.0" - -p-map@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" - -p-try@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - -pako@~1.0.5: - version "1.0.6" - resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.6.tgz#0101211baa70c4bca4a0f63f2206e97b7dfaf258" - -parallel-transform@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.1.0.tgz#d410f065b05da23081fcd10f28854c29bda33b06" - dependencies: - cyclist "~0.2.2" - inherits "^2.0.3" - readable-stream "^2.1.5" - -parse-asn1@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.0.tgz#37c4f9b7ed3ab65c74817b5f2480937fbf97c712" - dependencies: - asn1.js "^4.0.0" - browserify-aes "^1.0.0" - create-hash "^1.1.0" - evp_bytestokey "^1.0.0" - pbkdf2 "^3.0.3" - -parse-glob@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" - dependencies: - glob-base "^0.3.0" - is-dotfile "^1.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.0" - -parse-json@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" - dependencies: - error-ex "^1.2.0" - -parse-json@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" - dependencies: - error-ex "^1.3.1" - json-parse-better-errors "^1.0.1" - -parseurl@~1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" - -pascalcase@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - -path-browserify@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a" - -path-dirname@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" - -path-exists@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" - dependencies: - pinkie-promise "^2.0.0" - -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - -path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - -path-is-inside@^1.0.1, path-is-inside@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" - -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - -path-type@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" - dependencies: - graceful-fs "^4.1.2" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -path-type@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" - dependencies: - pify "^3.0.0" - -pause-stream@0.0.11: - version "0.0.11" - resolved "https://registry.yarnpkg.com/pause-stream/-/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445" - dependencies: - through "~2.3" - -pbkdf2@^3.0.3: - version "3.0.14" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.14.tgz#a35e13c64799b06ce15320f459c230e68e73bade" - dependencies: - create-hash "^1.1.2" - create-hmac "^1.1.4" - ripemd160 "^2.0.1" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -performance-now@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" - -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - -pify@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - -pify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - -pinkie-promise@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - dependencies: - pinkie "^2.0.0" - -pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" - -pkg-dir@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" - dependencies: - find-up "^2.1.0" - -pluralize@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" - -portfinder@^1.0.9: - version "1.0.13" - resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.13.tgz#bb32ecd87c27104ae6ee44b5a3ccbf0ebb1aede9" - dependencies: - async "^1.5.2" - debug "^2.2.0" - mkdirp "0.5.x" - -posix-character-classes@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - -preserve@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" - -private@^0.1.6, private@^0.1.7: - version "0.1.8" - resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" - -process-nextick-args@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" - -process@^0.11.10: - version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - -progress@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f" - -promise-inflight@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" - -proxy-addr@~2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.3.tgz#355f262505a621646b3130a728eb647e22055341" - dependencies: - forwarded "~0.1.2" - ipaddr.js "1.6.0" - -prr@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" - -ps-tree@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/ps-tree/-/ps-tree-1.1.0.tgz#b421b24140d6203f1ed3c76996b4427b08e8c014" - dependencies: - event-stream "~3.3.0" - -pseudomap@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - -public-encrypt@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.0.tgz#39f699f3a46560dd5ebacbca693caf7c65c18cc6" - dependencies: - bn.js "^4.1.0" - browserify-rsa "^4.0.0" - create-hash "^1.1.0" - parse-asn1 "^5.0.0" - randombytes "^2.0.1" - -pump@^2.0.0, pump@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -pumpify@^1.3.3: - version "1.4.0" - resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.4.0.tgz#80b7c5df7e24153d03f0e7ac8a05a5d068bd07fb" - dependencies: - duplexify "^3.5.3" - inherits "^2.0.3" - pump "^2.0.0" - -punycode@1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" - -punycode@^1.2.4, punycode@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - -qs@6.5.1, qs@~6.5.1: - version "6.5.1" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" - -qs@~6.3.0: - version "6.3.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.2.tgz#e75bd5f6e268122a2a0e0bda630b2550c166502c" - -qs@~6.4.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" - -querystring-es3@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" - -querystring@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" - -querystringify@0.0.x: - version "0.0.4" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-0.0.4.tgz#0cf7f84f9463ff0ae51c4c4b142d95be37724d9c" - -querystringify@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-1.0.0.tgz#6286242112c5b712fa654e526652bf6a13ff05cb" - -randomatic@^1.1.3: - version "1.1.7" - resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c" - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - -randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.6.tgz#d302c522948588848a8d300c932b44c24231da80" - dependencies: - safe-buffer "^5.1.0" - -randomfill@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" - dependencies: - randombytes "^2.0.5" - safe-buffer "^5.1.0" - -range-parser@^1.0.3, range-parser@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" - -raw-body@2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.2.tgz#bcd60c77d3eb93cde0050295c3f379389bc88f89" - dependencies: - bytes "3.0.0" - http-errors "1.6.2" - iconv-lite "0.4.19" - unpipe "1.0.0" - -rc@^1.1.7: - version "1.2.5" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.5.tgz#275cd687f6e3b36cc756baa26dfee80a790301fd" - dependencies: - deep-extend "~0.4.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - -read-pkg-up@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" - dependencies: - find-up "^1.0.0" - read-pkg "^1.0.0" - -read-pkg@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" - dependencies: - load-json-file "^1.0.0" - normalize-package-data "^2.3.2" - path-type "^1.0.0" - -read-pkg@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" - dependencies: - load-json-file "^4.0.0" - normalize-package-data "^2.3.2" - path-type "^3.0.0" - -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.2.9, readable-stream@^2.3.3: - version "2.3.4" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.4.tgz#c946c3f47fa7d8eabc0b6150f4a12f69a4574071" - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.0.3" - util-deprecate "~1.0.1" - -readable-stream@~1.0.31: - version "1.0.34" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - -readdirp@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" - dependencies: - graceful-fs "^4.1.2" - minimatch "^3.0.2" - readable-stream "^2.0.2" - set-immediate-shim "^1.0.1" - -redent@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" - dependencies: - indent-string "^2.1.0" - strip-indent "^1.0.1" - -regenerate@^1.2.1: - version "1.3.3" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.3.tgz#0c336d3980553d755c39b586ae3b20aa49c82b7f" - -regenerator-runtime@^0.11.0: - version "0.11.1" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" - -regenerator-transform@^0.10.0: - version "0.10.1" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" - dependencies: - babel-runtime "^6.18.0" - babel-types "^6.19.0" - private "^0.1.6" - -regex-cache@^0.4.2: - version "0.4.4" - resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" - dependencies: - is-equal-shallow "^0.1.3" - -regex-not@^1.0.0, regex-not@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" - dependencies: - extend-shallow "^3.0.2" - safe-regex "^1.1.0" - -regexpu-core@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" - dependencies: - regenerate "^1.2.1" - regjsgen "^0.2.0" - regjsparser "^0.1.4" - -regjsgen@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" - -regjsparser@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" - dependencies: - jsesc "~0.5.0" - -remove-trailing-separator@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - -repeat-element@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" - -repeat-string@^1.5.2, repeat-string@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - -repeating@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" - dependencies: - is-finite "^1.0.0" - -request@2: - version "2.83.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.83.0.tgz#ca0b65da02ed62935887808e6f510381034e3356" - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.6.0" - caseless "~0.12.0" - combined-stream "~1.0.5" - extend "~3.0.1" - forever-agent "~0.6.1" - form-data "~2.3.1" - har-validator "~5.0.3" - hawk "~6.0.2" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.17" - oauth-sign "~0.8.2" - performance-now "^2.1.0" - qs "~6.5.1" - safe-buffer "^5.1.1" - stringstream "~0.0.5" - tough-cookie "~2.3.3" - tunnel-agent "^0.6.0" - uuid "^3.1.0" - -request@2.81.0: - version "2.81.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" - dependencies: - aws-sign2 "~0.6.0" - aws4 "^1.2.1" - caseless "~0.12.0" - combined-stream "~1.0.5" - extend "~3.0.0" - forever-agent "~0.6.1" - form-data "~2.1.1" - har-validator "~4.2.1" - hawk "~3.1.3" - http-signature "~1.1.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.7" - oauth-sign "~0.8.1" - performance-now "^0.2.0" - qs "~6.4.0" - safe-buffer "^5.0.1" - stringstream "~0.0.4" - tough-cookie "~2.3.0" - tunnel-agent "^0.6.0" - uuid "^3.0.0" - -request@~2.79.0: - version "2.79.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de" - dependencies: - aws-sign2 "~0.6.0" - aws4 "^1.2.1" - caseless "~0.11.0" - combined-stream "~1.0.5" - extend "~3.0.0" - forever-agent "~0.6.1" - form-data "~2.1.1" - har-validator "~2.0.6" - hawk "~3.1.3" - http-signature "~1.1.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.7" - oauth-sign "~0.8.1" - qs "~6.3.0" - stringstream "~0.0.4" - tough-cookie "~2.3.0" - tunnel-agent "~0.4.1" - uuid "^3.0.0" - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - -require-main-filename@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" - -require-uncached@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" - dependencies: - caller-path "^0.1.0" - resolve-from "^1.0.0" - -requires-port@1.0.x, requires-port@1.x.x, requires-port@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - -resolve-cwd@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" - dependencies: - resolve-from "^3.0.0" - -resolve-from@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" - -resolve-from@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" - -resolve-url@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - -restore-cursor@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" - dependencies: - onetime "^2.0.0" - signal-exit "^3.0.2" - -ret@~0.1.10: - version "0.1.15" - resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" - -rimraf@2, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" - dependencies: - glob "^7.0.5" - -ripemd160@^2.0.0, ripemd160@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.1.tgz#0f4584295c53a3628af7e6d79aca21ce57d1c6e7" - dependencies: - hash-base "^2.0.0" - inherits "^2.0.1" - -run-async@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" - dependencies: - is-promise "^2.1.0" - -run-queue@^1.0.0, run-queue@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" - dependencies: - aproba "^1.1.1" - -rx-lite-aggregates@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be" - dependencies: - rx-lite "*" - -rx-lite@*, rx-lite@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" - -safe-buffer@5.1.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" - -safe-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" - dependencies: - ret "~0.1.10" - -sass-graph@^2.2.4: - version "2.2.4" - resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.4.tgz#13fbd63cd1caf0908b9fd93476ad43a51d1e0b49" - dependencies: - glob "^7.0.0" - lodash "^4.0.0" - scss-tokenizer "^0.2.3" - yargs "^7.0.0" - -schema-utils@^0.4.2: - version "0.4.5" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.4.5.tgz#21836f0608aac17b78f9e3e24daff14a5ca13a3e" - dependencies: - ajv "^6.1.0" - ajv-keywords "^3.1.0" - -scss-tokenizer@^0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz#8eb06db9a9723333824d3f5530641149847ce5d1" - dependencies: - js-base64 "^2.1.8" - source-map "^0.4.2" - -select-hose@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" - -selfsigned@^1.9.1: - version "1.10.2" - resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.2.tgz#b4449580d99929b65b10a48389301a6592088758" - dependencies: - node-forge "0.7.1" - -"semver@2 || 3 || 4 || 5", semver@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" - -semver@~5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" - -send@0.16.1: - version "0.16.1" - resolved "https://registry.yarnpkg.com/send/-/send-0.16.1.tgz#a70e1ca21d1382c11d0d9f6231deb281080d7ab3" - dependencies: - debug "2.6.9" - depd "~1.1.1" - destroy "~1.0.4" - encodeurl "~1.0.1" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "~1.6.2" - mime "1.4.1" - ms "2.0.0" - on-finished "~2.3.0" - range-parser "~1.2.0" - statuses "~1.3.1" - -serialize-javascript@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.4.0.tgz#7c958514db6ac2443a8abc062dc9f7886a7f6005" - -serve-index@^1.7.2: - version "1.9.1" - resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" - dependencies: - accepts "~1.3.4" - batch "0.6.1" - debug "2.6.9" - escape-html "~1.0.3" - http-errors "~1.6.2" - mime-types "~2.1.17" - parseurl "~1.3.2" - -serve-static@1.13.1: - version "1.13.1" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.1.tgz#4c57d53404a761d8f2e7c1e8a18a47dbf278a719" - dependencies: - encodeurl "~1.0.1" - escape-html "~1.0.3" - parseurl "~1.3.2" - send "0.16.1" - -set-blocking@^2.0.0, set-blocking@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - -set-getter@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/set-getter/-/set-getter-0.1.0.tgz#d769c182c9d5a51f409145f2fba82e5e86e80376" - dependencies: - to-object-path "^0.3.0" - -set-immediate-shim@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" - -set-value@^0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.1" - to-object-path "^0.3.0" - -set-value@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274" - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.3" - split-string "^3.0.1" - -setimmediate@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - -setprototypeof@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04" - -setprototypeof@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" - -sha.js@^2.4.0, sha.js@^2.4.8: - version "2.4.10" - resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.10.tgz#b1fde5cd7d11a5626638a07c604ab909cfa31f9b" - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - dependencies: - shebang-regex "^1.0.0" - -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - -shell-quote@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.6.1.tgz#f4781949cce402697127430ea3b3c5476f481767" - dependencies: - array-filter "~0.0.0" - array-map "~0.0.0" - array-reduce "~0.0.0" - jsonify "~0.0.0" - -signal-exit@^3.0.0, signal-exit@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" - -slash@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" - -slice-ansi@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d" - dependencies: - is-fullwidth-code-point "^2.0.0" - -snapdragon-node@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" - dependencies: - define-property "^1.0.0" - isobject "^3.0.0" - snapdragon-util "^3.0.1" - -snapdragon-util@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" - dependencies: - kind-of "^3.2.0" - -snapdragon@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.1.tgz#e12b5487faded3e3dea0ac91e9400bf75b401370" - dependencies: - base "^0.11.1" - debug "^2.2.0" - define-property "^0.2.5" - extend-shallow "^2.0.1" - map-cache "^0.2.2" - source-map "^0.5.6" - source-map-resolve "^0.5.0" - use "^2.0.0" - -sntp@1.x.x: - version "1.0.9" - resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" - dependencies: - hoek "2.x.x" - -sntp@2.x.x: - version "2.1.0" - resolved "https://registry.yarnpkg.com/sntp/-/sntp-2.1.0.tgz#2c6cec14fedc2222739caf9b5c3d85d1cc5a2cc8" - dependencies: - hoek "4.x.x" - -sockjs-client@1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.1.4.tgz#5babe386b775e4cf14e7520911452654016c8b12" - dependencies: - debug "^2.6.6" - eventsource "0.1.6" - faye-websocket "~0.11.0" - inherits "^2.0.1" - json3 "^3.3.2" - url-parse "^1.1.8" - -sockjs@0.3.19: - version "0.3.19" - resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.19.tgz#d976bbe800af7bd20ae08598d582393508993c0d" - dependencies: - faye-websocket "^0.10.0" - uuid "^3.0.1" - -source-list-map@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.0.tgz#aaa47403f7b245a92fbc97ea08f250d6087ed085" - -source-map-resolve@^0.5.0: - version "0.5.1" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.1.tgz#7ad0f593f2281598e854df80f19aae4b92d7a11a" - dependencies: - atob "^2.0.0" - decode-uri-component "^0.2.0" - resolve-url "^0.2.1" - source-map-url "^0.4.0" - urix "^0.1.0" - -source-map-support@^0.4.15: - version "0.4.18" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" - dependencies: - source-map "^0.5.6" - -source-map-url@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" - -source-map@^0.4.2: - version "0.4.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" - dependencies: - amdefine ">=0.0.4" - -source-map@^0.5.6, source-map@^0.5.7: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - -source-map@^0.6.1, source-map@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - -spdx-correct@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40" - dependencies: - spdx-license-ids "^1.0.2" - -spdx-expression-parse@~1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c" - -spdx-license-ids@^1.0.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57" - -spdy-transport@^2.0.18: - version "2.0.20" - resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-2.0.20.tgz#735e72054c486b2354fe89e702256004a39ace4d" - dependencies: - debug "^2.6.8" - detect-node "^2.0.3" - hpack.js "^2.1.6" - obuf "^1.1.1" - readable-stream "^2.2.9" - safe-buffer "^5.0.1" - wbuf "^1.7.2" - -spdy@^3.4.1: - version "3.4.7" - resolved "https://registry.yarnpkg.com/spdy/-/spdy-3.4.7.tgz#42ff41ece5cc0f99a3a6c28aabb73f5c3b03acbc" - dependencies: - debug "^2.6.8" - handle-thing "^1.2.5" - http-deceiver "^1.2.7" - safe-buffer "^5.0.1" - select-hose "^2.0.0" - spdy-transport "^2.0.18" - -split-string@^3.0.1, split-string@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" - dependencies: - extend-shallow "^3.0.0" - -split@0.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/split/-/split-0.3.3.tgz#cd0eea5e63a211dfff7eb0f091c4133e2d0dd28f" - dependencies: - through "2" - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - -sshpk@^1.7.0: - version "1.13.1" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3" - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - dashdash "^1.12.0" - getpass "^0.1.1" - optionalDependencies: - bcrypt-pbkdf "^1.0.0" - ecc-jsbn "~0.1.1" - jsbn "~0.1.0" - tweetnacl "~0.14.0" - -ssri@^5.2.4: - version "5.2.4" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-5.2.4.tgz#9985e14041e65fc397af96542be35724ac11da52" - dependencies: - safe-buffer "^5.1.1" - -static-extend@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" - dependencies: - define-property "^0.2.5" - object-copy "^0.1.0" - -"statuses@>= 1.3.1 < 2": - version "1.4.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" - -statuses@~1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" - -stdout-stream@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/stdout-stream/-/stdout-stream-1.4.0.tgz#a2c7c8587e54d9427ea9edb3ac3f2cd522df378b" - dependencies: - readable-stream "^2.0.1" - -stream-browserify@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db" - dependencies: - inherits "~2.0.1" - readable-stream "^2.0.2" - -stream-combiner@~0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.0.4.tgz#4d5e433c185261dde623ca3f44c586bcf5c4ad14" - dependencies: - duplexer "~0.1.1" - -stream-each@^1.1.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.2.tgz#8e8c463f91da8991778765873fe4d960d8f616bd" - dependencies: - end-of-stream "^1.1.0" - stream-shift "^1.0.0" - -stream-http@^2.7.2: - version "2.8.0" - resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.0.tgz#fd86546dac9b1c91aff8fc5d287b98fafb41bc10" - dependencies: - builtin-status-codes "^3.0.0" - inherits "^2.0.1" - readable-stream "^2.3.3" - to-arraybuffer "^1.0.0" - xtend "^4.0.0" - -stream-shift@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" - -string-width@^1.0.1, string-width@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - -string-width@^2.1.0, string-width@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - -string.prototype.padend@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.0.0.tgz#f3aaef7c1719f170c5eab1c32bf780d96e21f2f0" - dependencies: - define-properties "^1.1.2" - es-abstract "^1.4.3" - function-bind "^1.0.2" - -string_decoder@^1.0.0, string_decoder@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" - dependencies: - safe-buffer "~5.1.0" - -string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - -stringstream@~0.0.4, stringstream@~0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" - -strip-ansi@^3.0.0, strip-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - dependencies: - ansi-regex "^2.0.0" - -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - dependencies: - ansi-regex "^3.0.0" - -strip-bom@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" - dependencies: - is-utf8 "^0.2.0" - -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - -strip-indent@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" - dependencies: - get-stdin "^4.0.1" - -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - -supports-color@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" - -supports-color@^5.1.0, supports-color@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.2.0.tgz#b0d5333b1184dd3666cbe5aa0b45c5ac7ac17a4a" - dependencies: - has-flag "^3.0.0" - -table@^4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/table/-/table-4.0.3.tgz#00b5e2b602f1794b9acaf9ca908a76386a7813bc" - dependencies: - ajv "^6.0.1" - ajv-keywords "^3.0.0" - chalk "^2.1.0" - lodash "^4.17.4" - slice-ansi "1.0.0" - string-width "^2.1.1" - -tapable@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.0.0.tgz#cbb639d9002eed9c6b5975eb20598d7936f1f9f2" - -tar-pack@^3.4.0: - version "3.4.1" - resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.1.tgz#e1dbc03a9b9d3ba07e896ad027317eb679a10a1f" - dependencies: - debug "^2.2.0" - fstream "^1.0.10" - fstream-ignore "^1.0.5" - once "^1.3.3" - readable-stream "^2.1.4" - rimraf "^2.5.1" - tar "^2.2.1" - uid-number "^0.0.6" - -tar@^2.0.0, tar@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" - dependencies: - block-stream "*" - fstream "^1.0.2" - inherits "2" - -text-table@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - -three@^0.90.0: - version "0.90.0" - resolved "https://registry.yarnpkg.com/three/-/three-0.90.0.tgz#be478e7c0f82c5ae742c197db1e38e58b6190d1b" - -through2@^2.0.0, through2@^2.0.1: - version "2.0.3" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" - dependencies: - readable-stream "^2.1.5" - xtend "~4.0.1" - -through@2, through@^2.3.6, through@~2.3, through@~2.3.1: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - -thunky@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.0.2.tgz#a862e018e3fb1ea2ec3fce5d55605cf57f247371" - -time-stamp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-2.0.0.tgz#95c6a44530e15ba8d6f4a3ecb8c3a3fac46da357" - -timers-browserify@^2.0.4: - version "2.0.6" - resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.6.tgz#241e76927d9ca05f4d959819022f5b3664b64bae" - dependencies: - setimmediate "^1.0.4" - -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - dependencies: - os-tmpdir "~1.0.2" - -to-arraybuffer@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" - -to-fast-properties@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" - -to-object-path@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" - dependencies: - kind-of "^3.0.2" - -to-regex-range@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" - dependencies: - is-number "^3.0.0" - repeat-string "^1.6.1" - -to-regex@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" - dependencies: - define-property "^2.0.2" - extend-shallow "^3.0.2" - regex-not "^1.0.2" - safe-regex "^1.1.0" - -tough-cookie@~2.3.0, tough-cookie@~2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561" - dependencies: - punycode "^1.4.1" - -trim-newlines@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" - -trim-right@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" - -"true-case-path@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/true-case-path/-/true-case-path-1.0.2.tgz#7ec91130924766c7f573be3020c34f8fdfd00d62" - dependencies: - glob "^6.0.4" - -tty-browserify@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" - -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - dependencies: - safe-buffer "^5.0.1" - -tunnel-agent@~0.4.1: - version "0.4.3" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb" - -tween.js@^16.6.0: - version "16.6.0" - resolved "https://registry.yarnpkg.com/tween.js/-/tween.js-16.6.0.tgz#739104c9336cc4f11ee53f9ce7cede51e6723624" - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - -type-check@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - dependencies: - prelude-ls "~1.1.2" - -type-is@~1.6.15: - version "1.6.16" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194" - dependencies: - media-typer "0.3.0" - mime-types "~2.1.18" - -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - -uglify-es@^3.3.4: - version "3.3.9" - resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.3.9.tgz#0c1c4f0700bed8dbc124cdb304d2592ca203e677" - dependencies: - commander "~2.13.0" - source-map "~0.6.1" - -uglifyjs-webpack-plugin@^1.1.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.2.2.tgz#e7516d4367afdb715c3847841eb46f94c45ca2b9" - dependencies: - cacache "^10.0.1" - find-cache-dir "^1.0.0" - schema-utils "^0.4.2" - serialize-javascript "^1.4.0" - source-map "^0.6.1" - uglify-es "^3.3.4" - webpack-sources "^1.1.0" - worker-farm "^1.5.2" - -uid-number@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" - -union-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" - dependencies: - arr-union "^3.1.0" - get-value "^2.0.6" - is-extendable "^0.1.1" - set-value "^0.4.3" - -unique-filename@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.0.tgz#d05f2fe4032560871f30e93cbe735eea201514f3" - dependencies: - unique-slug "^2.0.0" - -unique-slug@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.0.tgz#db6676e7c7cc0629878ff196097c78855ae9f4ab" - dependencies: - imurmurhash "^0.1.4" - -unpipe@1.0.0, unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - -unset-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" - dependencies: - has-value "^0.3.1" - isobject "^3.0.0" - -upath@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/upath/-/upath-1.0.2.tgz#80aaae5395abc5fd402933ae2f58694f0860204c" - dependencies: - lodash.endswith "^4.2.1" - lodash.isfunction "^3.0.8" - lodash.isstring "^4.0.1" - lodash.startswith "^4.2.1" - -urix@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" - -url-join@^2.0.2: - version "2.0.5" - resolved "https://registry.yarnpkg.com/url-join/-/url-join-2.0.5.tgz#5af22f18c052a000a48d7b82c5e9c2e2feeda728" - -url-parse@1.0.x: - version "1.0.5" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.0.5.tgz#0854860422afdcfefeb6c965c662d4800169927b" - dependencies: - querystringify "0.0.x" - requires-port "1.0.x" - -url-parse@^1.1.8: - version "1.2.0" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.2.0.tgz#3a19e8aaa6d023ddd27dcc44cb4fc8f7fec23986" - dependencies: - querystringify "~1.0.0" - requires-port "~1.0.0" - -url@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" - dependencies: - punycode "1.3.2" - querystring "0.2.0" - -use@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/use/-/use-2.0.2.tgz#ae28a0d72f93bf22422a18a2e379993112dec8e8" - dependencies: - define-property "^0.2.5" - isobject "^3.0.0" - lazy-cache "^2.0.2" - -util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - -util@0.10.3, util@^0.10.3: - version "0.10.3" - resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" - dependencies: - inherits "2.0.1" - -utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - -uuid@^3.0.0, uuid@^3.0.1, uuid@^3.1.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14" - -validate-npm-package-license@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" - dependencies: - spdx-correct "~1.0.0" - spdx-expression-parse "~1.0.0" - -vary@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - -verror@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - -vm-browserify@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73" - dependencies: - indexof "0.0.1" - -watchpack@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.4.0.tgz#4a1472bcbb952bd0a9bb4036801f954dfb39faac" - dependencies: - async "^2.1.2" - chokidar "^1.7.0" - graceful-fs "^4.1.2" - -wbuf@^1.1.0, wbuf@^1.7.2: - version "1.7.2" - resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.2.tgz#d697b99f1f59512df2751be42769c1580b5801fe" - dependencies: - minimalistic-assert "^1.0.0" - -webpack-dev-middleware@1.12.2: - version "1.12.2" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-1.12.2.tgz#f8fc1120ce3b4fc5680ceecb43d777966b21105e" - dependencies: - memory-fs "~0.4.1" - mime "^1.5.0" - path-is-absolute "^1.0.0" - range-parser "^1.0.3" - time-stamp "^2.0.0" - -webpack-dev-middleware@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-2.0.6.tgz#a51692801e8310844ef3e3790e1eacfe52326fd4" - dependencies: - loud-rejection "^1.6.0" - memory-fs "~0.4.1" - mime "^2.1.0" - path-is-absolute "^1.0.0" - range-parser "^1.0.3" - url-join "^2.0.2" - webpack-log "^1.0.1" - -webpack-dev-server@^2.11.1: - version "2.11.1" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-2.11.1.tgz#6f9358a002db8403f016e336816f4485384e5ec0" - dependencies: - ansi-html "0.0.7" - array-includes "^3.0.3" - bonjour "^3.5.0" - chokidar "^2.0.0" - compression "^1.5.2" - connect-history-api-fallback "^1.3.0" - debug "^3.1.0" - del "^3.0.0" - express "^4.16.2" - html-entities "^1.2.0" - http-proxy-middleware "~0.17.4" - import-local "^1.0.0" - internal-ip "1.2.0" - ip "^1.1.5" - killable "^1.0.0" - loglevel "^1.4.1" - opn "^5.1.0" - portfinder "^1.0.9" - selfsigned "^1.9.1" - serve-index "^1.7.2" - sockjs "0.3.19" - sockjs-client "1.1.4" - spdy "^3.4.1" - strip-ansi "^3.0.0" - supports-color "^5.1.0" - webpack-dev-middleware "1.12.2" - yargs "6.6.0" - -webpack-log@^1.0.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-1.1.2.tgz#cdc76016537eed24708dc6aa3d1e52189efee107" - dependencies: - chalk "^2.1.0" - log-symbols "^2.1.0" - loglevelnext "^1.0.1" - uuid "^3.1.0" - -webpack-sources@^1.0.1, webpack-sources@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.1.0.tgz#a101ebae59d6507354d71d8013950a3a8b7a5a54" - dependencies: - source-list-map "^2.0.0" - source-map "~0.6.1" - -webpack@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.0.0.tgz#423c2d27cb050e7655c6ea25ce27bfcbfcb56731" - dependencies: - acorn "^5.0.0" - acorn-dynamic-import "^3.0.0" - ajv "^6.1.0" - ajv-keywords "^3.1.0" - chrome-trace-event "^0.1.1" - enhanced-resolve "^4.0.0" - eslint-scope "^3.7.1" - loader-runner "^2.3.0" - loader-utils "^1.1.0" - memory-fs "~0.4.1" - micromatch "^3.1.8" - mkdirp "~0.5.0" - neo-async "^2.5.0" - node-libs-browser "^2.0.0" - schema-utils "^0.4.2" - tapable "^1.0.0" - uglifyjs-webpack-plugin "^1.1.1" - watchpack "^1.4.0" - webpack-sources "^1.0.1" - -websocket-driver@>=0.5.1: - version "0.7.0" - resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.0.tgz#0caf9d2d755d93aee049d4bdd0d3fe2cca2a24eb" - dependencies: - http-parser-js ">=0.4.0" - websocket-extensions ">=0.1.1" - -websocket-extensions@>=0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29" - -which-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" - -which@1, which@^1.2.9: - version "1.3.0" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" - dependencies: - isexe "^2.0.0" - -wide-align@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710" - dependencies: - string-width "^1.0.2" - -wordwrap@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - -worker-farm@^1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.5.2.tgz#32b312e5dc3d5d45d79ef44acc2587491cd729ae" - dependencies: - errno "^0.1.4" - xtend "^4.0.1" - -wrap-ansi@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - -write@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" - dependencies: - mkdirp "^0.5.1" - -xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" - -y18n@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" - -y18n@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" - -yallist@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" - -yargs-parser@^4.2.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-4.2.1.tgz#29cceac0dc4f03c6c87b4a9f217dd18c9f74871c" - dependencies: - camelcase "^3.0.0" - -yargs-parser@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a" - dependencies: - camelcase "^3.0.0" - -yargs@6.6.0: - version "6.6.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-6.6.0.tgz#782ec21ef403345f830a808ca3d513af56065208" - dependencies: - camelcase "^3.0.0" - cliui "^3.2.0" - decamelize "^1.1.1" - get-caller-file "^1.0.1" - os-locale "^1.4.0" - read-pkg-up "^1.0.1" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^1.0.2" - which-module "^1.0.0" - y18n "^3.2.1" - yargs-parser "^4.2.0" - -yargs@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8" - dependencies: - camelcase "^3.0.0" - cliui "^3.2.0" - decamelize "^1.1.1" - get-caller-file "^1.0.1" - os-locale "^1.4.0" - read-pkg-up "^1.0.1" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^1.0.2" - which-module "^1.0.0" - y18n "^3.2.1" - yargs-parser "^5.0.0"