{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/three/build/three.module.js","webpack:///./node_modules/buffer/index.js","webpack:///(webpack)/buildin/global.js","webpack:///./node_modules/xtend/immutable.js","webpack:///./node_modules/object-assign/index.js","webpack:///./node_modules/dtype/index.js","webpack:///./node_modules/load-bmfont/browser.js","webpack:///./node_modules/base64-js/index.js","webpack:///./node_modules/ieee754/index.js","webpack:///./node_modules/isarray/index.js","webpack:///./node_modules/xhr/index.js","webpack:///./node_modules/global/window.js","webpack:///./node_modules/is-function/index.js","webpack:///./node_modules/parse-headers/parse-headers.js","webpack:///./node_modules/parse-bmfont-ascii/index.js","webpack:///./node_modules/parse-bmfont-xml/lib/browser.js","webpack:///./node_modules/parse-bmfont-xml/lib/parse-attribs.js","webpack:///./node_modules/xml-parse-from-string/index.js","webpack:///./node_modules/parse-bmfont-binary/index.js","webpack:///./node_modules/load-bmfont/lib/is-binary.js","webpack:///./node_modules/buffer-equal/index.js","webpack:///./node_modules/three-bmfont-text/shaders/msdf.js","webpack:///./node_modules/@srinivasprabhu/three-bmfont-text/index.js","webpack:///./node_modules/layout-bmfont-text/index.js","webpack:///./node_modules/word-wrapper/index.js","webpack:///./node_modules/as-number/index.js","webpack:///./node_modules/inherits/inherits_browser.js","webpack:///./node_modules/quad-indices/index.js","webpack:///./node_modules/an-array/index.js","webpack:///./node_modules/is-buffer/index.js","webpack:///./node_modules/three-buffer-vertex-data/index.js","webpack:///./node_modules/flatten-vertex-data/index.js","webpack:///./node_modules/@srinivasprabhu/three-bmfont-text/lib/vertices.js","webpack:///./node_modules/@srinivasprabhu/three-bmfont-text/lib/utils.js","webpack:///./node_modules/@srinivasprabhu/three-bmfont-text/shaders/msdf.js","webpack:///./node_modules/jspdf/dist/jspdf.min.js","webpack:///./node_modules/@ungap/url-search-params/esm/index.js","webpack:///./node_modules/delaunator/index.js","webpack:///./node_modules/three/examples/jsm/controls/OrbitControls.js","webpack:///./node_modules/camera-controls/dist/camera-controls.module.js","webpack:///./src/index.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","undefined","Number","EPSILON","Math","pow","isInteger","isFinite","floor","sign","x","Function","this","toString","match","assign","target","TypeError","output","index","arguments","length","source","nextKey","REVISION","MOUSE","LEFT","MIDDLE","RIGHT","ROTATE","DOLLY","PAN","TOUCH","DOLLY_PAN","DOLLY_ROTATE","CullFaceNone","CullFaceBack","CullFaceFront","CullFaceFrontBack","BasicShadowMap","PCFShadowMap","PCFSoftShadowMap","VSMShadowMap","FrontSide","BackSide","DoubleSide","FlatShading","SmoothShading","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","CineonToneMapping","ACESFilmicToneMapping","CustomToneMapping","UVMapping","CubeReflectionMapping","CubeRefractionMapping","EquirectangularReflectionMapping","EquirectangularRefractionMapping","CubeUVReflectionMapping","CubeUVRefractionMapping","RepeatWrapping","ClampToEdgeWrapping","MirroredRepeatWrapping","NearestFilter","NearestMipmapNearestFilter","NearestMipMapNearestFilter","NearestMipmapLinearFilter","NearestMipMapLinearFilter","LinearFilter","LinearMipmapNearestFilter","LinearMipMapNearestFilter","LinearMipmapLinearFilter","LinearMipMapLinearFilter","UnsignedByteType","ByteType","ShortType","UnsignedShortType","IntType","UnsignedIntType","FloatType","HalfFloatType","UnsignedShort4444Type","UnsignedShort5551Type","UnsignedShort565Type","UnsignedInt248Type","AlphaFormat","RGBFormat","RGBAFormat","LuminanceFormat","LuminanceAlphaFormat","RGBEFormat","DepthFormat","DepthStencilFormat","RedFormat","RedIntegerFormat","RGFormat","RGIntegerFormat","RGBIntegerFormat","RGBAIntegerFormat","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","RGB_ETC2_Format","RGBA_ETC2_EAC_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","RGBA_BPTC_Format","SRGB8_ALPHA8_ASTC_4x4_Format","SRGB8_ALPHA8_ASTC_5x4_Format","SRGB8_ALPHA8_ASTC_5x5_Format","SRGB8_ALPHA8_ASTC_6x5_Format","SRGB8_ALPHA8_ASTC_6x6_Format","SRGB8_ALPHA8_ASTC_8x5_Format","SRGB8_ALPHA8_ASTC_8x6_Format","SRGB8_ALPHA8_ASTC_8x8_Format","SRGB8_ALPHA8_ASTC_10x5_Format","SRGB8_ALPHA8_ASTC_10x6_Format","SRGB8_ALPHA8_ASTC_10x8_Format","SRGB8_ALPHA8_ASTC_10x10_Format","SRGB8_ALPHA8_ASTC_12x10_Format","SRGB8_ALPHA8_ASTC_12x12_Format","LoopOnce","LoopRepeat","LoopPingPong","InterpolateDiscrete","InterpolateLinear","InterpolateSmooth","ZeroCurvatureEnding","ZeroSlopeEnding","WrapAroundEnding","NormalAnimationBlendMode","AdditiveAnimationBlendMode","TrianglesDrawMode","TriangleStripDrawMode","TriangleFanDrawMode","LinearEncoding","sRGBEncoding","GammaEncoding","RGBEEncoding","LogLuvEncoding","RGBM7Encoding","RGBM16Encoding","RGBDEncoding","BasicDepthPacking","RGBADepthPacking","TangentSpaceNormalMap","ObjectSpaceNormalMap","ZeroStencilOp","KeepStencilOp","ReplaceStencilOp","IncrementStencilOp","DecrementStencilOp","IncrementWrapStencilOp","DecrementWrapStencilOp","InvertStencilOp","NeverStencilFunc","LessStencilFunc","EqualStencilFunc","LessEqualStencilFunc","GreaterStencilFunc","NotEqualStencilFunc","GreaterEqualStencilFunc","AlwaysStencilFunc","StaticDrawUsage","DynamicDrawUsage","StreamDrawUsage","StaticReadUsage","DynamicReadUsage","StreamReadUsage","StaticCopyUsage","DynamicCopyUsage","StreamCopyUsage","EventDispatcher","addEventListener","type","listener","_listeners","listeners","indexOf","push","hasEventListener","removeEventListener","listenerArray","splice","dispatchEvent","event","array","slice","_lut","_seed","MathUtils","DEG2RAD","PI","RAD2DEG","generateUUID","d0","random","d1","d2","d3","toUpperCase","clamp","min","max","euclideanModulo","mapLinear","a1","a2","b1","b2","lerp","y","smoothstep","smootherstep","randInt","low","high","randFloat","randFloatSpread","range","seededRandom","degToRad","degrees","radToDeg","radians","isPowerOfTwo","ceilPowerOfTwo","ceil","log","LN2","floorPowerOfTwo","setQuaternionFromProperEuler","q","a","b","order","cos","sin","c2","s2","c13","s13","c1_3","s1_3","c3_1","s3_1","set","console","warn","Vector2","Matrix3","elements","error","_canvas","defineProperties","isVector2","setScalar","scalar","setX","setY","setComponent","Error","getComponent","clone","constructor","copy","v","add","w","addVectors","addScalar","addScaledVector","sub","subVectors","subScalar","multiply","multiplyScalar","divide","divideScalar","applyMatrix3","e","clampScalar","minVal","maxVal","clampLength","round","roundToZero","negate","dot","cross","lengthSq","sqrt","manhattanLength","abs","normalize","angle","atan2","distanceTo","distanceToSquared","dx","dy","manhattanDistanceTo","setLength","alpha","lerpVectors","v1","v2","equals","fromArray","offset","toArray","fromBufferAttribute","attribute","getX","getY","rotateAround","center","isMatrix3","n11","n12","n13","n21","n22","n23","n31","n32","n33","te","identity","me","extractBasis","xAxis","yAxis","zAxis","setFromMatrix3Column","setFromMatrix4","multiplyMatrices","premultiply","ae","be","a11","a12","a13","a21","a22","a23","a31","a32","a33","b11","b12","b13","b21","b22","b23","b31","b32","b33","determinant","f","g","h","getInverse","matrix","throwOnDegenerate","t11","t12","t13","det","detInv","transpose","tmp","getNormalMatrix","matrix4","transposeIntoArray","setUvTransform","tx","ty","sx","sy","rotation","cx","cy","scale","rotate","theta","translate","ImageUtils","getDataURL","image","test","src","HTMLCanvasElement","canvas","document","createElementNS","width","height","context","getContext","ImageData","putImageData","drawImage","toDataURL","textureId","Texture","mapping","wrapS","wrapT","magFilter","minFilter","format","anisotropy","encoding","uuid","DEFAULT_IMAGE","mipmaps","DEFAULT_MAPPING","internalFormat","repeat","matrixAutoUpdate","generateMipmaps","premultiplyAlpha","flipY","unpackAlignment","version","onUpdate","Vector4","z","WebGLRenderTarget","options","scissor","scissorTest","viewport","texture","depthBuffer","stencilBuffer","depthTexture","WebGLMultisampleRenderTarget","samples","Quaternion","_x","_y","_z","_w","isTexture","updateMatrix","toJSON","meta","isRootObject","textures","metadata","generator","wrap","images","url","Array","isArray","dispose","transformUv","uv","isVector4","setZ","setW","applyMatrix4","setAxisAngleFromQuaternion","acos","setAxisAngleFromRotationMatrix","m11","m12","m13","m21","m22","m23","m31","m32","m33","xx","yy","zz","xy","xz","yz","getZ","getW","isWebGLRenderTarget","setSize","isWebGLMultisampleRenderTarget","slerp","qa","qb","qm","slerpFlat","dst","dstOffset","src0","srcOffset0","src1","srcOffset1","x0","y0","z0","w0","x1","y1","z1","w1","dir","sqrSin","len","tDir","multiplyQuaternionsFlat","_onChangeCallback","isQuaternion","quaternion","setFromEuler","euler","update","isEuler","c1","c3","s1","s3","setFromAxisAngle","axis","halfAngle","setFromRotationMatrix","trace","setFromUnitVectors","vFrom","vTo","angleTo","rotateTowards","step","inverse","conjugate","multiplyQuaternions","qax","qay","qaz","qaw","qbx","qby","qbz","qbw","cosHalfTheta","sqrSinHalfTheta","sinHalfTheta","halfTheta","ratioA","ratioB","_onChange","callback","_vector","Vector3","_quaternion","isVector3","multiplyVectors","applyEuler","applyQuaternion","applyAxisAngle","applyNormalMatrix","qx","qy","qz","qw","ix","iy","iz","iw","project","camera","matrixWorldInverse","projectionMatrix","unproject","projectionMatrixInverse","matrixWorld","transformDirection","crossVectors","ax","ay","az","bx","by","bz","projectOnVector","denominator","projectOnPlane","planeNormal","reflect","normal","dz","setFromSpherical","setFromSphericalCoords","radius","phi","sinPhiRadius","setFromCylindrical","setFromCylindricalCoords","setFromMatrixPosition","setFromMatrixScale","setFromMatrixColumn","sz","_v1","_m1","Matrix4","_zero","_one","isMatrix4","n14","n24","n34","n41","n42","n43","n44","copyPosition","makeBasis","extractRotation","scaleX","scaleY","scaleZ","makeRotationFromEuler","af","bf","ce","cf","de","df","ac","ad","bc","bd","makeRotationFromQuaternion","compose","lookAt","eye","up","a14","a24","a34","a41","a42","a43","a44","b14","b24","b34","b41","b42","b43","b44","setPosition","t14","getMaxScaleOnAxis","scaleXSq","scaleYSq","scaleZSq","makeTranslation","makeRotationX","makeRotationY","makeRotationZ","makeRotationAxis","makeScale","makeShear","position","x2","y2","z2","wx","wy","wz","decompose","invSX","invSY","invSZ","makePerspective","left","right","top","bottom","near","far","makeOrthographic","_matrix","_quaternion$1","Euler","DefaultOrder","_order","Layers","mask","RotationOrders","asin","setFromQuaternion","setFromVector3","reorder","newOrder","toVector3","optionalResult","channel","enable","enableAll","toggle","disable","disableAll","layers","_object3DId","_v1$1","_q1","_m1$1","_target","_position","_scale","_quaternion$2","_xAxis","_yAxis","_zAxis","_addedEvent","_removedEvent","Object3D","parent","children","DefaultUp","configurable","modelViewMatrix","normalMatrix","DefaultMatrixAutoUpdate","matrixWorldNeedsUpdate","visible","castShadow","receiveShadow","frustumCulled","renderOrder","userData","Scene","background","environment","fog","overrideMaterial","autoUpdate","__THREE_DEVTOOLS__","CustomEvent","detail","isObject3D","onBeforeRender","onAfterRender","setRotationFromAxisAngle","setRotationFromEuler","setRotationFromMatrix","setRotationFromQuaternion","rotateOnAxis","rotateOnWorldAxis","rotateX","rotateY","rotateZ","translateOnAxis","distance","translateX","translateY","translateZ","localToWorld","vector","worldToLocal","updateWorldMatrix","isCamera","isLight","remove","attach","getObjectById","id","getObjectByProperty","getObjectByName","getWorldPosition","updateMatrixWorld","getWorldQuaternion","getWorldScale","getWorldDirection","raycast","traverse","traverseVisible","traverseAncestors","force","updateParents","updateChildren","geometries","materials","shapes","serialize","library","element","JSON","stringify","isInstancedMesh","count","instanceMatrix","isMesh","isLine","isPoints","geometry","parameters","shape","material","uuids","extractFromCache","cache","values","data","recursive","parse","child","isScene","_points","_vector$1","_box","Box3","_v0","_v1$2","_v2","_f0","_f1","_f2","_center","_extents","_triangleNormal","_testAxis","Infinity","satForAxes","axes","v0","extents","j","p0","p1","p2","isBox3","setFromArray","minX","minY","minZ","maxX","maxY","maxZ","setFromBufferAttribute","setFromPoints","points","makeEmpty","il","expandByPoint","setFromCenterAndSize","size","halfSize","setFromObject","expandByObject","box","isEmpty","getCenter","getSize","point","expandByVector","expandByScalar","boundingBox","computeBoundingBox","union","containsPoint","containsBox","getParameter","intersectsBox","intersectsSphere","sphere","clampPoint","intersectsPlane","plane","constant","intersectsTriangle","triangle","distanceToPoint","getBoundingSphere","intersect","_box$1","Sphere","optionalCenter","maxRadiusSq","radiusSum","deltaLengthSq","getBoundingBox","_vector$2","_segCenter","_segDir","_diff","_edge1","_edge2","_normal","Ray","origin","direction","ray","at","recast","closestPointToPoint","directionDistance","distanceSqToPoint","distanceSqToSegment","optionalPointOnRay","optionalPointOnSegment","segExtent","a01","b0","s0","sqrDist","extDet","invDet","intersectSphere","tca","radius2","thc","t0","t1","distanceToPlane","intersectPlane","distToPoint","intersectBox","tmin","tmax","tymin","tymax","tzmin","tzmax","invdirx","invdiry","invdirz","intersectTriangle","backfaceCulling","DdN","DdQxE2","DdE1xQ","QdN","_vector1","_vector2","_normalMatrix","Plane","isPlane","setComponents","setFromNormalAndCoplanarPoint","setFromCoplanarPoints","inverseNormalLength","distanceToSphere","projectPoint","intersectLine","line","delta","start","intersectsLine","startSign","endSign","end","coplanarPoint","optionalNormalMatrix","referencePoint","_v0$1","_v1$3","_v2$1","_v3","_vab","_vac","_vbc","_vap","_vbp","_vcp","Triangle","getNormal","targetLengthSq","getBarycoord","dot00","dot01","dot02","dot11","dot12","denom","invDenom","u","getUV","p3","uv1","uv2","uv3","isFrontFacing","setFromPointsAndIndices","i0","i1","i2","getArea","getMidpoint","getPlane","d4","vc","d5","d6","vb","va","_colorKeywords","_hslA","_hslB","Color","setRGB","hue2rgb","SRGBToLinear","LinearToSRGB","Face3","color","materialIndex","vertexNormals","isColor","vertexColors","setHex","setStyle","hex","setHSL","style","handleAlpha","string","parseFloat","exec","components","parseInt","charAt","setColorName","copyGammaToLinear","gammaFactor","copyLinearToGamma","safeInverse","convertGammaToLinear","convertLinearToGamma","copySRGBToLinear","copyLinearToSRGB","convertSRGBToLinear","convertLinearToSRGB","getHex","getHexString","getHSL","hue","saturation","lightness","getStyle","offsetHSL","addColors","color1","color2","lerpHSL","normalized","NAMES","materialId","Material","blending","side","flatShading","opacity","transparent","blendSrc","blendDst","blendEquation","blendSrcAlpha","blendDstAlpha","blendEquationAlpha","depthFunc","depthTest","depthWrite","stencilWriteMask","stencilFunc","stencilRef","stencilFuncMask","stencilFail","stencilZFail","stencilZPass","stencilWrite","clippingPlanes","clipIntersection","clipShadows","shadowSide","colorWrite","precision","polygonOffset","polygonOffsetFactor","polygonOffsetUnits","dithering","alphaTest","premultipliedAlpha","toneMapped","MeshBasicMaterial","map","lightMap","lightMapIntensity","aoMap","aoMapIntensity","specularMap","alphaMap","envMap","combine","reflectivity","refractionRatio","wireframe","wireframeLinewidth","wireframeLinecap","wireframeLinejoin","skinning","morphTargets","setValues","isMaterial","onBeforeCompile","customProgramCacheKey","newValue","currentValue","isRoot","roughness","metalness","sheen","emissive","emissiveIntensity","specular","shininess","clearcoat","clearcoatRoughness","clearcoatMap","clearcoatRoughnessMap","clearcoatNormalMap","clearcoatNormalScale","matcap","bumpMap","bumpScale","normalMap","normalMapType","normalScale","displacementMap","displacementScale","displacementBias","roughnessMap","metalnessMap","emissiveMap","envMapIntensity","gradientMap","sizeAttenuation","linewidth","dashSize","gapSize","morphNormals","srcPlanes","dstPlanes","isMeshBasicMaterial","_vector$3","_vector2$1","BufferAttribute","itemSize","usage","updateRange","Int8BufferAttribute","Int8Array","Uint8BufferAttribute","Uint8Array","Uint8ClampedBufferAttribute","Uint8ClampedArray","Int16BufferAttribute","Int16Array","Uint16BufferAttribute","Uint16Array","Int32BufferAttribute","Int32Array","Uint32BufferAttribute","Uint32Array","Float32BufferAttribute","Float32Array","Float64BufferAttribute","Float64Array","DirectGeometry","vertices","normals","colors","uvs","uvs2","groups","skinWeights","skinIndices","boundingSphere","verticesNeedUpdate","normalsNeedUpdate","colorsNeedUpdate","uvsNeedUpdate","groupsNeedUpdate","arrayMax","isBufferAttribute","onUploadCallback","setUsage","copyAt","index1","index2","copyArray","copyColorsArray","copyVector2sArray","vectors","copyVector3sArray","copyVector4sArray","setXY","setXYZ","setXYZW","onUpload","computeGroups","group","faces","face","fromGeometry","faceVertexUvs","hasFaceVertexUv","hasFaceVertexUv2","morphTargetsLength","morphTargetsPosition","morphNormalsLength","morphTargetsNormal","hasSkinIndices","hasSkinWeights","vertexUvs","morphTarget","morphNormal","_bufferGeometryId","_m1$2","_obj","_offset","_box$2","_boxMorphTargets","_vector$4","BufferGeometry","attributes","morphAttributes","morphTargetsRelative","drawRange","isBufferGeometry","getIndex","setIndex","getAttribute","setAttribute","deleteAttribute","addGroup","clearGroups","setDrawRange","needsUpdate","tangent","computeBoundingSphere","positions","lineDistances","isGeometry","updateFromObject","direct","__directGeometry","elementsNeedUpdate","lineDistancesNeedUpdate","lineDistance","fromDirectGeometry","morphAttributesPosition","morphAttribute","isNaN","jl","computeFaceNormals","computeVertexNormals","positionAttribute","normalAttribute","pA","pB","pC","nA","nB","nC","cb","ab","vA","vB","vC","normalizeNormals","merge","attributeArray1","attribute2","attributeArray2","attributeOffset","toNonIndexed","convertBufferAttribute","indices","array2","geometry2","newAttribute","morphArray","keys","attributeData","hasMorphAttributes","attributeArray","_inverseMatrix","_ray","_sphere","_vA","_vB","_vC","_tempA","_tempB","_tempC","_morphA","_morphB","_morphC","_uvA","_uvB","_uvC","_intersectionPoint","_intersectionPointWorld","Mesh","updateMorphTargets","checkIntersection","raycaster","checkBufferGeometryIntersection","morphPosition","morphInfluences","morphTargetInfluences","influence","isSkinnedMesh","boneTransform","intersection","morphTargetDictionary","ml","String","intersects","groupMaterial","faceIndex","isMultiMaterial","fl","faceMaterial","fvA","fvB","fvC","uvs_f","_geometryId","_m1$3","_obj$1","_offset$1","Geometry","fromBufferGeometry","scope","addFace","areaWeighted","vl","computeFlatVertexNormals","computeMorphNormals","__originalFaceNormal","__originalVertexNormals","tmpGeo","faceNormals","dstNormalsFace","dstNormalsVertex","faceNormal","materialIndexOffset","vertexOffset","vertices1","vertices2","faces1","faces2","colors1","colors2","vertexCopy","faceCopy","faceVertexNormals","faceVertexColors","faceVertexUvs2","uvsCopy","k","kl","mergeMesh","mesh","mergeVertices","verticesMap","unique","changes","faceIndicesToRemove","idx","diff","sortFacesByMaterialIndex","_id","sort","uvs1","newUvs1","newUvs2","vertex","normalsHash","colorsHash","uvsHash","hasMaterial","hasFaceUv","hasFaceNormal","hasFaceVertexNormal","hasFaceColor","hasFaceVertexColor","faceType","setBit","getUvIndex","getNormalIndex","getColorIndex","enabled","hash","srcVertexNormal","destVertexNormal","BoxGeometry","depth","widthSegments","heightSegments","depthSegments","super","BoxBufferGeometry","numberOfVertices","groupStart","buildPlane","udir","vdir","gridX","gridY","segmentWidth","segmentHeight","widthHalf","heightHalf","depthHalf","gridX1","gridY1","vertexCounter","groupCount","cloneUniforms","mergeUniforms","uniforms","merged","UniformsUtils","ShaderMaterial","defines","vertexShader","fragmentShader","lights","clipping","extensions","derivatives","fragDepth","drawBuffers","shaderTextureLOD","defaultAttributeValues","index0AttributeName","uniformsNeedUpdate","Camera","PerspectiveCamera","fov","aspect","zoom","focus","view","filmGauge","filmOffset","updateProjectionMatrix","isShaderMaterial","isPerspectiveCamera","setFocalLength","focalLength","vExtentSlope","getFilmHeight","atan","getFocalLength","tan","getEffectiveFOV","getFilmWidth","setViewOffset","fullWidth","fullHeight","offsetX","offsetY","clearViewOffset","skew","CubeCamera","renderTarget","isWebGLCubeRenderTarget","cameraPX","cameraNX","cameraPY","cameraNY","cameraPZ","cameraNZ","renderer","scene","currentXrEnabled","xr","currentRenderTarget","getRenderTarget","setRenderTarget","render","clear","stencil","WebGLCubeRenderTarget","dummy","DataTexture","fromEquirectangularTexture","shader","tEquirect","isDataTexture","_sphere$1","_vector$5","Frustum","p4","p5","planes","frustum","setFromProjectionMatrix","me0","me1","me2","me3","me4","me5","me6","me7","me8","me9","me10","me11","me12","me13","me14","me15","intersectsObject","intersectsSprite","sprite","negRadius","UniformsLib","common","diffuse","uvTransform","uv2Transform","specularmap","envmap","flipEnvMap","maxMipLevel","aomap","lightmap","emissivemap","bumpmap","normalmap","displacementmap","roughnessmap","metalnessmap","gradientmap","fogDensity","fogNear","fogFar","fogColor","ambientLightColor","lightProbe","directionalLights","properties","directionalLightShadows","shadowBias","shadowNormalBias","shadowRadius","shadowMapSize","directionalShadowMap","directionalShadowMatrix","spotLights","coneCos","penumbraCos","decay","spotLightShadows","spotShadowMap","spotShadowMatrix","pointLights","pointLightShadows","shadowCameraNear","shadowCameraFar","pointShadowMap","pointShadowMatrix","hemisphereLights","skyColor","groundColor","rectAreaLights","WebGLAnimation","isAnimating","animationLoop","requestId","onAnimationFrame","time","frame","requestAnimationFrame","stop","cancelAnimationFrame","setAnimationLoop","setContext","WebGLAttributes","gl","capabilities","isWebGL2","buffers","WeakMap","isInterleavedBufferAttribute","deleteBuffer","buffer","delete","bufferType","createBuffer","bindBuffer","bufferData","bytesPerElement","BYTES_PER_ELEMENT","bufferSubData","subarray","updateBuffer","PlaneGeometry","PlaneBufferGeometry","width_half","height_half","segment_width","segment_height","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","cube_uv_reflection_fragment","defaultnormal_vertex","displacementmap_pars_vertex","displacementmap_vertex","emissivemap_fragment","emissivemap_pars_fragment","encodings_fragment","encodings_pars_fragment","envmap_fragment","envmap_common_pars_fragment","envmap_pars_fragment","envmap_pars_vertex","envmap_physical_pars_fragment","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_toon_fragment","lights_toon_pars_fragment","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","clearcoat_normal_fragment_begin","clearcoat_normal_fragment_maps","clearcoat_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","transmissionmap_fragment","transmissionmap_pars_fragment","uv_pars_fragment","uv_pars_vertex","uv_vertex","uv2_pars_fragment","uv2_pars_vertex","uv2_vertex","worldpos_vertex","background_frag","background_vert","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","meshmatcap_frag","meshmatcap_vert","meshtoon_frag","meshtoon_vert","meshphong_frag","meshphong_vert","meshphysical_frag","meshphysical_vert","normal_frag","normal_vert","points_frag","points_vert","shadow_frag","shadow_vert","sprite_frag","sprite_vert","ShaderLib","basic","lambert","phong","standard","toon","dashed","totalSize","t2D","cube","equirect","distanceRGBA","referencePosition","nearDistance","farDistance","shadow","WebGLBackground","state","objects","clearColor","planeMesh","boxMesh","clearAlpha","currentBackground","currentBackgroundVersion","currentTonemapping","setClear","getClearColor","setClearColor","getClearAlpha","setClearAlpha","renderList","forceClear","session","getSession","environmentBlendMode","autoClear","autoClearColor","autoClearDepth","autoClearStencil","isCubeTexture","toneMapping","unshift","WebGLBindingStates","maxVertexAttributes","extension","vaoAvailable","bindingStates","defaultState","createBindingState","currentState","bindVertexArrayObject","vao","bindVertexArray","bindVertexArrayOES","deleteVertexArrayObject","deleteVertexArray","deleteVertexArrayOES","newAttributes","enabledAttributes","attributeDivisors","program","initAttributes","enableAttribute","enableAttributeAndDivisor","meshPerAttribute","enableVertexAttribArray","disableUnusedAttributes","disableVertexAttribArray","vertexAttribPointer","stride","vertexAttribIPointer","reset","resetDefaultState","setup","updateBuffers","programMap","stateMap","createVertexArray","createVertexArrayOES","getBindingState","cachedAttributes","geometryAttributes","cachedAttribute","geometryAttribute","saveCache","isInstancedBufferGeometry","programAttributes","getAttributes","materialDefaultAttributeValues","programAttribute","isInstancedInterleavedBuffer","_maxInstanceCount","isInstancedBufferAttribute","vertexAttrib2fv","vertexAttrib3fv","vertexAttrib4fv","vertexAttrib1fv","setupVertexAttributes","geometryId","programId","releaseStatesOfGeometry","releaseStatesOfProgram","WebGLBufferRenderer","info","setMode","drawArrays","renderInstances","primcount","methodName","WebGLCapabilities","maxAnisotropy","getMaxPrecision","getShaderPrecisionFormat","WebGL2RenderingContext","WebGL2ComputeRenderingContext","maxPrecision","logarithmicDepthBuffer","maxTextures","maxVertexTextures","maxTextureSize","maxCubemapSize","maxAttributes","maxVertexUniforms","maxVaryings","maxFragmentUniforms","vertexTextures","floatFragmentTextures","getMaxAnisotropy","MAX_TEXTURE_MAX_ANISOTROPY_EXT","floatVertexTextures","maxSamples","WebGLClipping","globalState","numGlobalPlanes","localClippingEnabled","renderingShadows","viewNormalMatrix","uniform","resetGlobalState","numPlanes","numIntersection","projectPlanes","skipTransform","nPlanes","dstArray","flatSize","viewMatrix","i4","init","enableLocalClipping","beginShadows","endShadows","setState","fromCache","nGlobal","lGlobal","clippingState","WebGLExtensions","has","getExtension","WebGLGeometries","wireframeAttributes","onGeometryDispose","buffergeometry","memory","updateWireframeAttribute","geometryIndex","geometryPosition","previousAttribute","_bufferGeometry","getWireframeAttribute","currentAttribute","WebGLIndexedBufferRenderer","drawElements","WebGLInfo","calls","triangles","lines","programs","autoReset","instanceCount","numericalSort","absNumericalSort","WebGLMorphtargets","influencesList","workInfluences","objectInfluences","influences","MAX_SAFE_INTEGER","morphInfluencesSum","morphBaseInfluence","getUniforms","setValue","WebGLObjects","updateMap","CubeTexture","DataTexture2DArray","wrapR","DataTexture3D","physical","transmission","transmissionMap","isDataTexture2DArray","isDataTexture3D","emptyTexture","emptyTexture2dArray","emptyTexture3d","emptyCubeTexture","arrayCacheF32","arrayCacheI32","mat4array","mat3array","mat2array","flatten","nBlocks","blockSize","firstElem","arraysEqual","allocTexUnits","allocateTextureUnit","setValueV1f","uniform1f","addr","setValueV2f","uniform2f","uniform2fv","setValueV3f","uniform3f","uniform3fv","setValueV4f","uniform4f","uniform4fv","setValueM2","uniformMatrix2fv","setValueM3","uniformMatrix3fv","setValueM4","uniformMatrix4fv","setValueT1","unit","uniform1i","safeSetTexture2D","setValueT2DArray1","setTexture2DArray","setValueT3D1","setTexture3D","setValueT6","safeSetTextureCube","setValueV1i","setValueV2i","uniform2iv","setValueV3i","uniform3iv","setValueV4i","uniform4iv","setValueV1ui","uniform1ui","setValueV1fArray","uniform1fv","setValueV1iArray","uniform1iv","setValueV2iArray","setValueV3iArray","setValueV4iArray","setValueV2fArray","setValueV3fArray","setValueV4fArray","setValueM2Array","setValueM3Array","setValueM4Array","setValueT1Array","units","setValueT6Array","SingleUniform","activeInfo","getSingularSetter","PureArrayUniform","getPureArraySetter","StructuredUniform","seq","updateCache","RePathPart","addUniform","container","uniformObject","parseUniform","path","pathLength","lastIndex","matchEnd","idIsIndex","subscript","next","WebGLUniforms","getProgramParameter","getActiveUniform","getUniformLocation","WebGLShader","createShader","shaderSource","compileShader","setOptional","upload","seqWithValue","programIdCount","getEncodingComponents","getShaderErrors","status","getShaderParameter","getShaderInfoLog","trim","split","join","addLineNumbers","getShaderSource","getTexelDecodingFunction","functionName","getTexelEncodingFunction","getToneMappingFunction","toneMappingName","filterEmptyLine","replaceLightNums","replace","numDirLights","numSpotLights","numRectAreaLights","numPointLights","numHemiLights","numDirLightShadows","numSpotLightShadows","numPointLightShadows","replaceClippingPlaneNums","numClippingPlanes","numClipIntersection","includePattern","resolveIncludes","includeReplacer","include","deprecatedUnrollLoopPattern","unrollLoopPattern","unrollLoops","loopReplacer","deprecatedLoopReplacer","snippet","generatePrecision","precisionstring","WebGLProgram","cacheKey","shadowMapTypeDefine","shadowMapType","generateShadowMapTypeDefine","envMapTypeDefine","envMapMode","generateEnvMapTypeDefine","envMapModeDefine","generateEnvMapModeDefine","envMapBlendingDefine","generateEnvMapBlendingDefine","gammaFactorDefine","customExtensions","extensionDerivatives","envMapCubeUV","tangentSpaceNormalMap","shaderID","extensionFragDepth","rendererExtensionFragDepth","extensionDrawBuffers","rendererExtensionDrawBuffers","extensionShaderTextureLOD","rendererExtensionShaderTextureLod","filter","generateExtensions","customDefines","chunks","generateDefines","createProgram","prefixVertex","prefixFragment","isRawShaderMaterial","shaderName","instancing","supportsVertexTextures","maxBones","useFog","fogExp2","objectSpaceNormalMap","vertexTangents","uvsVertexOnly","useVertexTexture","doubleSided","flipSided","shadowMapEnabled","physicallyCorrectLights","mapEncoding","matcapEncoding","envMapEncoding","emissiveMapEncoding","lightMapEncoding","outputEncoding","depthPacking","fragmentGlsl","glVertexShader","glFragmentShader","attachShader","bindAttribLocation","linkProgram","debug","checkShaderErrors","programLog","getProgramInfoLog","vertexLog","fragmentLog","runnable","haveDiagnostics","vertexErrors","fragmentErrors","getError","diagnostics","prefix","cachedUniforms","deleteShader","getActiveAttrib","getAttribLocation","fetchAttributeLocations","destroy","deleteProgram","usedTimes","WebGLPrograms","shaderIDs","MeshDepthMaterial","MeshDistanceMaterial","MeshNormalMaterial","MeshLambertMaterial","MeshPhongMaterial","MeshToonMaterial","MeshStandardMaterial","MeshPhysicalMaterial","MeshMatcapMaterial","LineBasicMaterial","LineDashedMaterial","PointsMaterial","ShadowMaterial","SpriteMaterial","parameterNames","getTextureEncodingFromMap","getParameters","shadows","nClipPlanes","nClipIntersection","isMeshStandardMaterial","bones","skeleton","nVertexUniforms","nVertexMatrices","allocateBones","isFogExp2","maxMorphTargets","maxMorphNormals","directional","spot","rectArea","hemi","shadowMap","getProgramCacheKey","acquireProgram","pl","preexistingProgram","releaseProgram","pop","WebGLProperties","painterSortStable","groupOrder","reversePainterSortStable","WebGLRenderList","renderItems","renderItemsIndex","opaque","defaultProgram","getNextRenderItem","renderItem","materialProperties","finish","customOpaqueSort","customTransparentSort","WebGLRenderLists","lists","onSceneDispose","cameras","list","UniformsCache","light","halfWidth","halfHeight","nextVersion","shadowCastingLightsFirst","lightA","lightB","WebGLLights","shadowCache","ShadowUniformsCache","directionalLength","pointLength","spotLength","rectAreaLength","hemiLength","numDirectionalShadows","numPointShadows","numSpotShadows","ambient","probe","directionalShadow","spotShadow","pointShadow","vector3","matrix42","intensity","isAmbientLight","isLightProbe","sh","coefficients","isDirectionalLight","shadowUniforms","bias","normalBias","mapSize","isSpotLight","penumbra","isRectAreaLight","isPointLight","isHemisphereLight","WebGLRenderState","lightsArray","shadowsArray","setupLights","pushLight","pushShadow","shadowLight","WebGLRenderStates","renderStates","renderState","isMeshDepthMaterial","isMeshDistanceMaterial","WebGLShadowMap","_renderer","_objects","_frustum","_shadowMapSize","_viewportSize","_viewport","_depthMaterials","_distanceMaterials","_materialCache","0","1","2","shadowMaterialVertical","SAMPLE_RATE","HALF_SAMPLE_RATE","shadow_pass","resolution","shadowMaterialHorizonal","HORIZONAL_PASS","fullScreenTri","fullScreenMesh","VSMPass","mapPass","renderBufferDirect","getDepthMaterialVariant","useMorphing","useSkinning","useInstancing","getDistanceMaterialVariant","getDepthMaterial","result","getMaterialVariant","customMaterial","customDepthMaterial","customDistanceMaterial","keyA","keyB","materialsForVariant","cachedMaterial","renderObject","shadowCamera","depthMaterial","activeCubeFace","getActiveCubeFace","activeMipmapLevel","getActiveMipmapLevel","_state","setBlending","setTest","setScissorTest","shadowFrameExtents","getFrameExtents","isPointLightShadow","pars","viewportCount","getViewportCount","vp","getViewport","updateMatrices","getFrustum","WebGLState","colorBuffer","locked","currentColorMask","currentColorClear","setMask","colorMask","setLocked","lock","currentDepthMask","currentDepthFunc","currentDepthClear","depthMask","setFunc","clearDepth","currentStencilMask","currentStencilFunc","currentStencilRef","currentStencilFuncMask","currentStencilFail","currentStencilZFail","currentStencilZPass","currentStencilClear","stencilTest","stencilMask","setOp","stencilOp","clearStencil","enabledCapabilities","currentProgram","currentBlendingEnabled","currentBlending","currentBlendEquation","currentBlendSrc","currentBlendDst","currentBlendEquationAlpha","currentBlendSrcAlpha","currentBlendDstAlpha","currentPremultipledAlpha","currentFlipSided","currentCullFace","currentLineWidth","currentPolygonOffsetFactor","currentPolygonOffsetUnits","lineWidthAvailable","glVersion","currentTextureSlot","currentBoundTextures","currentScissor","currentViewport","createTexture","bindTexture","texParameteri","texImage2D","emptyTextures","setFlipSided","setCullFace","equationToGL","MIN_EXT","MAX_EXT","factorToGL","blendEquationSeparate","blendFuncSeparate","blendFunc","frontFace","cullFace","setPolygonOffset","factor","activeTexture","webglSlot","useProgram","setMaterial","frontFaceCW","setLineWidth","lineWidth","webglType","webglTexture","boundTexture","unbindTexture","compressedTexImage2D","apply","texImage3D","WebGLTextures","_gl","utils","_videoTextures","useOffscreenCanvas","OffscreenCanvas","err","createCanvas","resizeImage","needsPowerOfTwo","needsNewCanvas","maxSize","HTMLImageElement","ImageBitmap","textureNeedsGenerateMipmaps","supportsMips","generateMipmap","__maxMipLevel","LOG2E","getInternalFormat","internalFormatName","glFormat","glType","filterFallback","onTextureDispose","textureProperties","__webglInit","deleteTexture","__webglTexture","deallocateTexture","isVideoTexture","onRenderTargetDispose","renderTargetProperties","deleteFramebuffer","__webglFramebuffer","__webglDepthbuffer","deleteRenderbuffer","__webglMultisampledFramebuffer","__webglColorRenderbuffer","__webglDepthRenderbuffer","deallocateRenderTarget","textureUnits","setTexture2D","slot","updateVideoTexture","__version","complete","uploadTexture","setTextureCube","initTexture","pixelStorei","isCompressed","isCompressedTexture","cubeImage","convert","glInternalFormat","setTextureParameters","mipmap","mipmapImage","setTextureCubeDynamic","wrappingToGL","filterToGL","textureType","__currentAnisotropy","texParameterf","TEXTURE_MAX_ANISOTROPY_EXT","textureNeedsPowerOfTwo","isDepthTexture","setupFrameBufferTexture","framebuffer","attachment","textureTarget","bindFramebuffer","framebufferTexture2D","setupRenderBufferStorage","renderbuffer","isMultisample","bindRenderbuffer","getRenderTargetSamples","renderbufferStorageMultisample","renderbufferStorage","framebufferRenderbuffer","setupDepthRenderbuffer","isCube","webglDepthTexture","setupDepthTexture","createRenderbuffer","warnedTexture2D","warnedTextureCube","textureUnit","resetTextureUnits","setupRenderTarget","createFramebuffer","updateRenderTargetMipmap","updateMultisampleRenderTarget","blitFramebuffer","WebGLUtils","HALF_FLOAT_OES","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","COMPRESSED_RGB8_ETC2","COMPRESSED_RGBA8_ETC2_EAC","UNSIGNED_INT_24_8_WEBGL","ArrayCamera","Group","WebXRController","_targetRay","_grip","_hand","WebXRManager","framebufferScaleFactor","referenceSpace","referenceSpaceType","pose","controllers","inputSourcesMap","Map","cameraL","cameraR","cameraVR","_currentDepthNear","_currentDepthFar","onSessionEvent","controller","inputSource","onSessionEnd","forEach","disconnect","setFramebuffer","animation","isPresenting","onRequestReferenceSpace","updateInputSources","inputSources","removed","added","getController","getTargetRaySpace","getControllerGrip","getGripSpace","getHand","getHandSpace","setFramebufferScaleFactor","setReferenceSpaceType","getReferenceSpace","setSession","getContextAttributes","xrCompatible","makeXRCompatible","layerInit","antialias","baseLayer","XRWebGLLayer","updateRenderState","requestReferenceSpace","then","cameraLPos","cameraRPos","updateCamera","getCamera","depthNear","depthFar","ipd","projL","projR","topFov","bottomFov","leftFov","rightFov","zOffset","xOffset","near2","far2","left2","right2","top2","bottom2","setProjectionFromUnion","onAnimationFrameCallback","getViewerPose","views","cameraVRNeedsUpdate","transform","WebGLMaterials","refreshUniformsCommon","uvScaleMap","uv2ScaleMap","refreshUniformsStandard","refreshFogUniforms","isFog","density","refreshMaterialUniforms","pixelRatio","isMeshLambertMaterial","refreshUniformsLambert","isMeshToonMaterial","refreshUniformsToon","isMeshPhongMaterial","refreshUniformsPhong","isMeshPhysicalMaterial","refreshUniformsPhysical","isMeshMatcapMaterial","refreshUniformsMatcap","refreshUniformsDepth","refreshUniformsDistance","isMeshNormalMaterial","refreshUniformsNormal","isLineBasicMaterial","refreshUniformsLine","isLineDashedMaterial","refreshUniformsDash","isPointsMaterial","refreshUniformsPoints","isSpriteMaterial","refreshUniformsSprites","isShadowMaterial","WebGLRenderer","_context","_alpha","_depth","_stencil","_antialias","_premultipliedAlpha","_preserveDrawingBuffer","preserveDrawingBuffer","_powerPreference","powerPreference","_failIfMajorPerformanceCaveat","failIfMajorPerformanceCaveat","currentRenderList","currentRenderState","domElement","sortObjects","toneMappingExposure","_this","_isContextLost","_framebuffer","_currentActiveCubeFace","_currentActiveMipmapLevel","_currentRenderTarget","_currentFramebuffer","_currentMaterialId","_currentCamera","_currentArrayCamera","_currentViewport","_currentScissor","_currentScissorTest","_width","_height","_pixelRatio","_opaqueSort","_transparentSort","_scissor","_scissorTest","_clipping","_clippingEnabled","_localClippingEnabled","_projScreenMatrix","_vector3","_emptyScene","getTargetPixelRatio","programCache","renderLists","morphtargets","bufferRenderer","indexedBufferRenderer","contextNames","contextAttributes","contextName","onContextLost","onContextRestore","isWebGL1Renderer","shift","message","initGLContext","preventDefault","onMaterialDispose","releaseMaterialProgramReference","deallocateMaterial","programInfo","forceContextLoss","loseContext","forceContextRestore","restoreContext","getPixelRatio","setPixelRatio","updateStyle","setViewport","getDrawingBufferSize","setDrawingBufferSize","getCurrentViewport","getScissor","setScissor","getScissorTest","boolean","setOpaqueSort","method","setTransparentSort","bits","renderBufferImmediate","hasPositions","hasNormals","hasUvs","hasColors","positionArray","normalArray","uvArray","colorArray","setProgram","rangeFactor","dataCount","rangeStart","rangeCount","drawStart","drawEnd","drawCount","isLineSegments","isLineLoop","isSprite","compile","compiled","material2","initMaterial","projectObject","isGroup","isLOD","isImmediateRenderObject","renderObjects","isArrayCamera","camera2","renderObjectImmediate","lightsStateVersion","programCacheKey","programChange","numSupportedMorphTargets","numSupportedMorphNormals","needsLights","materialNeedsLights","progUniforms","uniformsList","useCache","refreshProgram","refreshMaterial","refreshLights","p_uniforms","m_uniforms","uCamPos","cameraPosition","isOrthographicCamera","boneTexture","boneMatrices","boneTextureSize","ltc_1","LTC_1","ltc_2","LTC_2","window","opaqueObjects","transparentObjects","readRenderTargetPixels","activeCubeFaceIndex","restore","textureFormat","checkFramebufferStatus","readPixels","copyFramebufferToTexture","level","levelScale","copyTexImage2D","copyTextureToTexture","srcTexture","dstTexture","texSubImage2D","compressedTexSubImage2D","WebGL1Renderer","FogExp2","Fog","InterleavedBuffer","joints","inputState","pinching","XRHand","LITTLE_PHALANX_TIP","joint","inputPose","gripPose","handPose","targetRay","grip","hand","jointPose","getJointPose","jointRadius","indexTip","INDEX_PHALANX_TIP","thumbTip","THUMB_PHALANX_TIP","distanceToPinch","threshold","handedness","getPose","targetRaySpace","gripSpace","isInterleavedBuffer","arrayBuffers","_uuid","ib","_vector$6","InterleavedBufferAttribute","interleavedBuffer","_geometry","interleavedBuffers","_intersectPoint","_worldScale","_mvPosition","_alignedPosition","_rotatedPosition","_viewWorldMatrix","_vA$1","_vB$1","_vC$1","_uvA$1","_uvB$1","_uvC$1","Sprite","transformVertex","vertexPosition","mvPosition","_v1$4","_v2$2","LOD","_currentLevel","levels","SkinnedMesh","bindMode","bindMatrix","bindMatrixInverse","addLevel","getCurrentLevel","getObjectForDistance","calculateInverses","normalizeSkinWeights","skinWeight","basePosition","skinIndex","weight","boneIndex","boneInverses","_offsetMatrix","_identityMatrix","Skeleton","Bone","bone","isBone","getBoneByName","_instanceLocalMatrix","_instanceWorldMatrix","_instanceIntersects","_mesh","InstancedMesh","linecap","linejoin","getMatrixAt","raycastTimes","instanceId","setMatrixAt","_start","_end","_inverseMatrix$1","_ray$1","_sphere$2","Line","computeLineDistances","params","localThreshold","localThresholdSq","vStart","vEnd","interSegment","interRay","nbVertices","_start$1","_end$1","LineSegments","LineLoop","_inverseMatrix$2","_ray$2","_sphere$3","_position$1","Points","testPoint","rayPointDistanceSq","intersectPoint","distanceToRay","VideoTexture","video","requestVideoFrameCallback","updateVideo","CompressedTexture","CanvasTexture","DepthTexture","WireframeGeometry","edge","edges","edge1","edge2","ol","ParametricGeometry","func","slices","stacks","ParametricBufferGeometry","pu","pv","sliceCount","PolyhedronGeometry","PolyhedronBufferGeometry","vertexBuffer","uvBuffer","subdivideFace","cols","aj","bj","rows","pushVertex","getVertexByIndex","correctUV","azimuth","subdivide","applyRadius","centroid","uvA","uvB","uvC","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","readyState","HAVE_CURRENT_DATA","isCanvasTexture","Earcut","holeIndices","dim","invSize","hasHoles","outerLen","outerNode","linkedList","prev","queue","steiner","getLeftmost","compareX","eliminateHole","filterPoints","eliminateHoles","earcutLinked","clockwise","last","sum","signedArea","insertNode","removeNode","again","area","ear","pass","zOrder","prevZ","nextZ","tail","numMerges","pSize","qSize","inSize","sortLinked","indexCurve","isEarHashed","isEar","cureLocalIntersections","splitEarcut","pointInTriangle","minTX","minTY","maxTX","maxTY","locallyInside","isValidDiagonal","splitPolygon","hole","hx","hy","mx","my","tanMin","sectorContainsSector","findHoleBridge","leftmost","px","py","intersectsPolygon","inside","middleInside","q1","q2","o1","o2","o3","o4","onSegment","num","Node","an","bp","ShapeUtils","contour","isClockWise","pts","triangulateShape","holes","removeDupEndPts","addContour","holeIndex","ExtrudeGeometry","ExtrudeBufferGeometry","verticesArray","addShape","placeholder","curveSegments","steps","bevelEnabled","bevelThickness","bevelSize","bevelOffset","bevelSegments","extrudePath","uvgen","UVGenerator","WorldUVGenerator","amount","extrudePts","splineTube","binormal","position2","extrudeByPath","getSpacedPoints","shapePoints","extractPoints","reverse","hl","ahole","concat","scalePt2","pt","vec","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","holesMovements","oneHoleMovements","verticesMovements","bs","vert","sidewalls","layeroffset","sl","slen1","slen2","f4","f3","addVertex","nextIndex","generateTopUV","addUV","generateSideWallUV","vector2","layer","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","uOffset","RingGeometry","innerRadius","outerRadius","thetaSegments","phiSegments","RingBufferGeometry","radiusStep","segment","thetaSegmentLevel","LatheGeometry","segments","LatheBufferGeometry","inverseSegments","base","n1","n2","ShapeGeometry","ShapeBufferGeometry","indexOffset","shapeVertices","shapeHoles","shapeHole","toJSON$1","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","__proto__","RawShaderMaterial","Materials","AnimationUtils","arraySlice","from","to","isTypedArray","convertArray","forceClone","ArrayBuffer","isView","DataView","getKeyframeOrder","times","sortedArray","nValues","srcOffset","flattenJSON","jsonKeys","valuePropertyName","subclip","sourceClip","startFrame","endFrame","fps","clip","tracks","track","valueSize","getValueSize","minStartTime","resetDuration","makeClipAdditive","targetClip","referenceFrame","referenceClip","numTracks","referenceTime","referenceTrack","referenceTrackType","ValueTypeName","targetTrack","find","referenceValue","startIndex","interpolant","createInterpolant","evaluate","resultBuffer","numTimes","valueStart","blendMode","Interpolant","parameterPositions","sampleValues","sampleSize","_cachedIndex","CubicInterpolant","_weightPrev","_offsetPrev","_weightNext","_offsetNext","LinearInterpolant","DiscreteInterpolant","KeyframeTrack","interpolation","TimeBufferType","ValueBufferType","setInterpolation","DefaultInterpolation","BooleanKeyframeTrack","ColorKeyframeTrack","NumberKeyframeTrack","QuaternionLinearInterpolant","QuaternionKeyframeTrack","StringKeyframeTrack","VectorKeyframeTrack","AnimationClip","duration","parseKeyframeTrack","json","trackType","typeName","toLowerCase","getTrackTypeForValueTypeName","pp","validate_interval","seek","linear_scan","forward_scan","giveUpAt","afterEnd_","t1global","beforeStart_","mid","intervalChanged_","interpolate_","settings","DefaultSettings_","getSettings_","copySampleValue_","endingStart","endingEnd","iPrev","iNext","tPrev","tNext","halfDt","o0","oP","oN","wP","wN","ppp","sP","sN","offset1","offset0","weight1","weight0","getInterpolation","InterpolantFactoryMethodDiscrete","InterpolantFactoryMethodLinear","InterpolantFactoryMethodSmooth","factoryMethod","timeOffset","timeScale","startTime","endTime","nKeys","validate","valid","prevTime","currTime","optimize","smoothInterpolation","writeIndex","keep","offsetP","offsetN","readOffset","writeOffset","TypedKeyframeTrack","jsonTracks","frameTime","clipTracks","CreateFromMorphTargetSequence","morphTargetSequence","noLoop","numMorphTargets","findByName","objectOrClipArray","clipArray","animations","CreateClipsFromMorphTargetSequences","animationToMorphTargets","pattern","parts","animationMorphTargets","clips","parseAnimation","addNonemptyTrack","trackName","animationKeys","propertyName","destTracks","clipName","hierarchyTracks","hierarchy","morphTargetNames","morphTargetName","animationKey","boneName","Cache","files","file","LoadingManager","onLoad","onProgress","onError","isLoading","itemsLoaded","itemsTotal","urlModifier","handlers","onStart","itemStart","itemEnd","itemError","resolveURL","setURLModifier","addHandler","regex","loader","removeHandler","getHandler","global","DefaultLoadingManager","Loader","manager","crossOrigin","resourcePath","requestHeader","load","loadAsync","Promise","resolve","reject","setCrossOrigin","setPath","setResourcePath","setRequestHeader","loading","FileLoader","AnimationLoader","CompressedTextureLoader","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","cached","setTimeout","dataUriRegexResult","request","mimeType","isBase64","decodeURIComponent","atob","response","responseType","charCodeAt","Blob","parser","DOMParser","parseFromString","XMLHttpRequest","open","callbacks","withCredentials","overrideMimeType","header","send","setResponseType","setWithCredentials","setMimeType","loaded","loadTexture","texDatas","mipmapCount","isCubemap","texData","onImageLoad","onImageError","substr","urls","isJPEG","search","getPoint","optionalTarget","getUtoTmapping","getPoints","divisions","getLength","lengths","getLengths","cacheArcLengths","current","updateArcLengths","arcLengths","targetArcLength","comparison","lengthBefore","getTangent","pt1","pt2","getTangentAt","mat","MAX_VALUE","tz","fromJSON","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","isCubicBezierCurve","isCubicBezierCurve3","isLineCurve","isLineCurve3","isQuadraticBezierCurve","isQuadraticBezierCurve3","isSplineCurve","Curves","CurvePath","curves","autoClose","Path","currentPoint","Shape","Light","HemisphereLight","LightShadow","_frameExtents","_viewportCount","_viewports","SpotLightShadow","SpotLight","power","PointLightShadow","_cubeDirections","_cubeUps","PointLight","OrthographicCamera","DirectionalLightShadow","DirectionalLight","AmbientLight","RectAreaLight","SphericalHarmonics3","LightProbe","MaterialLoader","curve","closePath","startPoint","endPoint","curveLengths","getCurveLengths","segmentLength","lens","cacheLengths","sums","moveTo","lineTo","quadraticCurveTo","aCPx","aCPy","bezierCurveTo","aCP1x","aCP1y","aCP2x","aCP2y","splineThru","absarc","absellipse","ellipse","firstPoint","lastPoint","getPointsHoles","holesPts","_lightPositionWorld","_lookTarget","shadowMatrix","projScreenMatrix","lookTarget","lightPositionWorld","viewportIndex","isSpotLightShadow","scaleW","scaleH","isDirectionalLightShadow","isSphericalHarmonics3","zero","getAt","coeff","getIrradianceAt","addScaledSH","getBasisAt","shBasis","getTexture","shading","setTextures","LoaderUtils","decodeText","TextDecoder","decode","fromCharCode","escape","extractUrlBase","lastIndexOf","InstancedBufferGeometry","InstancedBufferAttribute","BufferGeometryLoader","interleavedBufferMap","arrayBufferMap","getInterleavedBuffer","arrayBuffer","getArrayBuffer","TYPED_ARRAYS","typedArray","bufferAttribute","drawcalls","offsets","ObjectLoader","parseShape","parseGeometries","parseImages","parseTextures","parseMaterials","parseObject","parseAnimations","geometryShapes","bufferGeometryLoader","details","loadImage","currentUrl","parseConstant","TEXTURE_MAPPING","TEXTURE_WRAPPING","TEXTURE_FILTER","getGeometry","getMaterial","ImageBitmapLoader","createImageBitmap","fetch","ShapePath","subPaths","currentPath","Font","createPath","char","glyph","glyphs","familyName","cpx","cpy","cpx1","cpy1","cpx2","cpy2","outline","_cachedOutline","ha","FontLoader","isImageBitmapLoader","setOptions","res","blob","imageBitmap","catch","toShapes","isCCW","noHoles","toShapesNoHoles","inSubpaths","tmpPath","tmpShape","isPointInsidePolygon","inPolygon","polyLen","edgeLowPt","edgeHighPt","edgeDx","edgeDy","perpEdge","solid","holesFirst","betterShapeHoles","newShapes","tmpPoints","tmpHoles","newShapeHoles","mainIdx","ambiguous","toChange","sIdx","sLen","sho","hIdx","ho","hole_unassigned","s2Idx","froms","tos","paths","chars","line_height","yMax","yMin","underlineThickness","ret","createPaths","substring","AudioContext","webkitAudioContext","AudioLoader","HemisphereLightProbe","sky","ground","AmbientLightProbe","bufferCopy","decodeAudioData","audioBuffer","isHemisphereLightProbe","isAmbientLightProbe","_eyeRight","_eyeLeft","StereoCamera","eyeSep","_cache","Clock","autoStart","oldTime","elapsedTime","running","eyeSepHalf","eyeSepOnProjection","ymax","xmin","xmax","performance","Date","now","getElapsedTime","getDelta","newTime","_position$2","_quaternion$3","_scale$1","_orientation","AudioListener","gain","createGain","connect","destination","timeDelta","_clock","Audio","getInput","autoplay","detune","loop","loopStart","loopEnd","playbackRate","isPlaying","hasPlaybackControl","sourceType","_startedAt","_progress","filters","removeFilter","getFilter","setFilter","getMasterVolume","setMasterVolume","setTargetAtTime","currentTime","positionX","linearRampToValueAtTime","positionY","positionZ","forwardX","forwardY","forwardZ","upX","upY","upZ","setOrientation","getOutput","setNodeSource","audioNode","setMediaElementSource","mediaElement","createMediaElementSource","setMediaStreamSource","mediaStream","createMediaStreamSource","setBuffer","play","delay","createBufferSource","onended","onEnded","setDetune","setPlaybackRate","pause","getFilters","setFilters","getDetune","getPlaybackRate","getLoop","setLoop","setLoopStart","setLoopEnd","getVolume","setVolume","_position$3","_quaternion$4","_scale$2","_orientation$1","PositionalAudio","panner","createPanner","panningModel","AudioAnalyser","audio","fftSize","analyser","createAnalyser","frequencyBinCount","PropertyMixer","binding","mixFunction","mixFunctionAdditive","setIdentity","_slerp","_slerpAdditive","_setAdditiveIdentityQuaternion","_workIndex","_select","_setAdditiveIdentityOther","_lerp","_lerpAdditive","_setAdditiveIdentityNumeric","_mixBufferRegion","_mixBufferRegionAdditive","_setIdentity","_origIndex","_addIndex","cumulativeWeight","cumulativeWeightAdditive","useCount","referenceCount","getRefDistance","refDistance","setRefDistance","getRolloffFactor","rolloffFactor","setRolloffFactor","getDistanceModel","distanceModel","setDistanceModel","getMaxDistance","maxDistance","setMaxDistance","setDirectionalCone","coneInnerAngle","coneOuterAngle","coneOuterGain","orientationX","orientationY","orientationZ","getFrequencyData","getByteFrequencyData","getAverageFrequency","accumulate","accuIndex","currentWeight","mix","accumulateAdditive","weightAdditive","originalValueOffset","saveOriginalState","getValue","restoreOriginalState","endIndex","targetIndex","workOffset","_reservedRe","RegExp","_wordCharOrDot","_directoryRe","_nodeRe","_objectRe","_propertyRe","_trackRe","_supportedObjectNames","Composite","targetGroup","optionalParsedPath","parsedPath","PropertyBinding","parseTrackName","_targetGroup","_bindings","subscribe_","rootNode","node","findNode","nodeName","AnimationObjectGroup","nCachedObjects_","_indicesByUUID","_paths","_parsedPaths","_bindingsIndicesByPath","stats","total","AnimationAction","mixer","localRoot","_mixer","_clip","_localRoot","nTracks","interpolants","interpolantSettings","_interpolantSettings","_interpolants","_propertyBindings","_cacheIndex","_byClipCacheIndex","_timeScaleInterpolant","_weightInterpolant","_loopCount","_startTime","_effectiveTimeScale","_effectiveWeight","repetitions","paused","clampWhenFinished","zeroSlopeAtStart","zeroSlopeAtEnd","AnimationMixer","root","_root","_initMemoryManager","_accuIndex","Uniform","InstancedInterleavedBuffer","Raycaster","PointCloud","ascSort","intersectObject","firstValidIndex","bindings","unbind","isAnimationObjectGroup","sanitizeNodeName","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","indicesByUUID","parsedPaths","nBindings","knownObject","nObjects","nCachedObjects","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","_lendControlInterpolant","timeScaleInterpolant","getMixer","getClip","getRoot","_update","deltaTime","timeDirection","_updateWeight","timeRunning","_updateTimeScale","clipTime","_updateTime","propertyMixers","interpolantValue","loopCount","pingPong","_setEndings","handle_stop","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","firstInactiveBinding","lastActiveBinding","_controlInterpolantsResultBuffer","__cacheIndex","lastActiveInterpolant","clipAction","optionalRoot","clipObject","existingAction","newAction","stopAllAction","nActions","setTime","timeInSeconds","uncacheClip","actionsToRemove","uncacheRoot","uncacheAction","setFromCamera","coords","intersectObjects","Spherical","other","setFromCartesianCoords","Cylindrical","_vector$7","Box2","_startP","_startEnd","Line3","ImmediateRenderObject","distanceSq","closestPointToPointParameter","clampToLine","startEnd2","_vector$8","SpotLightHelper","cone","coneLength","coneWidth","_vector$9","_boneMatrix","_matrixWorldInv","SkeletonHelper","getBoneList","boneList","PointLightHelper","sphereSize","isSkeletonHelper","_vector$a","_color1","_color2","HemisphereLightHelper","GridHelper","PolarGridHelper","radials","circles","_v1$5","_v2$3","_v3$1","DirectionalLightHelper","lightPlane","targetLine","_vector$b","_camera","CameraHelper","pointMap","colorFrustum","colorCone","colorUp","colorTarget","colorCross","addLine","addPoint","setPoint","_box$3","BoxHelper","Box3Helper","PlaneHelper","_axis","_lineGeometry","_coneGeometry","ArrowHelper","headLength","headWidth","setDirection","AxesHelper","setColor","SIZE_MAX","EXTRA_LOD_SIGMA","TOTAL_LODS","LOD_MAX","ENCODINGS","_flatCamera","_lodPlanes","_sizeLods","_sigmas","lod","sizeLod","sigma","texelSize","cubeFaces","positionSize","uvSize","faceIndexSize","coordinates","fill","_createPlanes","_oldTarget","PHI","INV_PHI","_axisDirections","PMREMGenerator","_pingPongRenderTarget","_blurMaterial","weights","poleAxis","_getCommonVertexShader","_getEncodings","_getBlurShader","_equirectShader","_cubemapShader","_compileMaterial","_isLDR","_createRenderTarget","cubeUVRenderTarget","_setViewport","_getEquirectShader","_getCubemapShader","Face4","fromScene","_allocateTargets","_sceneToCubeUV","_blur","_applyPMREM","_cleanup","fromEquirectangular","equirectangular","_fromTexture","fromCubemap","cubemap","compileCubemapShader","compileEquirectangularShader","outputTarget","_textureToCubeUV","tmpMesh","cubeCamera","upSign","forwardSign","maxComponent","fExp","log2","col","lodIn","lodOut","pingPongRenderTarget","_halfBlur","targetIn","targetOut","sigmaRadians","blurMaterial","blurMesh","blurUniforms","pixels","radiansPerPixel","sigmaPixels","exp","outputSize","LineStrip","LinePieces","NoColors","FaceColors","VertexColors","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","WebGLRenderTargetCube","construct","createPointsGeometry","createGeometry","createSpacedPointsGeometry","fromPoints","initFromArray","getControlPointsArray","reparametrizeByArcLength","setColors","Handlers","setTexturePath","empty","isIntersectionBox","isIntersectionSphere","setFromMatrix","random16","nearestPowerOfTwo","nextPowerOfTwo","flattenToArrayOffset","multiplyVector3","multiplyVector3Array","applyToBufferAttribute","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","applyMatrix","getChildByName","renderDepth","getWorldRotation","eulerOrder","useQuaternion","setDrawMode","drawMode","initBones","setLens","onlyShadow","shadowCameraFov","shadowCameraLeft","shadowCameraRight","shadowCameraTop","shadowCameraBottom","shadowCameraVisible","shadowDarkness","shadowMapWidth","shadowMapHeight","dynamic","setDynamic","copyIndicesArray","setArray","addIndex","addAttribute","addDrawCall","clearDrawCalls","computeOffsets","removeAttribute","maxInstancedCount","linePrecision","getArrays","addShapeList","wrapAround","overdraw","wrapRGB","metal","transparency","clearTarget","animate","getCurrentRenderTarget","getPrecision","resetGLState","supportsFloatTextures","supportsHalfFloatTextures","supportsStandardDerivatives","supportsCompressedTextureS3TC","supportsCompressedTexturePVRTC","supportsBlendMinMax","supportsInstancedArrays","enableScissorTest","addPrePlugin","addPostPlugin","updateShadowMap","setFaceCulling","allocTextureUnit","setTexture","getActiveMipMapLevel","shadowMapCullFace","vr","gammaInput","gammaOutput","toneMappingWhitePoint","renderReverseSided","renderSingleSided","getData","updateCubeMap","GeometryUtils","geometry1","CanvasRenderer","JSONLoader","loadTextureCube","loadCompressedTexture","loadCompressedTextureCube","SceneUtils","createMultiMaterialObject","detach","LensFlare","revision","base64","ieee754","kMaxLength","Buffer","TYPED_ARRAY_SUPPORT","that","RangeError","arg","encodingOrOffset","allocUnsafe","byteOffset","byteLength","fromArrayLike","fromArrayBuffer","isEncoding","actual","write","fromString","obj","isBuffer","checked","val","fromObject","assertSize","loweredCase","utf8ToBytes","base64ToBytes","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","bidirectionalIndexOf","arrayIndexOf","arr","indexSize","arrLength","valLength","read","buf","readUInt16BE","foundIndex","found","hexWrite","remaining","strLen","parsed","utf8Write","blitBuffer","asciiWrite","str","byteArray","asciiToBytes","latin1Write","base64Write","ucs2Write","hi","lo","utf16leToBytes","fromByteArray","secondByte","thirdByte","fourthByte","tempCodePoint","firstByte","codePoint","bytesPerSequence","codePoints","decodeCodePointsArray","SlowBuffer","alloc","INSPECT_MAX_BYTES","foo","typedArraySupport","poolSize","_augment","species","allocUnsafeSlow","_isBuffer","compare","pos","swap16","swap32","swap64","inspect","thisStart","thisEnd","thisCopy","targetCopy","includes","_arr","out","toHex","bytes","checkOffset","ext","checkInt","objectWriteUInt16","littleEndian","objectWriteUInt32","checkIEEE754","writeFloat","noAssert","writeDouble","newBuf","sliceLen","readUIntLE","mul","readUIntBE","readUInt8","readUInt16LE","readUInt32LE","readUInt32BE","readIntLE","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUIntLE","writeUIntBE","writeUInt8","writeUInt16LE","writeUInt16BE","writeUInt32LE","writeUInt32BE","writeIntLE","limit","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","code","INVALID_BASE64_RE","leadSurrogate","toByteArray","stringtrim","base64clean","getOwnPropertySymbols","propIsEnumerable","propertyIsEnumerable","toObject","test1","getOwnPropertyNames","test2","test3","letter","shouldUseNative","symbols","dtype","noop","parseASCII","parseXML","readBinary","isBinaryFormat","xtend","xml2","self","opt","uri","binary","req","xhr","getBinaryOpts","body","statusCode","headers","b64","getLens","validLen","placeHoldersLen","Arr","_byteLength","curByte","revLookup","uint8","extraBytes","len2","encodeChunk","lookup","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","NaN","rt","isFunction","parseHeaders","initParams","createXHR","_createXHR","called","getBody","responseText","responseXML","firefoxBugTakenEffect","documentElement","getXml","isJson","errorFunc","evt","clearTimeout","timeoutTimer","failureResponse","loadFunc","aborted","useXDR","rawRequest","getAllResponseHeaders","cors","XDomainRequest","sync","onreadystatechange","onload","onerror","onprogress","onabort","ontimeout","username","password","timeout","abort","beforeSend","default","iterator","forEachArray","win","fn","alert","confirm","prompt","headersArr","row","splitLine","space","dt","parseData","parseIntList","pages","kernings","lineData","parseAttributes","NAME_MAP","scaleh","scalew","stretchh","lineheight","alphachnl","redchnl","greenchnl","bluechnl","getAttribs","attribs","getAttribList","reduce","dict","attrib","nodeValue","xmlRoot","getElementsByTagName","pageRoot","childTag","ActiveXObject","xmlDoc","async","loadXML","div","createElement","innerHTML","HEADER","readBlock","blockID","bitField","smooth","unicode","italic","bold","fixedHeight","charset","stretchH","aa","padding","spacing","readNameNT","readStringNT","readInfo","lineHeight","packed","alphaChnl","redChnl","greenChnl","blueChnl","readCommon","readPages","off","xoffset","yoffset","xadvance","page","chnl","readChars","kern","first","second","readKernings","every","byte","equal","THREE","inherits","createIndices","Base","_opt","layout","createLayout","texWidth","texHeight","bitmap","visibleGlyphs","attr","multipage","computeSphere","bbox","computeBox","wordWrap","number","X_HEIGHTS","M_WIDTHS","CAP_HEIGHTS","TAB_ID","SPACE_ID","TextLayout","_measure","computeMetrics","wrapper","getGlyphById","glyphIdx","findChar","getKerning","table","measure","tabSize","_setupSpaceGlyphs","minWidth","maxLineWidth","baseline","descender","letterSpacing","align","getAlignType","_descender","_baseline","_xHeight","getXHeight","_capHeight","getCapHeight","_lineHeight","_ascender","lineIndex","lastGlyph","getGlyph","_linesTotal","_fallbackSpaceGlyph","_fallbackTabGlyph","getMGlyph","tabWidth","curPen","curWidth","nextPen","nextWidth","newline","whitespace","idxOf","chr","isWhitespace","monospace","lineStart","isNewline","measured","pre","testWidth","newLine","lineEnd","nextStart","greedy","def","ctor","superCtor","super_","writable","TempCtor","anArray","CW","CCW","numIndices","isSlowBuffer","updateAttribute","newAttrib","isR69","dstLength","Ctor","bw","bh","u0","u1","bounds","se","btoa","trimLeft","trimRight","_","F","I","C","L","A","S","E","M","O","R","D","U","H","W","V","G","Y","J","X","K","Z","Q","$","tt","et","nt","it","ot","st","lt","ie","oe","subscribe","unsubscribe","publish","getTopics","orientation","compress","compressPdf","userUnit","putOnlyUsedFonts","internal","__private__","PubSub","getPdfVersion","setPdfVersion","a0","a3","a4","a5","a6","a7","a8","a9","a10","b3","b4","b5","b6","b7","b8","b9","b10","c4","c5","c6","c7","c8","c9","c10","dl","legal","ledger","tabloid","getPageFormats","getPageFormat","f2","toFixed","getFileId","setFileId","convertDateToPDFDate","getTimezoneOffset","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","convertPDFDateToDate","setCreationDate","getCreationDate","padd2","setCustomOutputDestination","resetCustomOutputDestination","getStandardFonts","fontSize","setFontSize","getFontSize","R2L","setR2L","getR2L","setZoomMode","getZoomMode","setPageMode","getPageMode","setLayoutMode","getLayoutMode","setDisplayMode","title","subject","author","keywords","creator","getDocumentProperty","getDocumentProperties","setDocumentProperties","setProperties","setDocumentProperty","hotfixes","newObject","newObjectDeferred","newAdditionalObject","objId","content","ht","decodeColorString","ut","encodeColorString","ch1","ch2","ch3","ch4","pdfColorType","RGBColor","ok","ct","ft","putStream","alreadyAppliedFilters","addLength1","additionalKeyValues","API","processDataByFilters","reverseChain","putPage","mediaBox","contentsObjId","topRightX","bottomLeftX","topRightY","bottomLeftY","rootDictionaryObjId","resourceDictionaryObjId","cropBox","bleedBox","trimBox","artBox","pageContext","pageNumber","putPages","mt","yt","postScriptName","fontName","fontStyle","isStandardFont","instance","vt","pdfEscape","sourceEncoding","autoencode","codePages","noBOM","wt","beginPage","xt","bt","Dt","Rt","Jt","ne","Nt","getNumberOfPages","Lt","disableWarning","noFallback","At","putInfo","St","putCatalog","_t","putTrailer","Ft","putHeader","Pt","putXRef","kt","buildDocument","isAlreadyPutted","objectNumber","It","getBlob","Ct","filename","save","URL","createObjectURL","safari","location","href","stack","bar","Bt","jt","getPageInfo","Et","getPageInfoByObjId","Mt","getCurrentPageInfo","addPage","setPage","insertPage","movePage","deletePage","flags","lineHeightFactor","Tt","TabLen","scaleFactor","maxWidth","splitTextToSize","mutex","activeFontKey","fonts","activeFontSize","charSpace","lang","renderingMode","stroke","usedRenderingMode","pageSize","getWidth","Qt","getStringUnitWidth","Wt","Vt","isHex","Kt","lstext","clip_fixed","Ot","isValidStyle","qt","rect","roundedRect","SQRT2","circle","setFont","setFontStyle","setFontType","getFontList","addFont","Ut","setLineDash","getLineHeight","zt","setLineHeightFactor","Ht","getLineHeightFactor","getHorizontalCoordinate","getVerticalCoordinate","Gt","getHorizontalCoordinateString","Yt","getVerticalCoordinateString","strokeColor","Xt","getStrokeColor","getDrawColor","setStrokeColor","setDrawColor","fillColor","getFillColor","setFillColor","textColor","Zt","getTextColor","setTextColor","$t","getCharSpace","setCharSpace","CapJoinStyles","butt","but","miter","rounded","projecting","square","bevel","setLineCap","ee","re","setLineJoin","setMiterLimit","returnPromise","le","unload","events","getFont","getCoordinateString","collections","newObjectDeferredBegin","setWidth","getHeight","setHeight","getPDFVersion","hasHotfix","dictionary","__acroform__","BBox","clearBit","getBit","getBitForPdf","setBitForPdf","clearBitForPdf","calculateCoordinates","lowerLeft_X","lowerLeft_Y","upperRight_X","upperRight_Y","appearanceStreamContent","DV","stream","maxFontSize","multiline","textAlign","fields","xForms","acroFormDictionaryRoot","printedOut","isInitialized","acroformPlugin","Fields","hasAnnotation","annotations","_eventID","Kids","Rect","DA","createDefaultAppearanceStream","getKeyValueListForStream","hasAppearanceStream","FieldNum","arrayToPdfArray","getOwnPropertyDescriptor","writeable","Boolean","Ff","FT","getOptions","addOption","removeOption","combo","edit","CA","pushButton","radio","optionName","caption","appearanceState","_AppearanceType","RadioButton","Circle","createAppearanceStream","setAppearance","getCA","createOption","Parent","CheckBox","On","YesNormal","YesPushDown","Off","OffPushDown","Bezier_C","Cross","calculateCross","x4","addField","addButton","addTextField","addChoiceField","ChoiceField","ListBox","ComboBox","EditBox","Button","PushButton","TextField","PasswordField","AcroForm","Appearance","AcroFormChoiceField","AcroFormListBox","AcroFormComboBox","AcroFormEditBox","AcroFormButton","AcroFormPushButton","AcroFormRadioButton","AcroFormCheckBox","AcroFormTextField","AcroFormPasswordField","AcroFormAppearance","PNG","TIFF","JPEG","JPEG2000","GIF87a","GIF89a","BMP","getImageFileTypeByImageData","isArrayBufferView","arrayBufferToBinaryString","color_spaces","INDEXED","pal","DEVICE_CMYK","bpc","dp","trns","smask","nodeType","hasAttribute","unescape","loadFile","clientWidth","clientHeight","alias","DEVICE_RGB","DEVICE_GRAY","CAL_GREY","CAL_RGB","LAB","ICC_BASED","PATTERN","SEPARATION","DEVICE_N","DCT_DECODE","FLATE_DECODE","LZW_DECODE","JPX_DECODE","JBIG2_DECODE","ASCII85_DECODE","ASCII_HEX_DECODE","RUN_LENGTH_DECODE","CCITT_FAX_DECODE","image_compression","NONE","FAST","MEDIUM","SLOW","sHashCode","isString","validateStringAsBase64","extractInfoFromBase64DataURI","extractImageFromDataUrl","supportsArrayBuffer","isArrayBuffer","binaryStringToUint8Array","arrayBufferToBase64","createImageInfo","addImage","imageData","compression","convertStringToImageData","processJPEG","numcomponents","processJPG","getImageProperties","fileType","colorSpace","compressionMode","bitsPerComponent","contents","_nameMap","magFactor","createAnnotation","link","textWithLink","getTextWidth","1569","1570","1571","1572","1573","1574","1575","1576","1577","1578","1579","1580","1581","1582","1583","1584","1585","1586","1587","1588","1589","1590","1591","1592","1593","1594","1601","1602","1603","1604","1605","1606","1607","1608","1609","1610","1649","1655","1657","1658","1659","1662","1663","1664","1667","1668","1670","1671","1672","1676","1677","1678","1681","1688","1700","1702","1705","1709","1711","1713","1715","1722","1723","1726","1728","1729","1733","1734","1735","1736","1737","1739","1740","1744","1746","1747","65247","65154","65156","65160","65166","65248","65165","65258","1617","1612","1613","1614","1615","1616","__arabicParser__","isInArabicSubstitutionA","isArabicLetter","isArabicEndLetter","isArabicAlfLetter","arabicLetterHasIsolatedForm","arabicLetterHasFinalForm","arabicLetterHasInitialForm","arabicLetterHasMedialForm","resolveLigatures","isArabicDiacritic","getCorrectForm","processArabic","autoPrint","variant","addJS","pageWrapXEnabled","pageWrapX","pageWrapYEnabled","pageWrapY","pdf","context2d","ln","setHeaderFunction","getTextDimensions","table_font_size","cellAddPage","margins","cellInitialize","cell","printHeaders","tableHeaderRow","printHeaderRow","printingHeaderRow","autoSize","css","lnMod","calculateLineHeight","setTableHeaderRow","lastCellPos","table_x","table_y","isStrokeTransparent","strokeOpacity","strokeStyle","fillStyle","isFillTransparent","fillOpacity","textBaseline","lineJoin","lineCap","globalCompositeOperation","globalAlpha","clip_path","miterLimit","ignoreClearRect","parentNode","ctx","arial","verdana","helvetica","fixed","terminal","courier","cursive","fantasy","serif","beginPath","applyToPoint","isIdentity","startAngle","endAngle","counterclockwise","arcTo","fillRect","strokeRect","clearRect","ctxStack","isCanvasGradient","getColor","fillText","strokeText","measureText","setTransform","shx","applyToRectangle","autoPaging","posX","posY","begin","close","deltas","createLinearGradient","colorStops","addColorStop","createPattern","createRadialGradient","y3","y4","shy","predictor","columns","adler32cs","Deflater","append","flush","loadImageFile","className","removeChild","template","setProgress","prop","overlay","img","progress","margin","enableLinks","html2canvas","jsPDF","toContainer","toCanvas","toImg","toPdf","thenList","setPageSize","display","scrollWidth","offsetWidth","backgroundColor","createTextNode","cloneNode","firstChild","nextSibling","appendChild","scrollTop","scrollLeft","javascriptEnabled","tagName","scrollHeight","offsetHeight","overflow","zIndex","border","float","contains","onrendered","isHtml2CanvasLoaded","toContext2d","allowTaint","imageTimeout","logging","proxy","removeContainer","foreignObjectRendering","useCORS","windowHeight","quality","outputImg","outputPdf","doCallback","setMargin","getPageSize","inner","ratio","updateProgress","thenCore","thenExternal","catchExternal","using","saveAs","export","run","html","worker","createNamedDestinations","makeRef","namesOid","genIds_r","renderRoot","objStart","count_r","objEnd","makeString","processPNG","imgData","colorType","pixelBitlength","decodePixels","palette","indexed","processGIF89A","decodeAndBlitFrameRGBA","encode","processGIF87A","processBMP","setLanguage","languageSettings","isSubscribed","sq","ar","as","ast","eu","bn","br","bg","ca","ch","zh","cv","co","cr","hr","da","nl","en","eo","fo","fj","fi","fr","fy","fur","gd","ka","el","gu","he","hu","is","iu","ga","ja","kn","ks","kk","km","ky","tlh","ko","la","lv","lb","mk","ms","mi","mr","mo","nv","ng","no","nb","nn","oc","or","om","fa","pa","qu","rm","ro","ru","sg","sa","sc","sd","si","sr","sk","so","sb","es","sw","sv","ta","th","tig","ts","tn","tr","tk","uk","hsb","ur","ve","vi","vo","wa","xh","ji","zu","languageCode","getCharWidthsArray","widths","Unicode","fof","kerning","widthOfString","widthOfGlyph","characterToGlyph","getArraySum","textIndent","lineIndent","WinAnsiEncoding","Courier","Helvetica","ZapfDingbats","existsFileInVFS","getFileFromVFS","TTFFont","glyIdsUsed","addSvg","styleSheet","cssText","contentWindow","contentDocument","childNodes","addSVG","addSvgAsImage","canvg","ignoreMouse","ignoreAnimation","ignoreDimensions","ignoreClear","putTotalPages","pdfEscape16","viewerPreferences","HideToolbar","defaultValue","explicitSet","valueSet","pdfVersion","HideMenubar","HideWindowUI","FitWindow","CenterWindow","DisplayDocTitle","NonFullScreenPageMode","Direction","ViewArea","ViewClip","PrintArea","PrintClip","PrintScaling","Duplex","PickTrayByPDFSize","PrintPageRange","NumCopies","viewerpreferences","configuration","addMetadata","encodeURIComponent","toUnicode","subset","PDFObject","stemV","italicAngle","ascender","decender","capHeight","rawData","hmtx","head","unitsPerEm","cmap","codeMap","vFS","addFileToVFS","addHTML","rasterizeHTML","useFor","imageCompression","pagesplit","mozImageSmoothingEnabled","webkitImageSmoothingEnabled","msImageSmoothingEnabled","imageSmoothingEnabled","Image","rstz","small","medium","large","auto","defaultView","getComputedStyle","currentStyle","cells","textContent","SCRIPT","STYLE","NOSCRIPT","OBJECT","EMBED","SELECT","setBlockBoundary","setBlockStyle","executeWatchFunctions","margins_doc","ownerDocument","compareDocumentPosition","addText","watchFunctions","outY","FOOTER","writeln","elementHandlers","paragraph","ready","splitFragmentsIntoLines","RenderTextFragment","getPdfColor","lastTextColor","renderParagraph","blockstyle","priorblockstyle","priorMarginBottom","100","200","300","400","500","600","700","800","900","bolder","lighter","oblique","justify","none","both","fromHTML","html2pdf","_wrapX","_wrapY","_page","setName","_pageBreakAt","pageBreaks","_gotoPage","scrollY","parentElement","BlobBuilder","WebKitBlobBuilder","MSBlobBuilder","MozBlobBuilder","webkitURL","revokeObjectURL","File","FileReader","lastModified","lastModifiedDate","_buffer","isPrototypeOf","setPrototypeOf","createDocumentFragment","LOADING","Event","EMPTY","DONE","onloadend","onloadstart","readAsDataURL","readAsText","readAsArrayBuffer","gt","navigator","userAgent","HTMLElement","setImmediate","INIT","download","MouseEvent","msSaveOrOpenBlob","WRITING","onwritestart","onwrite","onwriteend","has_local_palette","palette_offset","data_offset","data_length","transparent_index","interlaced","disposal","numFrames","frameInfo","decodeAndBlitFrameBGRA","GifWriter","addFrame","GifReader","getTime","displayName","datav","is_with_alpha","bottom_up","flag","parseHeader","parseBGR","Adler32","checksum","fromUtf8","fromBuffer","updateUtf8","__bidiEngine__","EN","AN","5","6","7","32","251","254","255","hiLevel","doBidiReorder","isInputVisual","isOutputVisual","isInputRtl","isOutputRtl","isSymmetricSwapping","fileSize","getUint32","reserved","headerSize","getInt32","getUint16","bitPP","rawSize","importantColors","getUint8","red","green","blue","quad","bit1","bit4","bit8","bit15","bit16","bit24","bit32","build_tree","dyn_tree","stat_desc","static_tree","elems","heap_len","heap_max","heap","opt_len","static_len","max_code","pqdownheap","extra_bits","extra_base","max_length","bl_count","good_length","max_lazy","nice_length","max_chain","_length_code","base_length","base_dist","d_code","extra_lbits","extra_dbits","extra_blbits","bl_order","static_ltree","static_dtree","static_l_desc","static_d_desc","static_bl_desc","pending_buf","flush_pending","avail_in","read_buf","total_in","total_out","msg","pending_out","deflateInit","dstate","deflateEnd","deflateParams","deflate","deflateSetDictionary","next_out","next_in","avail_out","next_in_index","next_out_index","zip","_jzlib_Deflater","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dodgerblue","feldspar","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgrey","lightgreen","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslateblue","lightslategray","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","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","snow","springgreen","steelblue","teal","thistle","tomato","turquoise","violet","violetred","wheat","white","whitesmoke","yellow","yellowgreen","example","process","toRGB","readString","registerTTF","directory","hhea","maxp","post","os2","loca","glyf","exists","lineGap","xMin","xMax","italic_angle","xHeight","familyClass","isSerif","isScript","isFixedPitch","forGlyph","advance","readByte","writeByte","readUInt32","writeUInt32","readInt32","writeInt32","readUInt16","writeUInt16","readInt16","writeInt16","writeString","readShort","writeShort","readLongLong","writeLongLong","readInt","writeInt","scalarType","tableCount","searchRange","entrySelector","rangeShift","tables","tag","__super__","raw","checkSumAdjustment","magicNumber","created","modified","macStyle","lowestRecPPEM","fontDirectionHint","indexToLocFormat","glyphDataFormat","platformID","encodingID","language","isUnicode","old","new","charMap","subtable","maxGlyphID","advanceWidthMax","minLeftSideBearing","minRightSideBearing","xMaxExtent","caretSlopeRise","caretSlopeRun","caretOffset","metricDataFormat","numberOfMetrics","averageCharWidth","weightClass","widthClass","ySubscriptXSize","ySubscriptYSize","ySubscriptXOffset","ySubscriptYOffset","ySuperscriptXSize","ySuperscriptYSize","ySuperscriptXOffset","ySuperscriptYOffset","yStrikeoutSize","yStrikeoutPosition","panose","charRange","vendorID","selection","firstCharIndex","lastCharIndex","ascent","descent","winAscent","winDescent","codePageRange","defaultChar","breakChar","maxContext","underlinePosition","minMemType42","maxMemType42","minMemType1","maxMemType1","glyphNameIndex","names","numGlyphs","languageID","nameID","strings","copyright","fontFamily","fontSubfamily","uniqueSubfamily","postscriptName","trademark","manufacturer","designer","description","vendorUrl","designerUrl","license","licenseUrl","preferredFamily","preferredSubfamily","compatibleFull","sampleText","maxPoints","maxContours","maxCompositePoints","maxComponentContours","maxZones","maxTwilightPoints","maxStorage","maxFunctionDefs","maxInstructionDefs","maxStackElements","maxSizeOfInstructions","maxComponentElements","maxComponentDepth","metrics","lsb","leftSideBearings","glyphFor","lengthOf","numberOfContours","compound","glyphIDs","glyphOffsets","unicodes","generateCmap","glyphsFor","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","compressionMethod","filterMethod","interlaceMethod","numPlays","yOffset","disposeOp","blendOp","grayscale","rgb","hasAlphaChannel","mozResponseArrayBuffer","getBytes","decodePalette","copyToImageData","_decodedPalette","decodeFrames","createImageData","renderFrame","_timeout","stopAnimation","_png","bufferLength","eof","ensureBuffer","getByte","lookChar","getChar","makeSubStream","Stream","skip","getBits","codeSize","codeBuf","bytesPos","getCode","generateHuffmanTable","URLSearchParams","plus","findPercentSign","proto","appendTo","_ungap","getAll","thisArg","invoke","query","encoded","pairs","addEach","replacer","URLSearchParamsProto","iterable","o_O","items","done","entries","entry","dP","gOPD","updateSearchParams","sp","_usp","verifySearchParams","Class","upgradeClass","createSearchParams","polluteSearchParams","ClassProto","searchParams","del","createSearchParamsPollute","_searchParams","HTMLAnchorElement","meh","EDGE_STACK","Delaunator","defaultGetX","defaultGetY","maxTriangles","_triangles","_halfedges","_hashSize","_hullPrev","_hullNext","_hullTri","_hullHash","_ids","_dists","hullPrev","hullNext","hullTri","hullHash","minDist","dist","i0x","i0y","i1x","i1y","minRadius","circumradius","i2x","i2y","quicksort","hull","halfedges","orient","ex","ey","bl","cl","circumcenter","_cx","_cy","_hullStart","hullSize","_hashKey","trianglesLen","_addTriangle","xp","yp","_legalize","pseudoAngle","al","pr","inCircle","hbl","_link","orientIfSure","rx","ry","fx","cp","ids","dists","temp","tempDist","OrbitControls","quat","quatInverse","lastPosition","lastQuaternion","twoPI","minDistance","minZoom","maxZoom","minPolarAngle","maxPolarAngle","minAzimuthAngle","maxAzimuthAngle","enableDamping","dampingFactor","enableZoom","zoomSpeed","enableRotate","rotateSpeed","enablePan","panSpeed","screenSpacePanning","keyPanSpeed","autoRotate","autoRotateSpeed","enableKeys","UP","BOTTOM","mouseButtons","touches","ONE","TWO","target0","position0","zoom0","getPolarAngle","spherical","getAzimuthalAngle","saveState","changeEvent","STATE","rotateLeft","sphericalDelta","makeSafe","panOffset","zoomChanged","EPS","onContextMenu","onMouseDown","onMouseWheel","onTouchStart","onTouchEnd","onTouchMove","onMouseMove","onMouseUp","onKeyDown","startEvent","endEvent","TOUCH_ROTATE","TOUCH_PAN","TOUCH_DOLLY_PAN","TOUCH_DOLLY_ROTATE","rotateStart","rotateEnd","rotateDelta","panStart","panEnd","panDelta","dollyStart","dollyEnd","dollyDelta","getZoomScale","rotateUp","panLeft","objectMatrix","panUp","pan","deltaX","deltaY","targetDistance","dollyOut","dollyScale","dollyIn","handleMouseDownRotate","clientX","clientY","handleMouseDownPan","handleTouchStartRotate","pageX","pageY","handleTouchStartPan","handleTouchStartDolly","handleTouchMoveRotate","handleTouchMovePan","handleTouchMoveDolly","mouseAction","button","handleMouseDownDolly","ctrlKey","metaKey","shiftKey","handleMouseMoveRotate","handleMouseMoveDolly","handleMouseMovePan","stopPropagation","handleMouseWheel","keyCode","handleKeyDown","handleTouchStartDollyPan","handleTouchStartDollyRotate","handleTouchMoveDollyPan","handleTouchMoveDollyRotate","tabIndex","MapControls","ACTION","extendStatics","PI_2","PI_HALF","approxZero","roundToStep","infinityToMaxNumber","maxNumberToInfinity","isTouchEvent","TouchEvent","extractClientCoordFromEvent","touchEvent","mouseEvent","notSupportedInOrthographicCamera","quatInvertCompat","invert","_ORIGIN","_AXIS_Y","_AXIS_Z","_v3A","_v3B","_v3C","_xColumn","_yColumn","_zColumn","_sphericalA","_sphericalB","_box3A","_box3B","_quaternionA","_quaternionB","_rotationMatrix","_raycaster","removeAllEventListeners","isMac","platform","readonlyACTION","_super","CameraControls","infinityDolly","draggingDampingFactor","azimuthRotateSpeed","polarRotateSpeed","dollySpeed","truckSpeed","dollyToCursor","dragToOffset","verticalDragToForward","boundaryFriction","colliderMeshes","cancel","_enabled","_dollyControlAmount","_boundaryEnclosesCamera","_needsUpdate","_updatedLastTime","_yAxisUpSpace","_yAxisUpSpaceInverse","_domElement","_targetEnd","_focalOffset","_focalOffsetEnd","_spherical","_sphericalEnd","_zoom","_zoomEnd","_nearPlaneCorners","_updateNearPlaneCorners","_boundary","_target0","_position0","_zoom0","_focalOffset0","_dollyControlCoord","middle","TRUCK","wheel","ZOOM","one","two","TOUCH_DOLLY_TRUCK","TOUCH_ZOOM_TRUCK","three","TOUCH_TRUCK","dragStartPosition_1","lastDragPosition_1","dollyStart_1","elementRect_1","truckInternal_1","camera_1","truckX","pedestalY","setFocalOffset","truck","forward","camera_2","rotateInternal_1","dollyInternal_1","prevRadius","dollyTo","zoomInternal_1","zoomScale","zoomTo","cancelDragging_1","dragging_1","passive","endDragging_1","onMouseDown_1","startDragging_1","onTouchStart_1","lastScrollTimeStamp_1","onMouseWheel_1","_getClientRect","deltaYFactor","deltaMode","OFFSET","originalEvent","onContextMenu_1","dollyX","dollyY","TOUCH_DOLLY","TOUCH_ZOOM","TOUCH_DOLLY_OFFSET","TOUCH_ZOOM_OFFSET","TOUCH_OFFSET","_removeAllEventListeners","__","__extends","install","libs","azimuthAngle","polarAngle","speed","boundaryEnclosesCamera","enableTransition","rotateTo","dolly","zoomStep","_encloseToBoundary","fitToBox","box3OrObject","_a","_b","_c","paddingLeft","_d","paddingRight","_e","paddingBottom","_f","paddingTop","aabb","bb","bbSize","getDistanceToFitBox","fitTo","fitToOptions","fitToSphere","sphereOrMesh","object3d","createBoundingSphere","distanceToFit","getDistanceToFitSphere","setLookAt","targetX","targetY","targetZ","normalizeRotations","lerpLookAt","positionAX","positionAY","positionAZ","targetAX","targetAY","targetAZ","positionBX","positionBY","positionBZ","targetBX","targetBY","targetBZ","positionA","targetA","targetB","positionB","deltaTheta","deltaPhi","deltaRadius","setTarget","setBoundary","box3","viewportOrX","boundingRectAspect","getDistanceToFit","vFOV","hFOV","getTarget","getFocalOffset","updateCameraUp","lerpRatio","deltaTarget","deltaOffset","planeX","planeY","worldToScreen","lerpRatio_1","cursor","_collisionTest","zoomDelta","updated","focalOffset","focalOffset0","friction","offsetLength2","newTarget","deltaClampedTarget","deltaClampedTargetLength2","offsetFactor","zoomInv","top_1","nearPlaneCorner","origin_1","getBoundingClientRect","loadFont","require","MSDFShader2D","MSDFShader3D","clock","currentDimension","rendererCanvas","rootScene","rootTextTexture","propileDrawingApp","reqAnimFrameId","PropileDrawingApp","loadedFont","loadedTexture","textMaterial2D","textMaterial3D","controls","oldCanvas","getElementById","jsonObjects","objects2d","objects3d","prevObj","labels","textLabelBufferGeometries","textLabelsFor2D","textLabelsFor3D","INTERSECTED","rotateTimer","moveGridTimer","transparentPlane","updateTimer","initialZoom","initialPosition","initialRotation","initialInversionX","initialInversionY","initialGridX","initialGridY","firstInit","maxXY","highestPile","oldProjectBearing","newProjectBearing","gridSize","mouse","cameraRotation","togglePopup","hidePopup","previousMousePos","labelType","filterType1","filterType2","labelFontSize","gridRotY","gridGroup","rotateTime","rotateBool","moveGridDelta","moveGridTime","moveGridBool","moveGridDirection","GRID_DIRECTION","oldData","dimensions","innerWidth","innerHeight","initX","TMath","initY","initCameraPosition","pileColor","rigID","boxSize","dirLight","pile","topPos","x_col","y_col","z_col","toePos","x_toe","y_toe","z_toe","RigID","querySelector","on","ui","getPiles","projectID","userID","show","jQuery","getJSON","piles","Enable_3d","removeClass","addClass","setUpDimension","weird_data","hide","project_bearing","label","filter1","filter2","iType","inversion_x","inversion_y","grid_x","grid_y","devicePixelRatio","pileMap","onDownInteraction","togglePop","toggleInterface","rotate90Down","rotate90Up","rotateMinus90Down","rotateMinus90Up","submit_project_bearing_steel","submit_project_bearing_btg","clearEvents","oldCanvasID","pileMapContainer","classList","innerText","toBlob","saveBlob","fileName","click","resetPreference","ajax","dataType","success","querySelectorAll","option","remakeLabels","changeColors","makePointerEvent","moveGridMinusYDown","moveGridMinusYUp","moveGridPlusYDown","moveGridPlusYUp","moveGridMinusXDown","moveGridMinusXUp","moveGridPlusXDown","moveGridPlusXUp","changeTextScaleKeyDown","changeTextScaleKeyUp","initializeEvents","onDocumentMouseMove","buildBox3D","max_z_col","min_z_toe","initZCoord","planeGeom","planeMaterial","toePosns","uninstalledPiles","bbObject","arrowGroup","subdivisions","maxIndex","buildBox2D","pileID","PileID","Total_Length","bearing","Bearing_drw","bearingAngle","yVec","arrowHelperMain","Incl_drw","fakeObject","textBufferGeometry","makeLabel","textLabelMeshes","indexDelaunay","terrainMeshArray","terrainGeom","meshIndex","terrainWireFrame","terrainLines","terrainMeshSolid","inclinationAngle","uPile","inclination","data_inclination","quaternion2","zVec","newOrigin","TriangulatedLength","makeObjects","updateProject","meshToRemove","posCount","translatedPosition","lType","makeTextSprite","horizontal_shift","scaleLabel","textMesh","makeLabel2D","posZ","makeLabel3D","arrowObj","length2","hex2","arrowHelperUpdated","currentHex","clearPopup","Estimated_length","setProperty","PileType","Effective_length","Inst_date","EDO_set","pileButton","closeButton","infoPopup","methodDown","methodUp","moveGrid","submit_project_bearing","formData","FormData","processData","contentType","alertNice","statustext","mousePtr","typeg","pileLabel","newVertPosArray","textGeometry","zPos","vertexAttribute","vertexArray","newLength","modifiedArray","modifyVertexArray2D","modifyVertexArray3D","target_z","tabs","activate","newTab","loadFontAndInitializeApp","toggleDrawing","oldPileMap","getElementsByClassName","newPileMap","replaceChild","resetPropileApp"],"mappings":"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AAM,OAAOC,KAAK,CAAC,MAAM,MAAM,MAAM,OAAOC,KAAK,CAAC,MAAM,MAAM,MAAM,OAAOC,KAAK,CAAC,MAAM,MAAM,MAAM,OAAOC,KAAK,CAAC,MAAM,MAAM,MAAM,OAAOC,KAAK,CAAC,MAAM,MAAM,MAAM,OAAOC,KAAK,CAAC,MAAM,MAAM,MAAM,OAAOC,KAAK,CAAC,MAAM,MAAM,MAAM,OAAOC,KAAK,CAAC,MAAM,OAAOC,KAAK,CAAC,MAAM,MAAM,MAAM,OAAOC,KAAK,CAAC,MAAM,MAAM,MAAM,OAAOC,KAAK,CAAC,MAAM,OAAOC,KAAK,CAAC,OAAOC,KAAK,CAAC,MAAM,MAAM,MAAM,OAAOC,KAAK,CAAC,MAAM,MAAM,MAAM,OAAOC,KAAK,CAAC,MAAM,MAAM,MAAM,OAAOC,KAAK,CAAC,MAAM,MAAM,MAAM,OAAOC,KAAK,CAAC,MAAM,MAAM,MAAM,OAAOC,KAAK,CAAC,MAAM,MAAM,MAAM,OAAOC,KAAK,CAAC,MAAM,MAAM,MAAM,OAAOC,KAAK,CAAC,MAAM,MAAM,MAAM,OAAOC,KAAK,CAAC,MAAM,MAAM,MAAM,OAAOC,KAAK,CAAC,MAAM,MAAM,MAAM,OAAOC,KAAK,CAAC,MAAM,OAAOC,KAAK,CAAC,MAAM,OAAOC,KAAK,CAAC,MAAM,OAAOC,KAAK,CAAC,MAAM,OAAOC,KAAK,CAAC,MAAM,OAAOC,KAAK,CAAC,MAAM,OAAOC,KAAK,CAAC,MAAM,MAAM,MAAM,OAAOC,KAAK,CAAC,MAAM,MAAM,MAAM,OAAOC,KAAK,CAAC,MAAM,MAAM,MAAM,OAAOC,KAAK,CAAC,MAAM,MAAM,MAAM,OAAOC,KAAK,CAAC,MAAM,MAAM,MAAM,OAAOC,KAAK,CAAC,MAAM,MAAM,MAAM,OAAOC,KAAK,CAAC,MAAM,MAAM,MAAM,OAAOC,KAAK,CAAC,MAAM,OAAOC,KAAK,CAAC,MAAM,MAAM,MAAM,OAAOC,KAAK,CAAC,MAAM,MAAM,MAAM,OAAOC,KAAK,CAAC,MAAM,OAAOC,KAAK,CAAC,MAAM,MAAM,MAAM,OAAOC,KAAK,CAAC,MAAM,OAAOC,KAAK,CAAC,MAAM,OAAOC,KAAK,CAAC,MAAM,OAAOC,KA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,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAKC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG16I,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI26I,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,KAAKC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,EAAE,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,G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AI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI,MAAM,IAAI,MAAM,MAAM,IAAI,MAAM,MAAM,IAAI,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,KAAK,KAAK,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,MAAM,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,KAAK,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,KAAK,KAAK,MAAM,MAAM,IAAI,MAAM,MAAM,MAAM,MAAM,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,MAAM,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,MAAM,MAAM,MAAM,MAAM,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,KAAK,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAKlW,EAAE,IAAIS,EAAEw8L,eAAe,CAACY,eAAc,IAAKp9L,EAAEyhK,IAAIsK,OAAO38J,KAAK,CAAC,kBAAkB,SAASpP,GAAG,IAAIyV,EAAEzV,EAAEyrG,KAAKlrG,GAAGP,EAAEuB,EAAEvB,EAAEoR,EAAEpR,EAAE+e,SAAS,IAAInf,GAAGI,EAAEmnK,MAAM5mK,EAAEinK,KAAK,IAAI,GAAG,mBAAmBhoK,OAAOkB,UAAUgB,SAASzC,KAAKwW,GAAG,CAAC,IAAI3W,EAAE,EAAE,IAAIc,EAAE,GAAGd,EAAE,EAAEA,EAAE2W,EAAEvT,OAAOpD,GAAG,EAAE,mBAAmBU,OAAOkB,UAAUgB,SAASzC,KAAKwW,EAAE3W,IAAIc,EAAEwP,KAAK,CAAC7P,EAAE49L,cAAc1nL,EAAE3W,GAAG,IAAI2W,EAAE3W,GAAG,GAAG2W,EAAE3W,GAAG,KAAKc,EAAEwP,KAAK,CAAC7P,EAAE49L,cAAc1nL,EAAE3W,MAAMkB,EAAEyrG,KAAK7rG,OAAOI,EAAEyrG,KAAKlsG,EAAE49L,cAAc1nL,MAAhta,CAAutaglJ,IAAIloE,OAAOn3E,IAAIspJ,GAAGE,GAAGlkK,UAAUu7L,YAAY,WAAW,GAAGx6L,KAAKg8L,SAASh8L,KAAKo6L,MAAM6B,UAAUj8L,KAAKyhJ,KAAI,GAAIzhJ,KAAKyhJ,KAAK,EAAEzhJ,KAAKk8L,SAASl8L,KAAKo6L,MAAM6B,UAAUj8L,KAAKyhJ,KAAI,GAAIzhJ,KAAKyhJ,KAAK,EAAEzhJ,KAAK6V,OAAO7V,KAAKo6L,MAAM6B,UAAUj8L,KAAKyhJ,KAAI,GAAIzhJ,KAAKyhJ,KAAK,EAAEzhJ,KAAKm8L,WAAWn8L,KAAKo6L,MAAM6B,UAAUj8L,KAAKyhJ,KAAI,GAAIzhJ,KAAKyhJ,KAAK,EAAEzhJ,KAAKob,MAAMpb,KAAKo6L,MAAM6B,UAAUj8L,KAAKyhJ,KAAI,GAAIzhJ,KAAKyhJ,KAAK,EAAEzhJ,KAAKqb,OAAOrb,KAAKo6L,MAAMgC,SAASp8L,KAAKyhJ,KAAI,GAAIzhJ,KAAKyhJ,KAAK,EAAEzhJ,KAAKsgD,OAAOtgD,KAAKo6L,MAAMiC,UAAUr8L,KAAKyhJ,KAAI,GAAIzhJ,KAAKyhJ,KAAK,EAAEzhJ,KAAKs8L,MAAMt8L,KAAKo6L,MAAMiC,UAAUr8L,KAAKyhJ,KAAI,GAAIzhJ,KAAKyhJ,KAAK,EAAEzhJ,KAAKw5J,SAASx5J,KAAKo6L,MAAM6B,UAAUj8L,KAAKyhJ,KAAI,GAAIzhJ,KAAKyhJ,KAAK,EAAEzhJ,KAAKu8L,QAAQv8L,KAAKo6L,MAAM6B,UAAUj8L,KAAKyhJ,KAAI,GAAIzhJ,KAAKyhJ,KAAK,EAAEzhJ,KAAK2oL,GAAG3oL,KAAKo6L,MAAM6B,UAAUj8L,KAAKyhJ,KAAI,GAAIzhJ,KAAKyhJ,KAAK,EAAEzhJ,KAAKk7I,GAAGl7I,KAAKo6L,MAAM6B,UAAUj8L,KAAKyhJ,KAAI,GAAIzhJ,KAAKyhJ,KAAK,EAAEzhJ,KAAK8rC,OAAO9rC,KAAKo6L,MAAM6B,UAAUj8L,KAAKyhJ,KAAI,GAAIzhJ,KAAKyhJ,KAAK,EAAEzhJ,KAAKw8L,gBAAgBx8L,KAAKo6L,MAAM6B,UAAUj8L,KAAKyhJ,KAAI,GAAIzhJ,KAAKyhJ,KAAK,EAAE,KAAKzhJ,KAAKs8L,OAAOt8L,KAAKq6L,gBAAgBr6L,KAAKs8L,MAAM,IAAIt8L,KAAKs8L,MAAM,GAAG,CAAC,IAAI/9L,EAAE,IAAIyB,KAAK8rC,OAAO,GAAG9rC,KAAKs8L,MAAMt8L,KAAK8rC,OAAO9rC,KAAKmnL,QAAQ,IAAInoK,MAAMzgB,GAAG,IAAI,IAAIyV,EAAE,EAAEA,EAAEzV,EAAEyV,IAAI,CAAC,IAAIlV,EAAEkB,KAAKo6L,MAAMqC,SAASz8L,KAAKyhJ,OAAM,GAAItjJ,EAAE6B,KAAKo6L,MAAMqC,SAASz8L,KAAKyhJ,OAAM,GAAIpkJ,EAAE2C,KAAKo6L,MAAMqC,SAASz8L,KAAKyhJ,OAAM,GAAI3jJ,EAAEkC,KAAKo6L,MAAMqC,SAASz8L,KAAKyhJ,OAAM,GAAIzhJ,KAAKmnL,QAAQnzK,GAAG,CAAC0oL,IAAIr/L,EAAEs/L,MAAMx+L,EAAEy+L,KAAK99L,EAAE+9L,KAAK/+L,IAAIkC,KAAKqb,OAAO,IAAIrb,KAAKqb,SAAS,EAAErb,KAAKs6L,WAAU,IAAKn3B,GAAGlkK,UAAUw7L,SAAS,WAAWz6L,KAAKyhJ,IAAIzhJ,KAAK6V,OAAO,IAAI,IAAItX,EAAE,MAAMyB,KAAKs8L,MAAMtoL,EAAEhU,KAAKob,MAAMpb,KAAKqb,OAAO,EAAErb,KAAK80B,KAAK,IAAI8V,WAAW52B,GAAGhU,KAAKzB,KAAK,MAAMA,GAAGwT,QAAQnB,IAAI,oBAAoBrS,KAAK4kK,GAAGlkK,UAAU69L,KAAK,WAAW,IAAIv+L,EAAEiB,KAAKmR,KAAK3Q,KAAKob,MAAM,GAAGpH,EAAEzV,EAAE,EAAEO,EAAE,GAAGkB,KAAKqb,OAAOrb,KAAKqb,OAAO,GAAGrb,KAAKqb,OAAO,IAAIvc,EAAEkB,KAAKqb,OAAO,EAAE,GAAGvc,EAAEA,IAAI,CAAC,IAAI,IAAIX,EAAE6B,KAAKs6L,UAAUx7L,EAAEkB,KAAKqb,OAAO,EAAEvc,EAAEzB,EAAE,EAAEA,EAAEkB,EAAElB,IAAI,IAAI,IAAIS,EAAEkC,KAAKo6L,MAAMqC,SAASz8L,KAAKyhJ,OAAM,GAAIxwI,EAAE9S,EAAE6B,KAAKob,MAAM,EAAE,EAAE/d,EAAE,EAAE+B,EAAE,EAAEA,EAAE,GAAG,EAAE/B,EAAE+B,EAAEY,KAAKob,MAAMhc,IAAI,CAAC,IAAI9B,EAAE0C,KAAKmnL,QAAQrpL,GAAG,EAAEsB,EAAE,GAAGY,KAAK80B,KAAK7jB,EAAE,EAAE7R,GAAG9B,EAAEs/L,KAAK58L,KAAK80B,KAAK7jB,EAAE,EAAE7R,EAAE,GAAG9B,EAAEq/L,MAAM38L,KAAK80B,KAAK7jB,EAAE,EAAE7R,EAAE,GAAG9B,EAAEo/L,IAAI18L,KAAK80B,KAAK7jB,EAAE,EAAE7R,EAAE,GAAG,IAAI,GAAG4U,IAAIhU,KAAKyhJ,KAAK,EAAEztI,KAAKmvJ,GAAGlkK,UAAU89L,KAAK,WAAW,IAAI,IAAIx+L,EAAEiB,KAAKmR,KAAK3Q,KAAKob,MAAM,GAAGpH,EAAEzV,EAAE,EAAEO,EAAEkB,KAAKqb,OAAO,EAAE,GAAGvc,EAAEA,IAAI,CAAC,IAAI,IAAIX,EAAE6B,KAAKs6L,UAAUx7L,EAAEkB,KAAKqb,OAAO,EAAEvc,EAAEzB,EAAE,EAAEA,EAAEkB,EAAElB,IAAI,CAAC,IAAIS,EAAEkC,KAAKo6L,MAAMqC,SAASz8L,KAAKyhJ,OAAM,GAAIxwI,EAAE9S,EAAE6B,KAAKob,MAAM,EAAE,EAAE/d,EAAE,EAAE+B,EAAEtB,GAAG,EAAER,EAAE,GAAGQ,EAAEmb,EAAEjZ,KAAKmnL,QAAQ/nL,GAAG,GAAGY,KAAK80B,KAAK7jB,GAAGgI,EAAE2jL,KAAK58L,KAAK80B,KAAK7jB,EAAE,GAAGgI,EAAE0jL,MAAM38L,KAAK80B,KAAK7jB,EAAE,GAAGgI,EAAEyjL,IAAI18L,KAAK80B,KAAK7jB,EAAE,GAAG,IAAI,EAAE5T,EAAE,GAAG2C,KAAKob,MAAM,MAAMnC,EAAEjZ,KAAKmnL,QAAQ7pL,GAAG0C,KAAK80B,KAAK7jB,EAAE,GAAGgI,EAAE2jL,KAAK58L,KAAK80B,KAAK7jB,EAAE,EAAE,GAAGgI,EAAE0jL,MAAM38L,KAAK80B,KAAK7jB,EAAE,EAAE,GAAGgI,EAAEyjL,IAAI18L,KAAK80B,KAAK7jB,EAAE,EAAE,GAAG,IAAI,GAAG+C,IAAIhU,KAAKyhJ,KAAK,EAAEztI,KAAKmvJ,GAAGlkK,UAAU+9L,KAAK,WAAW,IAAI,IAAIz+L,EAAEyB,KAAKob,MAAM,EAAEpH,EAAEhU,KAAKqb,OAAO,EAAE,GAAGrH,EAAEA,IAAI,CAAC,IAAI,IAAIlV,EAAEkB,KAAKs6L,UAAUtmL,EAAEhU,KAAKqb,OAAO,EAAErH,EAAE7V,EAAE,EAAEA,EAAE6B,KAAKob,MAAMjd,IAAI,CAAC,IAAId,EAAE2C,KAAKo6L,MAAMqC,SAASz8L,KAAKyhJ,OAAM,GAAI3jJ,EAAEgB,EAAEkB,KAAKob,MAAM,EAAE,EAAEjd,EAAE,GAAGd,EAAE2C,KAAKmnL,QAAQ1mL,OAAO,CAAC,IAAIwQ,EAAEjR,KAAKmnL,QAAQ9pL,GAAG2C,KAAK80B,KAAKh3B,GAAGmT,EAAEyrL,IAAI18L,KAAK80B,KAAKh3B,EAAE,GAAGmT,EAAE0rL,MAAM38L,KAAK80B,KAAKh3B,EAAE,GAAGmT,EAAE2rL,KAAK58L,KAAK80B,KAAKh3B,EAAE,GAAG,SAASkC,KAAK80B,KAAKh3B,GAAG,IAAIkC,KAAK80B,KAAKh3B,EAAE,GAAG,IAAIkC,KAAK80B,KAAKh3B,EAAE,GAAG,IAAIkC,KAAK80B,KAAKh3B,EAAE,GAAG,IAAI,GAAGS,IAAIyB,KAAKyhJ,KAAK,EAAEljJ,KAAK4kK,GAAGlkK,UAAUg+L,MAAM,WAAW,IAAI,IAAI1+L,EAAEyB,KAAKob,MAAM,EAAEpH,EAAEuuB,SAAS,QAAQ,GAAGzjC,EAAEkB,KAAKqb,OAAO,EAAE,GAAGvc,EAAEA,IAAI,CAAC,IAAI,IAAIX,EAAE6B,KAAKs6L,UAAUx7L,EAAEkB,KAAKqb,OAAO,EAAEvc,EAAEzB,EAAE,EAAEA,EAAE2C,KAAKob,MAAM/d,IAAI,CAAC,IAAIS,EAAEkC,KAAKo6L,MAAMiC,UAAUr8L,KAAKyhJ,KAAI,GAAIzhJ,KAAKyhJ,KAAK,EAAE,IAAIxwI,GAAGnT,EAAEkW,GAAGA,EAAE,IAAI,EAAE5U,GAAGtB,GAAG,EAAEkW,GAAGA,EAAE,IAAI,EAAE1W,GAAGQ,GAAG,GAAGkW,GAAGA,EAAE,IAAI,EAAEiF,EAAEnb,GAAG,GAAG,IAAI,EAAE6hC,EAAExhC,EAAE6B,KAAKob,MAAM,EAAE,EAAE/d,EAAE2C,KAAK80B,KAAK6K,GAAGriC,EAAE0C,KAAK80B,KAAK6K,EAAE,GAAGvgC,EAAEY,KAAK80B,KAAK6K,EAAE,GAAG1uB,EAAEjR,KAAK80B,KAAK6K,EAAE,GAAG1mB,EAAEjZ,KAAKyhJ,KAAKljJ,IAAI4kK,GAAGlkK,UAAUi+L,MAAM,WAAW,IAAI,IAAI3+L,EAAEyB,KAAKob,MAAM,EAAEpH,EAAEuuB,SAAS,QAAQ,GAAGzjC,EAAEyjC,SAAS,SAAS,GAAGpkC,EAAE6B,KAAKqb,OAAO,EAAE,GAAGld,EAAEA,IAAI,CAAC,IAAI,IAAId,EAAE2C,KAAKs6L,UAAUn8L,EAAE6B,KAAKqb,OAAO,EAAEld,EAAEL,EAAE,EAAEA,EAAEkC,KAAKob,MAAMtd,IAAI,CAAC,IAAImT,EAAEjR,KAAKo6L,MAAMiC,UAAUr8L,KAAKyhJ,KAAI,GAAIzhJ,KAAKyhJ,KAAK,EAAE,IAAIriJ,GAAG6R,EAAE+C,GAAGA,EAAE,IAAI,EAAE1W,GAAG2T,GAAG,EAAEnS,GAAGA,EAAE,IAAI,EAAEma,GAAGhI,GAAG,IAAI+C,EAAE,IAAI,EAAE2rB,EAAEtiC,EAAE2C,KAAKob,MAAM,EAAE,EAAEtd,EAAEkC,KAAK80B,KAAK6K,GAAG1mB,EAAEjZ,KAAK80B,KAAK6K,EAAE,GAAGriC,EAAE0C,KAAK80B,KAAK6K,EAAE,GAAGvgC,EAAEY,KAAK80B,KAAK6K,EAAE,GAAG,IAAI3/B,KAAKyhJ,KAAKljJ,IAAI4kK,GAAGlkK,UAAUk+L,MAAM,WAAW,IAAI,IAAI5+L,EAAEyB,KAAKqb,OAAO,EAAE,GAAG9c,EAAEA,IAAI,CAAC,IAAI,IAAIyV,EAAEhU,KAAKs6L,UAAU/7L,EAAEyB,KAAKqb,OAAO,EAAE9c,EAAEO,EAAE,EAAEA,EAAEkB,KAAKob,MAAMtc,IAAI,CAAC,IAAIX,EAAE6B,KAAKo6L,MAAMqC,SAASz8L,KAAKyhJ,OAAM,GAAIpkJ,EAAE2C,KAAKo6L,MAAMqC,SAASz8L,KAAKyhJ,OAAM,GAAI3jJ,EAAEkC,KAAKo6L,MAAMqC,SAASz8L,KAAKyhJ,OAAM,GAAIxwI,EAAE+C,EAAEhU,KAAKob,MAAM,EAAE,EAAEtc,EAAEkB,KAAK80B,KAAK7jB,GAAGnT,EAAEkC,KAAK80B,KAAK7jB,EAAE,GAAG5T,EAAE2C,KAAK80B,KAAK7jB,EAAE,GAAG9S,EAAE6B,KAAK80B,KAAK7jB,EAAE,GAAG,IAAIjR,KAAKyhJ,KAAKzhJ,KAAKob,MAAM,IAAI+nJ,GAAGlkK,UAAUm+L,MAAM,WAAW,IAAI,IAAI7+L,EAAEyB,KAAKqb,OAAO,EAAE,GAAG9c,EAAEA,IAAI,IAAI,IAAIyV,EAAEhU,KAAKs6L,UAAU/7L,EAAEyB,KAAKqb,OAAO,EAAE9c,EAAEO,EAAE,EAAEA,EAAEkB,KAAKob,MAAMtc,IAAI,CAAC,IAAIX,EAAE6B,KAAKo6L,MAAMqC,SAASz8L,KAAKyhJ,OAAM,GAAIpkJ,EAAE2C,KAAKo6L,MAAMqC,SAASz8L,KAAKyhJ,OAAM,GAAI3jJ,EAAEkC,KAAKo6L,MAAMqC,SAASz8L,KAAKyhJ,OAAM,GAAIxwI,EAAEjR,KAAKo6L,MAAMqC,SAASz8L,KAAKyhJ,OAAM,GAAIriJ,EAAE4U,EAAEhU,KAAKob,MAAM,EAAE,EAAEtc,EAAEkB,KAAK80B,KAAK11B,GAAGtB,EAAEkC,KAAK80B,KAAK11B,EAAE,GAAG/B,EAAE2C,KAAK80B,KAAK11B,EAAE,GAAGjB,EAAE6B,KAAK80B,KAAK11B,EAAE,GAAG6R,IAAIkyJ,GAAGlkK,UAAUu8I,QAAQ,WAAW,OAAOx7I,KAAK80B,MAAMg8D,OAAOn3E,IAAIwpJ,GA4Bv90B,SAAS5kK,GAAG,IAAeyV,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAA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,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,GAAGt/B,EAAGu/B,aAAa,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAA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OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,SAAS,GAAGhV,EAAE,CAAC,IAAIgV,YAAY,CAAC,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,EAAE,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,IAAI,G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","file":"/plotPilesMobile.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, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"./dist/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 40);\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\tObject.assign = function ( target ) {\n\n\t\tif ( target === undefined || target === null ) {\n\n\t\t\tthrow new TypeError( 'Cannot convert undefined or null to object' );\n\n\t\t}\n\n\t\tconst output = Object( target );\n\n\t\tfor ( let index = 1; index < arguments.length; index ++ ) {\n\n\t\t\tconst source = arguments[ index ];\n\n\t\t\tif ( source !== undefined && source !== null ) {\n\n\t\t\t\tfor ( const nextKey in source ) {\n\n\t\t\t\t\tif ( Object.prototype.hasOwnProperty.call( source, nextKey ) ) {\n\n\t\t\t\t\t\toutput[ nextKey ] = source[ nextKey ];\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 output;\n\n\t};\n\n}\n\nconst REVISION = '119';\nconst MOUSE = { LEFT: 0, MIDDLE: 1, RIGHT: 2, ROTATE: 0, DOLLY: 1, PAN: 2 };\nconst TOUCH = { ROTATE: 0, PAN: 1, DOLLY_PAN: 2, DOLLY_ROTATE: 3 };\nconst CullFaceNone = 0;\nconst CullFaceBack = 1;\nconst CullFaceFront = 2;\nconst CullFaceFrontBack = 3;\nconst BasicShadowMap = 0;\nconst PCFShadowMap = 1;\nconst PCFSoftShadowMap = 2;\nconst VSMShadowMap = 3;\nconst FrontSide = 0;\nconst BackSide = 1;\nconst DoubleSide = 2;\nconst FlatShading = 1;\nconst SmoothShading = 2;\nconst NoBlending = 0;\nconst NormalBlending = 1;\nconst AdditiveBlending = 2;\nconst SubtractiveBlending = 3;\nconst MultiplyBlending = 4;\nconst CustomBlending = 5;\nconst AddEquation = 100;\nconst SubtractEquation = 101;\nconst ReverseSubtractEquation = 102;\nconst MinEquation = 103;\nconst MaxEquation = 104;\nconst ZeroFactor = 200;\nconst OneFactor = 201;\nconst SrcColorFactor = 202;\nconst OneMinusSrcColorFactor = 203;\nconst SrcAlphaFactor = 204;\nconst OneMinusSrcAlphaFactor = 205;\nconst DstAlphaFactor = 206;\nconst OneMinusDstAlphaFactor = 207;\nconst DstColorFactor = 208;\nconst OneMinusDstColorFactor = 209;\nconst SrcAlphaSaturateFactor = 210;\nconst NeverDepth = 0;\nconst AlwaysDepth = 1;\nconst LessDepth = 2;\nconst LessEqualDepth = 3;\nconst EqualDepth = 4;\nconst GreaterEqualDepth = 5;\nconst GreaterDepth = 6;\nconst NotEqualDepth = 7;\nconst MultiplyOperation = 0;\nconst MixOperation = 1;\nconst AddOperation = 2;\nconst NoToneMapping = 0;\nconst LinearToneMapping = 1;\nconst ReinhardToneMapping = 2;\nconst CineonToneMapping = 3;\nconst ACESFilmicToneMapping = 4;\nconst CustomToneMapping = 5;\n\nconst UVMapping = 300;\nconst CubeReflectionMapping = 301;\nconst CubeRefractionMapping = 302;\nconst EquirectangularReflectionMapping = 303;\nconst EquirectangularRefractionMapping = 304;\nconst CubeUVReflectionMapping = 306;\nconst CubeUVRefractionMapping = 307;\nconst RepeatWrapping = 1000;\nconst ClampToEdgeWrapping = 1001;\nconst MirroredRepeatWrapping = 1002;\nconst NearestFilter = 1003;\nconst NearestMipmapNearestFilter = 1004;\nconst NearestMipMapNearestFilter = 1004;\nconst NearestMipmapLinearFilter = 1005;\nconst NearestMipMapLinearFilter = 1005;\nconst LinearFilter = 1006;\nconst LinearMipmapNearestFilter = 1007;\nconst LinearMipMapNearestFilter = 1007;\nconst LinearMipmapLinearFilter = 1008;\nconst LinearMipMapLinearFilter = 1008;\nconst UnsignedByteType = 1009;\nconst ByteType = 1010;\nconst ShortType = 1011;\nconst UnsignedShortType = 1012;\nconst IntType = 1013;\nconst UnsignedIntType = 1014;\nconst FloatType = 1015;\nconst HalfFloatType = 1016;\nconst UnsignedShort4444Type = 1017;\nconst UnsignedShort5551Type = 1018;\nconst UnsignedShort565Type = 1019;\nconst UnsignedInt248Type = 1020;\nconst AlphaFormat = 1021;\nconst RGBFormat = 1022;\nconst RGBAFormat = 1023;\nconst LuminanceFormat = 1024;\nconst LuminanceAlphaFormat = 1025;\nconst RGBEFormat = RGBAFormat;\nconst DepthFormat = 1026;\nconst DepthStencilFormat = 1027;\nconst RedFormat = 1028;\nconst RedIntegerFormat = 1029;\nconst RGFormat = 1030;\nconst RGIntegerFormat = 1031;\nconst RGBIntegerFormat = 1032;\nconst RGBAIntegerFormat = 1033;\n\nconst RGB_S3TC_DXT1_Format = 33776;\nconst RGBA_S3TC_DXT1_Format = 33777;\nconst RGBA_S3TC_DXT3_Format = 33778;\nconst RGBA_S3TC_DXT5_Format = 33779;\nconst RGB_PVRTC_4BPPV1_Format = 35840;\nconst RGB_PVRTC_2BPPV1_Format = 35841;\nconst RGBA_PVRTC_4BPPV1_Format = 35842;\nconst RGBA_PVRTC_2BPPV1_Format = 35843;\nconst RGB_ETC1_Format = 36196;\nconst RGB_ETC2_Format = 37492;\nconst RGBA_ETC2_EAC_Format = 37496;\nconst RGBA_ASTC_4x4_Format = 37808;\nconst RGBA_ASTC_5x4_Format = 37809;\nconst RGBA_ASTC_5x5_Format = 37810;\nconst RGBA_ASTC_6x5_Format = 37811;\nconst RGBA_ASTC_6x6_Format = 37812;\nconst RGBA_ASTC_8x5_Format = 37813;\nconst RGBA_ASTC_8x6_Format = 37814;\nconst RGBA_ASTC_8x8_Format = 37815;\nconst RGBA_ASTC_10x5_Format = 37816;\nconst RGBA_ASTC_10x6_Format = 37817;\nconst RGBA_ASTC_10x8_Format = 37818;\nconst RGBA_ASTC_10x10_Format = 37819;\nconst RGBA_ASTC_12x10_Format = 37820;\nconst RGBA_ASTC_12x12_Format = 37821;\nconst RGBA_BPTC_Format = 36492;\nconst SRGB8_ALPHA8_ASTC_4x4_Format = 37840;\nconst SRGB8_ALPHA8_ASTC_5x4_Format = 37841;\nconst SRGB8_ALPHA8_ASTC_5x5_Format = 37842;\nconst SRGB8_ALPHA8_ASTC_6x5_Format = 37843;\nconst SRGB8_ALPHA8_ASTC_6x6_Format = 37844;\nconst SRGB8_ALPHA8_ASTC_8x5_Format = 37845;\nconst SRGB8_ALPHA8_ASTC_8x6_Format = 37846;\nconst SRGB8_ALPHA8_ASTC_8x8_Format = 37847;\nconst SRGB8_ALPHA8_ASTC_10x5_Format = 37848;\nconst SRGB8_ALPHA8_ASTC_10x6_Format = 37849;\nconst SRGB8_ALPHA8_ASTC_10x8_Format = 37850;\nconst SRGB8_ALPHA8_ASTC_10x10_Format = 37851;\nconst SRGB8_ALPHA8_ASTC_12x10_Format = 37852;\nconst SRGB8_ALPHA8_ASTC_12x12_Format = 37853;\nconst LoopOnce = 2200;\nconst LoopRepeat = 2201;\nconst LoopPingPong = 2202;\nconst InterpolateDiscrete = 2300;\nconst InterpolateLinear = 2301;\nconst InterpolateSmooth = 2302;\nconst ZeroCurvatureEnding = 2400;\nconst ZeroSlopeEnding = 2401;\nconst WrapAroundEnding = 2402;\nconst NormalAnimationBlendMode = 2500;\nconst AdditiveAnimationBlendMode = 2501;\nconst TrianglesDrawMode = 0;\nconst TriangleStripDrawMode = 1;\nconst TriangleFanDrawMode = 2;\nconst LinearEncoding = 3000;\nconst sRGBEncoding = 3001;\nconst GammaEncoding = 3007;\nconst RGBEEncoding = 3002;\nconst LogLuvEncoding = 3003;\nconst RGBM7Encoding = 3004;\nconst RGBM16Encoding = 3005;\nconst RGBDEncoding = 3006;\nconst BasicDepthPacking = 3200;\nconst RGBADepthPacking = 3201;\nconst TangentSpaceNormalMap = 0;\nconst ObjectSpaceNormalMap = 1;\n\nconst ZeroStencilOp = 0;\nconst KeepStencilOp = 7680;\nconst ReplaceStencilOp = 7681;\nconst IncrementStencilOp = 7682;\nconst DecrementStencilOp = 7683;\nconst IncrementWrapStencilOp = 34055;\nconst DecrementWrapStencilOp = 34056;\nconst InvertStencilOp = 5386;\n\nconst NeverStencilFunc = 512;\nconst LessStencilFunc = 513;\nconst EqualStencilFunc = 514;\nconst LessEqualStencilFunc = 515;\nconst GreaterStencilFunc = 516;\nconst NotEqualStencilFunc = 517;\nconst GreaterEqualStencilFunc = 518;\nconst AlwaysStencilFunc = 519;\n\nconst StaticDrawUsage = 35044;\nconst DynamicDrawUsage = 35048;\nconst StreamDrawUsage = 35040;\nconst StaticReadUsage = 35045;\nconst DynamicReadUsage = 35049;\nconst StreamReadUsage = 35041;\nconst StaticCopyUsage = 35046;\nconst DynamicCopyUsage = 35050;\nconst StreamCopyUsage = 35042;\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\tconst 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\tconst 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\tconst listeners = this._listeners;\n\t\tconst listenerArray = listeners[ type ];\n\n\t\tif ( listenerArray !== undefined ) {\n\n\t\t\tconst 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\tconst listeners = this._listeners;\n\t\tconst listenerArray = listeners[ event.type ];\n\n\t\tif ( listenerArray !== undefined ) {\n\n\t\t\tevent.target = this;\n\n\t\t\t// Make a copy, in case listeners are removed while iterating.\n\t\t\tconst array = listenerArray.slice( 0 );\n\n\t\t\tfor ( let 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\nconst _lut = [];\n\nfor ( let i = 0; i < 256; i ++ ) {\n\n\t_lut[ i ] = ( i < 16 ? '0' : '' ) + ( i ).toString( 16 );\n\n}\n\nlet _seed = 1234567;\n\nconst MathUtils = {\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\tconst d0 = Math.random() * 0xffffffff | 0;\n\t\tconst d1 = Math.random() * 0xffffffff | 0;\n\t\tconst d2 = Math.random() * 0xffffffff | 0;\n\t\tconst d3 = Math.random() * 0xffffffff | 0;\n\t\tconst uuid = _lut[ d0 & 0xff ] + _lut[ d0 >> 8 & 0xff ] + _lut[ d0 >> 16 & 0xff ] + _lut[ d0 >> 24 & 0xff ] + '-' +\n\t\t\t_lut[ d1 & 0xff ] + _lut[ d1 >> 8 & 0xff ] + '-' + _lut[ d1 >> 16 & 0x0f | 0x40 ] + _lut[ d1 >> 24 & 0xff ] + '-' +\n\t\t\t_lut[ d2 & 0x3f | 0x80 ] + _lut[ d2 >> 8 & 0xff ] + '-' + _lut[ d2 >> 16 & 0xff ] + _lut[ d2 >> 24 & 0xff ] +\n\t\t\t_lut[ d3 & 0xff ] + _lut[ d3 >> 8 & 0xff ] + _lut[ d3 >> 16 & 0xff ] + _lut[ d3 >> 24 & 0xff ];\n\n\t\t// .toUpperCase() here flattens concatenated strings to save heap memory space.\n\t\treturn uuid.toUpperCase();\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\t// Deterministic pseudo-random float in the interval [ 0, 1 ]\n\n\tseededRandom: function ( s ) {\n\n\t\tif ( s !== undefined ) _seed = s % 2147483647;\n\n\t\t// Park-Miller algorithm\n\n\t\t_seed = _seed * 16807 % 2147483647;\n\n\t\treturn ( _seed - 1 ) / 2147483646;\n\n\t},\n\n\tdegToRad: function ( degrees ) {\n\n\t\treturn degrees * MathUtils.DEG2RAD;\n\n\t},\n\n\tradToDeg: function ( radians ) {\n\n\t\treturn radians * MathUtils.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\tsetQuaternionFromProperEuler: function ( q, a, b, c, order ) {\n\n\t\t// Intrinsic Proper Euler Angles - see https://en.wikipedia.org/wiki/Euler_angles\n\n\t\t// rotations are applied to the axes in the order specified by 'order'\n\t\t// rotation by angle 'a' is applied first, then by angle 'b', then by angle 'c'\n\t\t// angles are in radians\n\n\t\tconst cos = Math.cos;\n\t\tconst sin = Math.sin;\n\n\t\tconst c2 = cos( b / 2 );\n\t\tconst s2 = sin( b / 2 );\n\n\t\tconst c13 = cos( ( a + c ) / 2 );\n\t\tconst s13 = sin( ( a + c ) / 2 );\n\n\t\tconst c1_3 = cos( ( a - c ) / 2 );\n\t\tconst s1_3 = sin( ( a - c ) / 2 );\n\n\t\tconst c3_1 = cos( ( c - a ) / 2 );\n\t\tconst s3_1 = sin( ( c - a ) / 2 );\n\n\t\tswitch ( order ) {\n\n\t\t\tcase 'XYX':\n\t\t\t\tq.set( c2 * s13, s2 * c1_3, s2 * s1_3, c2 * c13 );\n\t\t\t\tbreak;\n\n\t\t\tcase 'YZY':\n\t\t\t\tq.set( s2 * s1_3, c2 * s13, s2 * c1_3, c2 * c13 );\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZXZ':\n\t\t\t\tq.set( s2 * c1_3, s2 * s1_3, c2 * s13, c2 * c13 );\n\t\t\t\tbreak;\n\n\t\t\tcase 'XZX':\n\t\t\t\tq.set( c2 * s13, s2 * s3_1, s2 * c3_1, c2 * c13 );\n\t\t\t\tbreak;\n\n\t\t\tcase 'YXY':\n\t\t\t\tq.set( s2 * c3_1, c2 * s13, s2 * s3_1, c2 * c13 );\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZYZ':\n\t\t\t\tq.set( s2 * s3_1, s2 * c3_1, c2 * s13, c2 * c13 );\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tconsole.warn( 'THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: ' + order );\n\n\t\t}\n\n\t}\n\n};\n\nfunction Vector2( x = 0, y = 0 ) {\n\n\tthis.x = x;\n\tthis.y = y;\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\tconst x = this.x, y = this.y;\n\t\tconst 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 ( minVal, maxVal ) {\n\n\t\tthis.x = Math.max( minVal, Math.min( maxVal, this.x ) );\n\t\tthis.y = Math.max( minVal, Math.min( maxVal, this.y ) );\n\n\t\treturn this;\n\n\t},\n\n\tclampLength: function ( min, max ) {\n\n\t\tconst 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\tcross: function ( v ) {\n\n\t\treturn this.x * v.y - this.y * v.x;\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\tconst angle = Math.atan2( - this.y, - this.x ) + 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\tconst 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\tthis.x = v1.x + ( v2.x - v1.x ) * alpha;\n\t\tthis.y = v1.y + ( v2.y - v1.y ) * alpha;\n\n\t\treturn this;\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\tconst c = Math.cos( angle ), s = Math.sin( angle );\n\n\t\tconst x = this.x - center.x;\n\t\tconst 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\trandom: function () {\n\n\t\tthis.x = Math.random();\n\t\tthis.y = Math.random();\n\n\t\treturn this;\n\n\t}\n\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\tconst 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\tconst te = this.elements;\n\t\tconst 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\textractBasis: function ( xAxis, yAxis, zAxis ) {\n\n\t\txAxis.setFromMatrix3Column( this, 0 );\n\t\tyAxis.setFromMatrix3Column( this, 1 );\n\t\tzAxis.setFromMatrix3Column( this, 2 );\n\n\t\treturn this;\n\n\t},\n\n\tsetFromMatrix4: function ( m ) {\n\n\t\tconst 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\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\tconst ae = a.elements;\n\t\tconst be = b.elements;\n\t\tconst te = this.elements;\n\n\t\tconst a11 = ae[ 0 ], a12 = ae[ 3 ], a13 = ae[ 6 ];\n\t\tconst a21 = ae[ 1 ], a22 = ae[ 4 ], a23 = ae[ 7 ];\n\t\tconst a31 = ae[ 2 ], a32 = ae[ 5 ], a33 = ae[ 8 ];\n\n\t\tconst b11 = be[ 0 ], b12 = be[ 3 ], b13 = be[ 6 ];\n\t\tconst b21 = be[ 1 ], b22 = be[ 4 ], b23 = be[ 7 ];\n\t\tconst 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\tconst 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\tconst te = this.elements;\n\n\t\tconst 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 ( throwOnDegenerate !== undefined ) {\n\n\t\t\tconsole.warn( \"THREE.Matrix3: .getInverse() can no longer be configured to throw on degenerate.\" );\n\n\t\t}\n\n\t\tconst 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 ) return this.set( 0, 0, 0, 0, 0, 0, 0, 0, 0 );\n\n\t\tconst 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\tlet tmp;\n\t\tconst 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\tconst 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\tconst c = Math.cos( rotation );\n\t\tconst 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\tconst 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\tconst c = Math.cos( theta );\n\t\tconst s = Math.sin( theta );\n\n\t\tconst te = this.elements;\n\n\t\tconst a11 = te[ 0 ], a12 = te[ 3 ], a13 = te[ 6 ];\n\t\tconst 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\tconst 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\tconst te = this.elements;\n\t\tconst me = matrix.elements;\n\n\t\tfor ( let 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 ( let 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\tconst 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\nlet _canvas;\n\nconst ImageUtils = {\n\n\tgetDataURL: function ( image ) {\n\n\t\tif ( /^data:/i.test( image.src ) ) {\n\n\t\t\treturn image.src;\n\n\t\t}\n\n\t\tif ( typeof HTMLCanvasElement == 'undefined' ) {\n\n\t\t\treturn image.src;\n\n\t\t}\n\n\t\tlet canvas;\n\n\t\tif ( image instanceof HTMLCanvasElement ) {\n\n\t\t\tcanvas = image;\n\n\t\t} else {\n\n\t\t\tif ( _canvas === undefined ) _canvas = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' );\n\n\t\t\t_canvas.width = image.width;\n\t\t\t_canvas.height = image.height;\n\n\t\t\tconst context = _canvas.getContext( '2d' );\n\n\t\t\tif ( image instanceof ImageData ) {\n\n\t\t\t\tcontext.putImageData( image, 0, 0 );\n\n\t\t\t} else {\n\n\t\t\t\tcontext.drawImage( image, 0, 0, image.width, image.height );\n\n\t\t\t}\n\n\t\t\tcanvas = _canvas;\n\n\t\t}\n\n\t\tif ( canvas.width > 2048 || canvas.height > 2048 ) {\n\n\t\t\treturn canvas.toDataURL( 'image/jpeg', 0.6 );\n\n\t\t} else {\n\n\t\t\treturn canvas.toDataURL( 'image/png' );\n\n\t\t}\n\n\t}\n\n};\n\nlet 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 = MathUtils.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.internalFormat = null;\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.internalFormat = source.internalFormat;\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\tconst 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\tconst 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\ttype: this.type,\n\t\t\tencoding: this.encoding,\n\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\tpremultiplyAlpha: this.premultiplyAlpha,\n\t\t\tunpackAlignment: this.unpackAlignment\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\tconst image = this.image;\n\n\t\t\tif ( image.uuid === undefined ) {\n\n\t\t\t\timage.uuid = MathUtils.generateUUID(); // UGH\n\n\t\t\t}\n\n\t\t\tif ( ! isRootObject && meta.images[ image.uuid ] === undefined ) {\n\n\t\t\t\tlet url;\n\n\t\t\t\tif ( Array.isArray( image ) ) {\n\n\t\t\t\t\t// process array of images e.g. CubeTexture\n\n\t\t\t\t\turl = [];\n\n\t\t\t\t\tfor ( let i = 0, l = image.length; i < l; i ++ ) {\n\n\t\t\t\t\t\turl.push( ImageUtils.getDataURL( image[ i ] ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// process single image\n\n\t\t\t\t\turl = ImageUtils.getDataURL( image );\n\n\t\t\t\t}\n\n\t\t\t\tmeta.images[ image.uuid ] = {\n\t\t\t\t\tuuid: image.uuid,\n\t\t\t\t\turl: url\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 uv;\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\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\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\treturn uv;\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\nfunction Vector4( x = 0, y = 0, z = 0, w = 1 ) {\n\n\tthis.x = x;\n\tthis.y = y;\n\tthis.z = z;\n\tthis.w = w;\n\n}\n\nObject.defineProperties( Vector4.prototype, {\n\n\t\"width\": {\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\n\t\t}\n\n\t},\n\n\t\"height\": {\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\n\t\t}\n\n\t}\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\tconst x = this.x, y = this.y, z = this.z, w = this.w;\n\t\tconst 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\tconst 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\tlet angle, x, y, z; // variables for result\n\t\tconst epsilon = 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\tconst xx = ( m11 + 1 ) / 2;\n\t\t\tconst yy = ( m22 + 1 ) / 2;\n\t\t\tconst zz = ( m33 + 1 ) / 2;\n\t\t\tconst xy = ( m12 + m21 ) / 4;\n\t\t\tconst xz = ( m13 + m31 ) / 4;\n\t\t\tconst 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\tlet s = Math.sqrt( ( m32 - m23 ) * ( m32 - m23 ) +\n\t\t\t( m13 - m31 ) * ( m13 - m31 ) +\n\t\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 ( minVal, maxVal ) {\n\n\t\tthis.x = Math.max( minVal, Math.min( maxVal, this.x ) );\n\t\tthis.y = Math.max( minVal, Math.min( maxVal, this.y ) );\n\t\tthis.z = Math.max( minVal, Math.min( maxVal, this.z ) );\n\t\tthis.w = Math.max( minVal, Math.min( maxVal, this.w ) );\n\n\t\treturn this;\n\n\t},\n\n\tclampLength: function ( min, max ) {\n\n\t\tconst 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\tthis.x = v1.x + ( v2.x - v1.x ) * alpha;\n\t\tthis.y = v1.y + ( v2.y - v1.y ) * alpha;\n\t\tthis.z = v1.z + ( v2.z - v1.z ) * alpha;\n\t\tthis.w = v1.w + ( v2.w - v1.w ) * alpha;\n\n\t\treturn this;\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\trandom: function () {\n\n\t\tthis.x = Math.random();\n\t\tthis.y = Math.random();\n\t\tthis.z = Math.random();\n\t\tthis.w = Math.random();\n\n\t\treturn this;\n\n\t}\n\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\tthis.texture = new Texture( undefined, options.mapping, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.encoding );\n\n\tthis.texture.image = {};\n\tthis.texture.image.width = width;\n\tthis.texture.image.height = height;\n\n\tthis.texture.generateMipmaps = options.generateMipmaps !== undefined ? options.generateMipmaps : false;\n\tthis.texture.minFilter = options.minFilter !== undefined ? options.minFilter : LinearFilter;\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.texture.image.width = width;\n\t\t\tthis.texture.image.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\nfunction WebGLMultisampleRenderTarget( width, height, options ) {\n\n\tWebGLRenderTarget.call( this, width, height, options );\n\n\tthis.samples = 4;\n\n}\n\nWebGLMultisampleRenderTarget.prototype = Object.assign( Object.create( WebGLRenderTarget.prototype ), {\n\n\tconstructor: WebGLMultisampleRenderTarget,\n\n\tisWebGLMultisampleRenderTarget: true,\n\n\tcopy: function ( source ) {\n\n\t\tWebGLRenderTarget.prototype.copy.call( this, source );\n\n\t\tthis.samples = source.samples;\n\n\t\treturn this;\n\n\t}\n\n} );\n\nfunction Quaternion( x = 0, y = 0, z = 0, w = 1 ) {\n\n\tthis._x = x;\n\tthis._y = y;\n\tthis._z = z;\n\tthis._w = w;\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\tlet 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\tconst x1 = 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\tlet 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\tconst 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\tconst 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\tconst 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\tmultiplyQuaternionsFlat: function ( dst, dstOffset, src0, srcOffset0, src1, srcOffset1 ) {\n\n\t\tconst x0 = src0[ srcOffset0 ];\n\t\tconst y0 = src0[ srcOffset0 + 1 ];\n\t\tconst z0 = src0[ srcOffset0 + 2 ];\n\t\tconst w0 = src0[ srcOffset0 + 3 ];\n\n\t\tconst x1 = src1[ srcOffset1 ];\n\t\tconst y1 = src1[ srcOffset1 + 1 ];\n\t\tconst z1 = src1[ srcOffset1 + 2 ];\n\t\tconst w1 = src1[ srcOffset1 + 3 ];\n\n\t\tdst[ dstOffset ] = x0 * w1 + w0 * x1 + y0 * z1 - z0 * y1;\n\t\tdst[ dstOffset + 1 ] = y0 * w1 + w0 * y1 + z0 * x1 - x0 * z1;\n\t\tdst[ dstOffset + 2 ] = z0 * w1 + w0 * z1 + x0 * y1 - y0 * x1;\n\t\tdst[ dstOffset + 3 ] = w0 * w1 - x0 * x1 - y0 * y1 - z0 * z1;\n\n\t\treturn dst;\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\tisQuaternion: 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\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\tconst 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\tconst cos = Math.cos;\n\t\tconst sin = Math.sin;\n\n\t\tconst c1 = cos( x / 2 );\n\t\tconst c2 = cos( y / 2 );\n\t\tconst c3 = cos( z / 2 );\n\n\t\tconst s1 = sin( x / 2 );\n\t\tconst s2 = sin( y / 2 );\n\t\tconst s3 = sin( z / 2 );\n\n\t\tswitch ( order ) {\n\n\t\t\tcase 'XYZ':\n\t\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'YXZ':\n\t\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZXY':\n\t\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZYX':\n\t\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'YZX':\n\t\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'XZY':\n\t\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tconsole.warn( 'THREE.Quaternion: .setFromEuler() encountered an unknown order: ' + order );\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\tconst 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\tconst 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\n\t\tif ( trace > 0 ) {\n\n\t\t\tconst s = 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\tconst s = 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\tconst s = 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\tconst s = 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 ( vFrom, vTo ) {\n\n\t\t// assumes direction vectors vFrom and vTo are normalized\n\n\t\tconst EPS = 0.000001;\n\n\t\tlet r = vFrom.dot( vTo ) + 1;\n\n\t\tif ( r < EPS ) {\n\n\t\t\tr = 0;\n\n\t\t\tif ( Math.abs( vFrom.x ) > Math.abs( vFrom.z ) ) {\n\n\t\t\t\tthis._x = - vFrom.y;\n\t\t\t\tthis._y = vFrom.x;\n\t\t\t\tthis._z = 0;\n\t\t\t\tthis._w = r;\n\n\t\t\t} else {\n\n\t\t\t\tthis._x = 0;\n\t\t\t\tthis._y = - vFrom.z;\n\t\t\t\tthis._z = vFrom.y;\n\t\t\t\tthis._w = r;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// crossVectors( vFrom, vTo ); // inlined to avoid cyclic dependency on Vector3\n\n\t\t\tthis._x = vFrom.y * vTo.z - vFrom.z * vTo.y;\n\t\t\tthis._y = vFrom.z * vTo.x - vFrom.x * vTo.z;\n\t\t\tthis._z = vFrom.x * vTo.y - vFrom.y * vTo.x;\n\t\t\tthis._w = r;\n\n\t\t}\n\n\t\treturn this.normalize();\n\n\t},\n\n\tangleTo: function ( q ) {\n\n\t\treturn 2 * Math.acos( Math.abs( MathUtils.clamp( this.dot( q ), - 1, 1 ) ) );\n\n\t},\n\n\trotateTowards: function ( q, step ) {\n\n\t\tconst angle = this.angleTo( q );\n\n\t\tif ( angle === 0 ) return this;\n\n\t\tconst t = Math.min( 1, step / angle );\n\n\t\tthis.slerp( q, t );\n\n\t\treturn this;\n\n\t},\n\n\tidentity: function () {\n\n\t\treturn this.set( 0, 0, 0, 1 );\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\tlet 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\tconst qax = a._x, qay = a._y, qaz = a._z, qaw = a._w;\n\t\tconst 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\tconst 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\tlet 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\tconst sqrSinHalfTheta = 1.0 - cosHalfTheta * cosHalfTheta;\n\n\t\tif ( sqrSinHalfTheta <= Number.EPSILON ) {\n\n\t\t\tconst s = 1 - t;\n\t\t\tthis._w = s * w + t * this._w;\n\t\t\tthis._x = s * x + t * this._x;\n\t\t\tthis._y = s * y + t * this._y;\n\t\t\tthis._z = s * z + t * this._z;\n\n\t\t\tthis.normalize();\n\t\t\tthis._onChangeCallback();\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst sinHalfTheta = Math.sqrt( sqrSinHalfTheta );\n\t\tconst halfTheta = Math.atan2( sinHalfTheta, cosHalfTheta );\n\t\tconst 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\tfromBufferAttribute: function ( attribute, index ) {\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\t_onChange: function ( callback ) {\n\n\t\tthis._onChangeCallback = callback;\n\n\t\treturn this;\n\n\t},\n\n\t_onChangeCallback: function () {}\n\n} );\n\nconst _vector = new Vector3();\nconst _quaternion = new Quaternion();\n\nfunction Vector3( x = 0, y = 0, z = 0 ) {\n\n\tthis.x = x;\n\tthis.y = y;\n\tthis.z = z;\n\n}\n\nObject.assign( Vector3.prototype, {\n\n\tisVector3: true,\n\n\tset: function ( x, y, z ) {\n\n\t\tif ( z === undefined ) z = this.z; // sprite.scale.set(x,y)\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 ( euler ) {\n\n\t\tif ( ! ( euler && euler.isEuler ) ) {\n\n\t\t\tconsole.error( 'THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.' );\n\n\t\t}\n\n\t\treturn this.applyQuaternion( _quaternion.setFromEuler( euler ) );\n\n\t},\n\n\tapplyAxisAngle: function ( axis, angle ) {\n\n\t\treturn this.applyQuaternion( _quaternion.setFromAxisAngle( axis, angle ) );\n\n\t},\n\n\tapplyMatrix3: function ( m ) {\n\n\t\tconst x = this.x, y = this.y, z = this.z;\n\t\tconst 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\tapplyNormalMatrix: function ( m ) {\n\n\t\treturn this.applyMatrix3( m ).normalize();\n\n\t},\n\n\tapplyMatrix4: function ( m ) {\n\n\t\tconst x = this.x, y = this.y, z = this.z;\n\t\tconst e = m.elements;\n\n\t\tconst 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\tconst x = this.x, y = this.y, z = this.z;\n\t\tconst qx = q.x, qy = q.y, qz = q.z, qw = q.w;\n\n\t\t// calculate quat * vector\n\n\t\tconst ix = qw * x + qy * z - qz * y;\n\t\tconst iy = qw * y + qz * x - qx * z;\n\t\tconst iz = qw * z + qx * y - qy * x;\n\t\tconst 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 ( camera ) {\n\n\t\treturn this.applyMatrix4( camera.matrixWorldInverse ).applyMatrix4( camera.projectionMatrix );\n\n\t},\n\n\tunproject: function ( camera ) {\n\n\t\treturn this.applyMatrix4( camera.projectionMatrixInverse ).applyMatrix4( camera.matrixWorld );\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\tconst x = this.x, y = this.y, z = this.z;\n\t\tconst 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 ( minVal, maxVal ) {\n\n\t\tthis.x = Math.max( minVal, Math.min( maxVal, this.x ) );\n\t\tthis.y = Math.max( minVal, Math.min( maxVal, this.y ) );\n\t\tthis.z = Math.max( minVal, Math.min( maxVal, this.z ) );\n\n\t\treturn this;\n\n\t},\n\n\tclampLength: function ( min, max ) {\n\n\t\tconst 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\tthis.x = v1.x + ( v2.x - v1.x ) * alpha;\n\t\tthis.y = v1.y + ( v2.y - v1.y ) * alpha;\n\t\tthis.z = v1.z + ( v2.z - v1.z ) * alpha;\n\n\t\treturn this;\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\tconst ax = a.x, ay = a.y, az = a.z;\n\t\tconst 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 ( v ) {\n\n\t\tconst denominator = v.lengthSq();\n\n\t\tif ( denominator === 0 ) return this.set( 0, 0, 0 );\n\n\t\tconst scalar = v.dot( this ) / denominator;\n\n\t\treturn this.copy( v ).multiplyScalar( scalar );\n\n\t},\n\n\tprojectOnPlane: function ( planeNormal ) {\n\n\t\t_vector.copy( this ).projectOnVector( planeNormal );\n\n\t\treturn this.sub( _vector );\n\n\t},\n\n\treflect: function ( normal ) {\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\treturn this.sub( _vector.copy( normal ).multiplyScalar( 2 * this.dot( normal ) ) );\n\n\t},\n\n\tangleTo: function ( v ) {\n\n\t\tconst denominator = Math.sqrt( this.lengthSq() * v.lengthSq() );\n\n\t\tif ( denominator === 0 ) return Math.PI / 2;\n\n\t\tconst theta = this.dot( v ) / denominator;\n\n\t\t// clamp, to handle numerical problems\n\n\t\treturn Math.acos( MathUtils.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\tconst 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\treturn this.setFromSphericalCoords( s.radius, s.phi, s.theta );\n\n\t},\n\n\tsetFromSphericalCoords: function ( radius, phi, theta ) {\n\n\t\tconst sinPhiRadius = Math.sin( phi ) * radius;\n\n\t\tthis.x = sinPhiRadius * Math.sin( theta );\n\t\tthis.y = Math.cos( phi ) * radius;\n\t\tthis.z = sinPhiRadius * Math.cos( theta );\n\n\t\treturn this;\n\n\t},\n\n\tsetFromCylindrical: function ( c ) {\n\n\t\treturn this.setFromCylindricalCoords( c.radius, c.theta, c.y );\n\n\t},\n\n\tsetFromCylindricalCoords: function ( radius, theta, y ) {\n\n\t\tthis.x = radius * Math.sin( theta );\n\t\tthis.y = y;\n\t\tthis.z = radius * Math.cos( theta );\n\n\t\treturn this;\n\n\t},\n\n\tsetFromMatrixPosition: function ( m ) {\n\n\t\tconst 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\tconst sx = this.setFromMatrixColumn( m, 0 ).length();\n\t\tconst sy = this.setFromMatrixColumn( m, 1 ).length();\n\t\tconst 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\tsetFromMatrix3Column: function ( m, index ) {\n\n\t\treturn this.fromArray( m.elements, index * 3 );\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\trandom: function () {\n\n\t\tthis.x = Math.random();\n\t\tthis.y = Math.random();\n\t\tthis.z = Math.random();\n\n\t\treturn this;\n\n\t}\n\n} );\n\nconst _v1 = new Vector3();\nconst _m1 = new Matrix4();\nconst _zero = new Vector3( 0, 0, 0 );\nconst _one = new Vector3( 1, 1, 1 );\nconst _x = new Vector3();\nconst _y = new Vector3();\nconst _z = new Vector3();\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\tconst 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\tconst te = this.elements;\n\t\tconst 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\tconst 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 ( m ) {\n\n\t\t// this method does not support reflection matrices\n\n\t\tconst te = this.elements;\n\t\tconst me = m.elements;\n\n\t\tconst scaleX = 1 / _v1.setFromMatrixColumn( m, 0 ).length();\n\t\tconst scaleY = 1 / _v1.setFromMatrixColumn( m, 1 ).length();\n\t\tconst scaleZ = 1 / _v1.setFromMatrixColumn( m, 2 ).length();\n\n\t\tte[ 0 ] = me[ 0 ] * scaleX;\n\t\tte[ 1 ] = me[ 1 ] * scaleX;\n\t\tte[ 2 ] = me[ 2 ] * scaleX;\n\t\tte[ 3 ] = 0;\n\n\t\tte[ 4 ] = me[ 4 ] * scaleY;\n\t\tte[ 5 ] = me[ 5 ] * scaleY;\n\t\tte[ 6 ] = me[ 6 ] * scaleY;\n\t\tte[ 7 ] = 0;\n\n\t\tte[ 8 ] = me[ 8 ] * scaleZ;\n\t\tte[ 9 ] = me[ 9 ] * scaleZ;\n\t\tte[ 10 ] = me[ 10 ] * scaleZ;\n\t\tte[ 11 ] = 0;\n\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\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\tconst te = this.elements;\n\n\t\tconst x = euler.x, y = euler.y, z = euler.z;\n\t\tconst a = Math.cos( x ), b = Math.sin( x );\n\t\tconst c = Math.cos( y ), d = Math.sin( y );\n\t\tconst e = Math.cos( z ), f = Math.sin( z );\n\n\t\tif ( euler.order === 'XYZ' ) {\n\n\t\t\tconst 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\tconst 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\tconst 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\tconst 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\tconst 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\tconst 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// bottom row\n\t\tte[ 3 ] = 0;\n\t\tte[ 7 ] = 0;\n\t\tte[ 11 ] = 0;\n\n\t\t// last column\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\treturn this.compose( _zero, q, _one );\n\n\t},\n\n\tlookAt: function ( eye, target, up ) {\n\n\t\tconst te = this.elements;\n\n\t\t_z.subVectors( eye, target );\n\n\t\tif ( _z.lengthSq() === 0 ) {\n\n\t\t\t// eye and target are in the same position\n\n\t\t\t_z.z = 1;\n\n\t\t}\n\n\t\t_z.normalize();\n\t\t_x.crossVectors( up, _z );\n\n\t\tif ( _x.lengthSq() === 0 ) {\n\n\t\t\t// up and z are parallel\n\n\t\t\tif ( Math.abs( up.z ) === 1 ) {\n\n\t\t\t\t_z.x += 0.0001;\n\n\t\t\t} else {\n\n\t\t\t\t_z.z += 0.0001;\n\n\t\t\t}\n\n\t\t\t_z.normalize();\n\t\t\t_x.crossVectors( up, _z );\n\n\t\t}\n\n\t\t_x.normalize();\n\t\t_y.crossVectors( _z, _x );\n\n\t\tte[ 0 ] = _x.x; te[ 4 ] = _y.x; te[ 8 ] = _z.x;\n\t\tte[ 1 ] = _x.y; te[ 5 ] = _y.y; te[ 9 ] = _z.y;\n\t\tte[ 2 ] = _x.z; te[ 6 ] = _y.z; te[ 10 ] = _z.z;\n\n\t\treturn this;\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\tconst ae = a.elements;\n\t\tconst be = b.elements;\n\t\tconst te = this.elements;\n\n\t\tconst a11 = ae[ 0 ], a12 = ae[ 4 ], a13 = ae[ 8 ], a14 = ae[ 12 ];\n\t\tconst a21 = ae[ 1 ], a22 = ae[ 5 ], a23 = ae[ 9 ], a24 = ae[ 13 ];\n\t\tconst a31 = ae[ 2 ], a32 = ae[ 6 ], a33 = ae[ 10 ], a34 = ae[ 14 ];\n\t\tconst a41 = ae[ 3 ], a42 = ae[ 7 ], a43 = ae[ 11 ], a44 = ae[ 15 ];\n\n\t\tconst b11 = be[ 0 ], b12 = be[ 4 ], b13 = be[ 8 ], b14 = be[ 12 ];\n\t\tconst b21 = be[ 1 ], b22 = be[ 5 ], b23 = be[ 9 ], b24 = be[ 13 ];\n\t\tconst b31 = be[ 2 ], b32 = be[ 6 ], b33 = be[ 10 ], b34 = be[ 14 ];\n\t\tconst 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\tconst 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\tdeterminant: function () {\n\n\t\tconst te = this.elements;\n\n\t\tconst n11 = te[ 0 ], n12 = te[ 4 ], n13 = te[ 8 ], n14 = te[ 12 ];\n\t\tconst n21 = te[ 1 ], n22 = te[ 5 ], n23 = te[ 9 ], n24 = te[ 13 ];\n\t\tconst n31 = te[ 2 ], n32 = te[ 6 ], n33 = te[ 10 ], n34 = te[ 14 ];\n\t\tconst 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\tconst te = this.elements;\n\t\tlet 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 ( x, y, z ) {\n\n\t\tconst te = this.elements;\n\n\t\tif ( x.isVector3 ) {\n\n\t\t\tte[ 12 ] = x.x;\n\t\t\tte[ 13 ] = x.y;\n\t\t\tte[ 14 ] = x.z;\n\n\t\t} else {\n\n\t\t\tte[ 12 ] = x;\n\t\t\tte[ 13 ] = y;\n\t\t\tte[ 14 ] = z;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tgetInverse: function ( m, throwOnDegenerate ) {\n\n\t\tif ( throwOnDegenerate !== undefined ) {\n\n\t\t\tconsole.warn( \"THREE.Matrix4: .getInverse() can no longer be configured to throw on degenerate.\" );\n\n\t\t}\n\n\t\t// based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm\n\t\tconst 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\tconst det = n11 * t11 + n21 * t12 + n31 * t13 + n41 * t14;\n\n\t\tif ( det === 0 ) return this.set( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 );\n\n\t\tconst 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\tconst te = this.elements;\n\t\tconst 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\tconst te = this.elements;\n\n\t\tconst scaleXSq = te[ 0 ] * te[ 0 ] + te[ 1 ] * te[ 1 ] + te[ 2 ] * te[ 2 ];\n\t\tconst scaleYSq = te[ 4 ] * te[ 4 ] + te[ 5 ] * te[ 5 ] + te[ 6 ] * te[ 6 ];\n\t\tconst 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\tconst 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\tconst 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\tconst 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\tconst c = Math.cos( angle );\n\t\tconst s = Math.sin( angle );\n\t\tconst t = 1 - c;\n\t\tconst x = axis.x, y = axis.y, z = axis.z;\n\t\tconst 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\tconst te = this.elements;\n\n\t\tconst x = quaternion._x, y = quaternion._y, z = quaternion._z, w = quaternion._w;\n\t\tconst x2 = x + x,\ty2 = y + y, z2 = z + z;\n\t\tconst xx = x * x2, xy = x * y2, xz = x * z2;\n\t\tconst yy = y * y2, yz = y * z2, zz = z * z2;\n\t\tconst wx = w * x2, wy = w * y2, wz = w * z2;\n\n\t\tconst sx = scale.x, sy = scale.y, sz = scale.z;\n\n\t\tte[ 0 ] = ( 1 - ( yy + zz ) ) * sx;\n\t\tte[ 1 ] = ( xy + wz ) * sx;\n\t\tte[ 2 ] = ( xz - wy ) * sx;\n\t\tte[ 3 ] = 0;\n\n\t\tte[ 4 ] = ( xy - wz ) * sy;\n\t\tte[ 5 ] = ( 1 - ( xx + zz ) ) * sy;\n\t\tte[ 6 ] = ( yz + wx ) * sy;\n\t\tte[ 7 ] = 0;\n\n\t\tte[ 8 ] = ( xz + wy ) * sz;\n\t\tte[ 9 ] = ( yz - wx ) * sz;\n\t\tte[ 10 ] = ( 1 - ( xx + yy ) ) * sz;\n\t\tte[ 11 ] = 0;\n\n\t\tte[ 12 ] = position.x;\n\t\tte[ 13 ] = position.y;\n\t\tte[ 14 ] = position.z;\n\t\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t},\n\n\tdecompose: function ( position, quaternion, scale ) {\n\n\t\tconst te = this.elements;\n\n\t\tlet sx = _v1.set( te[ 0 ], te[ 1 ], te[ 2 ] ).length();\n\t\tlet sy = _v1.set( te[ 4 ], te[ 5 ], te[ 6 ] ).length();\n\t\tlet sz = _v1.set( te[ 8 ], te[ 9 ], te[ 10 ] ).length();\n\n\t\t// if determine is negative, we need to invert one scale\n\t\tconst det = this.determinant();\n\t\tif ( det < 0 ) sx = - sx;\n\n\t\tposition.x = te[ 12 ];\n\t\tposition.y = te[ 13 ];\n\t\tposition.z = te[ 14 ];\n\n\t\t// scale the rotation part\n\t\t_m1.copy( this );\n\n\t\tconst invSX = 1 / sx;\n\t\tconst invSY = 1 / sy;\n\t\tconst invSZ = 1 / sz;\n\n\t\t_m1.elements[ 0 ] *= invSX;\n\t\t_m1.elements[ 1 ] *= invSX;\n\t\t_m1.elements[ 2 ] *= invSX;\n\n\t\t_m1.elements[ 4 ] *= invSY;\n\t\t_m1.elements[ 5 ] *= invSY;\n\t\t_m1.elements[ 6 ] *= invSY;\n\n\t\t_m1.elements[ 8 ] *= invSZ;\n\t\t_m1.elements[ 9 ] *= invSZ;\n\t\t_m1.elements[ 10 ] *= invSZ;\n\n\t\tquaternion.setFromRotationMatrix( _m1 );\n\n\t\tscale.x = sx;\n\t\tscale.y = sy;\n\t\tscale.z = sz;\n\n\t\treturn this;\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\tconst te = this.elements;\n\t\tconst x = 2 * near / ( right - left );\n\t\tconst y = 2 * near / ( top - bottom );\n\n\t\tconst a = ( right + left ) / ( right - left );\n\t\tconst b = ( top + bottom ) / ( top - bottom );\n\t\tconst c = - ( far + near ) / ( far - near );\n\t\tconst 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\tconst te = this.elements;\n\t\tconst w = 1.0 / ( right - left );\n\t\tconst h = 1.0 / ( top - bottom );\n\t\tconst p = 1.0 / ( far - near );\n\n\t\tconst x = ( right + left ) * w;\n\t\tconst y = ( top + bottom ) * h;\n\t\tconst 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\tconst te = this.elements;\n\t\tconst me = matrix.elements;\n\n\t\tfor ( let 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 ( let 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\tconst 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\nconst _matrix = new Matrix4();\nconst _quaternion$1 = new Quaternion();\n\nfunction Euler( x = 0, y = 0, z = 0, order = Euler.DefaultOrder ) {\n\n\tthis._x = x;\n\tthis._y = y;\n\tthis._z = z;\n\tthis._order = order;\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\tconst clamp = MathUtils.clamp;\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tconst te = m.elements;\n\t\tconst m11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ];\n\t\tconst m21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ];\n\t\tconst m31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ];\n\n\t\torder = order || this._order;\n\n\t\tswitch ( order ) {\n\n\t\t\tcase 'XYZ':\n\n\t\t\t\tthis._y = Math.asin( clamp( m13, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m13 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._x = Math.atan2( - m23, m33 );\n\t\t\t\t\tthis._z = Math.atan2( - m12, m11 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._x = Math.atan2( m32, m22 );\n\t\t\t\t\tthis._z = 0;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'YXZ':\n\n\t\t\t\tthis._x = Math.asin( - clamp( m23, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m23 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._y = Math.atan2( m13, m33 );\n\t\t\t\t\tthis._z = Math.atan2( m21, m22 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._y = Math.atan2( - m31, m11 );\n\t\t\t\t\tthis._z = 0;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZXY':\n\n\t\t\t\tthis._x = Math.asin( clamp( m32, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m32 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._y = Math.atan2( - m31, m33 );\n\t\t\t\t\tthis._z = Math.atan2( - m12, m22 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._y = 0;\n\t\t\t\t\tthis._z = Math.atan2( m21, m11 );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZYX':\n\n\t\t\t\tthis._y = Math.asin( - clamp( m31, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m31 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._x = Math.atan2( m32, m33 );\n\t\t\t\t\tthis._z = Math.atan2( m21, m11 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._x = 0;\n\t\t\t\t\tthis._z = Math.atan2( - m12, m22 );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'YZX':\n\n\t\t\t\tthis._z = Math.asin( clamp( m21, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m21 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._x = Math.atan2( - m23, m22 );\n\t\t\t\t\tthis._y = Math.atan2( - m31, m11 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._x = 0;\n\t\t\t\t\tthis._y = Math.atan2( m13, m33 );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'XZY':\n\n\t\t\t\tthis._z = Math.asin( - clamp( m12, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m12 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._x = Math.atan2( m32, m22 );\n\t\t\t\t\tthis._y = Math.atan2( m13, m11 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._x = Math.atan2( - m23, m33 );\n\t\t\t\t\tthis._y = 0;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tconsole.warn( 'THREE.Euler: .setFromRotationMatrix() encountered an unknown 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 ( q, order, update ) {\n\n\t\t_matrix.makeRotationFromQuaternion( q );\n\n\t\treturn this.setFromRotationMatrix( _matrix, order, update );\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 ( newOrder ) {\n\n\t\t// WARNING: this discards revolution information -bhouston\n\n\t\t_quaternion$1.setFromEuler( this );\n\n\t\treturn this.setFromQuaternion( _quaternion$1, newOrder );\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\t_onChange: function ( callback ) {\n\n\t\tthis._onChangeCallback = callback;\n\n\t\treturn this;\n\n\t},\n\n\t_onChangeCallback: function () {}\n\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\tenableAll: function () {\n\n\t\tthis.mask = 0xffffffff | 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\tdisableAll: function () {\n\n\t\tthis.mask = 0;\n\n\t},\n\n\ttest: function ( layers ) {\n\n\t\treturn ( this.mask & layers.mask ) !== 0;\n\n\t}\n\n} );\n\nlet _object3DId = 0;\n\nconst _v1$1 = new Vector3();\nconst _q1 = new Quaternion();\nconst _m1$1 = new Matrix4();\nconst _target = new Vector3();\n\nconst _position = new Vector3();\nconst _scale = new Vector3();\nconst _quaternion$2 = new Quaternion();\n\nconst _xAxis = new Vector3( 1, 0, 0 );\nconst _yAxis = new Vector3( 0, 1, 0 );\nconst _zAxis = new Vector3( 0, 0, 1 );\n\nconst _addedEvent = { type: 'added' };\nconst _removedEvent = { type: 'removed' };\n\nfunction Object3D() {\n\n\tObject.defineProperty( this, 'id', { value: _object3DId ++ } );\n\n\tthis.uuid = MathUtils.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\tconst position = new Vector3();\n\tconst rotation = new Euler();\n\tconst quaternion = new Quaternion();\n\tconst 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\tconfigurable: true,\n\t\t\tenumerable: true,\n\t\t\tvalue: position\n\t\t},\n\t\trotation: {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: true,\n\t\t\tvalue: rotation\n\t\t},\n\t\tquaternion: {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: true,\n\t\t\tvalue: quaternion\n\t\t},\n\t\tscale: {\n\t\t\tconfigurable: true,\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\tapplyMatrix4: function ( matrix ) {\n\n\t\tif ( this.matrixAutoUpdate ) this.updateMatrix();\n\n\t\tthis.matrix.premultiply( 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 ( axis, angle ) {\n\n\t\t// rotate object on axis in object space\n\t\t// axis is assumed to be normalized\n\n\t\t_q1.setFromAxisAngle( axis, angle );\n\n\t\tthis.quaternion.multiply( _q1 );\n\n\t\treturn this;\n\n\t},\n\n\trotateOnWorldAxis: function ( axis, angle ) {\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\t_q1.setFromAxisAngle( axis, angle );\n\n\t\tthis.quaternion.premultiply( _q1 );\n\n\t\treturn this;\n\n\t},\n\n\trotateX: function ( angle ) {\n\n\t\treturn this.rotateOnAxis( _xAxis, angle );\n\n\t},\n\n\trotateY: function ( angle ) {\n\n\t\treturn this.rotateOnAxis( _yAxis, angle );\n\n\t},\n\n\trotateZ: function ( angle ) {\n\n\t\treturn this.rotateOnAxis( _zAxis, angle );\n\n\t},\n\n\ttranslateOnAxis: function ( axis, distance ) {\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\t_v1$1.copy( axis ).applyQuaternion( this.quaternion );\n\n\t\tthis.position.add( _v1$1.multiplyScalar( distance ) );\n\n\t\treturn this;\n\n\t},\n\n\ttranslateX: function ( distance ) {\n\n\t\treturn this.translateOnAxis( _xAxis, distance );\n\n\t},\n\n\ttranslateY: function ( distance ) {\n\n\t\treturn this.translateOnAxis( _yAxis, distance );\n\n\t},\n\n\ttranslateZ: function ( distance ) {\n\n\t\treturn this.translateOnAxis( _zAxis, distance );\n\n\t},\n\n\tlocalToWorld: function ( vector ) {\n\n\t\treturn vector.applyMatrix4( this.matrixWorld );\n\n\t},\n\n\tworldToLocal: function ( vector ) {\n\n\t\treturn vector.applyMatrix4( _m1$1.getInverse( this.matrixWorld ) );\n\n\t},\n\n\tlookAt: function ( x, y, z ) {\n\n\t\t// This method does not support objects having non-uniformly-scaled parent(s)\n\n\t\tif ( x.isVector3 ) {\n\n\t\t\t_target.copy( x );\n\n\t\t} else {\n\n\t\t\t_target.set( x, y, z );\n\n\t\t}\n\n\t\tconst parent = this.parent;\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\t_position.setFromMatrixPosition( this.matrixWorld );\n\n\t\tif ( this.isCamera || this.isLight ) {\n\n\t\t\t_m1$1.lookAt( _position, _target, this.up );\n\n\t\t} else {\n\n\t\t\t_m1$1.lookAt( _target, _position, this.up );\n\n\t\t}\n\n\t\tthis.quaternion.setFromRotationMatrix( _m1$1 );\n\n\t\tif ( parent ) {\n\n\t\t\t_m1$1.extractRotation( parent.matrixWorld );\n\t\t\t_q1.setFromRotationMatrix( _m1$1 );\n\t\t\tthis.quaternion.premultiply( _q1.inverse() );\n\n\t\t}\n\n\t},\n\n\tadd: function ( object ) {\n\n\t\tif ( arguments.length > 1 ) {\n\n\t\t\tfor ( let 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\tthis.children.push( object );\n\n\t\t\tobject.dispatchEvent( _addedEvent );\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 ( let 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\tconst index = this.children.indexOf( object );\n\n\t\tif ( index !== - 1 ) {\n\n\t\t\tobject.parent = null;\n\t\t\tthis.children.splice( index, 1 );\n\n\t\t\tobject.dispatchEvent( _removedEvent );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tattach: function ( object ) {\n\n\t\t// adds object as a child of this, while maintaining the object's world transform\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\t_m1$1.getInverse( this.matrixWorld );\n\n\t\tif ( object.parent !== null ) {\n\n\t\t\tobject.parent.updateWorldMatrix( true, false );\n\n\t\t\t_m1$1.multiply( object.parent.matrixWorld );\n\n\t\t}\n\n\t\tobject.applyMatrix4( _m1$1 );\n\n\t\tobject.updateWorldMatrix( false, false );\n\n\t\tthis.add( object );\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 ( let i = 0, l = this.children.length; i < l; i ++ ) {\n\n\t\t\tconst child = this.children[ i ];\n\t\t\tconst 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 ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .getWorldQuaternion() target is now required' );\n\t\t\ttarget = new Quaternion();\n\n\t\t}\n\n\t\tthis.updateMatrixWorld( true );\n\n\t\tthis.matrixWorld.decompose( _position, target, _scale );\n\n\t\treturn target;\n\n\t},\n\n\tgetWorldScale: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .getWorldScale() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\tthis.updateMatrixWorld( true );\n\n\t\tthis.matrixWorld.decompose( _position, _quaternion$2, target );\n\n\t\treturn target;\n\n\t},\n\n\tgetWorldDirection: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .getWorldDirection() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\tthis.updateMatrixWorld( true );\n\n\t\tconst e = this.matrixWorld.elements;\n\n\t\treturn target.set( e[ 8 ], e[ 9 ], e[ 10 ] ).normalize();\n\n\t},\n\n\traycast: function () {},\n\n\ttraverse: function ( callback ) {\n\n\t\tcallback( this );\n\n\t\tconst children = this.children;\n\n\t\tfor ( let 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\tconst children = this.children;\n\n\t\tfor ( let 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\tconst 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\tconst children = this.children;\n\n\t\tfor ( let 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\tupdateWorldMatrix: function ( updateParents, updateChildren ) {\n\n\t\tconst parent = this.parent;\n\n\t\tif ( updateParents === true && parent !== null ) {\n\n\t\t\tparent.updateWorldMatrix( true, false );\n\n\t\t}\n\n\t\tif ( this.matrixAutoUpdate ) this.updateMatrix();\n\n\t\tif ( this.parent === null ) {\n\n\t\t\tthis.matrixWorld.copy( this.matrix );\n\n\t\t} else {\n\n\t\t\tthis.matrixWorld.multiplyMatrices( this.parent.matrixWorld, this.matrix );\n\n\t\t}\n\n\t\t// update children\n\n\t\tif ( updateChildren === true ) {\n\n\t\t\tconst children = this.children;\n\n\t\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\t\tchildren[ i ].updateWorldMatrix( false, true );\n\n\t\t\t}\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\tconst isRootObject = ( meta === undefined || typeof meta === 'string' );\n\n\t\tconst 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\tconst 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.layers = this.layers.mask;\n\t\tobject.matrix = this.matrix.toArray();\n\n\t\tif ( this.matrixAutoUpdate === false ) object.matrixAutoUpdate = false;\n\n\t\t// object specific properties\n\n\t\tif ( this.isInstancedMesh ) {\n\n\t\t\tobject.type = 'InstancedMesh';\n\t\t\tobject.count = this.count;\n\t\t\tobject.instanceMatrix = this.instanceMatrix.toJSON();\n\n\t\t}\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.isMesh || this.isLine || this.isPoints ) {\n\n\t\t\tobject.geometry = serialize( meta.geometries, this.geometry );\n\n\t\t\tconst parameters = this.geometry.parameters;\n\n\t\t\tif ( parameters !== undefined && parameters.shapes !== undefined ) {\n\n\t\t\t\tconst shapes = parameters.shapes;\n\n\t\t\t\tif ( Array.isArray( shapes ) ) {\n\n\t\t\t\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tconst 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\tconst uuids = [];\n\n\t\t\t\tfor ( let 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 ( let 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\tconst geometries = extractFromCache( meta.geometries );\n\t\t\tconst materials = extractFromCache( meta.materials );\n\t\t\tconst textures = extractFromCache( meta.textures );\n\t\t\tconst images = extractFromCache( meta.images );\n\t\t\tconst 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\tconst values = [];\n\t\t\tfor ( const key in cache ) {\n\n\t\t\t\tconst 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},\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.rotation.order = source.rotation.order;\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 ( let i = 0; i < source.children.length; i ++ ) {\n\n\t\t\t\tconst 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\nfunction Scene() {\n\n\tObject3D.call( this );\n\n\tthis.type = 'Scene';\n\n\tthis.background = null;\n\tthis.environment = null;\n\tthis.fog = null;\n\n\tthis.overrideMaterial = null;\n\n\tthis.autoUpdate = true; // checked by the renderer\n\n\tif ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) {\n\n\t\t__THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'observe', { detail: this } ) ); // eslint-disable-line no-undef\n\n\t}\n\n}\n\nScene.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Scene,\n\n\tisScene: true,\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.environment !== null ) this.environment = source.environment.clone();\n\t\tif ( source.fog !== null ) this.fog = source.fog.clone();\n\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\tconst 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.environment !== null ) data.object.environment = this.environment.toJSON( meta );\n\t\tif ( this.fog !== null ) data.object.fog = this.fog.toJSON();\n\n\t\treturn data;\n\n\t},\n\n\tdispose: function () {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n} );\n\nconst _points = [\n\tnew Vector3(),\n\tnew Vector3(),\n\tnew Vector3(),\n\tnew Vector3(),\n\tnew Vector3(),\n\tnew Vector3(),\n\tnew Vector3(),\n\tnew Vector3()\n];\n\nconst _vector$1 = new Vector3();\n\nconst _box = new Box3();\n\n// triangle centered vertices\n\nconst _v0 = new Vector3();\nconst _v1$2 = new Vector3();\nconst _v2 = new Vector3();\n\n// triangle edge vectors\n\nconst _f0 = new Vector3();\nconst _f1 = new Vector3();\nconst _f2 = new Vector3();\n\nconst _center = new Vector3();\nconst _extents = new Vector3();\nconst _triangleNormal = new Vector3();\nconst _testAxis = new Vector3();\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\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\tlet minX = + Infinity;\n\t\tlet minY = + Infinity;\n\t\tlet minZ = + Infinity;\n\n\t\tlet maxX = - Infinity;\n\t\tlet maxY = - Infinity;\n\t\tlet maxZ = - Infinity;\n\n\t\tfor ( let i = 0, l = array.length; i < l; i += 3 ) {\n\n\t\t\tconst x = array[ i ];\n\t\t\tconst y = array[ i + 1 ];\n\t\t\tconst 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\tlet minX = + Infinity;\n\t\tlet minY = + Infinity;\n\t\tlet minZ = + Infinity;\n\n\t\tlet maxX = - Infinity;\n\t\tlet maxY = - Infinity;\n\t\tlet maxZ = - Infinity;\n\n\t\tfor ( let i = 0, l = attribute.count; i < l; i ++ ) {\n\n\t\t\tconst x = attribute.getX( i );\n\t\t\tconst y = attribute.getY( i );\n\t\t\tconst 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 ( let 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 ( center, size ) {\n\n\t\tconst halfSize = _vector$1.copy( size ).multiplyScalar( 0.5 );\n\n\t\tthis.min.copy( center ).sub( halfSize );\n\t\tthis.max.copy( center ).add( halfSize );\n\n\t\treturn this;\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 ( object ) {\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\tobject.updateWorldMatrix( false, false );\n\n\t\tconst geometry = object.geometry;\n\n\t\tif ( geometry !== undefined ) {\n\n\t\t\tif ( geometry.boundingBox === null ) {\n\n\t\t\t\tgeometry.computeBoundingBox();\n\n\t\t\t}\n\n\t\t\t_box.copy( geometry.boundingBox );\n\t\t\t_box.applyMatrix4( object.matrixWorld );\n\n\t\t\tthis.union( _box );\n\n\t\t}\n\n\t\tconst children = object.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tthis.expandByObject( children[ i ] );\n\n\t\t}\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 ||\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 ( sphere ) {\n\n\t\t// Find the point on the AABB closest to the sphere center.\n\t\tthis.clampPoint( sphere.center, _vector$1 );\n\n\t\t// If that point is inside the sphere, the AABB and sphere intersect.\n\t\treturn _vector$1.distanceToSquared( sphere.center ) <= ( sphere.radius * sphere.radius );\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\tlet 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 ( triangle ) {\n\n\t\tif ( this.isEmpty() ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\t// compute box center and extents\n\t\tthis.getCenter( _center );\n\t\t_extents.subVectors( this.max, _center );\n\n\t\t// translate triangle to aabb origin\n\t\t_v0.subVectors( triangle.a, _center );\n\t\t_v1$2.subVectors( triangle.b, _center );\n\t\t_v2.subVectors( triangle.c, _center );\n\n\t\t// compute edge vectors for triangle\n\t\t_f0.subVectors( _v1$2, _v0 );\n\t\t_f1.subVectors( _v2, _v1$2 );\n\t\t_f2.subVectors( _v0, _v2 );\n\n\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// 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// 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\tlet axes = [\n\t\t\t0, - _f0.z, _f0.y, 0, - _f1.z, _f1.y, 0, - _f2.z, _f2.y,\n\t\t\t_f0.z, 0, - _f0.x, _f1.z, 0, - _f1.x, _f2.z, 0, - _f2.x,\n\t\t\t- _f0.y, _f0.x, 0, - _f1.y, _f1.x, 0, - _f2.y, _f2.x, 0\n\t\t];\n\t\tif ( ! satForAxes( axes, _v0, _v1$2, _v2, _extents ) ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\t// test 3 face normals from the aabb\n\t\taxes = [ 1, 0, 0, 0, 1, 0, 0, 0, 1 ];\n\t\tif ( ! satForAxes( axes, _v0, _v1$2, _v2, _extents ) ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\t// finally testing the face normal of the triangle\n\t\t// use already existing triangle edge vectors here\n\t\t_triangleNormal.crossVectors( _f0, _f1 );\n\t\taxes = [ _triangleNormal.x, _triangleNormal.y, _triangleNormal.z ];\n\n\t\treturn satForAxes( axes, _v0, _v1$2, _v2, _extents );\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 ( point ) {\n\n\t\tconst clampedPoint = _vector$1.copy( point ).clamp( this.min, this.max );\n\n\t\treturn clampedPoint.sub( point ).length();\n\n\t},\n\n\tgetBoundingSphere: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.error( 'THREE.Box3: .getBoundingSphere() target is now required' );\n\t\t\t//target = new Sphere(); // removed to avoid cyclic dependency\n\n\t\t}\n\n\t\tthis.getCenter( target.center );\n\n\t\ttarget.radius = this.getSize( _vector$1 ).length() * 0.5;\n\n\t\treturn target;\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 ( matrix ) {\n\n\t\t// transform of empty box is an empty box.\n\t\tif ( this.isEmpty() ) return this;\n\n\t\t// NOTE: I am using a binary pattern to specify all 2^3 combinations below\n\t\t_points[ 0 ].set( this.min.x, this.min.y, this.min.z ).applyMatrix4( matrix ); // 000\n\t\t_points[ 1 ].set( this.min.x, this.min.y, this.max.z ).applyMatrix4( matrix ); // 001\n\t\t_points[ 2 ].set( this.min.x, this.max.y, this.min.z ).applyMatrix4( matrix ); // 010\n\t\t_points[ 3 ].set( this.min.x, this.max.y, this.max.z ).applyMatrix4( matrix ); // 011\n\t\t_points[ 4 ].set( this.max.x, this.min.y, this.min.z ).applyMatrix4( matrix ); // 100\n\t\t_points[ 5 ].set( this.max.x, this.min.y, this.max.z ).applyMatrix4( matrix ); // 101\n\t\t_points[ 6 ].set( this.max.x, this.max.y, this.min.z ).applyMatrix4( matrix ); // 110\n\t\t_points[ 7 ].set( this.max.x, this.max.y, this.max.z ).applyMatrix4( matrix ); // 111\n\n\t\tthis.setFromPoints( _points );\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\nfunction satForAxes( axes, v0, v1, v2, extents ) {\n\n\tfor ( let i = 0, j = axes.length - 3; i <= j; i += 3 ) {\n\n\t\t_testAxis.fromArray( axes, i );\n\t\t// project the aabb onto the seperating axis\n\t\tconst r = extents.x * Math.abs( _testAxis.x ) + extents.y * Math.abs( _testAxis.y ) + extents.z * Math.abs( _testAxis.z );\n\t\t// project all 3 vertices of the triangle onto the seperating axis\n\t\tconst p0 = v0.dot( _testAxis );\n\t\tconst p1 = v1.dot( _testAxis );\n\t\tconst p2 = v2.dot( _testAxis );\n\t\t// actual test, basically see if either of the most extreme of the triangle points intersects r\n\t\tif ( Math.max( - Math.max( p0, p1, p2 ), Math.min( p0, p1, p2 ) ) > r ) {\n\n\t\t\t// points of the projected triangle are outside the projected half-length of the aabb\n\t\t\t// the axis is seperating and we can exit\n\t\t\treturn false;\n\n\t\t}\n\n\t}\n\n\treturn true;\n\n}\n\nconst _box$1 = new Box3();\n\nfunction Sphere( center, radius ) {\n\n\tthis.center = ( center !== undefined ) ? center : new Vector3();\n\tthis.radius = ( radius !== undefined ) ? radius : - 1;\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 ( points, optionalCenter ) {\n\n\t\tconst center = this.center;\n\n\t\tif ( optionalCenter !== undefined ) {\n\n\t\t\tcenter.copy( optionalCenter );\n\n\t\t} else {\n\n\t\t\t_box$1.setFromPoints( points ).getCenter( center );\n\n\t\t}\n\n\t\tlet maxRadiusSq = 0;\n\n\t\tfor ( let i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( points[ i ] ) );\n\n\t\t}\n\n\t\tthis.radius = Math.sqrt( maxRadiusSq );\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 ( 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\tisEmpty: function () {\n\n\t\treturn ( this.radius < 0 );\n\n\t},\n\n\tmakeEmpty: function () {\n\n\t\tthis.center.set( 0, 0, 0 );\n\t\tthis.radius = - 1;\n\n\t\treturn this;\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\tconst 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\tconst 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\tif ( this.isEmpty() ) {\n\n\t\t\t// Empty sphere produces empty bounding box\n\t\t\ttarget.makeEmpty();\n\t\t\treturn target;\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\nconst _vector$2 = new Vector3();\nconst _segCenter = new Vector3();\nconst _segDir = new Vector3();\nconst _diff = new Vector3();\n\nconst _edge1 = new Vector3();\nconst _edge2 = new Vector3();\nconst _normal = new Vector3();\n\nfunction Ray( origin, direction ) {\n\n\tthis.origin = ( origin !== undefined ) ? origin : new Vector3();\n\tthis.direction = ( direction !== undefined ) ? direction : new Vector3( 0, 0, - 1 );\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 ( t ) {\n\n\t\tthis.origin.copy( this.at( t, _vector$2 ) );\n\n\t\treturn this;\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\tconst 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 ( point ) {\n\n\t\tconst directionDistance = _vector$2.subVectors( point, this.origin ).dot( this.direction );\n\n\t\t// point behind the ray\n\n\t\tif ( directionDistance < 0 ) {\n\n\t\t\treturn this.origin.distanceToSquared( point );\n\n\t\t}\n\n\t\t_vector$2.copy( this.direction ).multiplyScalar( directionDistance ).add( this.origin );\n\n\t\treturn _vector$2.distanceToSquared( point );\n\n\t},\n\n\tdistanceSqToSegment: function ( v0, v1, optionalPointOnRay, optionalPointOnSegment ) {\n\n\t\t// from http://www.geometrictools.com/GTEngine/Include/Mathematics/GteDistRaySegment.h\n\t\t// It returns the min distance between the ray and the segment\n\t\t// defined by v0 and v1\n\t\t// It can also set two optional targets :\n\t\t// - The closest point on the ray\n\t\t// - The closest point on the segment\n\n\t\t_segCenter.copy( v0 ).add( v1 ).multiplyScalar( 0.5 );\n\t\t_segDir.copy( v1 ).sub( v0 ).normalize();\n\t\t_diff.copy( this.origin ).sub( _segCenter );\n\n\t\tconst segExtent = v0.distanceTo( v1 ) * 0.5;\n\t\tconst a01 = - this.direction.dot( _segDir );\n\t\tconst b0 = _diff.dot( this.direction );\n\t\tconst b1 = - _diff.dot( _segDir );\n\t\tconst c = _diff.lengthSq();\n\t\tconst det = Math.abs( 1 - a01 * a01 );\n\t\tlet s0, s1, sqrDist, extDet;\n\n\t\tif ( det > 0 ) {\n\n\t\t\t// The ray and segment are not parallel.\n\n\t\t\ts0 = a01 * b1 - b0;\n\t\t\ts1 = a01 * b0 - b1;\n\t\t\textDet = segExtent * det;\n\n\t\t\tif ( s0 >= 0 ) {\n\n\t\t\t\tif ( s1 >= - extDet ) {\n\n\t\t\t\t\tif ( s1 <= extDet ) {\n\n\t\t\t\t\t\t// region 0\n\t\t\t\t\t\t// Minimum at interior points of ray and segment.\n\n\t\t\t\t\t\tconst invDet = 1 / det;\n\t\t\t\t\t\ts0 *= invDet;\n\t\t\t\t\t\ts1 *= invDet;\n\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} else {\n\n\t\t\t\t\t\t// region 1\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\t// region 5\n\n\t\t\t\t\ts1 = - segExtent;\n\t\t\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( s1 <= - extDet ) {\n\n\t\t\t\t\t// region 4\n\n\t\t\t\t\ts0 = Math.max( 0, - ( - a01 * segExtent + b0 ) );\n\t\t\t\t\ts1 = ( s0 > 0 ) ? - segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t} else if ( s1 <= extDet ) {\n\n\t\t\t\t\t// region 3\n\n\t\t\t\t\ts0 = 0;\n\t\t\t\t\ts1 = Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\tsqrDist = s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// region 2\n\n\t\t\t\t\ts0 = Math.max( 0, - ( a01 * segExtent + b0 ) );\n\t\t\t\t\ts1 = ( s0 > 0 ) ? segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// Ray and segment are parallel.\n\n\t\t\ts1 = ( a01 > 0 ) ? - segExtent : segExtent;\n\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t}\n\n\t\tif ( optionalPointOnRay ) {\n\n\t\t\toptionalPointOnRay.copy( this.direction ).multiplyScalar( s0 ).add( this.origin );\n\n\t\t}\n\n\t\tif ( optionalPointOnSegment ) {\n\n\t\t\toptionalPointOnSegment.copy( _segDir ).multiplyScalar( s1 ).add( _segCenter );\n\n\t\t}\n\n\t\treturn sqrDist;\n\n\t},\n\n\tintersectSphere: function ( sphere, target ) {\n\n\t\t_vector$2.subVectors( sphere.center, this.origin );\n\t\tconst tca = _vector$2.dot( this.direction );\n\t\tconst d2 = _vector$2.dot( _vector$2 ) - tca * tca;\n\t\tconst radius2 = sphere.radius * sphere.radius;\n\n\t\tif ( d2 > radius2 ) return null;\n\n\t\tconst thc = Math.sqrt( radius2 - d2 );\n\n\t\t// t0 = first intersect point - entrance on front of sphere\n\t\tconst t0 = tca - thc;\n\n\t\t// t1 = second intersect point - exit point on back of sphere\n\t\tconst t1 = tca + thc;\n\n\t\t// test to see if both t0 and t1 are behind the ray - if so, return null\n\t\tif ( t0 < 0 && t1 < 0 ) return null;\n\n\t\t// test to see if t0 is behind the ray:\n\t\t// if it is, the ray is inside the sphere, so return the second exit point scaled by t1,\n\t\t// in order to always return an intersect point that is in front of the ray.\n\t\tif ( t0 < 0 ) return this.at( t1, target );\n\n\t\t// else t0 is in front of the ray, so return the first collision point scaled by t0\n\t\treturn this.at( t0, target );\n\n\t},\n\n\tintersectsSphere: function ( sphere ) {\n\n\t\treturn this.distanceSqToPoint( sphere.center ) <= ( sphere.radius * sphere.radius );\n\n\t},\n\n\tdistanceToPlane: function ( plane ) {\n\n\t\tconst 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\tconst 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\tconst 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\tconst distToPoint = plane.distanceToPoint( this.origin );\n\n\t\tif ( distToPoint === 0 ) {\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\tconst 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\tlet tmin, tmax, tymin, tymax, tzmin, tzmax;\n\n\t\tconst invdirx = 1 / this.direction.x,\n\t\t\tinvdiry = 1 / this.direction.y,\n\t\t\tinvdirz = 1 / this.direction.z;\n\n\t\tconst 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 ( box ) {\n\n\t\treturn this.intersectBox( box, _vector$2 ) !== null;\n\n\t},\n\n\tintersectTriangle: function ( a, b, c, backfaceCulling, target ) {\n\n\t\t// Compute the offset origin, edges, and normal.\n\n\t\t// from http://www.geometrictools.com/GTEngine/Include/Mathematics/GteIntrRay3Triangle3.h\n\n\t\t_edge1.subVectors( b, a );\n\t\t_edge2.subVectors( c, a );\n\t\t_normal.crossVectors( _edge1, _edge2 );\n\n\t\t// Solve Q + t*D = b1*E1 + b2*E2 (Q = kDiff, D = ray direction,\n\t\t// E1 = kEdge1, E2 = kEdge2, N = Cross(E1,E2)) by\n\t\t// |Dot(D,N)|*b1 = sign(Dot(D,N))*Dot(D,Cross(Q,E2))\n\t\t// |Dot(D,N)|*b2 = sign(Dot(D,N))*Dot(D,Cross(E1,Q))\n\t\t// |Dot(D,N)|*t = -sign(Dot(D,N))*Dot(Q,N)\n\t\tlet DdN = this.direction.dot( _normal );\n\t\tlet sign;\n\n\t\tif ( DdN > 0 ) {\n\n\t\t\tif ( backfaceCulling ) return null;\n\t\t\tsign = 1;\n\n\t\t} else if ( DdN < 0 ) {\n\n\t\t\tsign = - 1;\n\t\t\tDdN = - DdN;\n\n\t\t} else {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t_diff.subVectors( this.origin, a );\n\t\tconst DdQxE2 = sign * this.direction.dot( _edge2.crossVectors( _diff, _edge2 ) );\n\n\t\t// b1 < 0, no intersection\n\t\tif ( DdQxE2 < 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst DdE1xQ = sign * this.direction.dot( _edge1.cross( _diff ) );\n\n\t\t// b2 < 0, no intersection\n\t\tif ( DdE1xQ < 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// b1+b2 > 1, no intersection\n\t\tif ( DdQxE2 + DdE1xQ > DdN ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// Line intersects triangle, check if ray does.\n\t\tconst QdN = - sign * _diff.dot( _normal );\n\n\t\t// t < 0, no intersection\n\t\tif ( QdN < 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// Ray intersects triangle.\n\t\treturn this.at( QdN / DdN, target );\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\nconst _vector1 = new Vector3();\nconst _vector2 = new Vector3();\nconst _normalMatrix = new Matrix3();\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\tisPlane: true,\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 ( a, b, c ) {\n\n\t\tconst normal = _vector1.subVectors( c, b ).cross( _vector2.subVectors( a, b ) ).normalize();\n\n\t\t// Q: should an error be thrown if normal is zero (e.g. degenerate plane)?\n\n\t\tthis.setFromNormalAndCoplanarPoint( normal, a );\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 ( 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\tconst 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 ( line, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Plane: .intersectLine() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\tconst direction = line.delta( _vector1 );\n\n\t\tconst denominator = this.normal.dot( direction );\n\n\t\tif ( denominator === 0 ) {\n\n\t\t\t// line is coplanar, return origin\n\t\t\tif ( this.distanceToPoint( line.start ) === 0 ) {\n\n\t\t\t\treturn target.copy( line.start );\n\n\t\t\t}\n\n\t\t\t// Unsure if this is the correct method to handle this case.\n\t\t\treturn undefined;\n\n\t\t}\n\n\t\tconst t = - ( line.start.dot( this.normal ) + this.constant ) / denominator;\n\n\t\tif ( t < 0 || t > 1 ) {\n\n\t\t\treturn undefined;\n\n\t\t}\n\n\t\treturn target.copy( direction ).multiplyScalar( t ).add( line.start );\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\tconst startSign = this.distanceToPoint( line.start );\n\t\tconst 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 ( matrix, optionalNormalMatrix ) {\n\n\t\tconst normalMatrix = optionalNormalMatrix || _normalMatrix.getNormalMatrix( matrix );\n\n\t\tconst referencePoint = this.coplanarPoint( _vector1 ).applyMatrix4( matrix );\n\n\t\tconst normal = this.normal.applyMatrix3( normalMatrix ).normalize();\n\n\t\tthis.constant = - referencePoint.dot( normal );\n\n\t\treturn this;\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\nconst _v0$1 = new Vector3();\nconst _v1$3 = new Vector3();\nconst _v2$1 = new Vector3();\nconst _v3 = new Vector3();\n\nconst _vab = new Vector3();\nconst _vac = new Vector3();\nconst _vbc = new Vector3();\nconst _vap = new Vector3();\nconst _vbp = new Vector3();\nconst _vcp = new Vector3();\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 ( a, b, c, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Triangle: .getNormal() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\ttarget.subVectors( c, b );\n\t\t_v0$1.subVectors( a, b );\n\t\ttarget.cross( _v0$1 );\n\n\t\tconst targetLengthSq = target.lengthSq();\n\t\tif ( targetLengthSq > 0 ) {\n\n\t\t\treturn target.multiplyScalar( 1 / Math.sqrt( targetLengthSq ) );\n\n\t\t}\n\n\t\treturn target.set( 0, 0, 0 );\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 ( point, a, b, c, target ) {\n\n\t\t_v0$1.subVectors( c, a );\n\t\t_v1$3.subVectors( b, a );\n\t\t_v2$1.subVectors( point, a );\n\n\t\tconst dot00 = _v0$1.dot( _v0$1 );\n\t\tconst dot01 = _v0$1.dot( _v1$3 );\n\t\tconst dot02 = _v0$1.dot( _v2$1 );\n\t\tconst dot11 = _v1$3.dot( _v1$3 );\n\t\tconst dot12 = _v1$3.dot( _v2$1 );\n\n\t\tconst denom = ( dot00 * dot11 - dot01 * dot01 );\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Triangle: .getBarycoord() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\t// collinear or singular triangle\n\t\tif ( denom === 0 ) {\n\n\t\t\t// arbitrary location outside of triangle?\n\t\t\t// not sure if this is the best idea, maybe should be returning undefined\n\t\t\treturn target.set( - 2, - 1, - 1 );\n\n\t\t}\n\n\t\tconst invDenom = 1 / denom;\n\t\tconst u = ( dot11 * dot02 - dot01 * dot12 ) * invDenom;\n\t\tconst v = ( dot00 * dot12 - dot01 * dot02 ) * invDenom;\n\n\t\t// barycentric coordinates must always sum to 1\n\t\treturn target.set( 1 - u - v, v, u );\n\n\t},\n\n\tcontainsPoint: function ( point, a, b, c ) {\n\n\t\tTriangle.getBarycoord( point, a, b, c, _v3 );\n\n\t\treturn ( _v3.x >= 0 ) && ( _v3.y >= 0 ) && ( ( _v3.x + _v3.y ) <= 1 );\n\n\t},\n\n\tgetUV: function ( point, p1, p2, p3, uv1, uv2, uv3, target ) {\n\n\t\tthis.getBarycoord( point, p1, p2, p3, _v3 );\n\n\t\ttarget.set( 0, 0 );\n\t\ttarget.addScaledVector( uv1, _v3.x );\n\t\ttarget.addScaledVector( uv2, _v3.y );\n\t\ttarget.addScaledVector( uv3, _v3.z );\n\n\t\treturn target;\n\n\t},\n\n\tisFrontFacing: function ( a, b, c, direction ) {\n\n\t\t_v0$1.subVectors( c, b );\n\t\t_v1$3.subVectors( a, b );\n\n\t\t// strictly front facing\n\t\treturn ( _v0$1.cross( _v1$3 ).dot( direction ) < 0 ) ? true : false;\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\t_v0$1.subVectors( this.c, this.b );\n\t\t_v1$3.subVectors( this.a, this.b );\n\n\t\treturn _v0$1.cross( _v1$3 ).length() * 0.5;\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 Plane();\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\tgetUV: function ( point, uv1, uv2, uv3, target ) {\n\n\t\treturn Triangle.getUV( point, this.a, this.b, this.c, uv1, uv2, uv3, 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\tisFrontFacing: function ( direction ) {\n\n\t\treturn Triangle.isFrontFacing( this.a, this.b, this.c, direction );\n\n\t},\n\n\tintersectsBox: function ( box ) {\n\n\t\treturn box.intersectsTriangle( this );\n\n\t},\n\n\tclosestPointToPoint: function ( p, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Triangle: .closestPointToPoint() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\tconst a = this.a, b = this.b, c = this.c;\n\t\tlet v, w;\n\n\t\t// algorithm thanks to Real-Time Collision Detection by Christer Ericson,\n\t\t// published by Morgan Kaufmann Publishers, (c) 2005 Elsevier Inc.,\n\t\t// under the accompanying license; see chapter 5.1.5 for detailed explanation.\n\t\t// basically, we're distinguishing which of the voronoi regions of the triangle\n\t\t// the point lies in with the minimum amount of redundant computation.\n\n\t\t_vab.subVectors( b, a );\n\t\t_vac.subVectors( c, a );\n\t\t_vap.subVectors( p, a );\n\t\tconst d1 = _vab.dot( _vap );\n\t\tconst d2 = _vac.dot( _vap );\n\t\tif ( d1 <= 0 && d2 <= 0 ) {\n\n\t\t\t// vertex region of A; barycentric coords (1, 0, 0)\n\t\t\treturn target.copy( a );\n\n\t\t}\n\n\t\t_vbp.subVectors( p, b );\n\t\tconst d3 = _vab.dot( _vbp );\n\t\tconst d4 = _vac.dot( _vbp );\n\t\tif ( d3 >= 0 && d4 <= d3 ) {\n\n\t\t\t// vertex region of B; barycentric coords (0, 1, 0)\n\t\t\treturn target.copy( b );\n\n\t\t}\n\n\t\tconst vc = d1 * d4 - d3 * d2;\n\t\tif ( vc <= 0 && d1 >= 0 && d3 <= 0 ) {\n\n\t\t\tv = d1 / ( d1 - d3 );\n\t\t\t// edge region of AB; barycentric coords (1-v, v, 0)\n\t\t\treturn target.copy( a ).addScaledVector( _vab, v );\n\n\t\t}\n\n\t\t_vcp.subVectors( p, c );\n\t\tconst d5 = _vab.dot( _vcp );\n\t\tconst d6 = _vac.dot( _vcp );\n\t\tif ( d6 >= 0 && d5 <= d6 ) {\n\n\t\t\t// vertex region of C; barycentric coords (0, 0, 1)\n\t\t\treturn target.copy( c );\n\n\t\t}\n\n\t\tconst vb = d5 * d2 - d1 * d6;\n\t\tif ( vb <= 0 && d2 >= 0 && d6 <= 0 ) {\n\n\t\t\tw = d2 / ( d2 - d6 );\n\t\t\t// edge region of AC; barycentric coords (1-w, 0, w)\n\t\t\treturn target.copy( a ).addScaledVector( _vac, w );\n\n\t\t}\n\n\t\tconst va = d3 * d6 - d5 * d4;\n\t\tif ( va <= 0 && ( d4 - d3 ) >= 0 && ( d5 - d6 ) >= 0 ) {\n\n\t\t\t_vbc.subVectors( c, b );\n\t\t\tw = ( d4 - d3 ) / ( ( d4 - d3 ) + ( d5 - d6 ) );\n\t\t\t// edge region of BC; barycentric coords (0, 1-w, w)\n\t\t\treturn target.copy( b ).addScaledVector( _vbc, w ); // edge region of BC\n\n\t\t}\n\n\t\t// face region\n\t\tconst denom = 1 / ( va + vb + vc );\n\t\t// u = va * denom\n\t\tv = vb * denom;\n\t\tw = vc * denom;\n\n\t\treturn target.copy( a ).addScaledVector( _vab, v ).addScaledVector( _vac, w );\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\nconst _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\nconst _hslA = { h: 0, s: 0, l: 0 };\nconst _hslB = { h: 0, s: 0, l: 0 };\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\nfunction hue2rgb( p, q, t ) {\n\n\tif ( t < 0 ) t += 1;\n\tif ( t > 1 ) t -= 1;\n\tif ( t < 1 / 6 ) return p + ( q - p ) * 6 * t;\n\tif ( t < 1 / 2 ) return q;\n\tif ( t < 2 / 3 ) return p + ( q - p ) * 6 * ( 2 / 3 - t );\n\treturn p;\n\n}\n\nfunction SRGBToLinear( c ) {\n\n\treturn ( c < 0.04045 ) ? c * 0.0773993808 : Math.pow( c * 0.9478672986 + 0.0521327014, 2.4 );\n\n}\n\nfunction LinearToSRGB( c ) {\n\n\treturn ( c < 0.0031308 ) ? c * 12.92 : 1.055 * ( Math.pow( c, 0.41666 ) ) - 0.055;\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 ( h, s, l ) {\n\n\t\t// h,s,l ranges are in 0.0 - 1.0\n\t\th = MathUtils.euclideanModulo( h, 1 );\n\t\ts = MathUtils.clamp( s, 0, 1 );\n\t\tl = MathUtils.clamp( l, 0, 1 );\n\n\t\tif ( s === 0 ) {\n\n\t\t\tthis.r = this.g = this.b = l;\n\n\t\t} else {\n\n\t\t\tconst p = l <= 0.5 ? l * ( 1 + s ) : l + s - ( l * s );\n\t\t\tconst q = ( 2 * l ) - p;\n\n\t\t\tthis.r = hue2rgb( q, p, h + 1 / 3 );\n\t\t\tthis.g = hue2rgb( q, p, h );\n\t\t\tthis.b = hue2rgb( q, p, h - 1 / 3 );\n\n\t\t}\n\n\t\treturn this;\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\tlet m;\n\n\t\tif ( m = /^((?:rgb|hsl)a?)\\(\\s*([^\\)]*)\\)/.exec( style ) ) {\n\n\t\t\t// rgb / hsl\n\n\t\t\tlet color;\n\t\t\tconst name = m[ 1 ];\n\t\t\tconst 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\tconst h = parseFloat( color[ 1 ] ) / 360;\n\t\t\t\t\t\tconst s = parseInt( color[ 2 ], 10 ) / 100;\n\t\t\t\t\t\tconst 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\tconst hex = m[ 1 ];\n\t\t\tconst 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\treturn this.setColorName( style );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tsetColorName: function ( style ) {\n\n\t\t// color keywords\n\t\tconst hex = _colorKeywords[ style ];\n\n\t\tif ( hex !== undefined ) {\n\n\t\t\t// red\n\t\t\tthis.setHex( hex );\n\n\t\t} else {\n\n\t\t\t// unknown color\n\t\t\tconsole.warn( 'THREE.Color: Unknown color ' + style );\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\tconst 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 ( gammaFactor ) {\n\n\t\tthis.copyGammaToLinear( this, gammaFactor );\n\n\t\treturn this;\n\n\t},\n\n\tconvertLinearToGamma: function ( gammaFactor ) {\n\n\t\tthis.copyLinearToGamma( this, gammaFactor );\n\n\t\treturn this;\n\n\t},\n\n\tcopySRGBToLinear: function ( color ) {\n\n\t\tthis.r = SRGBToLinear( color.r );\n\t\tthis.g = SRGBToLinear( color.g );\n\t\tthis.b = SRGBToLinear( color.b );\n\n\t\treturn this;\n\n\t},\n\n\tcopyLinearToSRGB: function ( color ) {\n\n\t\tthis.r = LinearToSRGB( color.r );\n\t\tthis.g = LinearToSRGB( color.g );\n\t\tthis.b = LinearToSRGB( color.b );\n\n\t\treturn this;\n\n\t},\n\n\tconvertSRGBToLinear: function () {\n\n\t\tthis.copySRGBToLinear( this );\n\n\t\treturn this;\n\n\t},\n\n\tconvertLinearToSRGB: function () {\n\n\t\tthis.copyLinearToSRGB( this );\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\tconst r = this.r, g = this.g, b = this.b;\n\n\t\tconst max = Math.max( r, g, b );\n\t\tconst min = Math.min( r, g, b );\n\n\t\tlet hue, saturation;\n\t\tconst 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\tconst 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 ( h, s, l ) {\n\n\t\tthis.getHSL( _hslA );\n\n\t\t_hslA.h += h; _hslA.s += s; _hslA.l += l;\n\n\t\tthis.setHSL( _hslA.h, _hslA.s, _hslA.l );\n\n\t\treturn this;\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\tlerpHSL: function ( color, alpha ) {\n\n\t\tthis.getHSL( _hslA );\n\t\tcolor.getHSL( _hslB );\n\n\t\tconst h = MathUtils.lerp( _hslA.h, _hslB.h, alpha );\n\t\tconst s = MathUtils.lerp( _hslA.s, _hslB.s, alpha );\n\t\tconst l = MathUtils.lerp( _hslA.l, _hslB.l, alpha );\n\n\t\tthis.setHSL( h, s, l );\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\tfromBufferAttribute: function ( attribute, index ) {\n\n\t\tthis.r = attribute.getX( index );\n\t\tthis.g = attribute.getY( index );\n\t\tthis.b = attribute.getZ( index );\n\n\t\tif ( attribute.normalized === true ) {\n\n\t\t\t// assuming Uint8Array\n\n\t\t\tthis.r /= 255;\n\t\t\tthis.g /= 255;\n\t\t\tthis.b /= 255;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function () {\n\n\t\treturn this.getHex();\n\n\t}\n\n} );\n\nColor.NAMES = _colorKeywords;\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 ( let 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 ( let 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\nlet materialId = 0;\n\nfunction Material() {\n\n\tObject.defineProperty( this, 'id', { value: materialId ++ } );\n\n\tthis.uuid = MathUtils.generateUUID();\n\n\tthis.name = '';\n\tthis.type = 'Material';\n\n\tthis.fog = true;\n\n\tthis.blending = NormalBlending;\n\tthis.side = FrontSide;\n\tthis.flatShading = false;\n\tthis.vertexColors = false;\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.stencilWriteMask = 0xff;\n\tthis.stencilFunc = AlwaysStencilFunc;\n\tthis.stencilRef = 0;\n\tthis.stencilFuncMask = 0xff;\n\tthis.stencilFail = KeepStencilOp;\n\tthis.stencilZFail = KeepStencilOp;\n\tthis.stencilZPass = KeepStencilOp;\n\tthis.stencilWrite = false;\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.visible = true;\n\n\tthis.toneMapped = true;\n\n\tthis.userData = {};\n\n\tthis.version = 0;\n\n}\n\nMaterial.prototype = Object.assign( Object.create( EventDispatcher.prototype ), {\n\n\tconstructor: Material,\n\n\tisMaterial: true,\n\n\tonBeforeCompile: function ( /* shaderobject, renderer */ ) {},\n\n\tcustomProgramCacheKey: function () {\n\n\t\treturn this.onBeforeCompile.toString();\n\n\t},\n\n\tsetValues: function ( values ) {\n\n\t\tif ( values === undefined ) return;\n\n\t\tfor ( const key in values ) {\n\n\t\t\tconst 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\tconst 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 {\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\tconst 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\tconst 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.sheen && this.sheen.isColor ) data.sheen = this.sheen.getHex();\n\t\tif ( this.emissive && this.emissive.isColor ) data.emissive = this.emissive.getHex();\n\t\tif ( this.emissiveIntensity && 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.clearcoatMap && this.clearcoatMap.isTexture ) {\n\n\t\t\tdata.clearcoatMap = this.clearcoatMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.clearcoatRoughnessMap && this.clearcoatRoughnessMap.isTexture ) {\n\n\t\t\tdata.clearcoatRoughnessMap = this.clearcoatRoughnessMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.clearcoatNormalMap && this.clearcoatNormalMap.isTexture ) {\n\n\t\t\tdata.clearcoatNormalMap = this.clearcoatNormalMap.toJSON( meta ).uuid;\n\t\t\tdata.clearcoatNormalScale = this.clearcoatNormalScale.toArray();\n\n\t\t}\n\n\t\tif ( this.map && this.map.isTexture ) data.map = this.map.toJSON( meta ).uuid;\n\t\tif ( this.matcap && this.matcap.isTexture ) data.matcap = this.matcap.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\n\t\tif ( this.aoMap && this.aoMap.isTexture ) {\n\n\t\t\tdata.aoMap = this.aoMap.toJSON( meta ).uuid;\n\t\t\tdata.aoMapIntensity = this.aoMapIntensity;\n\n\t\t}\n\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\n\t\tif ( this.normalMap && this.normalMap.isTexture ) {\n\n\t\t\tdata.normalMap = this.normalMap.toJSON( meta ).uuid;\n\t\t\tdata.normalMapType = this.normalMapType;\n\t\t\tdata.normalScale = this.normalScale.toArray();\n\n\t\t}\n\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\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\t\t\tdata.refractionRatio = this.refractionRatio;\n\n\t\t\tif ( this.combine !== undefined ) data.combine = this.combine;\n\t\t\tif ( this.envMapIntensity !== undefined ) data.envMapIntensity = this.envMapIntensity;\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 ) data.vertexColors = true;\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\tdata.stencilWrite = this.stencilWrite;\n\t\tdata.stencilWriteMask = this.stencilWriteMask;\n\t\tdata.stencilFunc = this.stencilFunc;\n\t\tdata.stencilRef = this.stencilRef;\n\t\tdata.stencilFuncMask = this.stencilFuncMask;\n\t\tdata.stencilFail = this.stencilFail;\n\t\tdata.stencilZFail = this.stencilZFail;\n\t\tdata.stencilZPass = this.stencilZPass;\n\n\t\t// rotation (SpriteMaterial)\n\t\tif ( this.rotation && this.rotation !== 0 ) data.rotation = this.rotation;\n\n\t\tif ( this.polygonOffset === true ) data.polygonOffset = true;\n\t\tif ( this.polygonOffsetFactor !== 0 ) data.polygonOffsetFactor = this.polygonOffsetFactor;\n\t\tif ( this.polygonOffsetUnits !== 0 ) data.polygonOffsetUnits = this.polygonOffsetUnits;\n\n\t\tif ( this.linewidth && 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.morphNormals === true ) data.morphNormals = true;\n\t\tif ( this.skinning === true ) data.skinning = true;\n\n\t\tif ( this.visible === false ) data.visible = false;\n\n\t\tif ( this.toneMapped === false ) data.toneMapped = false;\n\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\tconst values = [];\n\n\t\t\tfor ( const key in cache ) {\n\n\t\t\t\tconst 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\tconst textures = extractFromCache( meta.textures );\n\t\t\tconst 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\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.stencilWriteMask = source.stencilWriteMask;\n\t\tthis.stencilFunc = source.stencilFunc;\n\t\tthis.stencilRef = source.stencilRef;\n\t\tthis.stencilFuncMask = source.stencilFuncMask;\n\t\tthis.stencilFail = source.stencilFail;\n\t\tthis.stencilZFail = source.stencilZFail;\n\t\tthis.stencilZPass = source.stencilZPass;\n\t\tthis.stencilWrite = source.stencilWrite;\n\n\t\tconst srcPlanes = source.clippingPlanes;\n\t\tlet dstPlanes = null;\n\n\t\tif ( srcPlanes !== null ) {\n\n\t\t\tconst n = srcPlanes.length;\n\t\t\tdstPlanes = new Array( n );\n\n\t\t\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\t\t\tdstPlanes[ i ] = srcPlanes[ i ].clone();\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.clippingPlanes = dstPlanes;\n\t\tthis.clipIntersection = source.clipIntersection;\n\t\tthis.clipShadows = source.clipShadows;\n\n\t\tthis.shadowSide = source.shadowSide;\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.visible = source.visible;\n\n\t\tthis.toneMapped = source.toneMapped;\n\n\t\tthis.userData = JSON.parse( JSON.stringify( source.userData ) );\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\nObject.defineProperty( Material.prototype, 'needsUpdate', {\n\n\tset: function ( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n} );\n\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.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\nconst _vector$3 = new Vector3();\nconst _vector2$1 = new Vector2();\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.usage = StaticDrawUsage;\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\tsetUsage: function ( value ) {\n\n\t\tthis.usage = 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.usage = source.usage;\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 ( let 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\tconst array = this.array;\n\t\tlet offset = 0;\n\n\t\tfor ( let i = 0, l = colors.length; i < l; i ++ ) {\n\n\t\t\tlet 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\tconst array = this.array;\n\t\tlet offset = 0;\n\n\t\tfor ( let i = 0, l = vectors.length; i < l; i ++ ) {\n\n\t\t\tlet 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\tconst array = this.array;\n\t\tlet offset = 0;\n\n\t\tfor ( let i = 0, l = vectors.length; i < l; i ++ ) {\n\n\t\t\tlet 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\tconst array = this.array;\n\t\tlet offset = 0;\n\n\t\tfor ( let i = 0, l = vectors.length; i < l; i ++ ) {\n\n\t\t\tlet 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\tapplyMatrix3: function ( m ) {\n\n\t\tif ( this.itemSize === 2 ) {\n\n\t\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t\t_vector2$1.fromBufferAttribute( this, i );\n\t\t\t\t_vector2$1.applyMatrix3( m );\n\n\t\t\t\tthis.setXY( i, _vector2$1.x, _vector2$1.y );\n\n\t\t\t}\n\n\t\t} else if ( this.itemSize === 3 ) {\n\n\t\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t\t_vector$3.fromBufferAttribute( this, i );\n\t\t\t\t_vector$3.applyMatrix3( m );\n\n\t\t\t\tthis.setXYZ( i, _vector$3.x, _vector$3.y, _vector$3.z );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tapplyMatrix4: function ( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$3.x = this.getX( i );\n\t\t\t_vector$3.y = this.getY( i );\n\t\t\t_vector$3.z = this.getZ( i );\n\n\t\t\t_vector$3.applyMatrix4( m );\n\n\t\t\tthis.setXYZ( i, _vector$3.x, _vector$3.y, _vector$3.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tapplyNormalMatrix: function ( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$3.x = this.getX( i );\n\t\t\t_vector$3.y = this.getY( i );\n\t\t\t_vector$3.z = this.getZ( i );\n\n\t\t\t_vector$3.applyNormalMatrix( m );\n\n\t\t\tthis.setXYZ( i, _vector$3.x, _vector$3.y, _vector$3.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\ttransformDirection: function ( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$3.x = this.getX( i );\n\t\t\t_vector$3.y = this.getY( i );\n\t\t\t_vector$3.z = this.getZ( i );\n\n\t\t\t_vector$3.transformDirection( m );\n\n\t\t\tthis.setXYZ( i, _vector$3.x, _vector$3.y, _vector$3.z );\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\ttoJSON: function () {\n\n\t\treturn {\n\t\t\titemSize: this.itemSize,\n\t\t\ttype: this.array.constructor.name,\n\t\t\tarray: Array.prototype.slice.call( this.array ),\n\t\t\tnormalized: this.normalized\n\t\t};\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\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\tconst groups = [];\n\n\t\tlet group, i;\n\t\tlet materialIndex = undefined;\n\n\t\tconst faces = geometry.faces;\n\n\t\tfor ( i = 0; i < faces.length; i ++ ) {\n\n\t\t\tconst 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\tconst faces = geometry.faces;\n\t\tconst vertices = geometry.vertices;\n\t\tconst faceVertexUvs = geometry.faceVertexUvs;\n\n\t\tconst hasFaceVertexUv = faceVertexUvs[ 0 ] && faceVertexUvs[ 0 ].length > 0;\n\t\tconst hasFaceVertexUv2 = faceVertexUvs[ 1 ] && faceVertexUvs[ 1 ].length > 0;\n\n\t\t// morphs\n\n\t\tconst morphTargets = geometry.morphTargets;\n\t\tconst morphTargetsLength = morphTargets.length;\n\n\t\tlet morphTargetsPosition;\n\n\t\tif ( morphTargetsLength > 0 ) {\n\n\t\t\tmorphTargetsPosition = [];\n\n\t\t\tfor ( let i = 0; i < morphTargetsLength; i ++ ) {\n\n\t\t\t\tmorphTargetsPosition[ i ] = {\n\t\t\t\t\tname: morphTargets[ i ].name,\n\t\t\t\t \tdata: []\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\tthis.morphTargets.position = morphTargetsPosition;\n\n\t\t}\n\n\t\tconst morphNormals = geometry.morphNormals;\n\t\tconst morphNormalsLength = morphNormals.length;\n\n\t\tlet morphTargetsNormal;\n\n\t\tif ( morphNormalsLength > 0 ) {\n\n\t\t\tmorphTargetsNormal = [];\n\n\t\t\tfor ( let i = 0; i < morphNormalsLength; i ++ ) {\n\n\t\t\t\tmorphTargetsNormal[ i ] = {\n\t\t\t\t\tname: morphNormals[ i ].name,\n\t\t\t\t \tdata: []\n\t\t\t\t};\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\tconst skinIndices = geometry.skinIndices;\n\t\tconst skinWeights = geometry.skinWeights;\n\n\t\tconst hasSkinIndices = skinIndices.length === vertices.length;\n\t\tconst hasSkinWeights = skinWeights.length === vertices.length;\n\n\t\t//\n\n\t\tif ( vertices.length > 0 && faces.length === 0 ) {\n\n\t\t\tconsole.error( 'THREE.DirectGeometry: Faceless geometries are not supported.' );\n\n\t\t}\n\n\t\tfor ( let i = 0; i < faces.length; i ++ ) {\n\n\t\t\tconst face = faces[ i ];\n\n\t\t\tthis.vertices.push( vertices[ face.a ], vertices[ face.b ], vertices[ face.c ] );\n\n\t\t\tconst 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\tconst normal = face.normal;\n\n\t\t\t\tthis.normals.push( normal, normal, normal );\n\n\t\t\t}\n\n\t\t\tconst 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\tconst 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\tconst 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\tconst 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 ( let j = 0; j < morphTargetsLength; j ++ ) {\n\n\t\t\t\tconst morphTarget = morphTargets[ j ].vertices;\n\n\t\t\t\tmorphTargetsPosition[ j ].data.push( morphTarget[ face.a ], morphTarget[ face.b ], morphTarget[ face.c ] );\n\n\t\t\t}\n\n\t\t\tfor ( let j = 0; j < morphNormalsLength; j ++ ) {\n\n\t\t\t\tconst morphNormal = morphNormals[ j ].vertexNormals[ i ];\n\n\t\t\t\tmorphTargetsNormal[ j ].data.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\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} );\n\nfunction arrayMax( array ) {\n\n\tif ( array.length === 0 ) return - Infinity;\n\n\tlet max = array[ 0 ];\n\n\tfor ( let 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\nlet _bufferGeometryId = 1; // BufferGeometry uses odd numbers as Id\n\nconst _m1$2 = new Matrix4();\nconst _obj = new Object3D();\nconst _offset = new Vector3();\nconst _box$2 = new Box3();\nconst _boxMorphTargets = new Box3();\nconst _vector$4 = new Vector3();\n\nfunction BufferGeometry() {\n\n\tObject.defineProperty( this, 'id', { value: _bufferGeometryId += 2 } );\n\n\tthis.uuid = MathUtils.generateUUID();\n\n\tthis.name = '';\n\tthis.type = 'BufferGeometry';\n\n\tthis.index = null;\n\tthis.attributes = {};\n\n\tthis.morphAttributes = {};\n\tthis.morphTargetsRelative = false;\n\n\tthis.groups = [];\n\n\tthis.boundingBox = null;\n\tthis.boundingSphere = null;\n\n\tthis.drawRange = { start: 0, count: Infinity };\n\n\tthis.userData = {};\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\tgetAttribute: function ( name ) {\n\n\t\treturn this.attributes[ name ];\n\n\t},\n\n\tsetAttribute: function ( name, attribute ) {\n\n\t\tthis.attributes[ name ] = attribute;\n\n\t\treturn this;\n\n\t},\n\n\tdeleteAttribute: 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\tapplyMatrix4: function ( matrix ) {\n\n\t\tconst position = this.attributes.position;\n\n\t\tif ( position !== undefined ) {\n\n\t\t\tposition.applyMatrix4( matrix );\n\n\t\t\tposition.needsUpdate = true;\n\n\t\t}\n\n\t\tconst normal = this.attributes.normal;\n\n\t\tif ( normal !== undefined ) {\n\n\t\t\tconst normalMatrix = new Matrix3().getNormalMatrix( matrix );\n\n\t\t\tnormal.applyNormalMatrix( normalMatrix );\n\n\t\t\tnormal.needsUpdate = true;\n\n\t\t}\n\n\t\tconst tangent = this.attributes.tangent;\n\n\t\tif ( tangent !== undefined ) {\n\n\t\t\ttangent.transformDirection( matrix );\n\n\t\t\ttangent.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 ( angle ) {\n\n\t\t// rotate geometry around world x-axis\n\n\t\t_m1$2.makeRotationX( angle );\n\n\t\tthis.applyMatrix4( _m1$2 );\n\n\t\treturn this;\n\n\t},\n\n\trotateY: function ( angle ) {\n\n\t\t// rotate geometry around world y-axis\n\n\t\t_m1$2.makeRotationY( angle );\n\n\t\tthis.applyMatrix4( _m1$2 );\n\n\t\treturn this;\n\n\t},\n\n\trotateZ: function ( angle ) {\n\n\t\t// rotate geometry around world z-axis\n\n\t\t_m1$2.makeRotationZ( angle );\n\n\t\tthis.applyMatrix4( _m1$2 );\n\n\t\treturn this;\n\n\t},\n\n\ttranslate: function ( x, y, z ) {\n\n\t\t// translate geometry\n\n\t\t_m1$2.makeTranslation( x, y, z );\n\n\t\tthis.applyMatrix4( _m1$2 );\n\n\t\treturn this;\n\n\t},\n\n\tscale: function ( x, y, z ) {\n\n\t\t// scale geometry\n\n\t\t_m1$2.makeScale( x, y, z );\n\n\t\tthis.applyMatrix4( _m1$2 );\n\n\t\treturn this;\n\n\t},\n\n\tlookAt: function ( vector ) {\n\n\t\t_obj.lookAt( vector );\n\n\t\t_obj.updateMatrix();\n\n\t\tthis.applyMatrix4( _obj.matrix );\n\n\t\treturn this;\n\n\t},\n\n\tcenter: function () {\n\n\t\tthis.computeBoundingBox();\n\n\t\tthis.boundingBox.getCenter( _offset ).negate();\n\n\t\tthis.translate( _offset.x, _offset.y, _offset.z );\n\n\t\treturn this;\n\n\t},\n\n\tsetFromObject: function ( object ) {\n\n\t\t// console.log( 'THREE.BufferGeometry.setFromObject(). Converting', object, this );\n\n\t\tconst geometry = object.geometry;\n\n\t\tif ( object.isPoints || object.isLine ) {\n\n\t\t\tconst positions = new Float32BufferAttribute( geometry.vertices.length * 3, 3 );\n\t\t\tconst colors = new Float32BufferAttribute( geometry.colors.length * 3, 3 );\n\n\t\t\tthis.setAttribute( 'position', positions.copyVector3sArray( geometry.vertices ) );\n\t\t\tthis.setAttribute( 'color', colors.copyColorsArray( geometry.colors ) );\n\n\t\t\tif ( geometry.lineDistances && geometry.lineDistances.length === geometry.vertices.length ) {\n\n\t\t\t\tconst lineDistances = new Float32BufferAttribute( geometry.lineDistances.length, 1 );\n\n\t\t\t\tthis.setAttribute( '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\tconst position = [];\n\n\t\tfor ( let i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\tconst point = points[ i ];\n\t\t\tposition.push( point.x, point.y, point.z || 0 );\n\n\t\t}\n\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( position, 3 ) );\n\n\t\treturn this;\n\n\t},\n\n\tupdateFromObject: function ( object ) {\n\n\t\tlet geometry = object.geometry;\n\n\t\tif ( object.isMesh ) {\n\n\t\t\tlet 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\tif ( geometry.verticesNeedUpdate === true ) {\n\n\t\t\tconst attribute = 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\tconst attribute = 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\tconst attribute = 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\tconst attribute = 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\tconst attribute = 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\tconst positions = new Float32Array( geometry.vertices.length * 3 );\n\t\tthis.setAttribute( 'position', new BufferAttribute( positions, 3 ).copyVector3sArray( geometry.vertices ) );\n\n\t\tif ( geometry.normals.length > 0 ) {\n\n\t\t\tconst normals = new Float32Array( geometry.normals.length * 3 );\n\t\t\tthis.setAttribute( 'normal', new BufferAttribute( normals, 3 ).copyVector3sArray( geometry.normals ) );\n\n\t\t}\n\n\t\tif ( geometry.colors.length > 0 ) {\n\n\t\t\tconst colors = new Float32Array( geometry.colors.length * 3 );\n\t\t\tthis.setAttribute( 'color', new BufferAttribute( colors, 3 ).copyColorsArray( geometry.colors ) );\n\n\t\t}\n\n\t\tif ( geometry.uvs.length > 0 ) {\n\n\t\t\tconst uvs = new Float32Array( geometry.uvs.length * 2 );\n\t\t\tthis.setAttribute( 'uv', new BufferAttribute( uvs, 2 ).copyVector2sArray( geometry.uvs ) );\n\n\t\t}\n\n\t\tif ( geometry.uvs2.length > 0 ) {\n\n\t\t\tconst uvs2 = new Float32Array( geometry.uvs2.length * 2 );\n\t\t\tthis.setAttribute( '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 ( const name in geometry.morphTargets ) {\n\n\t\t\tconst array = [];\n\t\t\tconst morphTargets = geometry.morphTargets[ name ];\n\n\t\t\tfor ( let i = 0, l = morphTargets.length; i < l; i ++ ) {\n\n\t\t\t\tconst morphTarget = morphTargets[ i ];\n\n\t\t\t\tconst attribute = new Float32BufferAttribute( morphTarget.data.length * 3, 3 );\n\t\t\t\tattribute.name = morphTarget.name;\n\n\t\t\t\tarray.push( attribute.copyVector3sArray( morphTarget.data ) );\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\tconst skinIndices = new Float32BufferAttribute( geometry.skinIndices.length * 4, 4 );\n\t\t\tthis.setAttribute( 'skinIndex', skinIndices.copyVector4sArray( geometry.skinIndices ) );\n\n\t\t}\n\n\t\tif ( geometry.skinWeights.length > 0 ) {\n\n\t\t\tconst skinWeights = new Float32BufferAttribute( geometry.skinWeights.length * 4, 4 );\n\t\t\tthis.setAttribute( '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\tconst position = this.attributes.position;\n\t\tconst morphAttributesPosition = this.morphAttributes.position;\n\n\t\tif ( position !== undefined ) {\n\n\t\t\tthis.boundingBox.setFromBufferAttribute( position );\n\n\t\t\t// process morph attributes if present\n\n\t\t\tif ( morphAttributesPosition ) {\n\n\t\t\t\tfor ( let i = 0, il = morphAttributesPosition.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst morphAttribute = morphAttributesPosition[ i ];\n\t\t\t\t\t_box$2.setFromBufferAttribute( morphAttribute );\n\n\t\t\t\t\tif ( this.morphTargetsRelative ) {\n\n\t\t\t\t\t\t_vector$4.addVectors( this.boundingBox.min, _box$2.min );\n\t\t\t\t\t\tthis.boundingBox.expandByPoint( _vector$4 );\n\n\t\t\t\t\t\t_vector$4.addVectors( this.boundingBox.max, _box$2.max );\n\t\t\t\t\t\tthis.boundingBox.expandByPoint( _vector$4 );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tthis.boundingBox.expandByPoint( _box$2.min );\n\t\t\t\t\t\tthis.boundingBox.expandByPoint( _box$2.max );\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\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\tif ( this.boundingSphere === null ) {\n\n\t\t\tthis.boundingSphere = new Sphere();\n\n\t\t}\n\n\t\tconst position = this.attributes.position;\n\t\tconst morphAttributesPosition = this.morphAttributes.position;\n\n\t\tif ( position ) {\n\n\t\t\t// first, find the center of the bounding sphere\n\n\t\t\tconst center = this.boundingSphere.center;\n\n\t\t\t_box$2.setFromBufferAttribute( position );\n\n\t\t\t// process morph attributes if present\n\n\t\t\tif ( morphAttributesPosition ) {\n\n\t\t\t\tfor ( let i = 0, il = morphAttributesPosition.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst morphAttribute = morphAttributesPosition[ i ];\n\t\t\t\t\t_boxMorphTargets.setFromBufferAttribute( morphAttribute );\n\n\t\t\t\t\tif ( this.morphTargetsRelative ) {\n\n\t\t\t\t\t\t_vector$4.addVectors( _box$2.min, _boxMorphTargets.min );\n\t\t\t\t\t\t_box$2.expandByPoint( _vector$4 );\n\n\t\t\t\t\t\t_vector$4.addVectors( _box$2.max, _boxMorphTargets.max );\n\t\t\t\t\t\t_box$2.expandByPoint( _vector$4 );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t_box$2.expandByPoint( _boxMorphTargets.min );\n\t\t\t\t\t\t_box$2.expandByPoint( _boxMorphTargets.max );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t_box$2.getCenter( center );\n\n\t\t\t// second, try to find a boundingSphere with a radius smaller than the\n\t\t\t// boundingSphere of the boundingBox: sqrt(3) smaller in the best case\n\n\t\t\tlet maxRadiusSq = 0;\n\n\t\t\tfor ( let i = 0, il = position.count; i < il; i ++ ) {\n\n\t\t\t\t_vector$4.fromBufferAttribute( position, i );\n\n\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( _vector$4 ) );\n\n\t\t\t}\n\n\t\t\t// process morph attributes if present\n\n\t\t\tif ( morphAttributesPosition ) {\n\n\t\t\t\tfor ( let i = 0, il = morphAttributesPosition.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst morphAttribute = morphAttributesPosition[ i ];\n\t\t\t\t\tconst morphTargetsRelative = this.morphTargetsRelative;\n\n\t\t\t\t\tfor ( let j = 0, jl = morphAttribute.count; j < jl; j ++ ) {\n\n\t\t\t\t\t\t_vector$4.fromBufferAttribute( morphAttribute, j );\n\n\t\t\t\t\t\tif ( morphTargetsRelative ) {\n\n\t\t\t\t\t\t\t_offset.fromBufferAttribute( position, j );\n\t\t\t\t\t\t\t_vector$4.add( _offset );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( _vector$4 ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.boundingSphere.radius = Math.sqrt( maxRadiusSq );\n\n\t\t\tif ( isNaN( this.boundingSphere.radius ) ) {\n\n\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}\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\tconst index = this.index;\n\t\tconst positionAttribute = this.getAttribute( 'position' );\n\n\t\tif ( positionAttribute !== undefined ) {\n\n\t\t\tlet normalAttribute = this.getAttribute( 'normal' );\n\n\t\t\tif ( normalAttribute === undefined ) {\n\n\t\t\t\tnormalAttribute = new BufferAttribute( new Float32Array( positionAttribute.count * 3 ), 3 );\n\t\t\t\tthis.setAttribute( 'normal', normalAttribute );\n\n\t\t\t} else {\n\n\t\t\t\t// reset existing normals to zero\n\n\t\t\t\tfor ( let i = 0, il = normalAttribute.count; i < il; i ++ ) {\n\n\t\t\t\t\tnormalAttribute.setXYZ( i, 0, 0, 0 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst pA = new Vector3(), pB = new Vector3(), pC = new Vector3();\n\t\t\tconst nA = new Vector3(), nB = new Vector3(), nC = new Vector3();\n\t\t\tconst cb = new Vector3(), ab = new Vector3();\n\n\t\t\t// indexed elements\n\n\t\t\tif ( index ) {\n\n\t\t\t\tfor ( let i = 0, il = index.count; i < il; i += 3 ) {\n\n\t\t\t\t\tconst vA = index.getX( i + 0 );\n\t\t\t\t\tconst vB = index.getX( i + 1 );\n\t\t\t\t\tconst vC = index.getX( i + 2 );\n\n\t\t\t\t\tpA.fromBufferAttribute( positionAttribute, vA );\n\t\t\t\t\tpB.fromBufferAttribute( positionAttribute, vB );\n\t\t\t\t\tpC.fromBufferAttribute( positionAttribute, vC );\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\tnA.fromBufferAttribute( normalAttribute, vA );\n\t\t\t\t\tnB.fromBufferAttribute( normalAttribute, vB );\n\t\t\t\t\tnC.fromBufferAttribute( normalAttribute, vC );\n\n\t\t\t\t\tnA.add( cb );\n\t\t\t\t\tnB.add( cb );\n\t\t\t\t\tnC.add( cb );\n\n\t\t\t\t\tnormalAttribute.setXYZ( vA, nA.x, nA.y, nA.z );\n\t\t\t\t\tnormalAttribute.setXYZ( vB, nB.x, nB.y, nB.z );\n\t\t\t\t\tnormalAttribute.setXYZ( vC, nC.x, nC.y, nC.z );\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 ( let i = 0, il = positionAttribute.count; i < il; i += 3 ) {\n\n\t\t\t\t\tpA.fromBufferAttribute( positionAttribute, i + 0 );\n\t\t\t\t\tpB.fromBufferAttribute( positionAttribute, i + 1 );\n\t\t\t\t\tpC.fromBufferAttribute( positionAttribute, i + 2 );\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\tnormalAttribute.setXYZ( i + 0, cb.x, cb.y, cb.z );\n\t\t\t\t\tnormalAttribute.setXYZ( i + 1, cb.x, cb.y, cb.z );\n\t\t\t\t\tnormalAttribute.setXYZ( i + 2, cb.x, cb.y, cb.z );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.normalizeNormals();\n\n\t\t\tnormalAttribute.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\tconst attributes = this.attributes;\n\n\t\tfor ( const key in attributes ) {\n\n\t\t\tif ( geometry.attributes[ key ] === undefined ) continue;\n\n\t\t\tconst attribute1 = attributes[ key ];\n\t\t\tconst attributeArray1 = attribute1.array;\n\n\t\t\tconst attribute2 = geometry.attributes[ key ];\n\t\t\tconst attributeArray2 = attribute2.array;\n\n\t\t\tconst attributeOffset = attribute2.itemSize * offset;\n\t\t\tconst length = Math.min( attributeArray2.length, attributeArray1.length - attributeOffset );\n\n\t\t\tfor ( let i = 0, j = attributeOffset; i < 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\tconst normals = this.attributes.normal;\n\n\t\tfor ( let i = 0, il = normals.count; i < il; i ++ ) {\n\n\t\t\t_vector$4.fromBufferAttribute( normals, i );\n\n\t\t\t_vector$4.normalize();\n\n\t\t\tnormals.setXYZ( i, _vector$4.x, _vector$4.y, _vector$4.z );\n\n\t\t}\n\n\t},\n\n\ttoNonIndexed: function () {\n\n\t\tfunction convertBufferAttribute( attribute, indices ) {\n\n\t\t\tconst array = attribute.array;\n\t\t\tconst itemSize = attribute.itemSize;\n\t\t\tconst normalized = attribute.normalized;\n\n\t\t\tconst array2 = new array.constructor( indices.length * itemSize );\n\n\t\t\tlet index = 0, index2 = 0;\n\n\t\t\tfor ( let i = 0, l = indices.length; i < l; i ++ ) {\n\n\t\t\t\tindex = indices[ i ] * itemSize;\n\n\t\t\t\tfor ( let 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\treturn new BufferAttribute( array2, itemSize, normalized );\n\n\t\t}\n\n\t\t//\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\tconst geometry2 = new BufferGeometry();\n\n\t\tconst indices = this.index.array;\n\t\tconst attributes = this.attributes;\n\n\t\t// attributes\n\n\t\tfor ( const name in attributes ) {\n\n\t\t\tconst attribute = attributes[ name ];\n\n\t\t\tconst newAttribute = convertBufferAttribute( attribute, indices );\n\n\t\t\tgeometry2.setAttribute( name, newAttribute );\n\n\t\t}\n\n\t\t// morph attributes\n\n\t\tconst morphAttributes = this.morphAttributes;\n\n\t\tfor ( const name in morphAttributes ) {\n\n\t\t\tconst morphArray = [];\n\t\t\tconst morphAttribute = morphAttributes[ name ]; // morphAttribute: array of Float32BufferAttributes\n\n\t\t\tfor ( let i = 0, il = morphAttribute.length; i < il; i ++ ) {\n\n\t\t\t\tconst attribute = morphAttribute[ i ];\n\n\t\t\t\tconst newAttribute = convertBufferAttribute( attribute, indices );\n\n\t\t\t\tmorphArray.push( newAttribute );\n\n\t\t\t}\n\n\t\t\tgeometry2.morphAttributes[ name ] = morphArray;\n\n\t\t}\n\n\t\tgeometry2.morphTargetsRelative = this.morphTargetsRelative;\n\n\t\t// groups\n\n\t\tconst groups = this.groups;\n\n\t\tfor ( let i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\tconst 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\tconst 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\t\tif ( Object.keys( this.userData ).length > 0 ) data.userData = this.userData;\n\n\t\tif ( this.parameters !== undefined ) {\n\n\t\t\tconst parameters = this.parameters;\n\n\t\t\tfor ( const 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\tconst index = this.index;\n\n\t\tif ( index !== null ) {\n\n\t\t\tdata.data.index = {\n\t\t\t\ttype: index.array.constructor.name,\n\t\t\t\tarray: Array.prototype.slice.call( index.array )\n\t\t\t};\n\n\t\t}\n\n\t\tconst attributes = this.attributes;\n\n\t\tfor ( const key in attributes ) {\n\n\t\t\tconst attribute = attributes[ key ];\n\n\t\t\tconst attributeData = attribute.toJSON( data.data );\n\n\t\t\tif ( attribute.name !== '' ) attributeData.name = attribute.name;\n\n\t\t\tdata.data.attributes[ key ] = attributeData;\n\n\t\t}\n\n\t\tconst morphAttributes = {};\n\t\tlet hasMorphAttributes = false;\n\n\t\tfor ( const key in this.morphAttributes ) {\n\n\t\t\tconst attributeArray = this.morphAttributes[ key ];\n\n\t\t\tconst array = [];\n\n\t\t\tfor ( let i = 0, il = attributeArray.length; i < il; i ++ ) {\n\n\t\t\t\tconst attribute = attributeArray[ i ];\n\n\t\t\t\tconst attributeData = attribute.toJSON( data.data );\n\n\t\t\t\tif ( attribute.name !== '' ) attributeData.name = attribute.name;\n\n\t\t\t\tarray.push( attributeData );\n\n\t\t\t}\n\n\t\t\tif ( array.length > 0 ) {\n\n\t\t\t\tmorphAttributes[ key ] = array;\n\n\t\t\t\thasMorphAttributes = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( hasMorphAttributes ) {\n\n\t\t\tdata.data.morphAttributes = morphAttributes;\n\t\t\tdata.data.morphTargetsRelative = this.morphTargetsRelative;\n\n\t\t}\n\n\t\tconst 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\tconst 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 const parameters = this.parameters;\n\n\t\t if ( parameters !== undefined ) {\n\n\t\t const values = [];\n\n\t\t for ( const key in parameters ) {\n\n\t\t values.push( parameters[ key ] );\n\n\t\t }\n\n\t\t const 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\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// used for storing cloned, shared data\n\n\t\tconst data = {};\n\n\t\t// name\n\n\t\tthis.name = source.name;\n\n\t\t// index\n\n\t\tconst index = source.index;\n\n\t\tif ( index !== null ) {\n\n\t\t\tthis.setIndex( index.clone( data ) );\n\n\t\t}\n\n\t\t// attributes\n\n\t\tconst attributes = source.attributes;\n\n\t\tfor ( const name in attributes ) {\n\n\t\t\tconst attribute = attributes[ name ];\n\t\t\tthis.setAttribute( name, attribute.clone( data ) );\n\n\t\t}\n\n\t\t// morph attributes\n\n\t\tconst morphAttributes = source.morphAttributes;\n\n\t\tfor ( const name in morphAttributes ) {\n\n\t\t\tconst array = [];\n\t\t\tconst morphAttribute = morphAttributes[ name ]; // morphAttribute: array of Float32BufferAttributes\n\n\t\t\tfor ( let i = 0, l = morphAttribute.length; i < l; i ++ ) {\n\n\t\t\t\tarray.push( morphAttribute[ i ].clone( data ) );\n\n\t\t\t}\n\n\t\t\tthis.morphAttributes[ name ] = array;\n\n\t\t}\n\n\t\tthis.morphTargetsRelative = source.morphTargetsRelative;\n\n\t\t// groups\n\n\t\tconst groups = source.groups;\n\n\t\tfor ( let i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\tconst 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\tconst 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\tconst 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\t// user data\n\n\t\tthis.userData = source.userData;\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\nconst _inverseMatrix = new Matrix4();\nconst _ray = new Ray();\nconst _sphere = new Sphere();\n\nconst _vA = new Vector3();\nconst _vB = new Vector3();\nconst _vC = new Vector3();\n\nconst _tempA = new Vector3();\nconst _tempB = new Vector3();\nconst _tempC = new Vector3();\n\nconst _morphA = new Vector3();\nconst _morphB = new Vector3();\nconst _morphC = new Vector3();\n\nconst _uvA = new Vector2();\nconst _uvB = new Vector2();\nconst _uvC = new Vector2();\n\nconst _intersectionPoint = new Vector3();\nconst _intersectionPointWorld = new Vector3();\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();\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\tcopy: function ( source ) {\n\n\t\tObject3D.prototype.copy.call( this, source );\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\tthis.material = source.material;\n\t\tthis.geometry = source.geometry;\n\n\t\treturn this;\n\n\t},\n\n\tupdateMorphTargets: function () {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tconst morphAttributes = geometry.morphAttributes;\n\t\t\tconst keys = Object.keys( morphAttributes );\n\n\t\t\tif ( keys.length > 0 ) {\n\n\t\t\t\tconst 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 ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) {\n\n\t\t\t\t\t\tconst name = 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\tconst morphTargets = geometry.morphTargets;\n\n\t\t\tif ( morphTargets !== undefined && morphTargets.length > 0 ) {\n\n\t\t\t\tconsole.error( 'THREE.Mesh.updateMorphTargets() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\traycast: function ( raycaster, intersects ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst material = this.material;\n\t\tconst matrixWorld = this.matrixWorld;\n\n\t\tif ( material === undefined ) return;\n\n\t\t// Checking boundingSphere distance to ray\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere.copy( geometry.boundingSphere );\n\t\t_sphere.applyMatrix4( matrixWorld );\n\n\t\tif ( raycaster.ray.intersectsSphere( _sphere ) === false ) return;\n\n\t\t//\n\n\t\t_inverseMatrix.getInverse( matrixWorld );\n\t\t_ray.copy( raycaster.ray ).applyMatrix4( _inverseMatrix );\n\n\t\t// Check boundingBox before continuing\n\n\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\tif ( _ray.intersectsBox( geometry.boundingBox ) === false ) return;\n\n\t\t}\n\n\t\tlet intersection;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tconst index = geometry.index;\n\t\t\tconst position = geometry.attributes.position;\n\t\t\tconst morphPosition = geometry.morphAttributes.position;\n\t\t\tconst morphTargetsRelative = geometry.morphTargetsRelative;\n\t\t\tconst uv = geometry.attributes.uv;\n\t\t\tconst uv2 = geometry.attributes.uv2;\n\t\t\tconst groups = geometry.groups;\n\t\t\tconst drawRange = geometry.drawRange;\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\t// indexed buffer geometry\n\n\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\tfor ( let i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst group = groups[ i ];\n\t\t\t\t\t\tconst groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\t\tconst start = Math.max( group.start, drawRange.start );\n\t\t\t\t\t\tconst end = Math.min( ( group.start + group.count ), ( drawRange.start + drawRange.count ) );\n\n\t\t\t\t\t\tfor ( let j = start, jl = end; j < jl; j += 3 ) {\n\n\t\t\t\t\t\t\tconst a = index.getX( j );\n\t\t\t\t\t\t\tconst b = index.getX( j + 1 );\n\t\t\t\t\t\t\tconst c = index.getX( j + 2 );\n\n\t\t\t\t\t\t\tintersection = checkBufferGeometryIntersection( this, groupMaterial, raycaster, _ray, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c );\n\n\t\t\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\t\t\tintersection.faceIndex = Math.floor( j / 3 ); // triangle number in indexed buffer semantics\n\t\t\t\t\t\t\t\tintersection.face.materialIndex = group.materialIndex;\n\t\t\t\t\t\t\t\tintersects.push( intersection );\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} else {\n\n\t\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\t\tconst end = Math.min( index.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\t\tfor ( let i = start, il = end; i < il; i += 3 ) {\n\n\t\t\t\t\t\tconst a = index.getX( i );\n\t\t\t\t\t\tconst b = index.getX( i + 1 );\n\t\t\t\t\t\tconst c = index.getX( i + 2 );\n\n\t\t\t\t\t\tintersection = checkBufferGeometryIntersection( this, material, raycaster, _ray, position, morphPosition, morphTargetsRelative, uv, uv2, 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 indexed 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}\n\n\t\t\t} else if ( position !== undefined ) {\n\n\t\t\t\t// non-indexed buffer geometry\n\n\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\tfor ( let i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst group = groups[ i ];\n\t\t\t\t\t\tconst groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\t\tconst start = Math.max( group.start, drawRange.start );\n\t\t\t\t\t\tconst end = Math.min( ( group.start + group.count ), ( drawRange.start + drawRange.count ) );\n\n\t\t\t\t\t\tfor ( let j = start, jl = end; j < jl; j += 3 ) {\n\n\t\t\t\t\t\t\tconst a = j;\n\t\t\t\t\t\t\tconst b = j + 1;\n\t\t\t\t\t\t\tconst c = j + 2;\n\n\t\t\t\t\t\t\tintersection = checkBufferGeometryIntersection( this, groupMaterial, raycaster, _ray, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c );\n\n\t\t\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\t\t\tintersection.faceIndex = Math.floor( j / 3 ); // triangle number in non-indexed buffer semantics\n\t\t\t\t\t\t\t\tintersection.face.materialIndex = group.materialIndex;\n\t\t\t\t\t\t\t\tintersects.push( intersection );\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} else {\n\n\t\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\t\tconst end = Math.min( position.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\t\tfor ( let i = start, il = end; i < il; i += 3 ) {\n\n\t\t\t\t\t\tconst a = i;\n\t\t\t\t\t\tconst b = i + 1;\n\t\t\t\t\t\tconst c = i + 2;\n\n\t\t\t\t\t\tintersection = checkBufferGeometryIntersection( this, material, raycaster, _ray, position, morphPosition, morphTargetsRelative, uv, uv2, 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 non-indexed 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}\n\n\t\t\t}\n\n\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\tconst isMultiMaterial = Array.isArray( material );\n\n\t\t\tconst vertices = geometry.vertices;\n\t\t\tconst faces = geometry.faces;\n\t\t\tlet uvs;\n\n\t\t\tconst faceVertexUvs = geometry.faceVertexUvs[ 0 ];\n\t\t\tif ( faceVertexUvs.length > 0 ) uvs = faceVertexUvs;\n\n\t\t\tfor ( let f = 0, fl = faces.length; f < fl; f ++ ) {\n\n\t\t\t\tconst face = faces[ f ];\n\t\t\t\tconst faceMaterial = isMultiMaterial ? material[ face.materialIndex ] : material;\n\n\t\t\t\tif ( faceMaterial === undefined ) continue;\n\n\t\t\t\tconst fvA = vertices[ face.a ];\n\t\t\t\tconst fvB = vertices[ face.b ];\n\t\t\t\tconst fvC = vertices[ face.c ];\n\n\t\t\t\tintersection = checkIntersection( this, faceMaterial, raycaster, _ray, fvA, fvB, fvC, _intersectionPoint );\n\n\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\tif ( uvs && uvs[ f ] ) {\n\n\t\t\t\t\t\tconst uvs_f = uvs[ f ];\n\t\t\t\t\t\t_uvA.copy( uvs_f[ 0 ] );\n\t\t\t\t\t\t_uvB.copy( uvs_f[ 1 ] );\n\t\t\t\t\t\t_uvC.copy( uvs_f[ 2 ] );\n\n\t\t\t\t\t\tintersection.uv = Triangle.getUV( _intersectionPoint, fvA, fvB, fvC, _uvA, _uvB, _uvC, new Vector2() );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tintersection.face = face;\n\t\t\t\t\tintersection.faceIndex = f;\n\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n} );\n\nfunction checkIntersection( object, material, raycaster, ray, pA, pB, pC, point ) {\n\n\tlet intersect;\n\n\tif ( material.side === BackSide ) {\n\n\t\tintersect = ray.intersectTriangle( pC, pB, pA, true, point );\n\n\t} else {\n\n\t\tintersect = ray.intersectTriangle( pA, pB, pC, material.side !== DoubleSide, point );\n\n\t}\n\n\tif ( intersect === null ) return null;\n\n\t_intersectionPointWorld.copy( point );\n\t_intersectionPointWorld.applyMatrix4( object.matrixWorld );\n\n\tconst distance = raycaster.ray.origin.distanceTo( _intersectionPointWorld );\n\n\tif ( distance < raycaster.near || distance > raycaster.far ) return null;\n\n\treturn {\n\t\tdistance: distance,\n\t\tpoint: _intersectionPointWorld.clone(),\n\t\tobject: object\n\t};\n\n}\n\nfunction checkBufferGeometryIntersection( object, material, raycaster, ray, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c ) {\n\n\t_vA.fromBufferAttribute( position, a );\n\t_vB.fromBufferAttribute( position, b );\n\t_vC.fromBufferAttribute( position, c );\n\n\tconst morphInfluences = object.morphTargetInfluences;\n\n\tif ( material.morphTargets && morphPosition && morphInfluences ) {\n\n\t\t_morphA.set( 0, 0, 0 );\n\t\t_morphB.set( 0, 0, 0 );\n\t\t_morphC.set( 0, 0, 0 );\n\n\t\tfor ( let i = 0, il = morphPosition.length; i < il; i ++ ) {\n\n\t\t\tconst influence = morphInfluences[ i ];\n\t\t\tconst morphAttribute = morphPosition[ i ];\n\n\t\t\tif ( influence === 0 ) continue;\n\n\t\t\t_tempA.fromBufferAttribute( morphAttribute, a );\n\t\t\t_tempB.fromBufferAttribute( morphAttribute, b );\n\t\t\t_tempC.fromBufferAttribute( morphAttribute, c );\n\n\t\t\tif ( morphTargetsRelative ) {\n\n\t\t\t\t_morphA.addScaledVector( _tempA, influence );\n\t\t\t\t_morphB.addScaledVector( _tempB, influence );\n\t\t\t\t_morphC.addScaledVector( _tempC, influence );\n\n\t\t\t} else {\n\n\t\t\t\t_morphA.addScaledVector( _tempA.sub( _vA ), influence );\n\t\t\t\t_morphB.addScaledVector( _tempB.sub( _vB ), influence );\n\t\t\t\t_morphC.addScaledVector( _tempC.sub( _vC ), influence );\n\n\t\t\t}\n\n\t\t}\n\n\t\t_vA.add( _morphA );\n\t\t_vB.add( _morphB );\n\t\t_vC.add( _morphC );\n\n\t}\n\n\tif ( object.isSkinnedMesh ) {\n\n\t\tobject.boneTransform( a, _vA );\n\t\tobject.boneTransform( b, _vB );\n\t\tobject.boneTransform( c, _vC );\n\n\t}\n\n\tconst intersection = checkIntersection( object, material, raycaster, ray, _vA, _vB, _vC, _intersectionPoint );\n\n\tif ( intersection ) {\n\n\t\tif ( uv ) {\n\n\t\t\t_uvA.fromBufferAttribute( uv, a );\n\t\t\t_uvB.fromBufferAttribute( uv, b );\n\t\t\t_uvC.fromBufferAttribute( uv, c );\n\n\t\t\tintersection.uv = Triangle.getUV( _intersectionPoint, _vA, _vB, _vC, _uvA, _uvB, _uvC, new Vector2() );\n\n\t\t}\n\n\t\tif ( uv2 ) {\n\n\t\t\t_uvA.fromBufferAttribute( uv2, a );\n\t\t\t_uvB.fromBufferAttribute( uv2, b );\n\t\t\t_uvC.fromBufferAttribute( uv2, c );\n\n\t\t\tintersection.uv2 = Triangle.getUV( _intersectionPoint, _vA, _vB, _vC, _uvA, _uvB, _uvC, new Vector2() );\n\n\t\t}\n\n\t\tconst face = new Face3( a, b, c );\n\t\tTriangle.getNormal( _vA, _vB, _vC, face.normal );\n\n\t\tintersection.face = face;\n\n\t}\n\n\treturn intersection;\n\n}\n\nlet _geometryId = 0; // Geometry uses even numbers as Id\nconst _m1$3 = new Matrix4();\nconst _obj$1 = new Object3D();\nconst _offset$1 = new Vector3();\n\nfunction Geometry() {\n\n\tObject.defineProperty( this, 'id', { value: _geometryId += 2 } );\n\n\tthis.uuid = MathUtils.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\tapplyMatrix4: function ( matrix ) {\n\n\t\tconst normalMatrix = new Matrix3().getNormalMatrix( matrix );\n\n\t\tfor ( let i = 0, il = this.vertices.length; i < il; i ++ ) {\n\n\t\t\tconst vertex = this.vertices[ i ];\n\t\t\tvertex.applyMatrix4( matrix );\n\n\t\t}\n\n\t\tfor ( let i = 0, il = this.faces.length; i < il; i ++ ) {\n\n\t\t\tconst face = this.faces[ i ];\n\t\t\tface.normal.applyMatrix3( normalMatrix ).normalize();\n\n\t\t\tfor ( let 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 ( angle ) {\n\n\t\t// rotate geometry around world x-axis\n\n\t\t_m1$3.makeRotationX( angle );\n\n\t\tthis.applyMatrix4( _m1$3 );\n\n\t\treturn this;\n\n\t},\n\n\trotateY: function ( angle ) {\n\n\t\t// rotate geometry around world y-axis\n\n\t\t_m1$3.makeRotationY( angle );\n\n\t\tthis.applyMatrix4( _m1$3 );\n\n\t\treturn this;\n\n\t},\n\n\trotateZ: function ( angle ) {\n\n\t\t// rotate geometry around world z-axis\n\n\t\t_m1$3.makeRotationZ( angle );\n\n\t\tthis.applyMatrix4( _m1$3 );\n\n\t\treturn this;\n\n\t},\n\n\ttranslate: function ( x, y, z ) {\n\n\t\t// translate geometry\n\n\t\t_m1$3.makeTranslation( x, y, z );\n\n\t\tthis.applyMatrix4( _m1$3 );\n\n\t\treturn this;\n\n\t},\n\n\tscale: function ( x, y, z ) {\n\n\t\t// scale geometry\n\n\t\t_m1$3.makeScale( x, y, z );\n\n\t\tthis.applyMatrix4( _m1$3 );\n\n\t\treturn this;\n\n\t},\n\n\tlookAt: function ( vector ) {\n\n\t\t_obj$1.lookAt( vector );\n\n\t\t_obj$1.updateMatrix();\n\n\t\tthis.applyMatrix4( _obj$1.matrix );\n\n\t\treturn this;\n\n\t},\n\n\tfromBufferGeometry: function ( geometry ) {\n\n\t\tconst scope = this;\n\n\t\tconst index = geometry.index !== null ? geometry.index : undefined;\n\t\tconst attributes = geometry.attributes;\n\n\t\tif ( attributes.position === undefined ) {\n\n\t\t\tconsole.error( 'THREE.Geometry.fromBufferGeometry(): Position attribute required for conversion.' );\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst position = attributes.position;\n\t\tconst normal = attributes.normal;\n\t\tconst color = attributes.color;\n\t\tconst uv = attributes.uv;\n\t\tconst uv2 = attributes.uv2;\n\n\t\tif ( uv2 !== undefined ) this.faceVertexUvs[ 1 ] = [];\n\n\t\tfor ( let i = 0; i < position.count; i ++ ) {\n\n\t\t\tscope.vertices.push( new Vector3().fromBufferAttribute( position, i ) );\n\n\t\t\tif ( color !== undefined ) {\n\n\t\t\t\tscope.colors.push( new Color().fromBufferAttribute( color, i ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction addFace( a, b, c, materialIndex ) {\n\n\t\t\tconst vertexColors = ( color === undefined ) ? [] : [\n\t\t\t\tscope.colors[ a ].clone(),\n\t\t\t\tscope.colors[ b ].clone(),\n\t\t\t\tscope.colors[ c ].clone()\n\t\t\t];\n\n\t\t\tconst vertexNormals = ( normal === undefined ) ? [] : [\n\t\t\t\tnew Vector3().fromBufferAttribute( normal, a ),\n\t\t\t\tnew Vector3().fromBufferAttribute( normal, b ),\n\t\t\t\tnew Vector3().fromBufferAttribute( normal, c )\n\t\t\t];\n\n\t\t\tconst face = new Face3( a, b, c, vertexNormals, vertexColors, materialIndex );\n\n\t\t\tscope.faces.push( face );\n\n\t\t\tif ( uv !== undefined ) {\n\n\t\t\t\tscope.faceVertexUvs[ 0 ].push( [\n\t\t\t\t\tnew Vector2().fromBufferAttribute( uv, a ),\n\t\t\t\t\tnew Vector2().fromBufferAttribute( uv, b ),\n\t\t\t\t\tnew Vector2().fromBufferAttribute( uv, c )\n\t\t\t\t] );\n\n\t\t\t}\n\n\t\t\tif ( uv2 !== undefined ) {\n\n\t\t\t\tscope.faceVertexUvs[ 1 ].push( [\n\t\t\t\t\tnew Vector2().fromBufferAttribute( uv2, a ),\n\t\t\t\t\tnew Vector2().fromBufferAttribute( uv2, b ),\n\t\t\t\t\tnew Vector2().fromBufferAttribute( uv2, c )\n\t\t\t\t] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst groups = geometry.groups;\n\n\t\tif ( groups.length > 0 ) {\n\n\t\t\tfor ( let i = 0; i < groups.length; i ++ ) {\n\n\t\t\t\tconst group = groups[ i ];\n\n\t\t\t\tconst start = group.start;\n\t\t\t\tconst count = group.count;\n\n\t\t\t\tfor ( let j = start, jl = start + count; j < jl; j += 3 ) {\n\n\t\t\t\t\tif ( index !== undefined ) {\n\n\t\t\t\t\t\taddFace( index.getX( j ), index.getX( j + 1 ), index.getX( 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 ( index !== undefined ) {\n\n\t\t\t\tfor ( let i = 0; i < index.count; i += 3 ) {\n\n\t\t\t\t\taddFace( index.getX( i ), index.getX( i + 1 ), index.getX( i + 2 ) );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tfor ( let i = 0; i < position.count; 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\tthis.computeBoundingBox();\n\n\t\tthis.boundingBox.getCenter( _offset$1 ).negate();\n\n\t\tthis.translate( _offset$1.x, _offset$1.y, _offset$1.z );\n\n\t\treturn this;\n\n\t},\n\n\tnormalize: function () {\n\n\t\tthis.computeBoundingSphere();\n\n\t\tconst center = this.boundingSphere.center;\n\t\tconst radius = this.boundingSphere.radius;\n\n\t\tconst s = radius === 0 ? 1 : 1.0 / radius;\n\n\t\tconst 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.applyMatrix4( matrix );\n\n\t\treturn this;\n\n\t},\n\n\tcomputeFaceNormals: function () {\n\n\t\tconst cb = new Vector3(), ab = new Vector3();\n\n\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\tconst face = this.faces[ f ];\n\n\t\t\tconst vA = this.vertices[ face.a ];\n\t\t\tconst vB = this.vertices[ face.b ];\n\t\t\tconst 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\tconst vertices = new Array( this.vertices.length );\n\n\t\tfor ( let 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\tconst cb = new Vector3(), ab = new Vector3();\n\n\t\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\tconst face = this.faces[ f ];\n\n\t\t\t\tconst vA = this.vertices[ face.a ];\n\t\t\t\tconst vB = this.vertices[ face.b ];\n\t\t\t\tconst vC = 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 ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\tconst face = 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 ( let v = 0, vl = this.vertices.length; v < vl; v ++ ) {\n\n\t\t\tvertices[ v ].normalize();\n\n\t\t}\n\n\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\tconst face = this.faces[ f ];\n\n\t\t\tconst 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\tthis.computeFaceNormals();\n\n\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\tconst face = this.faces[ f ];\n\n\t\t\tconst 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\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 ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\tconst face = 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 ( let 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\tconst tmpGeo = new Geometry();\n\t\ttmpGeo.faces = this.faces;\n\n\t\tfor ( let 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\tconst dstNormalsFace = this.morphNormals[ i ].faceNormals;\n\t\t\t\tconst dstNormalsVertex = this.morphNormals[ i ].vertexNormals;\n\n\t\t\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\t\tconst faceNormal = new Vector3();\n\t\t\t\t\tconst vertexNormals = { 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\tconst 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\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\tconst face = this.faces[ f ];\n\n\t\t\t\tconst faceNormal = morphNormals.faceNormals[ f ];\n\t\t\t\tconst vertexNormals = 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 ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\tconst face = 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\tlet 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\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 ( let i = 0, il = vertices2.length; i < il; i ++ ) {\n\n\t\t\tconst vertex = vertices2[ i ];\n\n\t\t\tconst 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 ( let 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 ( let i = 0, il = faces2.length; i < il; i ++ ) {\n\n\t\t\tlet 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 ( let 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 ( let 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 ( let i = 0, il = geometry.faceVertexUvs.length; i < il; i ++ ) {\n\n\t\t\tconst faceVertexUvs2 = geometry.faceVertexUvs[ i ];\n\n\t\t\tif ( this.faceVertexUvs[ i ] === undefined ) this.faceVertexUvs[ i ] = [];\n\n\t\t\tfor ( let j = 0, jl = faceVertexUvs2.length; j < jl; j ++ ) {\n\n\t\t\t\tconst uvs2 = faceVertexUvs2[ j ], uvsCopy = [];\n\n\t\t\t\tfor ( let k = 0, kl = uvs2.length; k < kl; k ++ ) {\n\n\t\t\t\t\tuvsCopy.push( uvs2[ k ].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},\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\tconst verticesMap = {}; // Hashmap for looking up vertices by position coordinates (and making sure they are unique)\n\t\tconst unique = [], changes = [];\n\n\t\tconst precisionPoints = 4; // number of decimal points, e.g. 4 for epsilon of 0.0001\n\t\tconst precision = Math.pow( 10, precisionPoints );\n\n\t\tfor ( let i = 0, il = this.vertices.length; i < il; i ++ ) {\n\n\t\t\tconst v = this.vertices[ i ];\n\t\t\tconst key = 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\tconst faceIndicesToRemove = [];\n\n\t\tfor ( let i = 0, il = this.faces.length; i < il; i ++ ) {\n\n\t\t\tconst face = 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\tconst indices = [ 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 ( let 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 ( let i = faceIndicesToRemove.length - 1; i >= 0; i -- ) {\n\n\t\t\tconst idx = faceIndicesToRemove[ i ];\n\n\t\t\tthis.faces.splice( idx, 1 );\n\n\t\t\tfor ( let 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\tconst 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 ( let i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\tconst 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\tconst faces = this.faces;\n\t\tconst length = faces.length;\n\n\t\t// tag faces\n\n\t\tfor ( let 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\tconst uvs1 = this.faceVertexUvs[ 0 ];\n\t\tconst uvs2 = this.faceVertexUvs[ 1 ];\n\n\t\tlet newUvs1, newUvs2;\n\n\t\tif ( uvs1 && uvs1.length === length ) newUvs1 = [];\n\t\tif ( uvs2 && uvs2.length === length ) newUvs2 = [];\n\n\t\tfor ( let i = 0; i < length; i ++ ) {\n\n\t\t\tconst 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\tconst 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\tconst parameters = this.parameters;\n\n\t\t\tfor ( const 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\tconst vertices = [];\n\n\t\tfor ( let i = 0; i < this.vertices.length; i ++ ) {\n\n\t\t\tconst vertex = this.vertices[ i ];\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t}\n\n\t\tconst faces = [];\n\t\tconst normals = [];\n\t\tconst normalsHash = {};\n\t\tconst colors = [];\n\t\tconst colorsHash = {};\n\t\tconst uvs = [];\n\t\tconst uvsHash = {};\n\n\t\tfor ( let i = 0; i < this.faces.length; i ++ ) {\n\n\t\t\tconst face = this.faces[ i ];\n\n\t\t\tconst hasMaterial = true;\n\t\t\tconst hasFaceUv = false; // deprecated\n\t\t\tconst hasFaceVertexUv = this.faceVertexUvs[ 0 ][ i ] !== undefined;\n\t\t\tconst hasFaceNormal = face.normal.length() > 0;\n\t\t\tconst hasFaceVertexNormal = face.vertexNormals.length > 0;\n\t\t\tconst hasFaceColor = face.color.r !== 1 || face.color.g !== 1 || face.color.b !== 1;\n\t\t\tconst hasFaceVertexColor = face.vertexColors.length > 0;\n\n\t\t\tlet 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\tconst 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\tconst 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\tconst 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\tconst 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\tconst 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\tconst 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 const parameters = this.parameters;\n\n\t\t if ( parameters !== undefined ) {\n\n\t\t const values = [];\n\n\t\t for ( const key in parameters ) {\n\n\t\t values.push( parameters[ key ] );\n\n\t\t }\n\n\t\t const 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\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\tconst vertices = source.vertices;\n\n\t\tfor ( let 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\tconst colors = source.colors;\n\n\t\tfor ( let 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\tconst faces = source.faces;\n\n\t\tfor ( let 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 ( let i = 0, il = source.faceVertexUvs.length; i < il; i ++ ) {\n\n\t\t\tconst 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 ( let j = 0, jl = faceVertexUvs.length; j < jl; j ++ ) {\n\n\t\t\t\tconst uvs = faceVertexUvs[ j ], uvsCopy = [];\n\n\t\t\t\tfor ( let k = 0, kl = uvs.length; k < kl; k ++ ) {\n\n\t\t\t\t\tconst 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\tconst morphTargets = source.morphTargets;\n\n\t\tfor ( let i = 0, il = morphTargets.length; i < il; i ++ ) {\n\n\t\t\tconst 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 ( let 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 ( let 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\tconst morphNormals = source.morphNormals;\n\n\t\tfor ( let i = 0, il = morphNormals.length; i < il; i ++ ) {\n\n\t\t\tconst 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 ( let j = 0, jl = morphNormals[ i ].vertexNormals.length; j < jl; j ++ ) {\n\n\t\t\t\t\tconst srcVertexNormal = morphNormals[ i ].vertexNormals[ j ];\n\t\t\t\t\tconst 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 ( let 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\tconst skinWeights = source.skinWeights;\n\n\t\tfor ( let 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\tconst skinIndices = source.skinIndices;\n\n\t\tfor ( let 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\tconst lineDistances = source.lineDistances;\n\n\t\tfor ( let 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\tconst 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\tconst 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// BoxGeometry\n\nclass BoxGeometry extends Geometry {\n\n\tconstructor( width, height, depth, widthSegments, heightSegments, depthSegments ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'BoxGeometry';\n\n\t\tthis.parameters = {\n\t\t\twidth: width,\n\t\t\theight: height,\n\t\t\tdepth: depth,\n\t\t\twidthSegments: widthSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\tdepthSegments: depthSegments\n\t\t};\n\n\t\tthis.fromBufferGeometry( new BoxBufferGeometry( width, height, depth, widthSegments, heightSegments, depthSegments ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n}\n\n// BoxBufferGeometry\n\nclass BoxBufferGeometry extends BufferGeometry {\n\n\tconstructor( width = 1, height = 1, depth = 1, widthSegments = 1, heightSegments = 1, depthSegments = 1 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'BoxBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\twidth: width,\n\t\t\theight: height,\n\t\t\tdepth: depth,\n\t\t\twidthSegments: widthSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\tdepthSegments: depthSegments\n\t\t};\n\n\t\tconst scope = this;\n\n\t\t// segments\n\n\t\twidthSegments = Math.floor( widthSegments );\n\t\theightSegments = Math.floor( heightSegments );\n\t\tdepthSegments = Math.floor( depthSegments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tlet numberOfVertices = 0;\n\t\tlet groupStart = 0;\n\n\t\t// build each side of the box geometry\n\n\t\tbuildPlane( 'z', 'y', 'x', - 1, - 1, depth, height, width, depthSegments, heightSegments, 0 ); // px\n\t\tbuildPlane( 'z', 'y', 'x', 1, - 1, depth, height, - width, depthSegments, heightSegments, 1 ); // nx\n\t\tbuildPlane( 'x', 'z', 'y', 1, 1, width, depth, height, widthSegments, depthSegments, 2 ); // py\n\t\tbuildPlane( 'x', 'z', 'y', 1, - 1, width, depth, - height, widthSegments, depthSegments, 3 ); // ny\n\t\tbuildPlane( 'x', 'y', 'z', 1, - 1, width, height, depth, widthSegments, heightSegments, 4 ); // pz\n\t\tbuildPlane( 'x', 'y', 'z', - 1, - 1, width, height, - depth, widthSegments, heightSegments, 5 ); // nz\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\tfunction buildPlane( u, v, w, udir, vdir, width, height, depth, gridX, gridY, materialIndex ) {\n\n\t\t\tconst segmentWidth = width / gridX;\n\t\t\tconst segmentHeight = height / gridY;\n\n\t\t\tconst widthHalf = width / 2;\n\t\t\tconst heightHalf = height / 2;\n\t\t\tconst depthHalf = depth / 2;\n\n\t\t\tconst gridX1 = gridX + 1;\n\t\t\tconst gridY1 = gridY + 1;\n\n\t\t\tlet vertexCounter = 0;\n\t\t\tlet groupCount = 0;\n\n\t\t\tconst vector = new Vector3();\n\n\t\t\t// generate vertices, normals and uvs\n\n\t\t\tfor ( let iy = 0; iy < gridY1; iy ++ ) {\n\n\t\t\t\tconst y = iy * segmentHeight - heightHalf;\n\n\t\t\t\tfor ( let ix = 0; ix < gridX1; ix ++ ) {\n\n\t\t\t\t\tconst x = ix * segmentWidth - widthHalf;\n\n\t\t\t\t\t// set values to correct vector component\n\n\t\t\t\t\tvector[ u ] = x * udir;\n\t\t\t\t\tvector[ v ] = y * vdir;\n\t\t\t\t\tvector[ w ] = depthHalf;\n\n\t\t\t\t\t// now apply vector to vertex buffer\n\n\t\t\t\t\tvertices.push( vector.x, vector.y, vector.z );\n\n\t\t\t\t\t// set values to correct vector component\n\n\t\t\t\t\tvector[ u ] = 0;\n\t\t\t\t\tvector[ v ] = 0;\n\t\t\t\t\tvector[ w ] = depth > 0 ? 1 : - 1;\n\n\t\t\t\t\t// now apply vector to normal buffer\n\n\t\t\t\t\tnormals.push( vector.x, vector.y, vector.z );\n\n\t\t\t\t\t// uvs\n\n\t\t\t\t\tuvs.push( ix / gridX );\n\t\t\t\t\tuvs.push( 1 - ( iy / gridY ) );\n\n\t\t\t\t\t// counters\n\n\t\t\t\t\tvertexCounter += 1;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// indices\n\n\t\t\t// 1. you need three indices to draw a single face\n\t\t\t// 2. a single segment consists of two faces\n\t\t\t// 3. so we need to generate six (2*3) indices per segment\n\n\t\t\tfor ( let iy = 0; iy < gridY; iy ++ ) {\n\n\t\t\t\tfor ( let ix = 0; ix < gridX; ix ++ ) {\n\n\t\t\t\t\tconst a = numberOfVertices + ix + gridX1 * iy;\n\t\t\t\t\tconst b = numberOfVertices + ix + gridX1 * ( iy + 1 );\n\t\t\t\t\tconst c = numberOfVertices + ( ix + 1 ) + gridX1 * ( iy + 1 );\n\t\t\t\t\tconst d = numberOfVertices + ( ix + 1 ) + gridX1 * iy;\n\n\t\t\t\t\t// faces\n\n\t\t\t\t\tindices.push( a, b, d );\n\t\t\t\t\tindices.push( b, c, d );\n\n\t\t\t\t\t// increase counter\n\n\t\t\t\t\tgroupCount += 6;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// add a group to the geometry. this will ensure multi material support\n\n\t\t\tscope.addGroup( groupStart, groupCount, materialIndex );\n\n\t\t\t// calculate new start value for groups\n\n\t\t\tgroupStart += groupCount;\n\n\t\t\t// update total number of vertices\n\n\t\t\tnumberOfVertices += vertexCounter;\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * Uniform Utilities\n */\n\nfunction cloneUniforms( src ) {\n\n\tconst dst = {};\n\n\tfor ( const u in src ) {\n\n\t\tdst[ u ] = {};\n\n\t\tfor ( const p in src[ u ] ) {\n\n\t\t\tconst property = src[ u ][ p ];\n\n\t\t\tif ( property && ( property.isColor ||\n\t\t\t\tproperty.isMatrix3 || property.isMatrix4 ||\n\t\t\t\tproperty.isVector2 || property.isVector3 || property.isVector4 ||\n\t\t\t\tproperty.isTexture ) ) {\n\n\t\t\t\tdst[ u ][ p ] = property.clone();\n\n\t\t\t} else if ( Array.isArray( property ) ) {\n\n\t\t\t\tdst[ u ][ p ] = property.slice();\n\n\t\t\t} else {\n\n\t\t\t\tdst[ u ][ p ] = property;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn dst;\n\n}\n\nfunction mergeUniforms( uniforms ) {\n\n\tconst merged = {};\n\n\tfor ( let u = 0; u < uniforms.length; u ++ ) {\n\n\t\tconst tmp = cloneUniforms( uniforms[ u ] );\n\n\t\tfor ( const p in tmp ) {\n\n\t\t\tmerged[ p ] = tmp[ p ];\n\n\t\t}\n\n\t}\n\n\treturn merged;\n\n}\n\n// Legacy\n\nconst UniformsUtils = { clone: cloneUniforms, merge: mergeUniforms };\n\nvar default_vertex = \"void main() {\\n\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\n}\";\n\nvar default_fragment = \"void main() {\\n\\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\\n}\";\n\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 = default_vertex;\n\tthis.fragmentShader = default_fragment;\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 = cloneUniforms( 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 = Object.assign( {}, source.extensions );\n\n\treturn this;\n\n};\n\nShaderMaterial.prototype.toJSON = function ( meta ) {\n\n\tconst data = Material.prototype.toJSON.call( this, meta );\n\n\tdata.uniforms = {};\n\n\tfor ( const name in this.uniforms ) {\n\n\t\tconst uniform = this.uniforms[ name ];\n\t\tconst value = uniform.value;\n\n\t\tif ( value && value.isTexture ) {\n\n\t\t\tdata.uniforms[ name ] = {\n\t\t\t\ttype: 't',\n\t\t\t\tvalue: value.toJSON( meta ).uuid\n\t\t\t};\n\n\t\t} else if ( value && value.isColor ) {\n\n\t\t\tdata.uniforms[ name ] = {\n\t\t\t\ttype: 'c',\n\t\t\t\tvalue: value.getHex()\n\t\t\t};\n\n\t\t} else if ( value && value.isVector2 ) {\n\n\t\t\tdata.uniforms[ name ] = {\n\t\t\t\ttype: 'v2',\n\t\t\t\tvalue: value.toArray()\n\t\t\t};\n\n\t\t} else if ( value && value.isVector3 ) {\n\n\t\t\tdata.uniforms[ name ] = {\n\t\t\t\ttype: 'v3',\n\t\t\t\tvalue: value.toArray()\n\t\t\t};\n\n\t\t} else if ( value && value.isVector4 ) {\n\n\t\t\tdata.uniforms[ name ] = {\n\t\t\t\ttype: 'v4',\n\t\t\t\tvalue: value.toArray()\n\t\t\t};\n\n\t\t} else if ( value && value.isMatrix3 ) {\n\n\t\t\tdata.uniforms[ name ] = {\n\t\t\t\ttype: 'm3',\n\t\t\t\tvalue: value.toArray()\n\t\t\t};\n\n\t\t} else if ( value && value.isMatrix4 ) {\n\n\t\t\tdata.uniforms[ name ] = {\n\t\t\t\ttype: 'm4',\n\t\t\t\tvalue: value.toArray()\n\t\t\t};\n\n\t\t} else {\n\n\t\t\tdata.uniforms[ name ] = {\n\t\t\t\tvalue: value\n\t\t\t};\n\n\t\t\t// note: the array variants v2v, v3v, v4v, m4v and tv are not supported so far\n\n\t\t}\n\n\t}\n\n\tif ( Object.keys( this.defines ).length > 0 ) data.defines = this.defines;\n\n\tdata.vertexShader = this.vertexShader;\n\tdata.fragmentShader = this.fragmentShader;\n\n\tconst extensions = {};\n\n\tfor ( const key in this.extensions ) {\n\n\t\tif ( this.extensions[ key ] === true ) extensions[ key ] = true;\n\n\t}\n\n\tif ( Object.keys( extensions ).length > 0 ) data.extensions = extensions;\n\n\treturn data;\n\n};\n\nfunction Camera() {\n\n\tObject3D.call( this );\n\n\tthis.type = 'Camera';\n\n\tthis.matrixWorldInverse = new Matrix4();\n\n\tthis.projectionMatrix = new Matrix4();\n\tthis.projectionMatrixInverse = 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\n\t\tthis.projectionMatrix.copy( source.projectionMatrix );\n\t\tthis.projectionMatrixInverse.copy( source.projectionMatrixInverse );\n\n\t\treturn this;\n\n\t},\n\n\tgetWorldDirection: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Camera: .getWorldDirection() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\tthis.updateMatrixWorld( true );\n\n\t\tconst e = this.matrixWorld.elements;\n\n\t\treturn target.set( - e[ 8 ], - e[ 9 ], - e[ 10 ] ).normalize();\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\tupdateWorldMatrix: function ( updateParents, updateChildren ) {\n\n\t\tObject3D.prototype.updateWorldMatrix.call( this, updateParents, updateChildren );\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\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\tconst vExtentSlope = 0.5 * this.getFilmHeight() / focalLength;\n\n\t\tthis.fov = MathUtils.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\tconst vExtentSlope = Math.tan( MathUtils.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 MathUtils.RAD2DEG * 2 * Math.atan(\n\t\t\tMath.tan( MathUtils.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 * const w = 1920;\n\t * const h = 1080;\n\t * const fullWidth = w * 3;\n\t * const fullHeight = h * 2;\n\t *\n\t * --A--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 0, w, h );\n\t * --B--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 0, w, h );\n\t * --C--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 2, h * 0, w, h );\n\t * --D--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 1, w, h );\n\t * --E--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 1, w, h );\n\t * --F--\n\t * camera.setViewOffset( 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\tlet near = this.near,\n\t\t\ttop = near * Math.tan( MathUtils.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\tconst 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\tconst 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\tthis.projectionMatrixInverse.getInverse( this.projectionMatrix );\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\tconst 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\nconst fov = 90, aspect = 1;\n\nfunction CubeCamera( near, far, renderTarget ) {\n\n\tObject3D.call( this );\n\n\tthis.type = 'CubeCamera';\n\n\tif ( renderTarget.isWebGLCubeRenderTarget !== true ) {\n\n\t\tconsole.error( 'THREE.CubeCamera: The constructor now expects an instance of WebGLCubeRenderTarget as third parameter.' );\n\t\treturn;\n\n\t}\n\n\tthis.renderTarget = renderTarget;\n\n\tconst cameraPX = new PerspectiveCamera( fov, aspect, near, far );\n\tcameraPX.layers = this.layers;\n\tcameraPX.up.set( 0, - 1, 0 );\n\tcameraPX.lookAt( new Vector3( 1, 0, 0 ) );\n\tthis.add( cameraPX );\n\n\tconst cameraNX = new PerspectiveCamera( fov, aspect, near, far );\n\tcameraNX.layers = this.layers;\n\tcameraNX.up.set( 0, - 1, 0 );\n\tcameraNX.lookAt( new Vector3( - 1, 0, 0 ) );\n\tthis.add( cameraNX );\n\n\tconst cameraPY = new PerspectiveCamera( fov, aspect, near, far );\n\tcameraPY.layers = this.layers;\n\tcameraPY.up.set( 0, 0, 1 );\n\tcameraPY.lookAt( new Vector3( 0, 1, 0 ) );\n\tthis.add( cameraPY );\n\n\tconst cameraNY = new PerspectiveCamera( fov, aspect, near, far );\n\tcameraNY.layers = this.layers;\n\tcameraNY.up.set( 0, 0, - 1 );\n\tcameraNY.lookAt( new Vector3( 0, - 1, 0 ) );\n\tthis.add( cameraNY );\n\n\tconst cameraPZ = new PerspectiveCamera( fov, aspect, near, far );\n\tcameraPZ.layers = this.layers;\n\tcameraPZ.up.set( 0, - 1, 0 );\n\tcameraPZ.lookAt( new Vector3( 0, 0, 1 ) );\n\tthis.add( cameraPZ );\n\n\tconst cameraNZ = new PerspectiveCamera( fov, aspect, near, far );\n\tcameraNZ.layers = this.layers;\n\tcameraNZ.up.set( 0, - 1, 0 );\n\tcameraNZ.lookAt( new Vector3( 0, 0, - 1 ) );\n\tthis.add( cameraNZ );\n\n\tthis.update = function ( renderer, scene ) {\n\n\t\tif ( this.parent === null ) this.updateMatrixWorld();\n\n\t\tconst currentXrEnabled = renderer.xr.enabled;\n\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\t\trenderer.xr.enabled = false;\n\n\t\tconst generateMipmaps = renderTarget.texture.generateMipmaps;\n\n\t\trenderTarget.texture.generateMipmaps = false;\n\n\t\trenderer.setRenderTarget( renderTarget, 0 );\n\t\trenderer.render( scene, cameraPX );\n\n\t\trenderer.setRenderTarget( renderTarget, 1 );\n\t\trenderer.render( scene, cameraNX );\n\n\t\trenderer.setRenderTarget( renderTarget, 2 );\n\t\trenderer.render( scene, cameraPY );\n\n\t\trenderer.setRenderTarget( renderTarget, 3 );\n\t\trenderer.render( scene, cameraNY );\n\n\t\trenderer.setRenderTarget( renderTarget, 4 );\n\t\trenderer.render( scene, cameraPZ );\n\n\t\trenderTarget.texture.generateMipmaps = generateMipmaps;\n\n\t\trenderer.setRenderTarget( renderTarget, 5 );\n\t\trenderer.render( scene, cameraNZ );\n\n\t\trenderer.setRenderTarget( currentRenderTarget );\n\n\t\trenderer.xr.enabled = currentXrEnabled;\n\n\t};\n\n\tthis.clear = function ( renderer, color, depth, stencil ) {\n\n\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\trenderer.setRenderTarget( renderTarget, i );\n\n\t\t\trenderer.clear( color, depth, stencil );\n\n\t\t}\n\n\t\trenderer.setRenderTarget( currentRenderTarget );\n\n\t};\n\n}\n\nCubeCamera.prototype = Object.create( Object3D.prototype );\nCubeCamera.prototype.constructor = CubeCamera;\n\nfunction WebGLCubeRenderTarget( size, options, dummy ) {\n\n\tif ( Number.isInteger( options ) ) {\n\n\t\tconsole.warn( 'THREE.WebGLCubeRenderTarget: constructor signature is now WebGLCubeRenderTarget( size, options )' );\n\n\t\toptions = dummy;\n\n\t}\n\n\tWebGLRenderTarget.call( this, size, size, options );\n\n}\n\nWebGLCubeRenderTarget.prototype = Object.create( WebGLRenderTarget.prototype );\nWebGLCubeRenderTarget.prototype.constructor = WebGLCubeRenderTarget;\n\nWebGLCubeRenderTarget.prototype.isWebGLCubeRenderTarget = true;\n\nWebGLCubeRenderTarget.prototype.fromEquirectangularTexture = function ( renderer, texture ) {\n\n\tthis.texture.type = texture.type;\n\tthis.texture.format = RGBAFormat; // see #18859\n\tthis.texture.encoding = texture.encoding;\n\n\tthis.texture.generateMipmaps = texture.generateMipmaps;\n\tthis.texture.minFilter = texture.minFilter;\n\tthis.texture.magFilter = texture.magFilter;\n\n\tconst scene = new Scene();\n\n\tconst shader = {\n\n\t\tuniforms: {\n\t\t\ttEquirect: { value: null },\n\t\t},\n\n\t\tvertexShader: /* glsl */`\n\n\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\tvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\n\t\t\t\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n\n\t\t\t}\n\n\t\t\tvoid main() {\n\n\t\t\t\tvWorldDirection = transformDirection( position, modelMatrix );\n\n\t\t\t\t#include \n\t\t\t\t#include \n\n\t\t\t}\n\t\t`,\n\n\t\tfragmentShader: /* glsl */`\n\n\t\t\tuniform sampler2D tEquirect;\n\n\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t#include \n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 direction = normalize( vWorldDirection );\n\n\t\t\t\tvec2 sampleUV = equirectUv( direction );\n\n\t\t\t\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\n\t\t\t}\n\t\t`\n\t};\n\n\tconst material = new ShaderMaterial( {\n\n\t\tname: 'CubemapFromEquirect',\n\n\t\tuniforms: cloneUniforms( shader.uniforms ),\n\t\tvertexShader: shader.vertexShader,\n\t\tfragmentShader: shader.fragmentShader,\n\t\tside: BackSide,\n\t\tblending: NoBlending\n\n\t} );\n\n\tmaterial.uniforms.tEquirect.value = texture;\n\n\tconst mesh = new Mesh( new BoxBufferGeometry( 5, 5, 5 ), material );\n\n\tscene.add( mesh );\n\n\tconst camera = new CubeCamera( 1, 10, this );\n\tcamera.update( renderer, scene );\n\n\tmesh.geometry.dispose();\n\tmesh.material.dispose();\n\n\treturn this;\n\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 || null, width: width || 1, height: height || 1 };\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\tthis.needsUpdate = true;\n\n}\n\nDataTexture.prototype = Object.create( Texture.prototype );\nDataTexture.prototype.constructor = DataTexture;\n\nDataTexture.prototype.isDataTexture = true;\n\nconst _sphere$1 = new Sphere();\nconst _vector$5 = new Vector3();\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\tconst 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\tconst planes = this.planes;\n\n\t\tfor ( let 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\tsetFromProjectionMatrix: function ( m ) {\n\n\t\tconst planes = this.planes;\n\t\tconst me = m.elements;\n\t\tconst me0 = me[ 0 ], me1 = me[ 1 ], me2 = me[ 2 ], me3 = me[ 3 ];\n\t\tconst me4 = me[ 4 ], me5 = me[ 5 ], me6 = me[ 6 ], me7 = me[ 7 ];\n\t\tconst me8 = me[ 8 ], me9 = me[ 9 ], me10 = me[ 10 ], me11 = me[ 11 ];\n\t\tconst 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 ( object ) {\n\n\t\tconst geometry = object.geometry;\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere$1.copy( geometry.boundingSphere ).applyMatrix4( object.matrixWorld );\n\n\t\treturn this.intersectsSphere( _sphere$1 );\n\n\t},\n\n\tintersectsSprite: function ( sprite ) {\n\n\t\t_sphere$1.center.set( 0, 0, 0 );\n\t\t_sphere$1.radius = 0.7071067811865476;\n\t\t_sphere$1.applyMatrix4( sprite.matrixWorld );\n\n\t\treturn this.intersectsSphere( _sphere$1 );\n\n\t},\n\n\tintersectsSphere: function ( sphere ) {\n\n\t\tconst planes = this.planes;\n\t\tconst center = sphere.center;\n\t\tconst negRadius = - sphere.radius;\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tconst 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 ( box ) {\n\n\t\tconst planes = this.planes;\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tconst plane = planes[ i ];\n\n\t\t\t// corner at max distance\n\n\t\t\t_vector$5.x = plane.normal.x > 0 ? box.max.x : box.min.x;\n\t\t\t_vector$5.y = plane.normal.y > 0 ? box.max.y : box.min.y;\n\t\t\t_vector$5.z = plane.normal.z > 0 ? box.max.z : box.min.z;\n\n\t\t\tif ( plane.distanceToPoint( _vector$5 ) < 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\tcontainsPoint: function ( point ) {\n\n\t\tconst planes = this.planes;\n\n\t\tfor ( let 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\n/**\n * Uniforms library for shared webgl shaders\n */\n\nconst 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\t\tuv2Transform: { 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\tlightProbe: { value: [] },\n\n\t\tdirectionalLights: { value: [], properties: {\n\t\t\tdirection: {},\n\t\t\tcolor: {}\n\t\t} },\n\n\t\tdirectionalLightShadows: { value: [], properties: {\n\t\t\tshadowBias: {},\n\t\t\tshadowNormalBias: {},\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\t\t} },\n\n\t\tspotLightShadows: { value: [], properties: {\n\t\t\tshadowBias: {},\n\t\t\tshadowNormalBias: {},\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\t\t} },\n\n\t\tpointLightShadows: { value: [], properties: {\n\t\t\tshadowBias: {},\n\t\t\tshadowNormalBias: {},\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\talphaMap: { value: null },\n\t\tuvTransform: { value: new Matrix3() }\n\n\t},\n\n\tsprite: {\n\n\t\tdiffuse: { value: new Color( 0xeeeeee ) },\n\t\topacity: { value: 1.0 },\n\t\tcenter: { value: new Vector2( 0.5, 0.5 ) },\n\t\trotation: { value: 0.0 },\n\t\tmap: { value: null },\n\t\talphaMap: { value: null },\n\t\tuvTransform: { value: new Matrix3() }\n\n\t}\n\n};\n\nfunction WebGLAnimation() {\n\n\tlet context = null;\n\tlet isAnimating = false;\n\tlet animationLoop = null;\n\tlet requestId = null;\n\n\tfunction onAnimationFrame( time, frame ) {\n\n\t\tanimationLoop( time, frame );\n\n\t\trequestId = context.requestAnimationFrame( onAnimationFrame );\n\n\t}\n\n\treturn {\n\n\t\tstart: function () {\n\n\t\t\tif ( isAnimating === true ) return;\n\t\t\tif ( animationLoop === null ) return;\n\n\t\t\trequestId = context.requestAnimationFrame( onAnimationFrame );\n\n\t\t\tisAnimating = true;\n\n\t\t},\n\n\t\tstop: function () {\n\n\t\t\tcontext.cancelAnimationFrame( requestId );\n\n\t\t\tisAnimating = false;\n\n\t\t},\n\n\t\tsetAnimationLoop: function ( callback ) {\n\n\t\t\tanimationLoop = callback;\n\n\t\t},\n\n\t\tsetContext: function ( value ) {\n\n\t\t\tcontext = value;\n\n\t\t}\n\n\t};\n\n}\n\nfunction WebGLAttributes( gl, capabilities ) {\n\n\tconst isWebGL2 = capabilities.isWebGL2;\n\n\tconst buffers = new WeakMap();\n\n\tfunction createBuffer( attribute, bufferType ) {\n\n\t\tconst array = attribute.array;\n\t\tconst usage = attribute.usage;\n\n\t\tconst 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\tlet type = 5126;\n\n\t\tif ( array instanceof Float32Array ) {\n\n\t\t\ttype = 5126;\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 = 5123;\n\n\t\t} else if ( array instanceof Int16Array ) {\n\n\t\t\ttype = 5122;\n\n\t\t} else if ( array instanceof Uint32Array ) {\n\n\t\t\ttype = 5125;\n\n\t\t} else if ( array instanceof Int32Array ) {\n\n\t\t\ttype = 5124;\n\n\t\t} else if ( array instanceof Int8Array ) {\n\n\t\t\ttype = 5120;\n\n\t\t} else if ( array instanceof Uint8Array ) {\n\n\t\t\ttype = 5121;\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\tconst array = attribute.array;\n\t\tconst updateRange = attribute.updateRange;\n\n\t\tgl.bindBuffer( bufferType, buffer );\n\n\t\tif ( 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 {\n\n\t\t\tif ( isWebGL2 ) {\n\n\t\t\t\tgl.bufferSubData( bufferType, updateRange.offset * array.BYTES_PER_ELEMENT,\n\t\t\t\t\tarray, updateRange.offset, updateRange.count );\n\n\t\t\t} else {\n\n\t\t\t\tgl.bufferSubData( bufferType, updateRange.offset * array.BYTES_PER_ELEMENT,\n\t\t\t\t\tarray.subarray( updateRange.offset, updateRange.offset + updateRange.count ) );\n\n\t\t\t}\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\tconst 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\tconst 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// 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\tconst width_half = width / 2;\n\tconst height_half = height / 2;\n\n\tconst gridX = Math.floor( widthSegments ) || 1;\n\tconst gridY = Math.floor( heightSegments ) || 1;\n\n\tconst gridX1 = gridX + 1;\n\tconst gridY1 = gridY + 1;\n\n\tconst segment_width = width / gridX;\n\tconst segment_height = height / gridY;\n\n\t// buffers\n\n\tconst indices = [];\n\tconst vertices = [];\n\tconst normals = [];\n\tconst uvs = [];\n\n\t// generate vertices, normals and uvs\n\n\tfor ( let iy = 0; iy < gridY1; iy ++ ) {\n\n\t\tconst y = iy * segment_height - height_half;\n\n\t\tfor ( let ix = 0; ix < gridX1; ix ++ ) {\n\n\t\t\tconst 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 ( let iy = 0; iy < gridY; iy ++ ) {\n\n\t\tfor ( let ix = 0; ix < gridX; ix ++ ) {\n\n\t\t\tconst a = ix + gridX1 * iy;\n\t\t\tconst b = ix + gridX1 * ( iy + 1 );\n\t\t\tconst c = ( ix + 1 ) + gridX1 * ( iy + 1 );\n\t\t\tconst 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.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n}\n\nPlaneBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nPlaneBufferGeometry.prototype.constructor = PlaneBufferGeometry;\n\nvar alphamap_fragment = \"#ifdef USE_ALPHAMAP\\n\\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\\n#endif\";\n\nvar alphamap_pars_fragment = \"#ifdef USE_ALPHAMAP\\n\\tuniform sampler2D alphaMap;\\n#endif\";\n\nvar alphatest_fragment = \"#ifdef ALPHATEST\\n\\tif ( diffuseColor.a < ALPHATEST ) discard;\\n#endif\";\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( STANDARD )\\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\nvar aomap_pars_fragment = \"#ifdef USE_AOMAP\\n\\tuniform sampler2D aoMap;\\n\\tuniform float aoMapIntensity;\\n#endif\";\n\nvar begin_vertex = \"vec3 transformed = vec3( position );\";\n\nvar beginnormal_vertex = \"vec3 objectNormal = vec3( normal );\\n#ifdef USE_TANGENT\\n\\tvec3 objectTangent = vec3( tangent.xyz );\\n#endif\";\n\nvar bsdfs = \"vec2 integrateSpecularBRDF( const in float dotNV, const in float roughness ) {\\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\\treturn vec2( -1.04, 1.04 ) * a004 + r.zw;\\n}\\nfloat punctualLightIntensityToIrradianceFactor( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\\n#if defined ( PHYSICALLY_CORRECT_LIGHTS )\\n\\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\\n\\tif( cutoffDistance > 0.0 ) {\\n\\t\\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\\n\\t}\\n\\treturn distanceFalloff;\\n#else\\n\\tif( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\\n\\t\\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\\n\\t}\\n\\treturn 1.0;\\n#endif\\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}\\nvec3 F_Schlick_RoughnessDependent( const in vec3 F0, const in float dotNV, const in float roughness ) {\\n\\tfloat fresnel = exp2( ( -5.55473 * dotNV - 6.98316 ) * dotNV );\\n\\tvec3 Fr = max( vec3( 1.0 - roughness ), F0 ) - F0;\\n\\treturn Fr * fresnel + F0;\\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 vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\\n\\tfloat alpha = pow2( roughness );\\n\\tvec3 halfDir = normalize( incidentLight.direction + viewDir );\\n\\tfloat dotNL = saturate( dot( normal, incidentLight.direction ) );\\n\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\n\\tfloat dotNH = saturate( dot( 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 vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\\n\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\n\\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\\n\\treturn specularColor * brdf.x + brdf.y;\\n}\\nvoid BRDF_Specular_Multiscattering_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\\n\\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\\n\\tvec3 F = F_Schlick_RoughnessDependent( specularColor, dotNV, roughness );\\n\\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\\n\\tvec3 FssEss = F * brdf.x + brdf.y;\\n\\tfloat Ess = brdf.x + brdf.y;\\n\\tfloat Ems = 1.0 - Ess;\\n\\tvec3 Favg = specularColor + ( 1.0 - specularColor ) * 0.047619;\\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\\n\\tsingleScatter += FssEss;\\n\\tmultiScatter += Fms * Ems;\\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#if defined( USE_SHEEN )\\nfloat D_Charlie(float roughness, float NoH) {\\n\\tfloat invAlpha = 1.0 / roughness;\\n\\tfloat cos2h = NoH * NoH;\\n\\tfloat sin2h = max(1.0 - cos2h, 0.0078125);\\treturn (2.0 + invAlpha) * pow(sin2h, invAlpha * 0.5) / (2.0 * PI);\\n}\\nfloat V_Neubelt(float NoV, float NoL) {\\n\\treturn saturate(1.0 / (4.0 * (NoL + NoV - NoL * NoV)));\\n}\\nvec3 BRDF_Specular_Sheen( const in float roughness, const in vec3 L, const in GeometricContext geometry, vec3 specularColor ) {\\n\\tvec3 N = geometry.normal;\\n\\tvec3 V = geometry.viewDir;\\n\\tvec3 H = normalize( V + L );\\n\\tfloat dotNH = saturate( dot( N, H ) );\\n\\treturn specularColor * D_Charlie( roughness, dotNH ) * V_Neubelt( dot(N, V), dot(N, L) );\\n}\\n#endif\";\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\\tfDet *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\\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\nvar clipping_planes_fragment = \"#if NUM_CLIPPING_PLANES > 0\\n\\tvec4 plane;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\\n\\t\\tplane = clippingPlanes[ i ];\\n\\t\\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\\n\\t\\tbool clipped = true;\\n\\t\\t#pragma unroll_loop_start\\n\\t\\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\\n\\t\\t\\tplane = clippingPlanes[ i ];\\n\\t\\t\\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\\n\\t\\t}\\n\\t\\t#pragma unroll_loop_end\\n\\t\\tif ( clipped ) discard;\\n\\t#endif\\n#endif\";\n\nvar clipping_planes_pars_fragment = \"#if NUM_CLIPPING_PLANES > 0\\n\\tvarying vec3 vClipPosition;\\n\\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\\n#endif\";\n\nvar clipping_planes_pars_vertex = \"#if NUM_CLIPPING_PLANES > 0\\n\\tvarying vec3 vClipPosition;\\n#endif\";\n\nvar clipping_planes_vertex = \"#if NUM_CLIPPING_PLANES > 0\\n\\tvClipPosition = - mvPosition.xyz;\\n#endif\";\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\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.141592653589793\\n#define PI2 6.283185307179586\\n#define PI_HALF 1.5707963267948966\\n#define RECIPROCAL_PI 0.3183098861837907\\n#define RECIPROCAL_PI2 0.15915494309189535\\n#define EPSILON 1e-6\\n#ifndef saturate\\n#define saturate(a) clamp( a, 0.0, 1.0 )\\n#endif\\n#define whiteComplement(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}\\n#ifdef HIGH_PRECISION\\n\\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\\n#else\\n\\tfloat max3( vec3 v ) { return max( max( v.x, v.y ), v.z ); }\\n\\tfloat precisionSafeLength( vec3 v ) {\\n\\t\\tfloat maxComponent = max3( abs( v ) );\\n\\t\\treturn length( v / maxComponent ) * maxComponent;\\n\\t}\\n#endif\\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#ifdef CLEARCOAT\\n\\tvec3 clearcoatNormal;\\n#endif\\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}\\nbool isPerspectiveMatrix( mat4 m ) {\\n\\treturn m[ 2 ][ 3 ] == - 1.0;\\n}\\nvec2 equirectUv( in vec3 dir ) {\\n\\tfloat u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\\n\\tfloat v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\\n\\treturn vec2( u, v );\\n}\";\n\nvar cube_uv_reflection_fragment = \"#ifdef ENVMAP_TYPE_CUBE_UV\\n#define cubeUV_maxMipLevel 8.0\\n#define cubeUV_minMipLevel 4.0\\n#define cubeUV_maxTileSize 256.0\\n#define cubeUV_minTileSize 16.0\\nfloat getFace(vec3 direction) {\\n vec3 absDirection = abs(direction);\\n float face = -1.0;\\n if (absDirection.x > absDirection.z) {\\n if (absDirection.x > absDirection.y)\\n face = direction.x > 0.0 ? 0.0 : 3.0;\\n else\\n face = direction.y > 0.0 ? 1.0 : 4.0;\\n } else {\\n if (absDirection.z > absDirection.y)\\n face = direction.z > 0.0 ? 2.0 : 5.0;\\n else\\n face = direction.y > 0.0 ? 1.0 : 4.0;\\n }\\n return face;\\n}\\nvec2 getUV(vec3 direction, float face) {\\n vec2 uv;\\n if (face == 0.0) {\\n uv = vec2(direction.z, direction.y) / abs(direction.x); } else if (face == 1.0) {\\n uv = vec2(-direction.x, -direction.z) / abs(direction.y); } else if (face == 2.0) {\\n uv = vec2(-direction.x, direction.y) / abs(direction.z); } else if (face == 3.0) {\\n uv = vec2(-direction.z, direction.y) / abs(direction.x); } else if (face == 4.0) {\\n uv = vec2(-direction.x, direction.z) / abs(direction.y); } else {\\n uv = vec2(direction.x, direction.y) / abs(direction.z); }\\n return 0.5 * (uv + 1.0);\\n}\\nvec3 bilinearCubeUV(sampler2D envMap, vec3 direction, float mipInt) {\\n float face = getFace(direction);\\n float filterInt = max(cubeUV_minMipLevel - mipInt, 0.0);\\n mipInt = max(mipInt, cubeUV_minMipLevel);\\n float faceSize = exp2(mipInt);\\n float texelSize = 1.0 / (3.0 * cubeUV_maxTileSize);\\n vec2 uv = getUV(direction, face) * (faceSize - 1.0);\\n vec2 f = fract(uv);\\n uv += 0.5 - f;\\n if (face > 2.0) {\\n uv.y += faceSize;\\n face -= 3.0;\\n }\\n uv.x += face * faceSize;\\n if(mipInt < cubeUV_maxMipLevel){\\n uv.y += 2.0 * cubeUV_maxTileSize;\\n }\\n uv.y += filterInt * 2.0 * cubeUV_minTileSize;\\n uv.x += 3.0 * max(0.0, cubeUV_maxTileSize - 2.0 * faceSize);\\n uv *= texelSize;\\n vec3 tl = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\\n uv.x += texelSize;\\n vec3 tr = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\\n uv.y += texelSize;\\n vec3 br = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\\n uv.x -= texelSize;\\n vec3 bl = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\\n vec3 tm = mix(tl, tr, f.x);\\n vec3 bm = mix(bl, br, f.x);\\n return mix(tm, bm, f.y);\\n}\\n#define r0 1.0\\n#define v0 0.339\\n#define m0 -2.0\\n#define r1 0.8\\n#define v1 0.276\\n#define m1 -1.0\\n#define r4 0.4\\n#define v4 0.046\\n#define m4 2.0\\n#define r5 0.305\\n#define v5 0.016\\n#define m5 3.0\\n#define r6 0.21\\n#define v6 0.0038\\n#define m6 4.0\\nfloat roughnessToMip(float roughness) {\\n float mip = 0.0;\\n if (roughness >= r1) {\\n mip = (r0 - roughness) * (m1 - m0) / (r0 - r1) + m0;\\n } else if (roughness >= r4) {\\n mip = (r1 - roughness) * (m4 - m1) / (r1 - r4) + m1;\\n } else if (roughness >= r5) {\\n mip = (r4 - roughness) * (m5 - m4) / (r4 - r5) + m4;\\n } else if (roughness >= r6) {\\n mip = (r5 - roughness) * (m6 - m5) / (r5 - r6) + m5;\\n } else {\\n mip = -2.0 * log2(1.16 * roughness); }\\n return mip;\\n}\\nvec4 textureCubeUV(sampler2D envMap, vec3 sampleDir, float roughness) {\\n float mip = clamp(roughnessToMip(roughness), m0, cubeUV_maxMipLevel);\\n float mipF = fract(mip);\\n float mipInt = floor(mip);\\n vec3 color0 = bilinearCubeUV(envMap, sampleDir, mipInt);\\n if (mipF == 0.0) {\\n return vec4(color0, 1.0);\\n } else {\\n vec3 color1 = bilinearCubeUV(envMap, sampleDir, mipInt + 1.0);\\n return vec4(mix(color0, color1, mipF), 1.0);\\n }\\n}\\n#endif\";\n\nvar defaultnormal_vertex = \"vec3 transformedNormal = objectNormal;\\n#ifdef USE_INSTANCING\\n\\tmat3 m = mat3( instanceMatrix );\\n\\ttransformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );\\n\\ttransformedNormal = m * transformedNormal;\\n#endif\\ntransformedNormal = normalMatrix * transformedNormal;\\n#ifdef FLIP_SIDED\\n\\ttransformedNormal = - transformedNormal;\\n#endif\\n#ifdef USE_TANGENT\\n\\tvec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;\\n\\t#ifdef FLIP_SIDED\\n\\t\\ttransformedTangent = - transformedTangent;\\n\\t#endif\\n#endif\";\n\nvar displacementmap_pars_vertex = \"#ifdef USE_DISPLACEMENTMAP\\n\\tuniform sampler2D displacementMap;\\n\\tuniform float displacementScale;\\n\\tuniform float displacementBias;\\n#endif\";\n\nvar displacementmap_vertex = \"#ifdef USE_DISPLACEMENTMAP\\n\\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias );\\n#endif\";\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\nvar emissivemap_pars_fragment = \"#ifdef USE_EMISSIVEMAP\\n\\tuniform sampler2D emissiveMap;\\n#endif\";\n\nvar encodings_fragment = \"gl_FragColor = linearToOutputTexel( gl_FragColor );\";\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.rgb, vec3( gammaFactor ) ), value.a );\\n}\\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\\n\\treturn vec4( pow( value.rgb, vec3( 1.0 / gammaFactor ) ), value.a );\\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.a );\\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.a );\\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.rgb * value.a * maxRange, 1.0 );\\n}\\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\\n\\tfloat maxRGB = max( value.r, 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.r, max( value.g, value.b ) );\\n\\tfloat D = max( maxRange / maxRGB, 1.0 );\\n\\tD = clamp( floor( D ) / 255.0, 0.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 = cLogLuvM * value.rgb;\\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 = cLogLuvInverseM * Xp_Y_XYZp.rgb;\\n\\treturn vec4( max( vRGB, 0.0 ), 1.0 );\\n}\";\n\nvar envmap_fragment = \"#ifdef USE_ENVMAP\\n\\t#ifdef ENV_WORLDPOS\\n\\t\\tvec3 cameraToFrag;\\n\\t\\t\\n\\t\\tif ( isOrthographic ) {\\n\\t\\t\\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\\n\\t\\t} else {\\n\\t\\t\\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\\n\\t\\t}\\n\\t\\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\\n\\t\\t#ifdef ENVMAP_MODE_REFLECTION\\n\\t\\t\\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\\n\\t\\t#else\\n\\t\\t\\tvec3 reflectVec = refract( cameraToFrag, 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_CUBE_UV )\\n\\t\\tvec4 envColor = textureCubeUV( envMap, reflectVec, 0.0 );\\n\\t#elif defined( ENVMAP_TYPE_EQUIREC )\\n\\t\\treflectVec = normalize( reflectVec );\\n\\t\\tvec2 sampleUV = equirectUv( reflectVec );\\n\\t\\tvec4 envColor = texture2D( envMap, sampleUV );\\n\\t#else\\n\\t\\tvec4 envColor = vec4( 0.0 );\\n\\t#endif\\n\\t#ifndef ENVMAP_TYPE_CUBE_UV\\n\\t\\tenvColor = envMapTexelToLinear( envColor );\\n\\t#endif\\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\nvar envmap_common_pars_fragment = \"#ifdef USE_ENVMAP\\n\\tuniform float envMapIntensity;\\n\\tuniform float flipEnvMap;\\n\\tuniform int maxMipLevel;\\n\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\tuniform samplerCube envMap;\\n\\t#else\\n\\t\\tuniform sampler2D envMap;\\n\\t#endif\\n\\t\\n#endif\";\n\nvar envmap_pars_fragment = \"#ifdef USE_ENVMAP\\n\\tuniform float reflectivity;\\n\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\\n\\t\\t#define ENV_WORLDPOS\\n\\t#endif\\n\\t#ifdef ENV_WORLDPOS\\n\\t\\tvarying vec3 vWorldPosition;\\n\\t\\tuniform float refractionRatio;\\n\\t#else\\n\\t\\tvarying vec3 vReflect;\\n\\t#endif\\n#endif\";\n\nvar envmap_pars_vertex = \"#ifdef USE_ENVMAP\\n\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) ||defined( PHONG )\\n\\t\\t#define ENV_WORLDPOS\\n\\t#endif\\n\\t#ifdef ENV_WORLDPOS\\n\\t\\t\\n\\t\\tvarying vec3 vWorldPosition;\\n\\t#else\\n\\t\\tvarying vec3 vReflect;\\n\\t\\tuniform float refractionRatio;\\n\\t#endif\\n#endif\";\n\nvar envmap_vertex = \"#ifdef USE_ENVMAP\\n\\t#ifdef ENV_WORLDPOS\\n\\t\\tvWorldPosition = worldPosition.xyz;\\n\\t#else\\n\\t\\tvec3 cameraToVertex;\\n\\t\\tif ( isOrthographic ) {\\n\\t\\t\\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\\n\\t\\t} else {\\n\\t\\t\\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\\n\\t\\t}\\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\nvar fog_vertex = \"#ifdef USE_FOG\\n\\tfogDepth = - mvPosition.z;\\n#endif\";\n\nvar fog_pars_vertex = \"#ifdef USE_FOG\\n\\tvarying float fogDepth;\\n#endif\";\n\nvar fog_fragment = \"#ifdef USE_FOG\\n\\t#ifdef FOG_EXP2\\n\\t\\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * fogDepth * fogDepth );\\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\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\nvar gradientmap_pars_fragment = \"#ifdef USE_GRADIENTMAP\\n\\tuniform sampler2D gradientMap;\\n#endif\\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\\n\\tfloat dotNL = dot( normal, lightDirection );\\n\\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\\n\\t#ifdef USE_GRADIENTMAP\\n\\t\\treturn texture2D( gradientMap, coord ).rgb;\\n\\t#else\\n\\t\\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\\n\\t#endif\\n}\";\n\nvar lightmap_fragment = \"#ifdef USE_LIGHTMAP\\n\\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\\n\\treflectedLight.indirectDiffuse += PI * lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\\n#endif\";\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 = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz );\\nGeometricContext backGeometry;\\nbackGeometry.position = geometry.position;\\nbackGeometry.normal = -geometry.normal;\\nbackGeometry.viewDir = geometry.viewDir;\\nvLightFront = vec3( 0.0 );\\nvIndirectFront = vec3( 0.0 );\\n#ifdef DOUBLE_SIDED\\n\\tvLightBack = vec3( 0.0 );\\n\\tvIndirectBack = vec3( 0.0 );\\n#endif\\nIncidentLight directLight;\\nfloat dotNL;\\nvec3 directLightColor_Diffuse;\\nvIndirectFront += getAmbientLightIrradiance( ambientLightColor );\\nvIndirectFront += getLightProbeIrradiance( lightProbe, geometry );\\n#ifdef DOUBLE_SIDED\\n\\tvIndirectBack += getAmbientLightIrradiance( ambientLightColor );\\n\\tvIndirectBack += getLightProbeIrradiance( lightProbe, backGeometry );\\n#endif\\n#if NUM_POINT_LIGHTS > 0\\n\\t#pragma unroll_loop_start\\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\\t#pragma unroll_loop_end\\n#endif\\n#if NUM_SPOT_LIGHTS > 0\\n\\t#pragma unroll_loop_start\\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\\t#pragma unroll_loop_end\\n#endif\\n#if NUM_DIR_LIGHTS > 0\\n\\t#pragma unroll_loop_start\\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\\t#pragma unroll_loop_end\\n#endif\\n#if NUM_HEMI_LIGHTS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\\n\\t\\tvIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\\n\\t\\t#endif\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\";\n\nvar lights_pars_begin = \"uniform bool receiveShadow;\\nuniform vec3 ambientLightColor;\\nuniform vec3 lightProbe[ 9 ];\\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\\n\\tfloat x = normal.x, y = normal.y, z = normal.z;\\n\\tvec3 result = shCoefficients[ 0 ] * 0.886227;\\n\\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\\n\\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\\n\\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\\n\\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\\n\\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\\n\\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\\n\\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\\n\\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\\n\\treturn result;\\n}\\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in GeometricContext geometry ) {\\n\\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\\n\\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\\n\\treturn irradiance;\\n}\\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};\\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};\\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};\\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\nvar envmap_physical_pars_fragment = \"#if defined( USE_ENVMAP )\\n\\t#ifdef ENVMAP_MODE_REFRACTION\\n\\t\\tuniform float refractionRatio;\\n\\t#endif\\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\\tvec4 envMapColor = textureCubeUV( envMap, worldNormal, 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 roughness, const in int maxMIPLevel ) {\\n\\t\\tfloat maxMIPLevelScalar = float( maxMIPLevel );\\n\\t\\tfloat sigma = PI * roughness * roughness / ( 1.0 + roughness );\\n\\t\\tfloat desiredMIPLevel = maxMIPLevelScalar + log2( sigma );\\n\\t\\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\\n\\t}\\n\\tvec3 getLightProbeIndirectRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in int maxMIPLevel ) {\\n\\t\\t#ifdef ENVMAP_MODE_REFLECTION\\n\\t\\t vec3 reflectVec = reflect( -viewDir, normal );\\n\\t\\t reflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\\n\\t\\t#else\\n\\t\\t vec3 reflectVec = refract( -viewDir, normal, refractionRatio );\\n\\t\\t#endif\\n\\t\\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\\n\\t\\tfloat specularMIPLevel = getSpecularMIPLevel( roughness, 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\\tvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );\\n\\t\\t#elif defined( ENVMAP_TYPE_EQUIREC )\\n\\t\\t\\tvec2 sampleUV = equirectUv( reflectVec );\\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#endif\\n\\t\\treturn envMapColor.rgb * envMapIntensity;\\n\\t}\\n#endif\";\n\nvar lights_toon_fragment = \"ToonMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb;\";\n\nvar lights_toon_pars_fragment = \"varying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\nstruct ToonMaterial {\\n\\tvec3 diffuseColor;\\n};\\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\\n\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\tirradiance *= PI;\\n\\t#endif\\n\\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_Toon\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_Toon\\n#define Material_LightProbeLOD( material )\\t(0)\";\n\nvar lights_phong_fragment = \"BlinnPhongMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb;\\nmaterial.specularColor = specular;\\nmaterial.specularShininess = shininess;\\nmaterial.specularStrength = specularStrength;\";\n\nvar lights_phong_pars_fragment = \"varying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\nstruct BlinnPhongMaterial {\\n\\tvec3 diffuseColor;\\n\\tvec3 specularColor;\\n\\tfloat specularShininess;\\n\\tfloat specularStrength;\\n};\\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial 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\\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\nvar lights_physical_fragment = \"PhysicalMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\\nvec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );\\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\\nmaterial.specularRoughness = max( roughnessFactor, 0.0525 );material.specularRoughness += geometryRoughness;\\nmaterial.specularRoughness = min( material.specularRoughness, 1.0 );\\n#ifdef REFLECTIVITY\\n\\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\\n#else\\n\\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\\n#endif\\n#ifdef CLEARCOAT\\n\\tmaterial.clearcoat = clearcoat;\\n\\tmaterial.clearcoatRoughness = clearcoatRoughness;\\n\\t#ifdef USE_CLEARCOATMAP\\n\\t\\tmaterial.clearcoat *= texture2D( clearcoatMap, vUv ).x;\\n\\t#endif\\n\\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\\n\\t\\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).y;\\n\\t#endif\\n\\tmaterial.clearcoat = saturate( material.clearcoat );\\tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\\n\\tmaterial.clearcoatRoughness += geometryRoughness;\\n\\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\\n#endif\\n#ifdef USE_SHEEN\\n\\tmaterial.sheenColor = sheen;\\n#endif\";\n\nvar lights_physical_pars_fragment = \"struct PhysicalMaterial {\\n\\tvec3 diffuseColor;\\n\\tfloat specularRoughness;\\n\\tvec3 specularColor;\\n#ifdef CLEARCOAT\\n\\tfloat clearcoat;\\n\\tfloat clearcoatRoughness;\\n#endif\\n#ifdef USE_SHEEN\\n\\tvec3 sheenColor;\\n#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#ifdef CLEARCOAT\\n\\t\\tfloat ccDotNL = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\\n\\t\\tvec3 ccIrradiance = ccDotNL * directLight.color;\\n\\t\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\t\\tccIrradiance *= PI;\\n\\t\\t#endif\\n\\t\\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\\n\\t\\treflectedLight.directSpecular += ccIrradiance * material.clearcoat * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\\n\\t#else\\n\\t\\tfloat clearcoatDHR = 0.0;\\n\\t#endif\\n\\t#ifdef USE_SHEEN\\n\\t\\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_Sheen(\\n\\t\\t\\tmaterial.specularRoughness,\\n\\t\\t\\tdirectLight.direction,\\n\\t\\t\\tgeometry,\\n\\t\\t\\tmaterial.sheenColor\\n\\t\\t);\\n\\t#else\\n\\t\\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.normal, material.specularColor, material.specularRoughness);\\n\\t#endif\\n\\treflectedLight.directDiffuse += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\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 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\\n\\t#ifdef CLEARCOAT\\n\\t\\tfloat ccDotNV = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\\n\\t\\treflectedLight.indirectSpecular += clearcoatRadiance * material.clearcoat * BRDF_Specular_GGX_Environment( geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\\n\\t\\tfloat ccDotNL = ccDotNV;\\n\\t\\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\\n\\t#else\\n\\t\\tfloat clearcoatDHR = 0.0;\\n\\t#endif\\n\\tfloat clearcoatInv = 1.0 - clearcoatDHR;\\n\\tvec3 singleScattering = vec3( 0.0 );\\n\\tvec3 multiScattering = vec3( 0.0 );\\n\\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\\n\\tBRDF_Specular_Multiscattering_Environment( geometry, material.specularColor, material.specularRoughness, singleScattering, multiScattering );\\n\\tvec3 diffuse = material.diffuseColor * ( 1.0 - ( singleScattering + multiScattering ) );\\n\\treflectedLight.indirectSpecular += clearcoatInv * radiance * singleScattering;\\n\\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\\n\\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\\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\\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\nvar lights_fragment_begin = \"\\nGeometricContext geometry;\\ngeometry.position = - vViewPosition;\\ngeometry.normal = normal;\\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\\n#ifdef CLEARCOAT\\n\\tgeometry.clearcoatNormal = clearcoatNormal;\\n#endif\\nIncidentLight directLight;\\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\\n\\tPointLight pointLight;\\n\\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\\n\\tPointLightShadow pointLightShadow;\\n\\t#endif\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\\n\\t\\tpointLight = pointLights[ i ];\\n\\t\\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\\n\\t\\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\\n\\t\\tpointLightShadow = pointLightShadows[ i ];\\n\\t\\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometry, material, reflectedLight );\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\\n\\tSpotLight spotLight;\\n\\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\\n\\tSpotLightShadow spotLightShadow;\\n\\t#endif\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\\n\\t\\tspotLight = spotLights[ i ];\\n\\t\\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\\n\\t\\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\\n\\t\\tspotLightShadow = spotLightShadows[ i ];\\n\\t\\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometry, material, reflectedLight );\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\\n\\tDirectionalLight directionalLight;\\n\\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\\n\\tDirectionalLightShadow directionalLightShadow;\\n\\t#endif\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\\n\\t\\tdirectionalLight = directionalLights[ i ];\\n\\t\\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\\n\\t\\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\\n\\t\\tdirectionalLightShadow = directionalLightShadows[ i ];\\n\\t\\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometry, material, reflectedLight );\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\\n\\tRectAreaLight rectAreaLight;\\n\\t#pragma unroll_loop_start\\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\\t#pragma unroll_loop_end\\n#endif\\n#if defined( RE_IndirectDiffuse )\\n\\tvec3 iblIrradiance = vec3( 0.0 );\\n\\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\\n\\tirradiance += getLightProbeIrradiance( lightProbe, geometry );\\n\\t#if ( NUM_HEMI_LIGHTS > 0 )\\n\\t\\t#pragma unroll_loop_start\\n\\t\\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\\n\\t\\t\\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\\n\\t\\t}\\n\\t\\t#pragma unroll_loop_end\\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\nvar lights_fragment_maps = \"#if defined( RE_IndirectDiffuse )\\n\\t#ifdef USE_LIGHTMAP\\n\\t\\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\\n\\t\\tvec3 lightMapIrradiance = lightMapTexelToLinear( lightMapTexel ).rgb * 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( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\tiblIrradiance += getLightProbeIndirectIrradiance( geometry, maxMipLevel );\\n\\t#endif\\n#endif\\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\\n\\tradiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.normal, material.specularRoughness, maxMipLevel );\\n\\t#ifdef CLEARCOAT\\n\\t\\tclearcoatRadiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness, maxMipLevel );\\n\\t#endif\\n#endif\";\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, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\\n#endif\";\n\nvar logdepthbuf_fragment = \"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\\n\\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\\n#endif\";\n\nvar logdepthbuf_pars_fragment = \"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\\n\\tuniform float logDepthBufFC;\\n\\tvarying float vFragDepth;\\n\\tvarying float vIsPerspective;\\n#endif\";\n\nvar logdepthbuf_pars_vertex = \"#ifdef USE_LOGDEPTHBUF\\n\\t#ifdef USE_LOGDEPTHBUF_EXT\\n\\t\\tvarying float vFragDepth;\\n\\t\\tvarying float vIsPerspective;\\n\\t#else\\n\\t\\tuniform float logDepthBufFC;\\n\\t#endif\\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\\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\\n\\t#else\\n\\t\\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\\n\\t\\t\\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\\n\\t\\t\\tgl_Position.z *= gl_Position.w;\\n\\t\\t}\\n\\t#endif\\n#endif\";\n\nvar map_fragment = \"#ifdef USE_MAP\\n\\tvec4 texelColor = texture2D( map, vUv );\\n\\ttexelColor = mapTexelToLinear( texelColor );\\n\\tdiffuseColor *= texelColor;\\n#endif\";\n\nvar map_pars_fragment = \"#ifdef USE_MAP\\n\\tuniform sampler2D map;\\n#endif\";\n\nvar map_particle_fragment = \"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\\n\\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\\n#endif\\n#ifdef USE_MAP\\n\\tvec4 mapTexel = texture2D( map, uv );\\n\\tdiffuseColor *= mapTexelToLinear( mapTexel );\\n#endif\\n#ifdef USE_ALPHAMAP\\n\\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\\n#endif\";\n\nvar map_particle_pars_fragment = \"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\\n\\tuniform mat3 uvTransform;\\n#endif\\n#ifdef USE_MAP\\n\\tuniform sampler2D map;\\n#endif\\n#ifdef USE_ALPHAMAP\\n\\tuniform sampler2D alphaMap;\\n#endif\";\n\nvar metalnessmap_fragment = \"float metalnessFactor = metalness;\\n#ifdef USE_METALNESSMAP\\n\\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\\n\\tmetalnessFactor *= texelMetalness.b;\\n#endif\";\n\nvar metalnessmap_pars_fragment = \"#ifdef USE_METALNESSMAP\\n\\tuniform sampler2D metalnessMap;\\n#endif\";\n\nvar morphnormal_vertex = \"#ifdef USE_MORPHNORMALS\\n\\tobjectNormal *= morphTargetBaseInfluence;\\n\\tobjectNormal += morphNormal0 * morphTargetInfluences[ 0 ];\\n\\tobjectNormal += morphNormal1 * morphTargetInfluences[ 1 ];\\n\\tobjectNormal += morphNormal2 * morphTargetInfluences[ 2 ];\\n\\tobjectNormal += morphNormal3 * morphTargetInfluences[ 3 ];\\n#endif\";\n\nvar morphtarget_pars_vertex = \"#ifdef USE_MORPHTARGETS\\n\\tuniform float morphTargetBaseInfluence;\\n\\t#ifndef USE_MORPHNORMALS\\n\\t\\tuniform float morphTargetInfluences[ 8 ];\\n\\t#else\\n\\t\\tuniform float morphTargetInfluences[ 4 ];\\n\\t#endif\\n#endif\";\n\nvar morphtarget_vertex = \"#ifdef USE_MORPHTARGETS\\n\\ttransformed *= morphTargetBaseInfluence;\\n\\ttransformed += morphTarget0 * morphTargetInfluences[ 0 ];\\n\\ttransformed += morphTarget1 * morphTargetInfluences[ 1 ];\\n\\ttransformed += morphTarget2 * morphTargetInfluences[ 2 ];\\n\\ttransformed += morphTarget3 * morphTargetInfluences[ 3 ];\\n\\t#ifndef USE_MORPHNORMALS\\n\\t\\ttransformed += morphTarget4 * morphTargetInfluences[ 4 ];\\n\\t\\ttransformed += morphTarget5 * morphTargetInfluences[ 5 ];\\n\\t\\ttransformed += morphTarget6 * morphTargetInfluences[ 6 ];\\n\\t\\ttransformed += morphTarget7 * morphTargetInfluences[ 7 ];\\n\\t#endif\\n#endif\";\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\\t#ifdef USE_TANGENT\\n\\t\\tvec3 tangent = normalize( vTangent );\\n\\t\\tvec3 bitangent = normalize( vBitangent );\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\ttangent = tangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\\n\\t\\t\\tbitangent = bitangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\\n\\t\\t#endif\\n\\t\\t#if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )\\n\\t\\t\\tmat3 vTBN = mat3( tangent, bitangent, normal );\\n\\t\\t#endif\\n\\t#endif\\n#endif\\nvec3 geometryNormal = normal;\";\n\nvar normal_fragment_maps = \"#ifdef OBJECTSPACE_NORMALMAP\\n\\tnormal = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\\n\\t#ifdef FLIP_SIDED\\n\\t\\tnormal = - normal;\\n\\t#endif\\n\\t#ifdef DOUBLE_SIDED\\n\\t\\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\\n\\t#endif\\n\\tnormal = normalize( normalMatrix * normal );\\n#elif defined( TANGENTSPACE_NORMALMAP )\\n\\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\\n\\tmapN.xy *= normalScale;\\n\\t#ifdef USE_TANGENT\\n\\t\\tnormal = normalize( vTBN * mapN );\\n\\t#else\\n\\t\\tnormal = perturbNormal2Arb( -vViewPosition, normal, mapN );\\n\\t#endif\\n#elif defined( USE_BUMPMAP )\\n\\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\\n#endif\";\n\nvar normalmap_pars_fragment = \"#ifdef USE_NORMALMAP\\n\\tuniform sampler2D normalMap;\\n\\tuniform vec2 normalScale;\\n#endif\\n#ifdef OBJECTSPACE_NORMALMAP\\n\\tuniform mat3 normalMatrix;\\n#endif\\n#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )\\n\\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN ) {\\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 );\\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\\tmat3 tsn = mat3( S, T, N );\\n\\t\\tmapN.xy *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\\n\\t\\treturn normalize( tsn * mapN );\\n\\t}\\n#endif\";\n\nvar clearcoat_normal_fragment_begin = \"#ifdef CLEARCOAT\\n\\tvec3 clearcoatNormal = geometryNormal;\\n#endif\";\n\nvar clearcoat_normal_fragment_maps = \"#ifdef USE_CLEARCOAT_NORMALMAP\\n\\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0;\\n\\tclearcoatMapN.xy *= clearcoatNormalScale;\\n\\t#ifdef USE_TANGENT\\n\\t\\tclearcoatNormal = normalize( vTBN * clearcoatMapN );\\n\\t#else\\n\\t\\tclearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN );\\n\\t#endif\\n#endif\";\n\nvar clearcoat_pars_fragment = \"#ifdef USE_CLEARCOATMAP\\n\\tuniform sampler2D clearcoatMap;\\n#endif\\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\\n\\tuniform sampler2D clearcoatRoughnessMap;\\n#endif\\n#ifdef USE_CLEARCOAT_NORMALMAP\\n\\tuniform sampler2D clearcoatNormalMap;\\n\\tuniform vec2 clearcoatNormalScale;\\n#endif\";\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}\\nvec4 pack2HalfToRGBA( vec2 v ) {\\n\\tvec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ));\\n\\treturn vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w);\\n}\\nvec2 unpackRGBATo2Half( vec4 v ) {\\n\\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\\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\nvar premultiplied_alpha_fragment = \"#ifdef PREMULTIPLIED_ALPHA\\n\\tgl_FragColor.rgb *= gl_FragColor.a;\\n#endif\";\n\nvar project_vertex = \"vec4 mvPosition = vec4( transformed, 1.0 );\\n#ifdef USE_INSTANCING\\n\\tmvPosition = instanceMatrix * mvPosition;\\n#endif\\nmvPosition = modelViewMatrix * mvPosition;\\ngl_Position = projectionMatrix * mvPosition;\";\n\nvar dithering_fragment = \"#ifdef DITHERING\\n\\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\\n#endif\";\n\nvar dithering_pars_fragment = \"#ifdef 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\nvar roughnessmap_fragment = \"float roughnessFactor = roughness;\\n#ifdef USE_ROUGHNESSMAP\\n\\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\\n\\troughnessFactor *= texelRoughness.g;\\n#endif\";\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_LIGHT_SHADOWS > 0\\n\\t\\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t\\tstruct DirectionalLightShadow {\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t};\\n\\t\\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\n\\t\\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t\\tstruct SpotLightShadow {\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t};\\n\\t\\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t#endif\\n\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\n\\t\\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t\\tstruct PointLightShadow {\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t\\tfloat shadowCameraNear;\\n\\t\\t\\tfloat shadowCameraFar;\\n\\t\\t};\\n\\t\\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t#endif\\n\\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\\n\\t\\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\\n\\t}\\n\\tvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\\n\\t\\treturn unpackRGBATo2Half( texture2D( shadow, uv ) );\\n\\t}\\n\\tfloat VSMShadow (sampler2D shadow, vec2 uv, float compare ){\\n\\t\\tfloat occlusion = 1.0;\\n\\t\\tvec2 distribution = texture2DDistribution( shadow, uv );\\n\\t\\tfloat hard_shadow = step( compare , distribution.x );\\n\\t\\tif (hard_shadow != 1.0 ) {\\n\\t\\t\\tfloat distance = compare - distribution.x ;\\n\\t\\t\\tfloat variance = max( 0.00000, distribution.y * distribution.y );\\n\\t\\t\\tfloat softness_probability = variance / (variance + distance * distance );\\t\\t\\tsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 );\\t\\t\\tocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\\n\\t\\t}\\n\\t\\treturn occlusion;\\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\\tfloat dx2 = dx0 / 2.0;\\n\\t\\t\\tfloat dy2 = dy0 / 2.0;\\n\\t\\t\\tfloat dx3 = dx1 / 2.0;\\n\\t\\t\\tfloat dy3 = dy1 / 2.0;\\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( dx2, dy2 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), 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( dx2, dy3 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), 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 / 17.0 );\\n\\t\\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\\n\\t\\t\\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\\n\\t\\t\\tfloat dx = texelSize.x;\\n\\t\\t\\tfloat dy = texelSize.y;\\n\\t\\t\\tvec2 uv = shadowCoord.xy;\\n\\t\\t\\tvec2 f = fract( uv * shadowMapSize + 0.5 );\\n\\t\\t\\tuv -= f * texelSize;\\n\\t\\t\\tshadow = (\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ), \\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.x ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ), \\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.x ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ), \\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.y ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ), \\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.y ) +\\n\\t\\t\\t\\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ), \\n\\t\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t\\t f.x ),\\n\\t\\t\\t\\t\\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ), \\n\\t\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t\\t f.x ),\\n\\t\\t\\t\\t\\t f.y )\\n\\t\\t\\t) * ( 1.0 / 9.0 );\\n\\t\\t#elif defined( SHADOWMAP_TYPE_VSM )\\n\\t\\t\\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\\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 ) || defined( SHADOWMAP_TYPE_VSM )\\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\nvar shadowmap_pars_vertex = \"#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\n\\t\\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t\\tstruct DirectionalLightShadow {\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t};\\n\\t\\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\n\\t\\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t\\tstruct SpotLightShadow {\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t};\\n\\t\\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t#endif\\n\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\n\\t\\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t\\tstruct PointLightShadow {\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t\\tfloat shadowCameraNear;\\n\\t\\t\\tfloat shadowCameraFar;\\n\\t\\t};\\n\\t\\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t#endif\\n#endif\";\n\nvar shadowmap_vertex = \"#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0 || NUM_SPOT_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0\\n\\t\\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\\n\\t\\tvec4 shadowWorldPosition;\\n\\t#endif\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\\n\\t\\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias, 0 );\\n\\t\\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * shadowWorldPosition;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\\n\\t\\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n#endif\";\n\nvar shadowmask_pars_fragment = \"float getShadowMask() {\\n\\tfloat shadow = 1.0;\\n\\t#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\n\\tDirectionalLightShadow directionalLight;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tdirectionalLight = directionalLightShadows[ i ];\\n\\t\\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\n\\tSpotLightShadow spotLight;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tspotLight = spotLightShadows[ i ];\\n\\t\\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\n\\tPointLightShadow pointLight;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tpointLight = pointLightShadows[ i ];\\n\\t\\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#endif\\n\\treturn shadow;\\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 highp 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\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\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\\t#ifdef USE_TANGENT\\n\\t\\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\\n\\t#endif\\n#endif\";\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\\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\\n#endif\";\n\nvar tonemapping_pars_fragment = \"#ifndef saturate\\n#define saturate(a) clamp( a, 0.0, 1.0 )\\n#endif\\nuniform float toneMappingExposure;\\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}\\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}\\nvec3 RRTAndODTFit( vec3 v ) {\\n\\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\\n\\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\\n\\treturn a / b;\\n}\\nvec3 ACESFilmicToneMapping( vec3 color ) {\\n\\tconst mat3 ACESInputMat = mat3(\\n\\t\\tvec3( 0.59719, 0.07600, 0.02840 ),\\t\\tvec3( 0.35458, 0.90834, 0.13383 ),\\n\\t\\tvec3( 0.04823, 0.01566, 0.83777 )\\n\\t);\\n\\tconst mat3 ACESOutputMat = mat3(\\n\\t\\tvec3( 1.60475, -0.10208, -0.00327 ),\\t\\tvec3( -0.53108, 1.10813, -0.07276 ),\\n\\t\\tvec3( -0.07367, -0.00605, 1.07602 )\\n\\t);\\n\\tcolor *= toneMappingExposure / 0.6;\\n\\tcolor = ACESInputMat * color;\\n\\tcolor = RRTAndODTFit( color );\\n\\tcolor = ACESOutputMat * color;\\n\\treturn saturate( color );\\n}\\nvec3 CustomToneMapping( vec3 color ) { return color; }\";\n\nvar transmissionmap_fragment = \"#ifdef USE_TRANSMISSIONMAP\\n\\ttotalTransmission *= texture2D( transmissionMap, vUv ).r;\\n#endif\";\n\nvar transmissionmap_pars_fragment = \"#ifdef USE_TRANSMISSIONMAP\\n\\tuniform sampler2D transmissionMap;\\n#endif\";\n\nvar uv_pars_fragment = \"#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) )\\n\\tvarying vec2 vUv;\\n#endif\";\n\nvar uv_pars_vertex = \"#ifdef USE_UV\\n\\t#ifdef UVS_VERTEX_ONLY\\n\\t\\tvec2 vUv;\\n\\t#else\\n\\t\\tvarying vec2 vUv;\\n\\t#endif\\n\\tuniform mat3 uvTransform;\\n#endif\";\n\nvar uv_vertex = \"#ifdef USE_UV\\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\\tuniform mat3 uv2Transform;\\n#endif\";\n\nvar uv2_vertex = \"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\n\\tvUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;\\n#endif\";\n\nvar worldpos_vertex = \"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )\\n\\tvec4 worldPosition = vec4( transformed, 1.0 );\\n\\t#ifdef USE_INSTANCING\\n\\t\\tworldPosition = instanceMatrix * worldPosition;\\n\\t#endif\\n\\tworldPosition = modelMatrix * worldPosition;\\n#endif\";\n\nvar background_frag = \"uniform sampler2D t2D;\\nvarying vec2 vUv;\\nvoid main() {\\n\\tvec4 texColor = texture2D( t2D, vUv );\\n\\tgl_FragColor = mapTexelToLinear( texColor );\\n\\t#include \\n\\t#include \\n}\";\n\nvar background_vert = \"varying vec2 vUv;\\nuniform mat3 uvTransform;\\nvoid main() {\\n\\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\\n\\tgl_Position = vec4( position.xy, 1.0, 1.0 );\\n}\";\n\nvar cube_frag = \"#include \\nuniform float opacity;\\nvarying vec3 vWorldDirection;\\n#include \\nvoid main() {\\n\\tvec3 vReflect = vWorldDirection;\\n\\t#include \\n\\tgl_FragColor = envColor;\\n\\tgl_FragColor.a *= opacity;\\n\\t#include \\n\\t#include \\n}\";\n\nvar cube_vert = \"varying vec3 vWorldDirection;\\n#include \\nvoid main() {\\n\\tvWorldDirection = transformDirection( position, modelMatrix );\\n\\t#include \\n\\t#include \\n\\tgl_Position.z = gl_Position.w;\\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 \\nvarying vec2 vHighPrecisionZW;\\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\\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\\n\\t#if DEPTH_PACKING == 3200\\n\\t\\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\\n\\t#elif DEPTH_PACKING == 3201\\n\\t\\tgl_FragColor = packDepthToRGBA( fragCoordZ );\\n\\t#endif\\n}\";\n\nvar depth_vert = \"#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvarying vec2 vHighPrecisionZW;\\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\\tvHighPrecisionZW = gl_Position.zw;\\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\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\nvar equirect_frag = \"uniform sampler2D tEquirect;\\nvarying vec3 vWorldDirection;\\n#include \\nvoid main() {\\n\\tvec3 direction = normalize( vWorldDirection );\\n\\tvec2 sampleUV = equirectUv( direction );\\n\\tvec4 texColor = texture2D( tEquirect, sampleUV );\\n\\tgl_FragColor = mapTexelToLinear( texColor );\\n\\t#include \\n\\t#include \\n}\";\n\nvar equirect_vert = \"varying vec3 vWorldDirection;\\n#include \\nvoid main() {\\n\\tvWorldDirection = transformDirection( position, modelMatrix );\\n\\t#include \\n\\t#include \\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\nvar linedashed_vert = \"uniform float scale;\\nattribute float lineDistance;\\nvarying float vLineDistance;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\tvLineDistance = scale * lineDistance;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\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 \\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\\n\\t\\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\\n\\t\\treflectedLight.indirectDiffuse += lightMapTexelToLinear( lightMapTexel ).rgb * 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\\t#include \\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\nvar meshlambert_frag = \"uniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float opacity;\\nvarying vec3 vLightFront;\\nvarying vec3 vIndirectFront;\\n#ifdef DOUBLE_SIDED\\n\\tvarying vec3 vLightBack;\\n\\tvarying vec3 vIndirectBack;\\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 \\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#ifdef DOUBLE_SIDED\\n\\t\\treflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vIndirectFront : vIndirectBack;\\n\\t#else\\n\\t\\treflectedLight.indirectDiffuse += vIndirectFront;\\n\\t#endif\\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\nvar meshlambert_vert = \"#define LAMBERT\\nvarying vec3 vLightFront;\\nvarying vec3 vIndirectFront;\\n#ifdef DOUBLE_SIDED\\n\\tvarying vec3 vLightBack;\\n\\tvarying vec3 vIndirectBack;\\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\\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\nvar meshmatcap_frag = \"#define MATCAP\\nuniform vec3 diffuse;\\nuniform float opacity;\\nuniform sampler2D matcap;\\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\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvec3 viewDir = normalize( vViewPosition );\\n\\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\\n\\tvec3 y = cross( viewDir, x );\\n\\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\\n\\t#ifdef USE_MATCAP\\n\\t\\tvec4 matcapColor = texture2D( matcap, uv );\\n\\t\\tmatcapColor = matcapTexelToLinear( matcapColor );\\n\\t#else\\n\\t\\tvec4 matcapColor = vec4( 1.0 );\\n\\t#endif\\n\\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nvar meshmatcap_vert = \"#define MATCAP\\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 \\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#ifndef FLAT_SHADED\\n\\t\\tvNormal = normalize( transformedNormal );\\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\\tvViewPosition = - mvPosition.xyz;\\n}\";\n\nvar meshtoon_frag = \"#define TOON\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\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 \\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\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + 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\nvar meshtoon_vert = \"#define TOON\\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\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\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\nvar meshphysical_frag = \"#define STANDARD\\n#ifdef PHYSICAL\\n\\t#define REFLECTIVITY\\n\\t#define CLEARCOAT\\n\\t#define TRANSMISSION\\n#endif\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float roughness;\\nuniform float metalness;\\nuniform float opacity;\\n#ifdef TRANSMISSION\\n\\tuniform float transmission;\\n#endif\\n#ifdef REFLECTIVITY\\n\\tuniform float reflectivity;\\n#endif\\n#ifdef CLEARCOAT\\n\\tuniform float clearcoat;\\n\\tuniform float clearcoatRoughness;\\n#endif\\n#ifdef USE_SHEEN\\n\\tuniform vec3 sheen;\\n#endif\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n\\t#ifdef USE_TANGENT\\n\\t\\tvarying vec3 vTangent;\\n\\t\\tvarying vec3 vBitangent;\\n\\t#endif\\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 \\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#ifdef TRANSMISSION\\n\\t\\tfloat totalTransmission = transmission;\\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\\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#ifdef TRANSMISSION\\n\\t\\tdiffuseColor.a *= saturate( 1. - totalTransmission + linearToRelativeLuminance( reflectedLight.directSpecular + reflectedLight.indirectSpecular ) );\\n\\t#endif\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nvar meshphysical_vert = \"#define STANDARD\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n\\t#ifdef USE_TANGENT\\n\\t\\tvarying vec3 vTangent;\\n\\t\\tvarying vec3 vBitangent;\\n\\t#endif\\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\\t#ifdef USE_TANGENT\\n\\t\\tvTangent = normalize( transformedTangent );\\n\\t\\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\\n\\t#endif\\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\nvar normal_frag = \"#define NORMAL\\nuniform float opacity;\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\\n\\tvarying vec3 vViewPosition;\\n#endif\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n\\t#ifdef USE_TANGENT\\n\\t\\tvarying vec3 vTangent;\\n\\t\\tvarying vec3 vBitangent;\\n\\t#endif\\n#endif\\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\\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\\n}\";\n\nvar normal_vert = \"#define NORMAL\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\\n\\tvarying vec3 vViewPosition;\\n#endif\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n\\t#ifdef USE_TANGENT\\n\\t\\tvarying vec3 vTangent;\\n\\t\\tvarying vec3 vBitangent;\\n\\t#endif\\n#endif\\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#ifndef FLAT_SHADED\\n\\tvNormal = normalize( transformedNormal );\\n\\t#ifdef USE_TANGENT\\n\\t\\tvTangent = normalize( transformedTangent );\\n\\t\\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\\n\\t#endif\\n#endif\\n\\t#include \\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( TANGENTSPACE_NORMALMAP )\\n\\tvViewPosition = - mvPosition.xyz;\\n#endif\\n}\";\n\nvar points_frag = \"uniform vec3 diffuse;\\nuniform float opacity;\\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\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#include \\n\\tgl_PointSize = size;\\n\\t#ifdef USE_SIZEATTENUATION\\n\\t\\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\\n\\t\\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\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\\t#include \\n\\t#include \\n}\";\n\nvar shadow_vert = \"#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}\";\n\nvar sprite_frag = \"uniform vec3 diffuse;\\nuniform float opacity;\\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}\";\n\nvar sprite_vert = \"uniform float rotation;\\nuniform vec2 center;\\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\\n\\tvec2 scale;\\n\\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\\n\\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\\n\\t#ifndef USE_SIZEATTENUATION\\n\\t\\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\\n\\t\\tif ( isPerspective ) scale *= - mvPosition.z;\\n\\t#endif\\n\\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\\n\\tvec2 rotatedPosition;\\n\\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\\n\\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\\n\\tmvPosition.xy += rotatedPosition;\\n\\tgl_Position = projectionMatrix * mvPosition;\\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst 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_common_pars_fragment: envmap_common_pars_fragment,\n\tenvmap_pars_fragment: envmap_pars_fragment,\n\tenvmap_pars_vertex: envmap_pars_vertex,\n\tenvmap_physical_pars_fragment: envmap_physical_pars_fragment,\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_toon_fragment: lights_toon_fragment,\n\tlights_toon_pars_fragment: lights_toon_pars_fragment,\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\tclearcoat_normal_fragment_begin: clearcoat_normal_fragment_begin,\n\tclearcoat_normal_fragment_maps: clearcoat_normal_fragment_maps,\n\tclearcoat_pars_fragment: clearcoat_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\ttransmissionmap_fragment: transmissionmap_fragment,\n\ttransmissionmap_pars_fragment: transmissionmap_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\tbackground_frag: background_frag,\n\tbackground_vert: background_vert,\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\tmeshmatcap_frag: meshmatcap_frag,\n\tmeshmatcap_vert: meshmatcap_vert,\n\tmeshtoon_frag: meshtoon_frag,\n\tmeshtoon_vert: meshtoon_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\tsprite_frag: sprite_frag,\n\tsprite_vert: sprite_vert\n};\n\nconst ShaderLib = {\n\n\tbasic: {\n\n\t\tuniforms: mergeUniforms( [\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: mergeUniforms( [\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: mergeUniforms( [\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.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: mergeUniforms( [\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: 1.0 },\n\t\t\t\tmetalness: { value: 0.0 },\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\ttoon: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.common,\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}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshtoon_vert,\n\t\tfragmentShader: ShaderChunk.meshtoon_frag\n\n\t},\n\n\tmatcap: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.fog,\n\t\t\t{\n\t\t\t\tmatcap: { value: null }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshmatcap_vert,\n\t\tfragmentShader: ShaderChunk.meshmatcap_frag\n\n\t},\n\n\tpoints: {\n\n\t\tuniforms: mergeUniforms( [\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: mergeUniforms( [\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: mergeUniforms( [\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: mergeUniforms( [\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\tsprite: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.sprite,\n\t\t\tUniformsLib.fog\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.sprite_vert,\n\t\tfragmentShader: ShaderChunk.sprite_frag\n\n\t},\n\n\tbackground: {\n\n\t\tuniforms: {\n\t\t\tuvTransform: { value: new Matrix3() },\n\t\t\tt2D: { value: null },\n\t\t},\n\n\t\tvertexShader: ShaderChunk.background_vert,\n\t\tfragmentShader: ShaderChunk.background_frag\n\n\t},\n\t/* -------------------------------------------------------------------------\n\t//\tCube map shader\n\t ------------------------------------------------------------------------- */\n\n\tcube: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.envmap,\n\t\t\t{\n\t\t\t\topacity: { value: 1.0 }\n\t\t\t}\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: mergeUniforms( [\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: mergeUniforms( [\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: mergeUniforms( [\n\t\tShaderLib.standard.uniforms,\n\t\t{\n\t\t\tclearcoat: { value: 0 },\n\t\t\tclearcoatMap: { value: null },\n\t\t\tclearcoatRoughness: { value: 0 },\n\t\t\tclearcoatRoughnessMap: { value: null },\n\t\t\tclearcoatNormalScale: { value: new Vector2( 1, 1 ) },\n\t\t\tclearcoatNormalMap: { value: null },\n\t\t\tsheen: { value: new Color( 0x000000 ) },\n\t\t\ttransmission: { value: 0 },\n\t\t\ttransmissionMap: { value: null },\n\t\t}\n\t] ),\n\n\tvertexShader: ShaderChunk.meshphysical_vert,\n\tfragmentShader: ShaderChunk.meshphysical_frag\n\n};\n\nfunction WebGLBackground( renderer, state, objects, premultipliedAlpha ) {\n\n\tconst clearColor = new Color( 0x000000 );\n\tlet clearAlpha = 0;\n\n\tlet planeMesh;\n\tlet boxMesh;\n\n\tlet currentBackground = null;\n\tlet currentBackgroundVersion = 0;\n\tlet currentTonemapping = null;\n\n\tfunction render( renderList, scene, camera, forceClear ) {\n\n\t\tlet background = scene.isScene === true ? scene.background : null;\n\n\t\t// Ignore background in AR\n\t\t// TODO: Reconsider this.\n\n\t\tconst xr = renderer.xr;\n\t\tconst session = xr.getSession && xr.getSession();\n\n\t\tif ( session && session.environmentBlendMode === 'additive' ) {\n\n\t\t\tbackground = null;\n\n\t\t}\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 || background.isWebGLCubeRenderTarget || background.mapping === CubeUVReflectionMapping ) ) {\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\tname: 'BackgroundCubeMaterial',\n\t\t\t\t\t\tuniforms: cloneUniforms( 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: false,\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.deleteAttribute( 'normal' );\n\t\t\t\tboxMesh.geometry.deleteAttribute( '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\t// enable code injection for non-built-in material\n\t\t\t\tObject.defineProperty( boxMesh.material, 'envMap', {\n\n\t\t\t\t\tget: function () {\n\n\t\t\t\t\t\treturn this.uniforms.envMap.value;\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t\tobjects.update( boxMesh );\n\n\t\t\t}\n\n\t\t\tconst texture = background.isWebGLCubeRenderTarget ? background.texture : background;\n\n\t\t\tboxMesh.material.uniforms.envMap.value = texture;\n\t\t\tboxMesh.material.uniforms.flipEnvMap.value = texture.isCubeTexture ? - 1 : 1;\n\n\t\t\tif ( currentBackground !== background ||\n\t\t\t\tcurrentBackgroundVersion !== texture.version ||\n\t\t\t\tcurrentTonemapping !== renderer.toneMapping ) {\n\n\t\t\t\tboxMesh.material.needsUpdate = true;\n\n\t\t\t\tcurrentBackground = background;\n\t\t\t\tcurrentBackgroundVersion = texture.version;\n\t\t\t\tcurrentTonemapping = renderer.toneMapping;\n\n\t\t\t}\n\n\t\t\t// push to the pre-sorted opaque render list\n\t\t\trenderList.unshift( boxMesh, boxMesh.geometry, boxMesh.material, 0, 0, null );\n\n\t\t} else if ( background && background.isTexture ) {\n\n\t\t\tif ( planeMesh === undefined ) {\n\n\t\t\t\tplaneMesh = new Mesh(\n\t\t\t\t\tnew PlaneBufferGeometry( 2, 2 ),\n\t\t\t\t\tnew ShaderMaterial( {\n\t\t\t\t\t\tname: 'BackgroundMaterial',\n\t\t\t\t\t\tuniforms: cloneUniforms( ShaderLib.background.uniforms ),\n\t\t\t\t\t\tvertexShader: ShaderLib.background.vertexShader,\n\t\t\t\t\t\tfragmentShader: ShaderLib.background.fragmentShader,\n\t\t\t\t\t\tside: FrontSide,\n\t\t\t\t\t\tdepthTest: false,\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\tplaneMesh.geometry.deleteAttribute( 'normal' );\n\n\t\t\t\t// enable code injection for non-built-in material\n\t\t\t\tObject.defineProperty( planeMesh.material, 'map', {\n\n\t\t\t\t\tget: function () {\n\n\t\t\t\t\t\treturn this.uniforms.t2D.value;\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t\tobjects.update( planeMesh );\n\n\t\t\t}\n\n\t\t\tplaneMesh.material.uniforms.t2D.value = background;\n\n\t\t\tif ( background.matrixAutoUpdate === true ) {\n\n\t\t\t\tbackground.updateMatrix();\n\n\t\t\t}\n\n\t\t\tplaneMesh.material.uniforms.uvTransform.value.copy( background.matrix );\n\n\t\t\tif ( currentBackground !== background ||\n\t\t\t\tcurrentBackgroundVersion !== background.version ||\n\t\t\t\tcurrentTonemapping !== renderer.toneMapping ) {\n\n\t\t\t\tplaneMesh.material.needsUpdate = true;\n\n\t\t\t\tcurrentBackground = background;\n\t\t\t\tcurrentBackgroundVersion = background.version;\n\t\t\t\tcurrentTonemapping = renderer.toneMapping;\n\n\t\t\t}\n\n\n\t\t\t// push to the pre-sorted opaque render list\n\t\t\trenderList.unshift( planeMesh, planeMesh.geometry, planeMesh.material, 0, 0, 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\nfunction WebGLBindingStates( gl, extensions, attributes, capabilities ) {\n\n\tconst maxVertexAttributes = gl.getParameter( 34921 );\n\n\tconst extension = capabilities.isWebGL2 ? null : extensions.get( 'OES_vertex_array_object' );\n\tconst vaoAvailable = capabilities.isWebGL2 || extension !== null;\n\n\tconst bindingStates = {};\n\n\tconst defaultState = createBindingState( null );\n\tlet currentState = defaultState;\n\n\tfunction setup( object, material, program, geometry, index ) {\n\n\t\tlet updateBuffers = false;\n\n\t\tif ( vaoAvailable ) {\n\n\t\t\tconst state = getBindingState( geometry, program, material );\n\n\t\t\tif ( currentState !== state ) {\n\n\t\t\t\tcurrentState = state;\n\t\t\t\tbindVertexArrayObject( currentState.object );\n\n\t\t\t}\n\n\t\t\tupdateBuffers = needsUpdate( geometry );\n\n\t\t\tif ( updateBuffers ) saveCache( geometry );\n\n\t\t} else {\n\n\t\t\tconst wireframe = ( material.wireframe === true );\n\n\t\t\tif ( currentState.geometry !== geometry.id ||\n\t\t\t\tcurrentState.program !== program.id ||\n\t\t\t\tcurrentState.wireframe !== wireframe ) {\n\n\t\t\t\tcurrentState.geometry = geometry.id;\n\t\t\t\tcurrentState.program = program.id;\n\t\t\t\tcurrentState.wireframe = wireframe;\n\n\t\t\t\tupdateBuffers = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( object.isInstancedMesh === true ) {\n\n\t\t\tupdateBuffers = true;\n\n\t\t}\n\n\t\tif ( index !== null ) {\n\n\t\t\tattributes.update( index, 34963 );\n\n\t\t}\n\n\t\tif ( updateBuffers ) {\n\n\t\t\tsetupVertexAttributes( object, material, program, geometry );\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\tgl.bindBuffer( 34963, attributes.get( index ).buffer );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction createVertexArrayObject() {\n\n\t\tif ( capabilities.isWebGL2 ) return gl.createVertexArray();\n\n\t\treturn extension.createVertexArrayOES();\n\n\t}\n\n\tfunction bindVertexArrayObject( vao ) {\n\n\t\tif ( capabilities.isWebGL2 ) return gl.bindVertexArray( vao );\n\n\t\treturn extension.bindVertexArrayOES( vao );\n\n\t}\n\n\tfunction deleteVertexArrayObject( vao ) {\n\n\t\tif ( capabilities.isWebGL2 ) return gl.deleteVertexArray( vao );\n\n\t\treturn extension.deleteVertexArrayOES( vao );\n\n\t}\n\n\tfunction getBindingState( geometry, program, material ) {\n\n\t\tconst wireframe = ( material.wireframe === true );\n\n\t\tlet programMap = bindingStates[ geometry.id ];\n\n\t\tif ( programMap === undefined ) {\n\n\t\t\tprogramMap = {};\n\t\t\tbindingStates[ geometry.id ] = programMap;\n\n\t\t}\n\n\t\tlet stateMap = programMap[ program.id ];\n\n\t\tif ( stateMap === undefined ) {\n\n\t\t\tstateMap = {};\n\t\t\tprogramMap[ program.id ] = stateMap;\n\n\t\t}\n\n\t\tlet state = stateMap[ wireframe ];\n\n\t\tif ( state === undefined ) {\n\n\t\t\tstate = createBindingState( createVertexArrayObject() );\n\t\t\tstateMap[ wireframe ] = state;\n\n\t\t}\n\n\t\treturn state;\n\n\t}\n\n\tfunction createBindingState( vao ) {\n\n\t\tconst newAttributes = [];\n\t\tconst enabledAttributes = [];\n\t\tconst attributeDivisors = [];\n\n\t\tfor ( let i = 0; i < maxVertexAttributes; i ++ ) {\n\n\t\t\tnewAttributes[ i ] = 0;\n\t\t\tenabledAttributes[ i ] = 0;\n\t\t\tattributeDivisors[ i ] = 0;\n\n\t\t}\n\n\t\treturn {\n\n\t\t\t// for backward compatibility on non-VAO support browser\n\t\t\tgeometry: null,\n\t\t\tprogram: null,\n\t\t\twireframe: false,\n\n\t\t\tnewAttributes: newAttributes,\n\t\t\tenabledAttributes: enabledAttributes,\n\t\t\tattributeDivisors: attributeDivisors,\n\t\t\tobject: vao,\n\t\t\tattributes: {}\n\n\t\t};\n\n\t}\n\n\tfunction needsUpdate( geometry ) {\n\n\t\tconst cachedAttributes = currentState.attributes;\n\t\tconst geometryAttributes = geometry.attributes;\n\n\t\tif ( Object.keys( cachedAttributes ).length !== Object.keys( geometryAttributes ).length ) return true;\n\n\t\tfor ( const key in geometryAttributes ) {\n\n\t\t\tconst cachedAttribute = cachedAttributes[ key ];\n\t\t\tconst geometryAttribute = geometryAttributes[ key ];\n\n\t\t\tif ( cachedAttribute.attribute !== geometryAttribute ) return true;\n\n\t\t\tif ( cachedAttribute.data !== geometryAttribute.data ) return true;\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\tfunction saveCache( geometry ) {\n\n\t\tconst cache = {};\n\t\tconst attributes = geometry.attributes;\n\n\t\tfor ( const key in attributes ) {\n\n\t\t\tconst attribute = attributes[ key ];\n\n\t\t\tconst data = {};\n\t\t\tdata.attribute = attribute;\n\n\t\t\tif ( attribute.data ) {\n\n\t\t\t\tdata.data = attribute.data;\n\n\t\t\t}\n\n\t\t\tcache[ key ] = data;\n\n\t\t}\n\n\t\tcurrentState.attributes = cache;\n\n\t}\n\n\tfunction initAttributes() {\n\n\t\tconst newAttributes = currentState.newAttributes;\n\n\t\tfor ( let i = 0, il = newAttributes.length; i < il; i ++ ) {\n\n\t\t\tnewAttributes[ i ] = 0;\n\n\t\t}\n\n\t}\n\n\tfunction enableAttribute( attribute ) {\n\n\t\tenableAttributeAndDivisor( attribute, 0 );\n\n\t}\n\n\tfunction enableAttributeAndDivisor( attribute, meshPerAttribute ) {\n\n\t\tconst newAttributes = currentState.newAttributes;\n\t\tconst enabledAttributes = currentState.enabledAttributes;\n\t\tconst attributeDivisors = currentState.attributeDivisors;\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\tconst extension = capabilities.isWebGL2 ? gl : extensions.get( 'ANGLE_instanced_arrays' );\n\n\t\t\textension[ capabilities.isWebGL2 ? 'vertexAttribDivisor' : 'vertexAttribDivisorANGLE' ]( attribute, meshPerAttribute );\n\t\t\tattributeDivisors[ attribute ] = meshPerAttribute;\n\n\t\t}\n\n\t}\n\n\tfunction disableUnusedAttributes() {\n\n\t\tconst newAttributes = currentState.newAttributes;\n\t\tconst enabledAttributes = currentState.enabledAttributes;\n\n\t\tfor ( let i = 0, il = enabledAttributes.length; i < il; 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 vertexAttribPointer( index, size, type, normalized, stride, offset ) {\n\n\t\tif ( capabilities.isWebGL2 === true && ( type === 5124 || type === 5125 ) ) {\n\n\t\t\tgl.vertexAttribIPointer( index, size, type, stride, offset );\n\n\t\t} else {\n\n\t\t\tgl.vertexAttribPointer( index, size, type, normalized, stride, offset );\n\n\t\t}\n\n\t}\n\n\tfunction setupVertexAttributes( object, material, program, geometry ) {\n\n\t\tif ( capabilities.isWebGL2 === false && ( object.isInstancedMesh || geometry.isInstancedBufferGeometry ) ) {\n\n\t\t\tif ( extensions.get( 'ANGLE_instanced_arrays' ) === null ) return;\n\n\t\t}\n\n\t\tinitAttributes();\n\n\t\tconst geometryAttributes = geometry.attributes;\n\n\t\tconst programAttributes = program.getAttributes();\n\n\t\tconst materialDefaultAttributeValues = material.defaultAttributeValues;\n\n\t\tfor ( const name in programAttributes ) {\n\n\t\t\tconst programAttribute = programAttributes[ name ];\n\n\t\t\tif ( programAttribute >= 0 ) {\n\n\t\t\t\tconst geometryAttribute = geometryAttributes[ name ];\n\n\t\t\t\tif ( geometryAttribute !== undefined ) {\n\n\t\t\t\t\tconst normalized = geometryAttribute.normalized;\n\t\t\t\t\tconst size = geometryAttribute.itemSize;\n\n\t\t\t\t\tconst 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\tconst buffer = attribute.buffer;\n\t\t\t\t\tconst type = attribute.type;\n\t\t\t\t\tconst bytesPerElement = attribute.bytesPerElement;\n\n\t\t\t\t\tif ( geometryAttribute.isInterleavedBufferAttribute ) {\n\n\t\t\t\t\t\tconst data = geometryAttribute.data;\n\t\t\t\t\t\tconst stride = data.stride;\n\t\t\t\t\t\tconst offset = geometryAttribute.offset;\n\n\t\t\t\t\t\tif ( data && data.isInstancedInterleavedBuffer ) {\n\n\t\t\t\t\t\t\tenableAttributeAndDivisor( programAttribute, data.meshPerAttribute );\n\n\t\t\t\t\t\t\tif ( geometry._maxInstanceCount === undefined ) {\n\n\t\t\t\t\t\t\t\tgeometry._maxInstanceCount = 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\tenableAttribute( programAttribute );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tgl.bindBuffer( 34962, buffer );\n\t\t\t\t\t\tvertexAttribPointer( 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\tenableAttributeAndDivisor( programAttribute, geometryAttribute.meshPerAttribute );\n\n\t\t\t\t\t\t\tif ( geometry._maxInstanceCount === undefined ) {\n\n\t\t\t\t\t\t\t\tgeometry._maxInstanceCount = 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\tenableAttribute( programAttribute );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tgl.bindBuffer( 34962, buffer );\n\t\t\t\t\t\tvertexAttribPointer( programAttribute, size, type, normalized, 0, 0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( name === 'instanceMatrix' ) {\n\n\t\t\t\t\tconst attribute = attributes.get( object.instanceMatrix );\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\tconst buffer = attribute.buffer;\n\t\t\t\t\tconst type = attribute.type;\n\n\t\t\t\t\tenableAttributeAndDivisor( programAttribute + 0, 1 );\n\t\t\t\t\tenableAttributeAndDivisor( programAttribute + 1, 1 );\n\t\t\t\t\tenableAttributeAndDivisor( programAttribute + 2, 1 );\n\t\t\t\t\tenableAttributeAndDivisor( programAttribute + 3, 1 );\n\n\t\t\t\t\tgl.bindBuffer( 34962, buffer );\n\n\t\t\t\t\tgl.vertexAttribPointer( programAttribute + 0, 4, type, false, 64, 0 );\n\t\t\t\t\tgl.vertexAttribPointer( programAttribute + 1, 4, type, false, 64, 16 );\n\t\t\t\t\tgl.vertexAttribPointer( programAttribute + 2, 4, type, false, 64, 32 );\n\t\t\t\t\tgl.vertexAttribPointer( programAttribute + 3, 4, type, false, 64, 48 );\n\n\t\t\t\t} else if ( materialDefaultAttributeValues !== undefined ) {\n\n\t\t\t\t\tconst 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\tgl.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\tgl.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\tgl.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\tgl.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\tdisableUnusedAttributes();\n\n\t}\n\n\tfunction dispose() {\n\n\t\treset();\n\n\t\tfor ( const geometryId in bindingStates ) {\n\n\t\t\tconst programMap = bindingStates[ geometryId ];\n\n\t\t\tfor ( const programId in programMap ) {\n\n\t\t\t\tconst stateMap = programMap[ programId ];\n\n\t\t\t\tfor ( const wireframe in stateMap ) {\n\n\t\t\t\t\tdeleteVertexArrayObject( stateMap[ wireframe ].object );\n\n\t\t\t\t\tdelete stateMap[ wireframe ];\n\n\t\t\t\t}\n\n\t\t\t\tdelete programMap[ programId ];\n\n\t\t\t}\n\n\t\t\tdelete bindingStates[ geometryId ];\n\n\t\t}\n\n\t}\n\n\tfunction releaseStatesOfGeometry( geometry ) {\n\n\t\tif ( bindingStates[ geometry.id ] === undefined ) return;\n\n\t\tconst programMap = bindingStates[ geometry.id ];\n\n\t\tfor ( const programId in programMap ) {\n\n\t\t\tconst stateMap = programMap[ programId ];\n\n\t\t\tfor ( const wireframe in stateMap ) {\n\n\t\t\t\tdeleteVertexArrayObject( stateMap[ wireframe ].object );\n\n\t\t\t\tdelete stateMap[ wireframe ];\n\n\t\t\t}\n\n\t\t\tdelete programMap[ programId ];\n\n\t\t}\n\n\t\tdelete bindingStates[ geometry.id ];\n\n\t}\n\n\tfunction releaseStatesOfProgram( program ) {\n\n\t\tfor ( const geometryId in bindingStates ) {\n\n\t\t\tconst programMap = bindingStates[ geometryId ];\n\n\t\t\tif ( programMap[ program.id ] === undefined ) continue;\n\n\t\t\tconst stateMap = programMap[ program.id ];\n\n\t\t\tfor ( const wireframe in stateMap ) {\n\n\t\t\t\tdeleteVertexArrayObject( stateMap[ wireframe ].object );\n\n\t\t\t\tdelete stateMap[ wireframe ];\n\n\t\t\t}\n\n\t\t\tdelete programMap[ program.id ];\n\n\t\t}\n\n\t}\n\n\tfunction reset() {\n\n\t\tresetDefaultState();\n\n\t\tif ( currentState === defaultState ) return;\n\n\t\tcurrentState = defaultState;\n\t\tbindVertexArrayObject( currentState.object );\n\n\t}\n\n\t// for backward-compatilibity\n\n\tfunction resetDefaultState() {\n\n\t\tdefaultState.geometry = null;\n\t\tdefaultState.program = null;\n\t\tdefaultState.wireframe = false;\n\n\t}\n\n\treturn {\n\n\t\tsetup: setup,\n\t\treset: reset,\n\t\tresetDefaultState: resetDefaultState,\n\t\tdispose: dispose,\n\t\treleaseStatesOfGeometry: releaseStatesOfGeometry,\n\t\treleaseStatesOfProgram: releaseStatesOfProgram,\n\n\t\tinitAttributes: initAttributes,\n\t\tenableAttribute: enableAttribute,\n\t\tdisableUnusedAttributes: disableUnusedAttributes\n\n\t};\n\n}\n\nfunction WebGLBufferRenderer( gl, extensions, info, capabilities ) {\n\n\tconst isWebGL2 = capabilities.isWebGL2;\n\n\tlet 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, 1 );\n\n\t}\n\n\tfunction renderInstances( start, count, primcount ) {\n\n\t\tif ( primcount === 0 ) return;\n\n\t\tlet extension, methodName;\n\n\t\tif ( isWebGL2 ) {\n\n\t\t\textension = gl;\n\t\t\tmethodName = 'drawArraysInstanced';\n\n\t\t} else {\n\n\t\t\textension = extensions.get( 'ANGLE_instanced_arrays' );\n\t\t\tmethodName = 'drawArraysInstancedANGLE';\n\n\t\t\tif ( extension === null ) {\n\n\t\t\t\tconsole.error( 'THREE.WebGLBufferRenderer: 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\textension[ methodName ]( mode, start, count, primcount );\n\n\t\tinfo.update( count, mode, primcount );\n\n\t}\n\n\t//\n\n\tthis.setMode = setMode;\n\tthis.render = render;\n\tthis.renderInstances = renderInstances;\n\n}\n\nfunction WebGLCapabilities( gl, extensions, parameters ) {\n\n\tlet maxAnisotropy;\n\n\tfunction getMaxAnisotropy() {\n\n\t\tif ( maxAnisotropy !== undefined ) return maxAnisotropy;\n\n\t\tconst 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( 35633, 36338 ).precision > 0 &&\n\t\t\t\tgl.getShaderPrecisionFormat( 35632, 36338 ).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( 35633, 36337 ).precision > 0 &&\n\t\t\t\tgl.getShaderPrecisionFormat( 35632, 36337 ).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\t/* eslint-disable no-undef */\n\tconst isWebGL2 = ( typeof WebGL2RenderingContext !== 'undefined' && gl instanceof WebGL2RenderingContext ) ||\n\t\t( typeof WebGL2ComputeRenderingContext !== 'undefined' && gl instanceof WebGL2ComputeRenderingContext );\n\t/* eslint-enable no-undef */\n\n\tlet precision = parameters.precision !== undefined ? parameters.precision : 'highp';\n\tconst 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\tconst logarithmicDepthBuffer = parameters.logarithmicDepthBuffer === true;\n\n\tconst maxTextures = gl.getParameter( 34930 );\n\tconst maxVertexTextures = gl.getParameter( 35660 );\n\tconst maxTextureSize = gl.getParameter( 3379 );\n\tconst maxCubemapSize = gl.getParameter( 34076 );\n\n\tconst maxAttributes = gl.getParameter( 34921 );\n\tconst maxVertexUniforms = gl.getParameter( 36347 );\n\tconst maxVaryings = gl.getParameter( 36348 );\n\tconst maxFragmentUniforms = gl.getParameter( 36349 );\n\n\tconst vertexTextures = maxVertexTextures > 0;\n\tconst floatFragmentTextures = isWebGL2 || !! extensions.get( 'OES_texture_float' );\n\tconst floatVertexTextures = vertexTextures && floatFragmentTextures;\n\n\tconst maxSamples = isWebGL2 ? gl.getParameter( 36183 ) : 0;\n\n\treturn {\n\n\t\tisWebGL2: isWebGL2,\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\tmaxSamples: maxSamples\n\n\t};\n\n}\n\nfunction WebGLClipping() {\n\n\tconst scope = this;\n\n\tlet globalState = null,\n\t\tnumGlobalPlanes = 0,\n\t\tlocalClippingEnabled = false,\n\t\trenderingShadows = false;\n\n\tconst plane = 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\tconst 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\tconst nGlobal = renderingShadows ? 0 : numGlobalPlanes,\n\t\t\t\tlGlobal = nGlobal * 4;\n\n\t\t\tlet dstArray = 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 ( let 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\tlet 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\tconst 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 ( let 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\t\tscope.numIntersection = 0;\n\n\t\treturn dstArray;\n\n\t}\n\n}\n\nfunction WebGLExtensions( gl ) {\n\n\tconst extensions = {};\n\n\treturn {\n\n\t\thas: 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\tlet 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\textensions[ name ] = extension;\n\n\t\t\treturn !! extension;\n\n\t\t},\n\n\t\tget: function ( name ) {\n\n\t\t\tif ( ! this.has( name ) ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: ' + name + ' extension not supported.' );\n\n\t\t\t}\n\n\t\t\treturn extensions[ name ];\n\n\t\t}\n\n\t};\n\n}\n\nfunction WebGLGeometries( gl, attributes, info, bindingStates ) {\n\n\tconst geometries = new WeakMap();\n\tconst wireframeAttributes = new WeakMap();\n\n\tfunction onGeometryDispose( event ) {\n\n\t\tconst geometry = event.target;\n\t\tconst buffergeometry = geometries.get( geometry );\n\n\t\tif ( buffergeometry.index !== null ) {\n\n\t\t\tattributes.remove( buffergeometry.index );\n\n\t\t}\n\n\t\tfor ( const 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\tgeometries.delete( geometry );\n\n\t\tconst attribute = wireframeAttributes.get( buffergeometry );\n\n\t\tif ( attribute ) {\n\n\t\t\tattributes.remove( attribute );\n\t\t\twireframeAttributes.delete( buffergeometry );\n\n\t\t}\n\n\t\tbindingStates.releaseStatesOfGeometry( geometry );\n\n\t\tif ( geometry.isInstancedBufferGeometry === true ) {\n\n\t\t\tdelete geometry._maxInstanceCount;\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\tlet buffergeometry = geometries.get( geometry );\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.set( geometry, buffergeometry );\n\n\t\tinfo.memory.geometries ++;\n\n\t\treturn buffergeometry;\n\n\t}\n\n\tfunction update( geometry ) {\n\n\t\tconst geometryAttributes = geometry.attributes;\n\n\t\t// Updating index buffer in VAO now. See WebGLBindingStates.\n\n\t\tfor ( const name in geometryAttributes ) {\n\n\t\t\tattributes.update( geometryAttributes[ name ], 34962 );\n\n\t\t}\n\n\t\t// morph targets\n\n\t\tconst morphAttributes = geometry.morphAttributes;\n\n\t\tfor ( const name in morphAttributes ) {\n\n\t\t\tconst array = morphAttributes[ name ];\n\n\t\t\tfor ( let i = 0, l = array.length; i < l; i ++ ) {\n\n\t\t\t\tattributes.update( array[ i ], 34962 );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction updateWireframeAttribute( geometry ) {\n\n\t\tconst indices = [];\n\n\t\tconst geometryIndex = geometry.index;\n\t\tconst geometryPosition = geometry.attributes.position;\n\t\tlet version = 0;\n\n\t\tif ( geometryIndex !== null ) {\n\n\t\t\tconst array = geometryIndex.array;\n\t\t\tversion = geometryIndex.version;\n\n\t\t\tfor ( let i = 0, l = array.length; i < l; i += 3 ) {\n\n\t\t\t\tconst a = array[ i + 0 ];\n\t\t\t\tconst b = array[ i + 1 ];\n\t\t\t\tconst 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\tconst array = geometryPosition.array;\n\t\t\tversion = geometryPosition.version;\n\n\t\t\tfor ( let i = 0, l = ( array.length / 3 ) - 1; i < l; i += 3 ) {\n\n\t\t\t\tconst a = i + 0;\n\t\t\t\tconst b = i + 1;\n\t\t\t\tconst 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\tconst attribute = new ( arrayMax( indices ) > 65535 ? Uint32BufferAttribute : Uint16BufferAttribute )( indices, 1 );\n\t\tattribute.version = version;\n\n\t\t// Updating index buffer in VAO now. See WebGLBindingStates\n\n\t\t//\n\n\t\tconst previousAttribute = wireframeAttributes.get( geometry );\n\n\t\tif ( previousAttribute ) attributes.remove( previousAttribute );\n\n\t\t//\n\n\t\twireframeAttributes.set( geometry, attribute );\n\n\t}\n\n\tfunction getWireframeAttribute( geometry ) {\n\n\t\tconst currentAttribute = wireframeAttributes.get( geometry );\n\n\t\tif ( currentAttribute ) {\n\n\t\t\tconst geometryIndex = geometry.index;\n\n\t\t\tif ( geometryIndex !== null ) {\n\n\t\t\t\t// if the attribute is obsolete, create a new one\n\n\t\t\t\tif ( currentAttribute.version < geometryIndex.version ) {\n\n\t\t\t\t\tupdateWireframeAttribute( geometry );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tupdateWireframeAttribute( geometry );\n\n\t\t}\n\n\t\treturn wireframeAttributes.get( geometry );\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\nfunction WebGLIndexedBufferRenderer( gl, extensions, info, capabilities ) {\n\n\tconst isWebGL2 = capabilities.isWebGL2;\n\n\tlet mode;\n\n\tfunction setMode( value ) {\n\n\t\tmode = value;\n\n\t}\n\n\tlet 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, 1 );\n\n\t}\n\n\tfunction renderInstances( start, count, primcount ) {\n\n\t\tif ( primcount === 0 ) return;\n\n\t\tlet extension, methodName;\n\n\t\tif ( isWebGL2 ) {\n\n\t\t\textension = gl;\n\t\t\tmethodName = 'drawElementsInstanced';\n\n\t\t} else {\n\n\t\t\textension = extensions.get( 'ANGLE_instanced_arrays' );\n\t\t\tmethodName = 'drawElementsInstancedANGLE';\n\n\t\t\tif ( extension === null ) {\n\n\t\t\t\tconsole.error( 'THREE.WebGLIndexedBufferRenderer: 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\textension[ methodName ]( mode, count, type, start * bytesPerElement, primcount );\n\n\t\tinfo.update( count, mode, primcount );\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\nfunction WebGLInfo( gl ) {\n\n\tconst memory = {\n\t\tgeometries: 0,\n\t\ttextures: 0\n\t};\n\n\tconst 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\trender.calls ++;\n\n\t\tswitch ( mode ) {\n\n\t\t\tcase 4:\n\t\t\t\trender.triangles += instanceCount * ( count / 3 );\n\t\t\t\tbreak;\n\n\t\t\tcase 1:\n\t\t\t\trender.lines += instanceCount * ( count / 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase 3:\n\t\t\t\trender.lines += instanceCount * ( count - 1 );\n\t\t\t\tbreak;\n\n\t\t\tcase 2:\n\t\t\t\trender.lines += instanceCount * count;\n\t\t\t\tbreak;\n\n\t\t\tcase 0:\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\nfunction numericalSort( a, b ) {\n\n\treturn a[ 0 ] - b[ 0 ];\n\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\tconst influencesList = {};\n\tconst morphInfluences = new Float32Array( 8 );\n\n\tconst workInfluences = [];\n\n\tfor ( let i = 0; i < 8; i ++ ) {\n\n\t\tworkInfluences[ i ] = [ i, 0 ];\n\n\t}\n\n\tfunction update( object, geometry, material, program ) {\n\n\t\tconst objectInfluences = object.morphTargetInfluences;\n\n\t\t// When object doesn't have morph target influences defined, we treat it as a 0-length array\n\t\t// This is important to make sure we set up morphTargetBaseInfluence / morphTargetInfluences\n\n\t\tconst length = objectInfluences === undefined ? 0 : objectInfluences.length;\n\n\t\tlet 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 ( let 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\t// Collect influences\n\n\t\tfor ( let i = 0; i < length; i ++ ) {\n\n\t\t\tconst 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\tfor ( let i = 0; i < 8; i ++ ) {\n\n\t\t\tif ( i < length && influences[ i ][ 1 ] ) {\n\n\t\t\t\tworkInfluences[ i ][ 0 ] = influences[ i ][ 0 ];\n\t\t\t\tworkInfluences[ i ][ 1 ] = influences[ i ][ 1 ];\n\n\t\t\t} else {\n\n\t\t\t\tworkInfluences[ i ][ 0 ] = Number.MAX_SAFE_INTEGER;\n\t\t\t\tworkInfluences[ i ][ 1 ] = 0;\n\n\t\t\t}\n\n\t\t}\n\n\t\tworkInfluences.sort( numericalSort );\n\n\t\tconst morphTargets = material.morphTargets && geometry.morphAttributes.position;\n\t\tconst morphNormals = material.morphNormals && geometry.morphAttributes.normal;\n\n\t\tlet morphInfluencesSum = 0;\n\n\t\tfor ( let i = 0; i < 8; i ++ ) {\n\n\t\t\tconst influence = workInfluences[ i ];\n\t\t\tconst index = influence[ 0 ];\n\t\t\tconst value = influence[ 1 ];\n\n\t\t\tif ( index !== Number.MAX_SAFE_INTEGER && value ) {\n\n\t\t\t\tif ( morphTargets && geometry.getAttribute( 'morphTarget' + i ) !== morphTargets[ index ] ) {\n\n\t\t\t\t\tgeometry.setAttribute( 'morphTarget' + i, morphTargets[ index ] );\n\n\t\t\t\t}\n\n\t\t\t\tif ( morphNormals && geometry.getAttribute( 'morphNormal' + i ) !== morphNormals[ index ] ) {\n\n\t\t\t\t\tgeometry.setAttribute( 'morphNormal' + i, morphNormals[ index ] );\n\n\t\t\t\t}\n\n\t\t\t\tmorphInfluences[ i ] = value;\n\t\t\t\tmorphInfluencesSum += value;\n\n\t\t\t} else {\n\n\t\t\t\tif ( morphTargets && geometry.getAttribute( 'morphTarget' + i ) !== undefined ) {\n\n\t\t\t\t\tgeometry.deleteAttribute( 'morphTarget' + i );\n\n\t\t\t\t}\n\n\t\t\t\tif ( morphNormals && geometry.getAttribute( 'morphNormal' + i ) !== undefined ) {\n\n\t\t\t\t\tgeometry.deleteAttribute( 'morphNormal' + i );\n\n\t\t\t\t}\n\n\t\t\t\tmorphInfluences[ i ] = 0;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// GLSL shader uses formula baseinfluence * base + sum(target * influence)\n\t\t// This allows us to switch between absolute morphs and relative morphs without changing shader code\n\t\t// When baseinfluence = 1 - sum(influence), the above is equivalent to sum((target - base) * influence)\n\t\tconst morphBaseInfluence = geometry.morphTargetsRelative ? 1 : 1 - morphInfluencesSum;\n\n\t\tprogram.getUniforms().setValue( gl, 'morphTargetBaseInfluence', morphBaseInfluence );\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\nfunction WebGLObjects( gl, geometries, attributes, info ) {\n\n\tlet updateMap = new WeakMap();\n\n\tfunction update( object ) {\n\n\t\tconst frame = info.render.frame;\n\n\t\tconst geometry = object.geometry;\n\t\tconst buffergeometry = geometries.get( object, geometry );\n\n\t\t// Update once per frame\n\n\t\tif ( updateMap.get( buffergeometry ) !== 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\tupdateMap.set( buffergeometry, frame );\n\n\t\t}\n\n\t\tif ( object.isInstancedMesh ) {\n\n\t\t\tattributes.update( object.instanceMatrix, 34962 );\n\n\t\t}\n\n\t\treturn buffergeometry;\n\n\t}\n\n\tfunction dispose() {\n\n\t\tupdateMap = new WeakMap();\n\n\t}\n\n\treturn {\n\n\t\tupdate: update,\n\t\tdispose: dispose\n\n\t};\n\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\tformat = format !== undefined ? format : RGBFormat;\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\nfunction DataTexture2DArray( data, width, height, depth ) {\n\n\tTexture.call( this, null );\n\n\tthis.image = { data: data || null, width: width || 1, height: height || 1, depth: depth || 1 };\n\n\tthis.magFilter = NearestFilter;\n\tthis.minFilter = NearestFilter;\n\n\tthis.wrapR = ClampToEdgeWrapping;\n\n\tthis.generateMipmaps = false;\n\tthis.flipY = false;\n\n\tthis.needsUpdate = true;\n\n}\n\nDataTexture2DArray.prototype = Object.create( Texture.prototype );\nDataTexture2DArray.prototype.constructor = DataTexture2DArray;\nDataTexture2DArray.prototype.isDataTexture2DArray = true;\n\nfunction DataTexture3D( data, width, height, depth ) {\n\n\t// We're going to add .setXXX() methods for setting properties later.\n\t// Users can still set in DataTexture3D directly.\n\t//\n\t//\tconst texture = new THREE.DataTexture3D( data, width, height, depth );\n\t// \ttexture.anisotropy = 16;\n\t//\n\t// See #14839\n\n\tTexture.call( this, null );\n\n\tthis.image = { data: data || null, width: width || 1, height: height || 1, depth: depth || 1 };\n\n\tthis.magFilter = NearestFilter;\n\tthis.minFilter = NearestFilter;\n\n\tthis.wrapR = ClampToEdgeWrapping;\n\n\tthis.generateMipmaps = false;\n\tthis.flipY = false;\n\n\tthis.needsUpdate = true;\n\n\n}\n\nDataTexture3D.prototype = Object.create( Texture.prototype );\nDataTexture3D.prototype.constructor = DataTexture3D;\nDataTexture3D.prototype.isDataTexture3D = true;\n\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 )'.\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, [textures] )\n *\n * \t\tuploads a uniform value(s)\n * \tthe 'textures' parameter is needed for sampler uniforms\n *\n *\n * Static methods of the top-level container (textures factorizations):\n *\n * .upload( gl, seq, values, textures )\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 (textures factorizations):\n *\n * .setValue( gl, name, value, textures )\n *\n * \t\tsets uniform with name 'name' to 'value'\n *\n * .setOptional( gl, obj, prop )\n *\n * \t\tlike .set for an optional property of the object\n *\n */\n\nconst emptyTexture = new Texture();\nconst emptyTexture2dArray = new DataTexture2DArray();\nconst emptyTexture3d = new DataTexture3D();\nconst emptyCubeTexture = new CubeTexture();\n\n// --- Utilities ---\n\n// Array Caches (provide typed arrays for temporary by size)\n\nconst arrayCacheF32 = [];\nconst arrayCacheI32 = [];\n\n// Float32Array caches used for uploading Matrix uniforms\n\nconst mat4array = new Float32Array( 16 );\nconst mat3array = new Float32Array( 9 );\nconst mat2array = new Float32Array( 4 );\n\n// Flattening for arrays of vectors and matrices\n\nfunction flatten( array, nBlocks, blockSize ) {\n\n\tconst 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\tlet 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 ( let 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\nfunction arraysEqual( a, b ) {\n\n\tif ( a.length !== b.length ) return false;\n\n\tfor ( let i = 0, l = a.length; i < l; i ++ ) {\n\n\t\tif ( a[ i ] !== b[ i ] ) return false;\n\n\t}\n\n\treturn true;\n\n}\n\nfunction copyArray( a, b ) {\n\n\tfor ( let i = 0, l = b.length; i < l; i ++ ) {\n\n\t\ta[ i ] = b[ i ];\n\n\t}\n\n}\n\n// Texture unit allocation\n\nfunction allocTexUnits( textures, n ) {\n\n\tlet 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 ( let i = 0; i !== n; ++ i ) {\n\n\t\tr[ i ] = textures.allocateTextureUnit();\n\n\t}\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 setValueV1f( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( cache[ 0 ] === v ) return;\n\n\tgl.uniform1f( this.addr, v );\n\n\tcache[ 0 ] = v;\n\n}\n\n// Single float vector (from flat array or THREE.VectorN)\n\nfunction setValueV2f( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y ) {\n\n\t\t\tgl.uniform2f( this.addr, v.x, v.y );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform2fv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\nfunction setValueV3f( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z ) {\n\n\t\t\tgl.uniform3f( this.addr, v.x, v.y, v.z );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\t\t\tcache[ 2 ] = v.z;\n\n\t\t}\n\n\t} else if ( v.r !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.r || cache[ 1 ] !== v.g || cache[ 2 ] !== v.b ) {\n\n\t\t\tgl.uniform3f( this.addr, v.r, v.g, v.b );\n\n\t\t\tcache[ 0 ] = v.r;\n\t\t\tcache[ 1 ] = v.g;\n\t\t\tcache[ 2 ] = v.b;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform3fv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\nfunction setValueV4f( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z || cache[ 3 ] !== v.w ) {\n\n\t\t\tgl.uniform4f( this.addr, v.x, v.y, v.z, v.w );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\t\t\tcache[ 2 ] = v.z;\n\t\t\tcache[ 3 ] = v.w;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform4fv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\n// Single matrix (from flat array or MatrixN)\n\nfunction setValueM2( gl, v ) {\n\n\tconst cache = this.cache;\n\tconst elements = v.elements;\n\n\tif ( elements === undefined ) {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniformMatrix2fv( this.addr, false, v );\n\n\t\tcopyArray( cache, v );\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, elements ) ) return;\n\n\t\tmat2array.set( elements );\n\n\t\tgl.uniformMatrix2fv( this.addr, false, mat2array );\n\n\t\tcopyArray( cache, elements );\n\n\t}\n\n}\n\nfunction setValueM3( gl, v ) {\n\n\tconst cache = this.cache;\n\tconst elements = v.elements;\n\n\tif ( elements === undefined ) {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniformMatrix3fv( this.addr, false, v );\n\n\t\tcopyArray( cache, v );\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, elements ) ) return;\n\n\t\tmat3array.set( elements );\n\n\t\tgl.uniformMatrix3fv( this.addr, false, mat3array );\n\n\t\tcopyArray( cache, elements );\n\n\t}\n\n}\n\nfunction setValueM4( gl, v ) {\n\n\tconst cache = this.cache;\n\tconst elements = v.elements;\n\n\tif ( elements === undefined ) {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniformMatrix4fv( this.addr, false, v );\n\n\t\tcopyArray( cache, v );\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, elements ) ) return;\n\n\t\tmat4array.set( elements );\n\n\t\tgl.uniformMatrix4fv( this.addr, false, mat4array );\n\n\t\tcopyArray( cache, elements );\n\n\t}\n\n}\n\n// Single texture (2D / Cube)\n\nfunction setValueT1( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\tconst unit = textures.allocateTextureUnit();\n\n\tif ( cache[ 0 ] !== unit ) {\n\n\t\tgl.uniform1i( this.addr, unit );\n\t\tcache[ 0 ] = unit;\n\n\t}\n\n\ttextures.safeSetTexture2D( v || emptyTexture, unit );\n\n}\n\nfunction setValueT2DArray1( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\tconst unit = textures.allocateTextureUnit();\n\n\tif ( cache[ 0 ] !== unit ) {\n\n\t\tgl.uniform1i( this.addr, unit );\n\t\tcache[ 0 ] = unit;\n\n\t}\n\n\ttextures.setTexture2DArray( v || emptyTexture2dArray, unit );\n\n}\n\nfunction setValueT3D1( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\tconst unit = textures.allocateTextureUnit();\n\n\tif ( cache[ 0 ] !== unit ) {\n\n\t\tgl.uniform1i( this.addr, unit );\n\t\tcache[ 0 ] = unit;\n\n\t}\n\n\ttextures.setTexture3D( v || emptyTexture3d, unit );\n\n}\n\nfunction setValueT6( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\tconst unit = textures.allocateTextureUnit();\n\n\tif ( cache[ 0 ] !== unit ) {\n\n\t\tgl.uniform1i( this.addr, unit );\n\t\tcache[ 0 ] = unit;\n\n\t}\n\n\ttextures.safeSetTextureCube( v || emptyCubeTexture, unit );\n\n}\n\n// Integer / Boolean vectors or arrays thereof (always flat arrays)\n\nfunction setValueV1i( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( cache[ 0 ] === v ) return;\n\n\tgl.uniform1i( this.addr, v );\n\n\tcache[ 0 ] = v;\n\n}\n\nfunction setValueV2i( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( arraysEqual( cache, v ) ) return;\n\n\tgl.uniform2iv( this.addr, v );\n\n\tcopyArray( cache, v );\n\n}\n\nfunction setValueV3i( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( arraysEqual( cache, v ) ) return;\n\n\tgl.uniform3iv( this.addr, v );\n\n\tcopyArray( cache, v );\n\n}\n\nfunction setValueV4i( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( arraysEqual( cache, v ) ) return;\n\n\tgl.uniform4iv( this.addr, v );\n\n\tcopyArray( cache, v );\n\n}\n\n// uint\n\nfunction setValueV1ui( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( cache[ 0 ] === v ) return;\n\n\tgl.uniform1ui( this.addr, v );\n\n\tcache[ 0 ] = 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 setValueV1f; // FLOAT\n\t\tcase 0x8b50: return setValueV2f; // _VEC2\n\t\tcase 0x8b51: return setValueV3f; // _VEC3\n\t\tcase 0x8b52: return setValueV4f; // _VEC4\n\n\t\tcase 0x8b5a: return setValueM2; // _MAT2\n\t\tcase 0x8b5b: return setValueM3; // _MAT3\n\t\tcase 0x8b5c: return setValueM4; // _MAT4\n\n\t\tcase 0x1404: case 0x8b56: return setValueV1i; // INT, BOOL\n\t\tcase 0x8b53: case 0x8b57: return setValueV2i; // _VEC2\n\t\tcase 0x8b54: case 0x8b58: return setValueV3i; // _VEC3\n\t\tcase 0x8b55: case 0x8b59: return setValueV4i; // _VEC4\n\n\t\tcase 0x1405: return setValueV1ui; // UINT\n\n\t\tcase 0x8b5e: // SAMPLER_2D\n\t\tcase 0x8d66: // SAMPLER_EXTERNAL_OES\n\t\tcase 0x8dca: // INT_SAMPLER_2D\n\t\tcase 0x8dd2: // UNSIGNED_INT_SAMPLER_2D\n\t\tcase 0x8b62: // SAMPLER_2D_SHADOW\n\t\t\treturn setValueT1;\n\n\t\tcase 0x8b5f: // SAMPLER_3D\n\t\tcase 0x8dcb: // INT_SAMPLER_3D\n\t\tcase 0x8dd3: // UNSIGNED_INT_SAMPLER_3D\n\t\t\treturn setValueT3D1;\n\n\t\tcase 0x8b60: // SAMPLER_CUBE\n\t\tcase 0x8dcc: // INT_SAMPLER_CUBE\n\t\tcase 0x8dd4: // UNSIGNED_INT_SAMPLER_CUBE\n\t\tcase 0x8dc5: // SAMPLER_CUBE_SHADOW\n\t\t\treturn setValueT6;\n\n\t\tcase 0x8dc1: // SAMPLER_2D_ARRAY\n\t\tcase 0x8dcf: // INT_SAMPLER_2D_ARRAY\n\t\tcase 0x8dd7: // UNSIGNED_INT_SAMPLER_2D_ARRAY\n\t\tcase 0x8dc4: // SAMPLER_2D_ARRAY_SHADOW\n\t\t\treturn setValueT2DArray1;\n\n\t}\n\n}\n\n// Array of scalars\nfunction setValueV1fArray( gl, v ) {\n\n\tgl.uniform1fv( this.addr, v );\n\n}\n\n// Integer / Boolean vectors or arrays thereof (always flat arrays)\nfunction setValueV1iArray( gl, v ) {\n\n\tgl.uniform1iv( this.addr, v );\n\n}\n\nfunction setValueV2iArray( gl, v ) {\n\n\tgl.uniform2iv( this.addr, v );\n\n}\n\nfunction setValueV3iArray( gl, v ) {\n\n\tgl.uniform3iv( this.addr, v );\n\n}\n\nfunction setValueV4iArray( gl, v ) {\n\n\tgl.uniform4iv( this.addr, v );\n\n}\n\n\n// Array of vectors (flat or from THREE classes)\n\nfunction setValueV2fArray( gl, v ) {\n\n\tconst data = flatten( v, this.size, 2 );\n\n\tgl.uniform2fv( this.addr, data );\n\n}\n\nfunction setValueV3fArray( gl, v ) {\n\n\tconst data = flatten( v, this.size, 3 );\n\n\tgl.uniform3fv( this.addr, data );\n\n}\n\nfunction setValueV4fArray( gl, v ) {\n\n\tconst data = flatten( v, this.size, 4 );\n\n\tgl.uniform4fv( this.addr, data );\n\n}\n\n// Array of matrices (flat or from THREE clases)\n\nfunction setValueM2Array( gl, v ) {\n\n\tconst data = flatten( v, this.size, 4 );\n\n\tgl.uniformMatrix2fv( this.addr, false, data );\n\n}\n\nfunction setValueM3Array( gl, v ) {\n\n\tconst data = flatten( v, this.size, 9 );\n\n\tgl.uniformMatrix3fv( this.addr, false, data );\n\n}\n\nfunction setValueM4Array( gl, v ) {\n\n\tconst data = flatten( v, this.size, 16 );\n\n\tgl.uniformMatrix4fv( this.addr, false, data );\n\n}\n\n// Array of textures (2D / Cube)\n\nfunction setValueT1Array( gl, v, textures ) {\n\n\tconst n = v.length;\n\n\tconst units = allocTexUnits( textures, n );\n\n\tgl.uniform1iv( this.addr, units );\n\n\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\ttextures.safeSetTexture2D( v[ i ] || emptyTexture, units[ i ] );\n\n\t}\n\n}\n\nfunction setValueT6Array( gl, v, textures ) {\n\n\tconst n = v.length;\n\n\tconst units = allocTexUnits( textures, n );\n\n\tgl.uniform1iv( this.addr, units );\n\n\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\ttextures.safeSetTextureCube( 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 setValueV1fArray; // FLOAT\n\t\tcase 0x8b50: return setValueV2fArray; // _VEC2\n\t\tcase 0x8b51: return setValueV3fArray; // _VEC3\n\t\tcase 0x8b52: return setValueV4fArray; // _VEC4\n\n\t\tcase 0x8b5a: return setValueM2Array; // _MAT2\n\t\tcase 0x8b5b: return setValueM3Array; // _MAT3\n\t\tcase 0x8b5c: return setValueM4Array; // _MAT4\n\n\t\tcase 0x1404: case 0x8b56: return setValueV1iArray; // INT, BOOL\n\t\tcase 0x8b53: case 0x8b57: return setValueV2iArray; // _VEC2\n\t\tcase 0x8b54: case 0x8b58: return setValueV3iArray; // _VEC3\n\t\tcase 0x8b55: case 0x8b59: return setValueV4iArray; // _VEC4\n\n\t\tcase 0x8b5e: // SAMPLER_2D\n\t\tcase 0x8d66: // SAMPLER_EXTERNAL_OES\n\t\tcase 0x8dca: // INT_SAMPLER_2D\n\t\tcase 0x8dd2: // UNSIGNED_INT_SAMPLER_2D\n\t\tcase 0x8b62: // SAMPLER_2D_SHADOW\n\t\t\treturn setValueT1Array;\n\n\t\tcase 0x8b60: // SAMPLER_CUBE\n\t\tcase 0x8dcc: // INT_SAMPLER_CUBE\n\t\tcase 0x8dd4: // UNSIGNED_INT_SAMPLER_CUBE\n\t\tcase 0x8dc5: // SAMPLER_CUBE_SHADOW\n\t\t\treturn setValueT6Array;\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.cache = [];\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.cache = [];\n\tthis.size = activeInfo.size;\n\tthis.setValue = getPureArraySetter( activeInfo.type );\n\n\t// this.path = activeInfo.name; // DEBUG\n\n}\n\nPureArrayUniform.prototype.updateCache = function ( data ) {\n\n\tlet cache = this.cache;\n\n\tif ( data instanceof Float32Array && cache.length !== data.length ) {\n\n\t\tthis.cache = new Float32Array( data.length );\n\n\t}\n\n\tcopyArray( cache, data );\n\n};\n\nfunction StructuredUniform( id ) {\n\n\tthis.id = id;\n\n\tthis.seq = [];\n\tthis.map = {};\n\n}\n\nStructuredUniform.prototype.setValue = function ( gl, value, textures ) {\n\n\tconst seq = this.seq;\n\n\tfor ( let i = 0, n = seq.length; i !== n; ++ i ) {\n\n\t\tconst u = seq[ i ];\n\t\tu.setValue( gl, value[ u.id ], textures );\n\n\t}\n\n};\n\n// --- Top-level ---\n\n// Parser - builds up the property tree from the path strings\n\nconst 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\tconst 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\twhile ( true ) {\n\n\t\tconst match = RePathPart.exec( path ),\n\t\t\tmatchEnd = RePathPart.lastIndex;\n\n\t\tlet id = 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\tconst map = container.map;\n\t\t\tlet 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 ) {\n\n\tthis.seq = [];\n\tthis.map = {};\n\n\tconst n = gl.getProgramParameter( program, 35718 );\n\n\tfor ( let i = 0; i < n; ++ i ) {\n\n\t\tconst 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, textures ) {\n\n\tconst u = this.map[ name ];\n\n\tif ( u !== undefined ) u.setValue( gl, value, textures );\n\n};\n\nWebGLUniforms.prototype.setOptional = function ( gl, object, name ) {\n\n\tconst 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, textures ) {\n\n\tfor ( let i = 0, n = seq.length; i !== n; ++ i ) {\n\n\t\tconst 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, textures );\n\n\t\t}\n\n\t}\n\n};\n\nWebGLUniforms.seqWithValue = function ( seq, values ) {\n\n\tconst r = [];\n\n\tfor ( let i = 0, n = seq.length; i !== n; ++ i ) {\n\n\t\tconst u = seq[ i ];\n\t\tif ( u.id in values ) r.push( u );\n\n\t}\n\n\treturn r;\n\n};\n\nfunction WebGLShader( gl, type, string ) {\n\n\tconst shader = gl.createShader( type );\n\n\tgl.shaderSource( shader, string );\n\tgl.compileShader( shader );\n\n\treturn shader;\n\n}\n\nlet programIdCount = 0;\n\nfunction addLineNumbers( string ) {\n\n\tconst lines = string.split( '\\n' );\n\n\tfor ( let 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 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\tcase LogLuvEncoding:\n\t\t\treturn [ 'LogLuv', '( value )' ];\n\t\tdefault:\n\t\t\tconsole.warn( 'THREE.WebGLProgram: Unsupported encoding:', encoding );\n\t\t\treturn [ 'Linear', '( value )' ];\n\n\t}\n\n}\n\nfunction getShaderErrors( gl, shader, type ) {\n\n\tconst status = gl.getShaderParameter( shader, 35713 );\n\tconst log = gl.getShaderInfoLog( shader ).trim();\n\n\tif ( status && log === '' ) return '';\n\n\t// --enable-privileged-webgl-extension\n\t// console.log( '**' + type + '**', gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( shader ) );\n\n\tconst source = gl.getShaderSource( shader );\n\n\treturn 'THREE.WebGLShader: gl.getShaderInfoLog() ' + type + '\\n' + log + addLineNumbers( source );\n\n}\n\nfunction getTexelDecodingFunction( functionName, encoding ) {\n\n\tconst components = getEncodingComponents( encoding );\n\treturn 'vec4 ' + functionName + '( vec4 value ) { return ' + components[ 0 ] + 'ToLinear' + components[ 1 ] + '; }';\n\n}\n\nfunction getTexelEncodingFunction( functionName, encoding ) {\n\n\tconst components = getEncodingComponents( encoding );\n\treturn 'vec4 ' + functionName + '( vec4 value ) { return LinearTo' + components[ 0 ] + components[ 1 ] + '; }';\n\n}\n\nfunction getToneMappingFunction( functionName, toneMapping ) {\n\n\tlet 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 CineonToneMapping:\n\t\t\ttoneMappingName = 'OptimizedCineon';\n\t\t\tbreak;\n\n\t\tcase ACESFilmicToneMapping:\n\t\t\ttoneMappingName = 'ACESFilmic';\n\t\t\tbreak;\n\n\t\tcase CustomToneMapping:\n\t\t\ttoneMappingName = 'Custom';\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tconsole.warn( 'THREE.WebGLProgram: Unsupported toneMapping:', toneMapping );\n\t\t\ttoneMappingName = 'Linear';\n\n\t}\n\n\treturn 'vec3 ' + functionName + '( vec3 color ) { return ' + toneMappingName + 'ToneMapping( color ); }';\n\n}\n\nfunction generateExtensions( parameters ) {\n\n\tconst chunks = [\n\t\t( parameters.extensionDerivatives || parameters.envMapCubeUV || parameters.bumpMap || parameters.tangentSpaceNormalMap || parameters.clearcoatNormalMap || parameters.flatShading || parameters.shaderID === 'physical' ) ? '#extension GL_OES_standard_derivatives : enable' : '',\n\t\t( parameters.extensionFragDepth || parameters.logarithmicDepthBuffer ) && parameters.rendererExtensionFragDepth ? '#extension GL_EXT_frag_depth : enable' : '',\n\t\t( parameters.extensionDrawBuffers && parameters.rendererExtensionDrawBuffers ) ? '#extension GL_EXT_draw_buffers : require' : '',\n\t\t( parameters.extensionShaderTextureLOD || parameters.envMap ) && parameters.rendererExtensionShaderTextureLod ? '#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\tconst chunks = [];\n\n\tfor ( const name in defines ) {\n\n\t\tconst 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\tconst attributes = {};\n\n\tconst n = gl.getProgramParameter( program, 35721 );\n\n\tfor ( let i = 0; i < n; i ++ ) {\n\n\t\tconst info = gl.getActiveAttrib( program, i );\n\t\tconst 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\t\t.replace( /NUM_DIR_LIGHT_SHADOWS/g, parameters.numDirLightShadows )\n\t\t.replace( /NUM_SPOT_LIGHT_SHADOWS/g, parameters.numSpotLightShadows )\n\t\t.replace( /NUM_POINT_LIGHT_SHADOWS/g, parameters.numPointLightShadows );\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\n// Resolve Includes\n\nconst includePattern = /^[ \\t]*#include +<([\\w\\d./]+)>/gm;\n\nfunction resolveIncludes( string ) {\n\n\treturn string.replace( includePattern, includeReplacer );\n\n}\n\nfunction includeReplacer( match, include ) {\n\n\tconst string = ShaderChunk[ include ];\n\n\tif ( string === undefined ) {\n\n\t\tthrow new Error( 'Can not resolve #include <' + include + '>' );\n\n\t}\n\n\treturn resolveIncludes( string );\n\n}\n\n// Unroll Loops\n\nconst deprecatedUnrollLoopPattern = /#pragma unroll_loop[\\s]+?for \\( int i \\= (\\d+)\\; i < (\\d+)\\; i \\+\\+ \\) \\{([\\s\\S]+?)(?=\\})\\}/g;\nconst unrollLoopPattern = /#pragma unroll_loop_start[\\s]+?for \\( int i \\= (\\d+)\\; i < (\\d+)\\; i \\+\\+ \\) \\{([\\s\\S]+?)(?=\\})\\}[\\s]+?#pragma unroll_loop_end/g;\n\nfunction unrollLoops( string ) {\n\n\treturn string\n\t\t.replace( unrollLoopPattern, loopReplacer )\n\t\t.replace( deprecatedUnrollLoopPattern, deprecatedLoopReplacer );\n\n}\n\nfunction deprecatedLoopReplacer( match, start, end, snippet ) {\n\n\tconsole.warn( 'WebGLProgram: #pragma unroll_loop shader syntax is deprecated. Please use #pragma unroll_loop_start syntax instead.' );\n\treturn loopReplacer( match, start, end, snippet );\n\n}\n\nfunction loopReplacer( match, start, end, snippet ) {\n\n\tlet string = '';\n\n\tfor ( let i = parseInt( start ); i < parseInt( end ); i ++ ) {\n\n\t\tstring += snippet\n\t\t\t.replace( /\\[ i \\]/g, '[ ' + i + ' ]' )\n\t\t\t.replace( /UNROLLED_LOOP_INDEX/g, i );\n\n\t}\n\n\treturn string;\n\n}\n\n//\n\nfunction generatePrecision( parameters ) {\n\n\tlet precisionstring = \"precision \" + parameters.precision + \" float;\\nprecision \" + parameters.precision + \" int;\";\n\n\tif ( parameters.precision === \"highp\" ) {\n\n\t\tprecisionstring += \"\\n#define HIGH_PRECISION\";\n\n\t} else if ( parameters.precision === \"mediump\" ) {\n\n\t\tprecisionstring += \"\\n#define MEDIUM_PRECISION\";\n\n\t} else if ( parameters.precision === \"lowp\" ) {\n\n\t\tprecisionstring += \"\\n#define LOW_PRECISION\";\n\n\t}\n\n\treturn precisionstring;\n\n}\n\nfunction generateShadowMapTypeDefine( parameters ) {\n\n\tlet 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} else if ( parameters.shadowMapType === VSMShadowMap ) {\n\n\t\tshadowMapTypeDefine = 'SHADOWMAP_TYPE_VSM';\n\n\t}\n\n\treturn shadowMapTypeDefine;\n\n}\n\nfunction generateEnvMapTypeDefine( parameters ) {\n\n\tlet envMapTypeDefine = 'ENVMAP_TYPE_CUBE';\n\n\tif ( parameters.envMap ) {\n\n\t\tswitch ( parameters.envMapMode ) {\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}\n\n\t}\n\n\treturn envMapTypeDefine;\n\n}\n\nfunction generateEnvMapModeDefine( parameters ) {\n\n\tlet envMapModeDefine = 'ENVMAP_MODE_REFLECTION';\n\n\tif ( parameters.envMap ) {\n\n\t\tswitch ( parameters.envMapMode ) {\n\n\t\t\tcase CubeRefractionMapping:\n\t\t\tcase EquirectangularRefractionMapping:\n\t\t\tcase CubeUVRefractionMapping:\n\n\t\t\t\tenvMapModeDefine = 'ENVMAP_MODE_REFRACTION';\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\treturn envMapModeDefine;\n\n}\n\nfunction generateEnvMapBlendingDefine( parameters ) {\n\n\tlet envMapBlendingDefine = 'ENVMAP_BLENDING_NONE';\n\n\tif ( parameters.envMap ) {\n\n\t\tswitch ( parameters.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\treturn envMapBlendingDefine;\n\n}\n\nfunction WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {\n\n\tconst gl = renderer.getContext();\n\n\tconst defines = parameters.defines;\n\n\tlet vertexShader = parameters.vertexShader;\n\tlet fragmentShader = parameters.fragmentShader;\n\n\tconst shadowMapTypeDefine = generateShadowMapTypeDefine( parameters );\n\tconst envMapTypeDefine = generateEnvMapTypeDefine( parameters );\n\tconst envMapModeDefine = generateEnvMapModeDefine( parameters );\n\tconst envMapBlendingDefine = generateEnvMapBlendingDefine( parameters );\n\n\n\tconst gammaFactorDefine = ( renderer.gammaFactor > 0 ) ? renderer.gammaFactor : 1.0;\n\n\tconst customExtensions = parameters.isWebGL2 ? '' : generateExtensions( parameters );\n\n\tconst customDefines = generateDefines( defines );\n\n\tconst program = gl.createProgram();\n\n\tlet prefixVertex, prefixFragment;\n\n\tif ( parameters.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\tgeneratePrecision( parameters ),\n\n\t\t\t'#define SHADER_NAME ' + parameters.shaderName,\n\n\t\t\tcustomDefines,\n\n\t\t\tparameters.instancing ? '#define USE_INSTANCING' : '',\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.fogExp2 ) ? '#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\t( parameters.normalMap && parameters.objectSpaceNormalMap ) ? '#define OBJECTSPACE_NORMALMAP' : '',\n\t\t\t( parameters.normalMap && parameters.tangentSpaceNormalMap ) ? '#define TANGENTSPACE_NORMALMAP' : '',\n\n\t\t\tparameters.clearcoatMap ? '#define USE_CLEARCOATMAP' : '',\n\t\t\tparameters.clearcoatRoughnessMap ? '#define USE_CLEARCOAT_ROUGHNESSMAP' : '',\n\t\t\tparameters.clearcoatNormalMap ? '#define USE_CLEARCOAT_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.transmissionMap ? '#define USE_TRANSMISSIONMAP' : '',\n\n\t\t\tparameters.vertexTangents ? '#define USE_TANGENT' : '',\n\t\t\tparameters.vertexColors ? '#define USE_COLOR' : '',\n\t\t\tparameters.vertexUvs ? '#define USE_UV' : '',\n\t\t\tparameters.uvsVertexOnly ? '#define UVS_VERTEX_ONLY' : '',\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\t( parameters.logarithmicDepthBuffer && parameters.rendererExtensionFragDepth ) ? '#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\t\t\t'uniform bool isOrthographic;',\n\n\t\t\t'#ifdef USE_INSTANCING',\n\n\t\t\t' attribute mat4 instanceMatrix;',\n\n\t\t\t'#endif',\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_TANGENT',\n\n\t\t\t'\tattribute vec4 tangent;',\n\n\t\t\t'#endif',\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\tgeneratePrecision( parameters ),\n\n\t\t\t'#define SHADER_NAME ' + parameters.shaderName,\n\n\t\t\tcustomDefines,\n\n\t\t\tparameters.alphaTest ? '#define ALPHATEST ' + parameters.alphaTest + ( parameters.alphaTest % 1 ? '' : '.0' ) : '', // add '.0' if integer\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.fogExp2 ) ? '#define FOG_EXP2' : '',\n\n\t\t\tparameters.map ? '#define USE_MAP' : '',\n\t\t\tparameters.matcap ? '#define USE_MATCAP' : '',\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\t( parameters.normalMap && parameters.objectSpaceNormalMap ) ? '#define OBJECTSPACE_NORMALMAP' : '',\n\t\t\t( parameters.normalMap && parameters.tangentSpaceNormalMap ) ? '#define TANGENTSPACE_NORMALMAP' : '',\n\t\t\tparameters.clearcoatMap ? '#define USE_CLEARCOATMAP' : '',\n\t\t\tparameters.clearcoatRoughnessMap ? '#define USE_CLEARCOAT_ROUGHNESSMAP' : '',\n\t\t\tparameters.clearcoatNormalMap ? '#define USE_CLEARCOAT_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\n\t\t\tparameters.sheen ? '#define USE_SHEEN' : '',\n\t\t\tparameters.transmissionMap ? '#define USE_TRANSMISSIONMAP' : '',\n\n\t\t\tparameters.vertexTangents ? '#define USE_TANGENT' : '',\n\t\t\tparameters.vertexColors ? '#define USE_COLOR' : '',\n\t\t\tparameters.vertexUvs ? '#define USE_UV' : '',\n\t\t\tparameters.uvsVertexOnly ? '#define UVS_VERTEX_ONLY' : '',\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\t( parameters.logarithmicDepthBuffer && parameters.rendererExtensionFragDepth ) ? '#define USE_LOGDEPTHBUF_EXT' : '',\n\n\t\t\t( ( parameters.extensionShaderTextureLOD || parameters.envMap ) && parameters.rendererExtensionShaderTextureLod ) ? '#define TEXTURE_LOD_EXT' : '',\n\n\t\t\t'uniform mat4 viewMatrix;',\n\t\t\t'uniform vec3 cameraPosition;',\n\t\t\t'uniform bool isOrthographic;',\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\tShaderChunk[ 'encodings_pars_fragment' ], // this code is required here because it is used by the various encoding/decoding function defined below\n\t\t\tparameters.map ? getTexelDecodingFunction( 'mapTexelToLinear', parameters.mapEncoding ) : '',\n\t\t\tparameters.matcap ? getTexelDecodingFunction( 'matcapTexelToLinear', parameters.matcapEncoding ) : '',\n\t\t\tparameters.envMap ? getTexelDecodingFunction( 'envMapTexelToLinear', parameters.envMapEncoding ) : '',\n\t\t\tparameters.emissiveMap ? getTexelDecodingFunction( 'emissiveMapTexelToLinear', parameters.emissiveMapEncoding ) : '',\n\t\t\tparameters.lightMap ? getTexelDecodingFunction( 'lightMapTexelToLinear', parameters.lightMapEncoding ) : '',\n\t\t\tgetTexelEncodingFunction( 'linearToOutputTexel', parameters.outputEncoding ),\n\n\t\t\tparameters.depthPacking ? '#define DEPTH_PACKING ' + parameters.depthPacking : '',\n\n\t\t\t'\\n'\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t}\n\n\tvertexShader = resolveIncludes( vertexShader );\n\tvertexShader = replaceLightNums( vertexShader, parameters );\n\tvertexShader = replaceClippingPlaneNums( vertexShader, parameters );\n\n\tfragmentShader = resolveIncludes( fragmentShader );\n\tfragmentShader = replaceLightNums( fragmentShader, parameters );\n\tfragmentShader = replaceClippingPlaneNums( fragmentShader, parameters );\n\n\tvertexShader = unrollLoops( vertexShader );\n\tfragmentShader = unrollLoops( fragmentShader );\n\n\tif ( parameters.isWebGL2 && ! parameters.isRawShaderMaterial ) {\n\n\t\t// GLSL 3.0 conversion\n\n\t\tprefixVertex = [\n\t\t\t'#version 300 es\\n',\n\t\t\t'#define attribute in',\n\t\t\t'#define varying out',\n\t\t\t'#define texture2D texture'\n\t\t].join( '\\n' ) + '\\n' + prefixVertex;\n\n\t\tprefixFragment = [\n\t\t\t'#version 300 es\\n',\n\t\t\t'#define varying in',\n\t\t\t'out highp vec4 pc_fragColor;',\n\t\t\t'#define gl_FragColor pc_fragColor',\n\t\t\t'#define gl_FragDepthEXT gl_FragDepth',\n\t\t\t'#define texture2D texture',\n\t\t\t'#define textureCube texture',\n\t\t\t'#define texture2DProj textureProj',\n\t\t\t'#define texture2DLodEXT textureLod',\n\t\t\t'#define texture2DProjLodEXT textureProjLod',\n\t\t\t'#define textureCubeLodEXT textureLod',\n\t\t\t'#define texture2DGradEXT textureGrad',\n\t\t\t'#define texture2DProjGradEXT textureProjGrad',\n\t\t\t'#define textureCubeGradEXT textureGrad'\n\t\t].join( '\\n' ) + '\\n' + prefixFragment;\n\n\t}\n\n\tconst vertexGlsl = prefixVertex + vertexShader;\n\tconst fragmentGlsl = prefixFragment + fragmentShader;\n\n\t// console.log( '*VERTEX*', vertexGlsl );\n\t// console.log( '*FRAGMENT*', fragmentGlsl );\n\n\tconst glVertexShader = WebGLShader( gl, 35633, vertexGlsl );\n\tconst glFragmentShader = WebGLShader( gl, 35632, 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 ( parameters.index0AttributeName !== undefined ) {\n\n\t\tgl.bindAttribLocation( program, 0, parameters.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\t// check for link errors\n\tif ( renderer.debug.checkShaderErrors ) {\n\n\t\tconst programLog = gl.getProgramInfoLog( program ).trim();\n\t\tconst vertexLog = gl.getShaderInfoLog( glVertexShader ).trim();\n\t\tconst fragmentLog = gl.getShaderInfoLog( glFragmentShader ).trim();\n\n\t\tlet runnable = true;\n\t\tlet haveDiagnostics = true;\n\n\t\tif ( gl.getProgramParameter( program, 35714 ) === false ) {\n\n\t\t\trunnable = false;\n\n\t\t\tconst vertexErrors = getShaderErrors( gl, glVertexShader, 'vertex' );\n\t\t\tconst fragmentErrors = getShaderErrors( gl, glFragmentShader, 'fragment' );\n\n\t\t\tconsole.error( 'THREE.WebGLProgram: shader error: ', gl.getError(), '35715', gl.getProgramParameter( program, 35715 ), 'gl.getProgramInfoLog', programLog, vertexErrors, fragmentErrors );\n\n\t\t} else if ( programLog !== '' ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLProgram: gl.getProgramInfoLog()', programLog );\n\n\t\t} else if ( vertexLog === '' || fragmentLog === '' ) {\n\n\t\t\thaveDiagnostics = false;\n\n\t\t}\n\n\t\tif ( haveDiagnostics ) {\n\n\t\t\tthis.diagnostics = {\n\n\t\t\t\trunnable: runnable,\n\n\t\t\t\tprogramLog: programLog,\n\n\t\t\t\tvertexShader: {\n\n\t\t\t\t\tlog: vertexLog,\n\t\t\t\t\tprefix: prefixVertex\n\n\t\t\t\t},\n\n\t\t\t\tfragmentShader: {\n\n\t\t\t\t\tlog: fragmentLog,\n\t\t\t\t\tprefix: prefixFragment\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t}\n\n\t}\n\n\t// Clean up\n\n\t// Crashes in iOS9 and iOS10. #18402\n\t// gl.detachShader( program, glVertexShader );\n\t// gl.detachShader( program, glFragmentShader );\n\n\tgl.deleteShader( glVertexShader );\n\tgl.deleteShader( glFragmentShader );\n\n\t// set up caching for uniform locations\n\n\tlet cachedUniforms;\n\n\tthis.getUniforms = function () {\n\n\t\tif ( cachedUniforms === undefined ) {\n\n\t\t\tcachedUniforms = new WebGLUniforms( gl, program );\n\n\t\t}\n\n\t\treturn cachedUniforms;\n\n\t};\n\n\t// set up caching for attribute locations\n\n\tlet 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\tbindingStates.releaseStatesOfProgram( this );\n\n\t\tgl.deleteProgram( program );\n\t\tthis.program = undefined;\n\n\t};\n\n\t//\n\n\tthis.name = parameters.shaderName;\n\tthis.id = programIdCount ++;\n\tthis.cacheKey = cacheKey;\n\tthis.usedTimes = 1;\n\tthis.program = program;\n\tthis.vertexShader = glVertexShader;\n\tthis.fragmentShader = glFragmentShader;\n\n\treturn this;\n\n}\n\nfunction WebGLPrograms( renderer, extensions, capabilities, bindingStates ) {\n\n\tconst programs = [];\n\n\tconst isWebGL2 = capabilities.isWebGL2;\n\tconst logarithmicDepthBuffer = capabilities.logarithmicDepthBuffer;\n\tconst floatVertexTextures = capabilities.floatVertexTextures;\n\tconst maxVertexUniforms = capabilities.maxVertexUniforms;\n\tconst vertexTextures = capabilities.vertexTextures;\n\n\tlet precision = capabilities.precision;\n\n\tconst 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: 'toon',\n\t\tMeshStandardMaterial: 'physical',\n\t\tMeshPhysicalMaterial: 'physical',\n\t\tMeshMatcapMaterial: 'matcap',\n\t\tLineBasicMaterial: 'basic',\n\t\tLineDashedMaterial: 'dashed',\n\t\tPointsMaterial: 'points',\n\t\tShadowMaterial: 'shadow',\n\t\tSpriteMaterial: 'sprite'\n\t};\n\n\tconst parameterNames = [\n\t\t\"precision\", \"isWebGL2\", \"supportsVertexTextures\", \"outputEncoding\", \"instancing\",\n\t\t\"map\", \"mapEncoding\", \"matcap\", \"matcapEncoding\", \"envMap\", \"envMapMode\", \"envMapEncoding\", \"envMapCubeUV\",\n\t\t\"lightMap\", \"lightMapEncoding\", \"aoMap\", \"emissiveMap\", \"emissiveMapEncoding\", \"bumpMap\", \"normalMap\", \"objectSpaceNormalMap\", \"tangentSpaceNormalMap\", \"clearcoatMap\", \"clearcoatRoughnessMap\", \"clearcoatNormalMap\", \"displacementMap\", \"specularMap\",\n\t\t\"roughnessMap\", \"metalnessMap\", \"gradientMap\",\n\t\t\"alphaMap\", \"combine\", \"vertexColors\", \"vertexTangents\", \"vertexUvs\", \"uvsVertexOnly\", \"fog\", \"useFog\", \"fogExp2\",\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\"numDirLightShadows\", \"numPointLightShadows\", \"numSpotLightShadows\",\n\t\t\"shadowMapEnabled\", \"shadowMapType\", \"toneMapping\", 'physicallyCorrectLights',\n\t\t\"alphaTest\", \"doubleSided\", \"flipSided\", \"numClippingPlanes\", \"numClipIntersection\", \"depthPacking\", \"dithering\",\n\t\t\"sheen\", \"transmissionMap\"\n\t];\n\n\tfunction allocateBones( object ) {\n\n\t\tconst skeleton = object.skeleton;\n\t\tconst bones = skeleton.bones;\n\n\t\tif ( 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\tconst nVertexUniforms = maxVertexUniforms;\n\t\t\tconst nVertexMatrices = Math.floor( ( nVertexUniforms - 20 ) / 4 );\n\n\t\t\tconst 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 ) {\n\n\t\tlet 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\treturn encoding;\n\n\t}\n\n\tfunction getParameters( material, lights, shadows, scene, nClipPlanes, nClipIntersection, object ) {\n\n\t\tconst fog = scene.fog;\n\t\tconst environment = material.isMeshStandardMaterial ? scene.environment : null;\n\n\t\tconst envMap = material.envMap || environment;\n\n\t\tconst 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\tconst maxBones = object.isSkinnedMesh ? allocateBones( object ) : 0;\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\tlet vertexShader, fragmentShader;\n\n\t\tif ( shaderID ) {\n\n\t\t\tconst shader = ShaderLib[ shaderID ];\n\n\t\t\tvertexShader = shader.vertexShader;\n\t\t\tfragmentShader = shader.fragmentShader;\n\n\t\t} else {\n\n\t\t\tvertexShader = material.vertexShader;\n\t\t\tfragmentShader = material.fragmentShader;\n\n\t\t}\n\n\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\t\tconst parameters = {\n\n\t\t\tisWebGL2: isWebGL2,\n\n\t\t\tshaderID: shaderID,\n\t\t\tshaderName: material.type,\n\n\t\t\tvertexShader: vertexShader,\n\t\t\tfragmentShader: fragmentShader,\n\t\t\tdefines: material.defines,\n\n\t\t\tisRawShaderMaterial: material.isRawShaderMaterial,\n\t\t\tisShaderMaterial: material.isShaderMaterial,\n\n\t\t\tprecision: precision,\n\n\t\t\tinstancing: object.isInstancedMesh === true,\n\n\t\t\tsupportsVertexTextures: vertexTextures,\n\t\t\toutputEncoding: ( currentRenderTarget !== null ) ? getTextureEncodingFromMap( currentRenderTarget.texture ) : renderer.outputEncoding,\n\t\t\tmap: !! material.map,\n\t\t\tmapEncoding: getTextureEncodingFromMap( material.map ),\n\t\t\tmatcap: !! material.matcap,\n\t\t\tmatcapEncoding: getTextureEncodingFromMap( material.matcap ),\n\t\t\tenvMap: !! envMap,\n\t\t\tenvMapMode: envMap && envMap.mapping,\n\t\t\tenvMapEncoding: getTextureEncodingFromMap( envMap ),\n\t\t\tenvMapCubeUV: ( !! envMap ) && ( ( envMap.mapping === CubeUVReflectionMapping ) || ( envMap.mapping === CubeUVRefractionMapping ) ),\n\t\t\tlightMap: !! material.lightMap,\n\t\t\tlightMapEncoding: getTextureEncodingFromMap( material.lightMap ),\n\t\t\taoMap: !! material.aoMap,\n\t\t\temissiveMap: !! material.emissiveMap,\n\t\t\temissiveMapEncoding: getTextureEncodingFromMap( material.emissiveMap ),\n\t\t\tbumpMap: !! material.bumpMap,\n\t\t\tnormalMap: !! material.normalMap,\n\t\t\tobjectSpaceNormalMap: material.normalMapType === ObjectSpaceNormalMap,\n\t\t\ttangentSpaceNormalMap: material.normalMapType === TangentSpaceNormalMap,\n\t\t\tclearcoatMap: !! material.clearcoatMap,\n\t\t\tclearcoatRoughnessMap: !! material.clearcoatRoughnessMap,\n\t\t\tclearcoatNormalMap: !! material.clearcoatNormalMap,\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\tsheen: !! material.sheen,\n\n\t\t\ttransmissionMap: !! material.transmissionMap,\n\n\t\t\tcombine: material.combine,\n\n\t\t\tvertexTangents: ( material.normalMap && material.vertexTangents ),\n\t\t\tvertexColors: material.vertexColors,\n\t\t\tvertexUvs: !! material.map || !! material.bumpMap || !! material.normalMap || !! material.specularMap || !! material.alphaMap || !! material.emissiveMap || !! material.roughnessMap || !! material.metalnessMap || !! material.clearcoatMap || !! material.clearcoatRoughnessMap || !! material.clearcoatNormalMap || !! material.displacementMap || !! material.transmissionMap,\n\t\t\tuvsVertexOnly: ! ( !! material.map || !! material.bumpMap || !! material.normalMap || !! material.specularMap || !! material.alphaMap || !! material.emissiveMap || !! material.roughnessMap || !! material.metalnessMap || !! material.clearcoatNormalMap || !! material.transmissionMap ) && !! material.displacementMap,\n\n\t\t\tfog: !! fog,\n\t\t\tuseFog: material.fog,\n\t\t\tfogExp2: ( fog && fog.isFogExp2 ),\n\n\t\t\tflatShading: material.flatShading,\n\n\t\t\tsizeAttenuation: material.sizeAttenuation,\n\t\t\tlogarithmicDepthBuffer: logarithmicDepthBuffer,\n\n\t\t\tskinning: material.skinning && maxBones > 0,\n\t\t\tmaxBones: maxBones,\n\t\t\tuseVertexTexture: 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\tnumDirLightShadows: lights.directionalShadowMap.length,\n\t\t\tnumPointLightShadows: lights.pointShadowMap.length,\n\t\t\tnumSpotLightShadows: lights.spotShadowMap.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 && shadows.length > 0,\n\t\t\tshadowMapType: renderer.shadowMap.type,\n\n\t\t\ttoneMapping: material.toneMapped ? renderer.toneMapping : NoToneMapping,\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\tindex0AttributeName: material.index0AttributeName,\n\n\t\t\textensionDerivatives: material.extensions && material.extensions.derivatives,\n\t\t\textensionFragDepth: material.extensions && material.extensions.fragDepth,\n\t\t\textensionDrawBuffers: material.extensions && material.extensions.drawBuffers,\n\t\t\textensionShaderTextureLOD: material.extensions && material.extensions.shaderTextureLOD,\n\n\t\t\trendererExtensionFragDepth: isWebGL2 || extensions.get( 'EXT_frag_depth' ) !== null,\n\t\t\trendererExtensionDrawBuffers: isWebGL2 || extensions.get( 'WEBGL_draw_buffers' ) !== null,\n\t\t\trendererExtensionShaderTextureLod: isWebGL2 || extensions.get( 'EXT_shader_texture_lod' ) !== null,\n\n\t\t\tcustomProgramCacheKey: material.customProgramCacheKey()\n\n\t\t};\n\n\t\treturn parameters;\n\n\t}\n\n\tfunction getProgramCacheKey( parameters ) {\n\n\t\tconst 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( parameters.fragmentShader );\n\t\t\tarray.push( parameters.vertexShader );\n\n\t\t}\n\n\t\tif ( parameters.defines !== undefined ) {\n\n\t\t\tfor ( const name in parameters.defines ) {\n\n\t\t\t\tarray.push( name );\n\t\t\t\tarray.push( parameters.defines[ name ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( parameters.isRawShaderMaterial === undefined ) {\n\n\t\t\tfor ( let i = 0; i < parameterNames.length; i ++ ) {\n\n\t\t\t\tarray.push( parameters[ parameterNames[ i ] ] );\n\n\t\t\t}\n\n\t\t\tarray.push( renderer.outputEncoding );\n\t\t\tarray.push( renderer.gammaFactor );\n\n\t\t}\n\n\t\tarray.push( parameters.customProgramCacheKey );\n\n\t\treturn array.join();\n\n\t}\n\n\tfunction getUniforms( material ) {\n\n\t\tconst shaderID = shaderIDs[ material.type ];\n\t\tlet uniforms;\n\n\t\tif ( shaderID ) {\n\n\t\t\tconst shader = ShaderLib[ shaderID ];\n\t\t\tuniforms = UniformsUtils.clone( shader.uniforms );\n\n\t\t} else {\n\n\t\t\tuniforms = material.uniforms;\n\n\t\t}\n\n\t\treturn uniforms;\n\n\t}\n\n\tfunction acquireProgram( parameters, cacheKey ) {\n\n\t\tlet program;\n\n\t\t// Check if code has been already compiled\n\t\tfor ( let p = 0, pl = programs.length; p < pl; p ++ ) {\n\n\t\t\tconst preexistingProgram = programs[ p ];\n\n\t\t\tif ( preexistingProgram.cacheKey === cacheKey ) {\n\n\t\t\t\tprogram = preexistingProgram;\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, cacheKey, parameters, bindingStates );\n\t\t\tprograms.push( program );\n\n\t\t}\n\n\t\treturn program;\n\n\t}\n\n\tfunction releaseProgram( program ) {\n\n\t\tif ( -- program.usedTimes === 0 ) {\n\n\t\t\t// Remove from unordered set\n\t\t\tconst 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\treturn {\n\t\tgetParameters: getParameters,\n\t\tgetProgramCacheKey: getProgramCacheKey,\n\t\tgetUniforms: getUniforms,\n\t\tacquireProgram: acquireProgram,\n\t\treleaseProgram: releaseProgram,\n\t\t// Exposed for resource monitoring & error feedback via renderer.info:\n\t\tprograms: programs\n\t};\n\n}\n\nfunction WebGLProperties() {\n\n\tlet properties = new WeakMap();\n\n\tfunction get( object ) {\n\n\t\tlet 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\nfunction painterSortStable( a, b ) {\n\n\tif ( a.groupOrder !== b.groupOrder ) {\n\n\t\treturn a.groupOrder - b.groupOrder;\n\n\t} else if ( a.renderOrder !== b.renderOrder ) {\n\n\t\treturn a.renderOrder - b.renderOrder;\n\n\t} else if ( 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.groupOrder !== b.groupOrder ) {\n\n\t\treturn a.groupOrder - b.groupOrder;\n\n\t} else if ( a.renderOrder !== b.renderOrder ) {\n\n\t\treturn a.renderOrder - b.renderOrder;\n\n\t} else 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\n\nfunction WebGLRenderList( properties ) {\n\n\tconst renderItems = [];\n\tlet renderItemsIndex = 0;\n\n\tconst opaque = [];\n\tconst transparent = [];\n\n\tconst defaultProgram = { id: - 1 };\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 getNextRenderItem( object, geometry, material, groupOrder, z, group ) {\n\n\t\tlet renderItem = renderItems[ renderItemsIndex ];\n\t\tconst materialProperties = properties.get( material );\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: materialProperties.program || defaultProgram,\n\t\t\t\tgroupOrder: groupOrder,\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 = materialProperties.program || defaultProgram;\n\t\t\trenderItem.groupOrder = groupOrder;\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\trenderItemsIndex ++;\n\n\t\treturn renderItem;\n\n\t}\n\n\tfunction push( object, geometry, material, groupOrder, z, group ) {\n\n\t\tconst renderItem = getNextRenderItem( object, geometry, material, groupOrder, z, group );\n\n\t\t( material.transparent === true ? transparent : opaque ).push( renderItem );\n\n\t}\n\n\tfunction unshift( object, geometry, material, groupOrder, z, group ) {\n\n\t\tconst renderItem = getNextRenderItem( object, geometry, material, groupOrder, z, group );\n\n\t\t( material.transparent === true ? transparent : opaque ).unshift( renderItem );\n\n\t}\n\n\tfunction sort( customOpaqueSort, customTransparentSort ) {\n\n\t\tif ( opaque.length > 1 ) opaque.sort( customOpaqueSort || painterSortStable );\n\t\tif ( transparent.length > 1 ) transparent.sort( customTransparentSort || reversePainterSortStable );\n\n\t}\n\n\tfunction finish() {\n\n\t\t// Clear references from inactive renderItems in the list\n\n\t\tfor ( let i = renderItemsIndex, il = renderItems.length; i < il; i ++ ) {\n\n\t\t\tconst renderItem = renderItems[ i ];\n\n\t\t\tif ( renderItem.id === null ) break;\n\n\t\t\trenderItem.id = null;\n\t\t\trenderItem.object = null;\n\t\t\trenderItem.geometry = null;\n\t\t\trenderItem.material = null;\n\t\t\trenderItem.program = null;\n\t\t\trenderItem.group = null;\n\n\t\t}\n\n\t}\n\n\treturn {\n\n\t\topaque: opaque,\n\t\ttransparent: transparent,\n\n\t\tinit: init,\n\t\tpush: push,\n\t\tunshift: unshift,\n\t\tfinish: finish,\n\n\t\tsort: sort\n\t};\n\n}\n\nfunction WebGLRenderLists( properties ) {\n\n\tlet lists = new WeakMap();\n\n\tfunction onSceneDispose( event ) {\n\n\t\tconst scene = event.target;\n\n\t\tscene.removeEventListener( 'dispose', onSceneDispose );\n\n\t\tlists.delete( scene );\n\n\t}\n\n\tfunction get( scene, camera ) {\n\n\t\tconst cameras = lists.get( scene );\n\t\tlet list;\n\n\t\tif ( cameras === undefined ) {\n\n\t\t\tlist = new WebGLRenderList( properties );\n\t\t\tlists.set( scene, new WeakMap() );\n\t\t\tlists.get( scene ).set( camera, list );\n\n\t\t\tscene.addEventListener( 'dispose', onSceneDispose );\n\n\t\t} else {\n\n\t\t\tlist = cameras.get( camera );\n\t\t\tif ( list === undefined ) {\n\n\t\t\t\tlist = new WebGLRenderList( properties );\n\t\t\t\tcameras.set( camera, list );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn list;\n\n\t}\n\n\tfunction dispose() {\n\n\t\tlists = new WeakMap();\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tdispose: dispose\n\t};\n\n}\n\nfunction UniformsCache() {\n\n\tconst 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\tlet 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\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\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\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};\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\nfunction ShadowUniformsCache() {\n\n\tconst 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\tlet 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\tshadowBias: 0,\n\t\t\t\t\t\tshadowNormalBias: 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\tshadowBias: 0,\n\t\t\t\t\t\tshadowNormalBias: 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\tshadowBias: 0,\n\t\t\t\t\t\tshadowNormalBias: 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\t// TODO (abelnation): set RectAreaLight shadow uniforms\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\n\n\nlet nextVersion = 0;\n\nfunction shadowCastingLightsFirst( lightA, lightB ) {\n\n\treturn ( lightB.castShadow ? 1 : 0 ) - ( lightA.castShadow ? 1 : 0 );\n\n}\n\nfunction WebGLLights() {\n\n\tconst cache = new UniformsCache();\n\n\tconst shadowCache = ShadowUniformsCache();\n\n\tconst state = {\n\n\t\tversion: 0,\n\n\t\thash: {\n\t\t\tdirectionalLength: - 1,\n\t\t\tpointLength: - 1,\n\t\t\tspotLength: - 1,\n\t\t\trectAreaLength: - 1,\n\t\t\themiLength: - 1,\n\n\t\t\tnumDirectionalShadows: - 1,\n\t\t\tnumPointShadows: - 1,\n\t\t\tnumSpotShadows: - 1\n\t\t},\n\n\t\tambient: [ 0, 0, 0 ],\n\t\tprobe: [],\n\t\tdirectional: [],\n\t\tdirectionalShadow: [],\n\t\tdirectionalShadowMap: [],\n\t\tdirectionalShadowMatrix: [],\n\t\tspot: [],\n\t\tspotShadow: [],\n\t\tspotShadowMap: [],\n\t\tspotShadowMatrix: [],\n\t\trectArea: [],\n\t\tpoint: [],\n\t\tpointShadow: [],\n\t\tpointShadowMap: [],\n\t\tpointShadowMatrix: [],\n\t\themi: []\n\n\t};\n\n\tfor ( let i = 0; i < 9; i ++ ) state.probe.push( new Vector3() );\n\n\tconst vector3 = new Vector3();\n\tconst matrix4 = new Matrix4();\n\tconst matrix42 = new Matrix4();\n\n\tfunction setup( lights, shadows, camera ) {\n\n\t\tlet r = 0, g = 0, b = 0;\n\n\t\tfor ( let i = 0; i < 9; i ++ ) state.probe[ i ].set( 0, 0, 0 );\n\n\t\tlet directionalLength = 0;\n\t\tlet pointLength = 0;\n\t\tlet spotLength = 0;\n\t\tlet rectAreaLength = 0;\n\t\tlet hemiLength = 0;\n\n\t\tlet numDirectionalShadows = 0;\n\t\tlet numPointShadows = 0;\n\t\tlet numSpotShadows = 0;\n\n\t\tconst viewMatrix = camera.matrixWorldInverse;\n\n\t\tlights.sort( shadowCastingLightsFirst );\n\n\t\tfor ( let i = 0, l = lights.length; i < l; i ++ ) {\n\n\t\t\tconst light = lights[ i ];\n\n\t\t\tconst color = light.color;\n\t\t\tconst intensity = light.intensity;\n\t\t\tconst distance = light.distance;\n\n\t\t\tconst 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.isLightProbe ) {\n\n\t\t\t\tfor ( let j = 0; j < 9; j ++ ) {\n\n\t\t\t\t\tstate.probe[ j ].addScaledVector( light.sh.coefficients[ j ], intensity );\n\n\t\t\t\t}\n\n\t\t\t} else if ( light.isDirectionalLight ) {\n\n\t\t\t\tconst 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\tif ( light.castShadow ) {\n\n\t\t\t\t\tconst shadow = light.shadow;\n\n\t\t\t\t\tconst shadowUniforms = shadowCache.get( light );\n\n\t\t\t\t\tshadowUniforms.shadowBias = shadow.bias;\n\t\t\t\t\tshadowUniforms.shadowNormalBias = shadow.normalBias;\n\t\t\t\t\tshadowUniforms.shadowRadius = shadow.radius;\n\t\t\t\t\tshadowUniforms.shadowMapSize = shadow.mapSize;\n\n\t\t\t\t\tstate.directionalShadow[ directionalLength ] = shadowUniforms;\n\t\t\t\t\tstate.directionalShadowMap[ directionalLength ] = shadowMap;\n\t\t\t\t\tstate.directionalShadowMatrix[ directionalLength ] = light.shadow.matrix;\n\n\t\t\t\t\tnumDirectionalShadows ++;\n\n\t\t\t\t}\n\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\tconst 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.decay;\n\n\t\t\t\tif ( light.castShadow ) {\n\n\t\t\t\t\tconst shadow = light.shadow;\n\n\t\t\t\t\tconst shadowUniforms = shadowCache.get( light );\n\n\t\t\t\t\tshadowUniforms.shadowBias = shadow.bias;\n\t\t\t\t\tshadowUniforms.shadowNormalBias = shadow.normalBias;\n\t\t\t\t\tshadowUniforms.shadowRadius = shadow.radius;\n\t\t\t\t\tshadowUniforms.shadowMapSize = shadow.mapSize;\n\n\t\t\t\t\tstate.spotShadow[ spotLength ] = shadowUniforms;\n\t\t\t\t\tstate.spotShadowMap[ spotLength ] = shadowMap;\n\t\t\t\t\tstate.spotShadowMatrix[ spotLength ] = light.shadow.matrix;\n\n\t\t\t\t\tnumSpotShadows ++;\n\n\t\t\t\t}\n\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\tconst 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\tconst 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.decay;\n\n\t\t\t\tif ( light.castShadow ) {\n\n\t\t\t\t\tconst shadow = light.shadow;\n\n\t\t\t\t\tconst shadowUniforms = shadowCache.get( light );\n\n\t\t\t\t\tshadowUniforms.shadowBias = shadow.bias;\n\t\t\t\t\tshadowUniforms.shadowNormalBias = shadow.normalBias;\n\t\t\t\t\tshadowUniforms.shadowRadius = shadow.radius;\n\t\t\t\t\tshadowUniforms.shadowMapSize = shadow.mapSize;\n\t\t\t\t\tshadowUniforms.shadowCameraNear = shadow.camera.near;\n\t\t\t\t\tshadowUniforms.shadowCameraFar = shadow.camera.far;\n\n\t\t\t\t\tstate.pointShadow[ pointLength ] = shadowUniforms;\n\t\t\t\t\tstate.pointShadowMap[ pointLength ] = shadowMap;\n\t\t\t\t\tstate.pointShadowMatrix[ pointLength ] = light.shadow.matrix;\n\n\t\t\t\t\tnumPointShadows ++;\n\n\t\t\t\t}\n\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\tconst 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\tconst hash = state.hash;\n\n\t\tif ( hash.directionalLength !== directionalLength ||\n\t\t\thash.pointLength !== pointLength ||\n\t\t\thash.spotLength !== spotLength ||\n\t\t\thash.rectAreaLength !== rectAreaLength ||\n\t\t\thash.hemiLength !== hemiLength ||\n\t\t\thash.numDirectionalShadows !== numDirectionalShadows ||\n\t\t\thash.numPointShadows !== numPointShadows ||\n\t\t\thash.numSpotShadows !== numSpotShadows ) {\n\n\t\t\tstate.directional.length = directionalLength;\n\t\t\tstate.spot.length = spotLength;\n\t\t\tstate.rectArea.length = rectAreaLength;\n\t\t\tstate.point.length = pointLength;\n\t\t\tstate.hemi.length = hemiLength;\n\n\t\t\tstate.directionalShadow.length = numDirectionalShadows;\n\t\t\tstate.directionalShadowMap.length = numDirectionalShadows;\n\t\t\tstate.pointShadow.length = numPointShadows;\n\t\t\tstate.pointShadowMap.length = numPointShadows;\n\t\t\tstate.spotShadow.length = numSpotShadows;\n\t\t\tstate.spotShadowMap.length = numSpotShadows;\n\t\t\tstate.directionalShadowMatrix.length = numDirectionalShadows;\n\t\t\tstate.pointShadowMatrix.length = numPointShadows;\n\t\t\tstate.spotShadowMatrix.length = numSpotShadows;\n\n\t\t\thash.directionalLength = directionalLength;\n\t\t\thash.pointLength = pointLength;\n\t\t\thash.spotLength = spotLength;\n\t\t\thash.rectAreaLength = rectAreaLength;\n\t\t\thash.hemiLength = hemiLength;\n\n\t\t\thash.numDirectionalShadows = numDirectionalShadows;\n\t\t\thash.numPointShadows = numPointShadows;\n\t\t\thash.numSpotShadows = numSpotShadows;\n\n\t\t\tstate.version = nextVersion ++;\n\n\t\t}\n\n\t}\n\n\treturn {\n\t\tsetup: setup,\n\t\tstate: state\n\t};\n\n}\n\nfunction WebGLRenderState() {\n\n\tconst lights = new WebGLLights();\n\n\tconst lightsArray = [];\n\tconst shadowsArray = [];\n\n\tfunction init() {\n\n\t\tlightsArray.length = 0;\n\t\tshadowsArray.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 setupLights( camera ) {\n\n\t\tlights.setup( lightsArray, shadowsArray, camera );\n\n\t}\n\n\tconst state = {\n\t\tlightsArray: lightsArray,\n\t\tshadowsArray: shadowsArray,\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};\n\n}\n\nfunction WebGLRenderStates() {\n\n\tlet renderStates = new WeakMap();\n\n\tfunction onSceneDispose( event ) {\n\n\t\tconst scene = event.target;\n\n\t\tscene.removeEventListener( 'dispose', onSceneDispose );\n\n\t\trenderStates.delete( scene );\n\n\t}\n\n\tfunction get( scene, camera ) {\n\n\t\tlet renderState;\n\n\t\tif ( renderStates.has( scene ) === false ) {\n\n\t\t\trenderState = new WebGLRenderState();\n\t\t\trenderStates.set( scene, new WeakMap() );\n\t\t\trenderStates.get( scene ).set( camera, renderState );\n\n\t\t\tscene.addEventListener( 'dispose', onSceneDispose );\n\n\t\t} else {\n\n\t\t\tif ( renderStates.get( scene ).has( camera ) === false ) {\n\n\t\t\t\trenderState = new WebGLRenderState();\n\t\t\t\trenderStates.get( scene ).set( camera, renderState );\n\n\t\t\t} else {\n\n\t\t\t\trenderState = renderStates.get( scene ).get( camera );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn renderState;\n\n\t}\n\n\tfunction dispose() {\n\n\t\trenderStates = new WeakMap();\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tdispose: dispose\n\t};\n\n}\n\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\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 * 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\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\nvar vsm_frag = \"uniform sampler2D shadow_pass;\\nuniform vec2 resolution;\\nuniform float radius;\\n#include \\nvoid main() {\\n float mean = 0.0;\\n float squared_mean = 0.0;\\n\\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy ) / resolution ) );\\n for ( float i = -1.0; i < 1.0 ; i += SAMPLE_RATE) {\\n #ifdef HORIZONAL_PASS\\n vec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( i, 0.0 ) * radius ) / resolution ) );\\n mean += distribution.x;\\n squared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\\n #else\\n float depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, i ) * radius ) / resolution ) );\\n mean += depth;\\n squared_mean += depth * depth;\\n #endif\\n }\\n mean = mean * HALF_SAMPLE_RATE;\\n squared_mean = squared_mean * HALF_SAMPLE_RATE;\\n float std_dev = sqrt( squared_mean - mean * mean );\\n gl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\\n}\";\n\nvar vsm_vert = \"void main() {\\n\\tgl_Position = vec4( position, 1.0 );\\n}\";\n\nfunction WebGLShadowMap( _renderer, _objects, maxTextureSize ) {\n\n\tlet _frustum = new Frustum();\n\n\tconst _shadowMapSize = new Vector2(),\n\t\t_viewportSize = new Vector2(),\n\n\t\t_viewport = new Vector4(),\n\n\t\t_depthMaterials = [],\n\t\t_distanceMaterials = [],\n\n\t\t_materialCache = {};\n\n\tconst shadowSide = { 0: BackSide, 1: FrontSide, 2: DoubleSide };\n\n\tconst shadowMaterialVertical = new ShaderMaterial( {\n\n\t\tdefines: {\n\t\t\tSAMPLE_RATE: 2.0 / 8.0,\n\t\t\tHALF_SAMPLE_RATE: 1.0 / 8.0\n\t\t},\n\n\t\tuniforms: {\n\t\t\tshadow_pass: { value: null },\n\t\t\tresolution: { value: new Vector2() },\n\t\t\tradius: { value: 4.0 }\n\t\t},\n\n\t\tvertexShader: vsm_vert,\n\n\t\tfragmentShader: vsm_frag\n\n\t} );\n\n\tconst shadowMaterialHorizonal = shadowMaterialVertical.clone();\n\tshadowMaterialHorizonal.defines.HORIZONAL_PASS = 1;\n\n\tconst fullScreenTri = new BufferGeometry();\n\tfullScreenTri.setAttribute(\n\t\t\"position\",\n\t\tnew BufferAttribute(\n\t\t\tnew Float32Array( [ - 1, - 1, 0.5, 3, - 1, 0.5, - 1, 3, 0.5 ] ),\n\t\t\t3\n\t\t)\n\t);\n\n\tconst fullScreenMesh = new Mesh( fullScreenTri, shadowMaterialVertical );\n\n\tconst 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\tconst currentRenderTarget = _renderer.getRenderTarget();\n\t\tconst activeCubeFace = _renderer.getActiveCubeFace();\n\t\tconst activeMipmapLevel = _renderer.getActiveMipmapLevel();\n\n\t\tconst _state = _renderer.state;\n\n\t\t// Set GL state for depth map.\n\t\t_state.setBlending( NoBlending );\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\tfor ( let i = 0, il = lights.length; i < il; i ++ ) {\n\n\t\t\tconst light = lights[ i ];\n\t\t\tconst shadow = light.shadow;\n\n\t\t\tif ( shadow.autoUpdate === false && shadow.needsUpdate === false ) continue;\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\t_shadowMapSize.copy( shadow.mapSize );\n\n\t\t\tconst shadowFrameExtents = shadow.getFrameExtents();\n\n\t\t\t_shadowMapSize.multiply( shadowFrameExtents );\n\n\t\t\t_viewportSize.copy( shadow.mapSize );\n\n\t\t\tif ( _shadowMapSize.x > maxTextureSize || _shadowMapSize.y > maxTextureSize ) {\n\n\t\t\t\tif ( _shadowMapSize.x > maxTextureSize ) {\n\n\t\t\t\t\t_viewportSize.x = Math.floor( maxTextureSize / shadowFrameExtents.x );\n\t\t\t\t\t_shadowMapSize.x = _viewportSize.x * shadowFrameExtents.x;\n\t\t\t\t\tshadow.mapSize.x = _viewportSize.x;\n\n\t\t\t\t}\n\n\t\t\t\tif ( _shadowMapSize.y > maxTextureSize ) {\n\n\t\t\t\t\t_viewportSize.y = Math.floor( maxTextureSize / shadowFrameExtents.y );\n\t\t\t\t\t_shadowMapSize.y = _viewportSize.y * shadowFrameExtents.y;\n\t\t\t\t\tshadow.mapSize.y = _viewportSize.y;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( shadow.map === null && ! shadow.isPointLightShadow && this.type === VSMShadowMap ) {\n\n\t\t\t\tconst pars = { minFilter: LinearFilter, magFilter: LinearFilter, format: RGBAFormat, stencilBuffer: false };\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\tshadow.mapPass = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y, pars );\n\n\t\t\t\tshadow.camera.updateProjectionMatrix();\n\n\t\t\t}\n\n\t\t\tif ( shadow.map === null ) {\n\n\t\t\t\tconst pars = { minFilter: NearestFilter, magFilter: NearestFilter, format: RGBAFormat, stencilBuffer: false };\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\tshadow.camera.updateProjectionMatrix();\n\n\t\t\t}\n\n\t\t\t_renderer.setRenderTarget( shadow.map );\n\t\t\t_renderer.clear();\n\n\t\t\tconst viewportCount = shadow.getViewportCount();\n\n\t\t\tfor ( let vp = 0; vp < viewportCount; vp ++ ) {\n\n\t\t\t\tconst viewport = shadow.getViewport( vp );\n\n\t\t\t\t_viewport.set(\n\t\t\t\t\t_viewportSize.x * viewport.x,\n\t\t\t\t\t_viewportSize.y * viewport.y,\n\t\t\t\t\t_viewportSize.x * viewport.z,\n\t\t\t\t\t_viewportSize.y * viewport.w\n\t\t\t\t);\n\n\t\t\t\t_state.viewport( _viewport );\n\n\t\t\t\tshadow.updateMatrices( light, vp );\n\n\t\t\t\t_frustum = shadow.getFrustum();\n\n\t\t\t\trenderObject( scene, camera, shadow.camera, light, this.type );\n\n\t\t\t}\n\n\t\t\t// do blur pass for VSM\n\n\t\t\tif ( ! shadow.isPointLightShadow && this.type === VSMShadowMap ) {\n\n\t\t\t\tVSMPass( shadow, camera );\n\n\t\t\t}\n\n\t\t\tshadow.needsUpdate = false;\n\n\t\t}\n\n\t\tscope.needsUpdate = false;\n\n\t\t_renderer.setRenderTarget( currentRenderTarget, activeCubeFace, activeMipmapLevel );\n\n\t};\n\n\tfunction VSMPass( shadow, camera ) {\n\n\t\tconst geometry = _objects.update( fullScreenMesh );\n\n\t\t// vertical pass\n\n\t\tshadowMaterialVertical.uniforms.shadow_pass.value = shadow.map.texture;\n\t\tshadowMaterialVertical.uniforms.resolution.value = shadow.mapSize;\n\t\tshadowMaterialVertical.uniforms.radius.value = shadow.radius;\n\t\t_renderer.setRenderTarget( shadow.mapPass );\n\t\t_renderer.clear();\n\t\t_renderer.renderBufferDirect( camera, null, geometry, shadowMaterialVertical, fullScreenMesh, null );\n\n\t\t// horizonal pass\n\n\t\tshadowMaterialHorizonal.uniforms.shadow_pass.value = shadow.mapPass.texture;\n\t\tshadowMaterialHorizonal.uniforms.resolution.value = shadow.mapSize;\n\t\tshadowMaterialHorizonal.uniforms.radius.value = shadow.radius;\n\t\t_renderer.setRenderTarget( shadow.map );\n\t\t_renderer.clear();\n\t\t_renderer.renderBufferDirect( camera, null, geometry, shadowMaterialHorizonal, fullScreenMesh, null );\n\n\t}\n\n\tfunction getDepthMaterialVariant( useMorphing, useSkinning, useInstancing ) {\n\n\t\tconst index = useMorphing << 0 | useSkinning << 1 | useInstancing << 2;\n\n\t\tlet material = _depthMaterials[ index ];\n\n\t\tif ( material === undefined ) {\n\n\t\t\tmaterial = new MeshDepthMaterial( {\n\n\t\t\t\tdepthPacking: RGBADepthPacking,\n\n\t\t\t\tmorphTargets: useMorphing,\n\t\t\t\tskinning: useSkinning\n\n\t\t\t} );\n\n\t\t\t_depthMaterials[ index ] = material;\n\n\t\t}\n\n\t\treturn material;\n\n\t}\n\n\tfunction getDistanceMaterialVariant( useMorphing, useSkinning, useInstancing ) {\n\n\t\tconst index = useMorphing << 0 | useSkinning << 1 | useInstancing << 2;\n\n\t\tlet material = _distanceMaterials[ index ];\n\n\t\tif ( material === undefined ) {\n\n\t\t\tmaterial = new MeshDistanceMaterial( {\n\n\t\t\t\tmorphTargets: useMorphing,\n\t\t\t\tskinning: useSkinning\n\n\t\t\t} );\n\n\t\t\t_distanceMaterials[ index ] = material;\n\n\t\t}\n\n\t\treturn material;\n\n\t}\n\n\tfunction getDepthMaterial( object, geometry, material, light, shadowCameraNear, shadowCameraFar, type ) {\n\n\t\tlet result = null;\n\n\t\tlet getMaterialVariant = getDepthMaterialVariant;\n\t\tlet customMaterial = object.customDepthMaterial;\n\n\t\tif ( light.isPointLight === true ) {\n\n\t\t\tgetMaterialVariant = getDistanceMaterialVariant;\n\t\t\tcustomMaterial = object.customDistanceMaterial;\n\n\t\t}\n\n\t\tif ( customMaterial === undefined ) {\n\n\t\t\tlet useMorphing = false;\n\n\t\t\tif ( material.morphTargets === true ) {\n\n\t\t\t\tuseMorphing = geometry.morphAttributes && geometry.morphAttributes.position && geometry.morphAttributes.position.length > 0;\n\n\t\t\t}\n\n\t\t\tlet useSkinning = false;\n\n\t\t\tif ( object.isSkinnedMesh === true ) {\n\n\t\t\t\tif ( material.skinning === true ) {\n\n\t\t\t\t\tuseSkinning = true;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLShadowMap: THREE.SkinnedMesh with material.skinning set to false:', object );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst useInstancing = object.isInstancedMesh === true;\n\n\t\t\tresult = getMaterialVariant( useMorphing, useSkinning, useInstancing );\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\tconst keyA = result.uuid, keyB = material.uuid;\n\n\t\t\tlet 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\tlet 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\tif ( type === VSMShadowMap ) {\n\n\t\t\tresult.side = ( material.shadowSide !== null ) ? material.shadowSide : material.side;\n\n\t\t} else {\n\n\t\t\tresult.side = ( material.shadowSide !== null ) ? material.shadowSide : shadowSide[ material.side ];\n\n\t\t}\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 ( light.isPointLight === true && result.isMeshDistanceMaterial === true ) {\n\n\t\t\tresult.referencePosition.setFromMatrixPosition( light.matrixWorld );\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, light, type ) {\n\n\t\tif ( object.visible === false ) return;\n\n\t\tconst 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.receiveShadow && type === VSMShadowMap ) ) && ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) ) {\n\n\t\t\t\tobject.modelViewMatrix.multiplyMatrices( shadowCamera.matrixWorldInverse, object.matrixWorld );\n\n\t\t\t\tconst geometry = _objects.update( object );\n\t\t\t\tconst material = object.material;\n\n\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\tconst groups = geometry.groups;\n\n\t\t\t\t\tfor ( let k = 0, kl = groups.length; k < kl; k ++ ) {\n\n\t\t\t\t\t\tconst group = groups[ k ];\n\t\t\t\t\t\tconst groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\t\tif ( groupMaterial && groupMaterial.visible ) {\n\n\t\t\t\t\t\t\tconst depthMaterial = getDepthMaterial( object, geometry, groupMaterial, light, shadowCamera.near, shadowCamera.far, type );\n\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\tconst depthMaterial = getDepthMaterial( object, geometry, material, light, shadowCamera.near, shadowCamera.far, type );\n\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\tconst children = object.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\trenderObject( children[ i ], camera, shadowCamera, light, type );\n\n\t\t}\n\n\t}\n\n}\n\nfunction WebGLState( gl, extensions, capabilities ) {\n\n\tconst isWebGL2 = capabilities.isWebGL2;\n\n\tfunction ColorBuffer() {\n\n\t\tlet locked = false;\n\n\t\tconst color = new Vector4();\n\t\tlet currentColorMask = null;\n\t\tconst 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\tlet locked = false;\n\n\t\tlet currentDepthMask = null;\n\t\tlet currentDepthFunc = null;\n\t\tlet 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( 2929 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tdisable( 2929 );\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( 512 );\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( 519 );\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( 513 );\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( 515 );\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( 514 );\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( 518 );\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( 516 );\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( 517 );\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( 515 );\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( 515 );\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\tlet locked = false;\n\n\t\tlet currentStencilMask = null;\n\t\tlet currentStencilFunc = null;\n\t\tlet currentStencilRef = null;\n\t\tlet currentStencilFuncMask = null;\n\t\tlet currentStencilFail = null;\n\t\tlet currentStencilZFail = null;\n\t\tlet currentStencilZPass = null;\n\t\tlet currentStencilClear = null;\n\n\t\treturn {\n\n\t\t\tsetTest: function ( stencilTest ) {\n\n\t\t\t\tif ( ! locked ) {\n\n\t\t\t\t\tif ( stencilTest ) {\n\n\t\t\t\t\t\tenable( 2960 );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tdisable( 2960 );\n\n\t\t\t\t\t}\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\tconst colorBuffer = new ColorBuffer();\n\tconst depthBuffer = new DepthBuffer();\n\tconst stencilBuffer = new StencilBuffer();\n\n\tlet enabledCapabilities = {};\n\n\tlet currentProgram = null;\n\n\tlet currentBlendingEnabled = null;\n\tlet currentBlending = null;\n\tlet currentBlendEquation = null;\n\tlet currentBlendSrc = null;\n\tlet currentBlendDst = null;\n\tlet currentBlendEquationAlpha = null;\n\tlet currentBlendSrcAlpha = null;\n\tlet currentBlendDstAlpha = null;\n\tlet currentPremultipledAlpha = false;\n\n\tlet currentFlipSided = null;\n\tlet currentCullFace = null;\n\n\tlet currentLineWidth = null;\n\n\tlet currentPolygonOffsetFactor = null;\n\tlet currentPolygonOffsetUnits = null;\n\n\tconst maxTextures = gl.getParameter( 35661 );\n\n\tlet lineWidthAvailable = false;\n\tlet version = 0;\n\tconst glVersion = gl.getParameter( 7938 );\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\tlet currentTextureSlot = null;\n\tlet currentBoundTextures = {};\n\n\tconst currentScissor = new Vector4();\n\tconst currentViewport = new Vector4();\n\n\tfunction createTexture( type, target, count ) {\n\n\t\tconst data = new Uint8Array( 4 ); // 4 is required to match default unpack alignment of 4.\n\t\tconst texture = gl.createTexture();\n\n\t\tgl.bindTexture( type, texture );\n\t\tgl.texParameteri( type, 10241, 9728 );\n\t\tgl.texParameteri( type, 10240, 9728 );\n\n\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\tgl.texImage2D( target + i, 0, 6408, 1, 1, 0, 6408, 5121, data );\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\tconst emptyTextures = {};\n\temptyTextures[ 3553 ] = createTexture( 3553, 3553, 1 );\n\temptyTextures[ 34067 ] = createTexture( 34067, 34069, 6 );\n\n\t// init\n\n\tcolorBuffer.setClear( 0, 0, 0, 1 );\n\tdepthBuffer.setClear( 1 );\n\tstencilBuffer.setClear( 0 );\n\n\tenable( 2929 );\n\tdepthBuffer.setFunc( LessEqualDepth );\n\n\tsetFlipSided( false );\n\tsetCullFace( CullFaceBack );\n\tenable( 2884 );\n\n\tsetBlending( NoBlending );\n\n\t//\n\n\tfunction enable( id ) {\n\n\t\tif ( enabledCapabilities[ id ] !== true ) {\n\n\t\t\tgl.enable( id );\n\t\t\tenabledCapabilities[ id ] = true;\n\n\t\t}\n\n\t}\n\n\tfunction disable( id ) {\n\n\t\tif ( enabledCapabilities[ id ] !== false ) {\n\n\t\t\tgl.disable( id );\n\t\t\tenabledCapabilities[ id ] = false;\n\n\t\t}\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\tconst equationToGL = {\n\t\t[ AddEquation ]: 32774,\n\t\t[ SubtractEquation ]: 32778,\n\t\t[ ReverseSubtractEquation ]: 32779\n\t};\n\n\tif ( isWebGL2 ) {\n\n\t\tequationToGL[ MinEquation ] = 32775;\n\t\tequationToGL[ MaxEquation ] = 32776;\n\n\t} else {\n\n\t\tconst extension = extensions.get( 'EXT_blend_minmax' );\n\n\t\tif ( extension !== null ) {\n\n\t\t\tequationToGL[ MinEquation ] = extension.MIN_EXT;\n\t\t\tequationToGL[ MaxEquation ] = extension.MAX_EXT;\n\n\t\t}\n\n\t}\n\n\tconst factorToGL = {\n\t\t[ ZeroFactor ]: 0,\n\t\t[ OneFactor ]: 1,\n\t\t[ SrcColorFactor ]: 768,\n\t\t[ SrcAlphaFactor ]: 770,\n\t\t[ SrcAlphaSaturateFactor ]: 776,\n\t\t[ DstColorFactor ]: 774,\n\t\t[ DstAlphaFactor ]: 772,\n\t\t[ OneMinusSrcColorFactor ]: 769,\n\t\t[ OneMinusSrcAlphaFactor ]: 771,\n\t\t[ OneMinusDstColorFactor ]: 775,\n\t\t[ OneMinusDstAlphaFactor ]: 773\n\t};\n\n\tfunction setBlending( blending, blendEquation, blendSrc, blendDst, blendEquationAlpha, blendSrcAlpha, blendDstAlpha, premultipliedAlpha ) {\n\n\t\tif ( blending === NoBlending ) {\n\n\t\t\tif ( currentBlendingEnabled ) {\n\n\t\t\t\tdisable( 3042 );\n\t\t\t\tcurrentBlendingEnabled = false;\n\n\t\t\t}\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( ! currentBlendingEnabled ) {\n\n\t\t\tenable( 3042 );\n\t\t\tcurrentBlendingEnabled = true;\n\n\t\t}\n\n\t\tif ( blending !== CustomBlending ) {\n\n\t\t\tif ( blending !== currentBlending || premultipliedAlpha !== currentPremultipledAlpha ) {\n\n\t\t\t\tif ( currentBlendEquation !== AddEquation || currentBlendEquationAlpha !== AddEquation ) {\n\n\t\t\t\t\tgl.blendEquation( 32774 );\n\n\t\t\t\t\tcurrentBlendEquation = AddEquation;\n\t\t\t\t\tcurrentBlendEquationAlpha = AddEquation;\n\n\t\t\t\t}\n\n\t\t\t\tif ( premultipliedAlpha ) {\n\n\t\t\t\t\tswitch ( blending ) {\n\n\t\t\t\t\t\tcase NormalBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( 1, 771, 1, 771 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase AdditiveBlending:\n\t\t\t\t\t\t\tgl.blendFunc( 1, 1 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase SubtractiveBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( 0, 0, 769, 771 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase MultiplyBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( 0, 768, 0, 770 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tconsole.error( 'THREE.WebGLState: Invalid blending: ', blending );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tswitch ( blending ) {\n\n\t\t\t\t\t\tcase NormalBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( 770, 771, 1, 771 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase AdditiveBlending:\n\t\t\t\t\t\t\tgl.blendFunc( 770, 1 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase SubtractiveBlending:\n\t\t\t\t\t\t\tgl.blendFunc( 0, 769 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase MultiplyBlending:\n\t\t\t\t\t\t\tgl.blendFunc( 0, 768 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tconsole.error( 'THREE.WebGLState: Invalid blending: ', blending );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tcurrentBlendSrc = null;\n\t\t\t\tcurrentBlendDst = null;\n\t\t\t\tcurrentBlendSrcAlpha = null;\n\t\t\t\tcurrentBlendDstAlpha = null;\n\n\t\t\t\tcurrentBlending = blending;\n\t\t\t\tcurrentPremultipledAlpha = premultipliedAlpha;\n\n\t\t\t}\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t// custom blending\n\n\t\tblendEquationAlpha = blendEquationAlpha || blendEquation;\n\t\tblendSrcAlpha = blendSrcAlpha || blendSrc;\n\t\tblendDstAlpha = blendDstAlpha || blendDst;\n\n\t\tif ( blendEquation !== currentBlendEquation || blendEquationAlpha !== currentBlendEquationAlpha ) {\n\n\t\t\tgl.blendEquationSeparate( equationToGL[ blendEquation ], equationToGL[ blendEquationAlpha ] );\n\n\t\t\tcurrentBlendEquation = blendEquation;\n\t\t\tcurrentBlendEquationAlpha = blendEquationAlpha;\n\n\t\t}\n\n\t\tif ( blendSrc !== currentBlendSrc || blendDst !== currentBlendDst || blendSrcAlpha !== currentBlendSrcAlpha || blendDstAlpha !== currentBlendDstAlpha ) {\n\n\t\t\tgl.blendFuncSeparate( factorToGL[ blendSrc ], factorToGL[ blendDst ], factorToGL[ blendSrcAlpha ], factorToGL[ blendDstAlpha ] );\n\n\t\t\tcurrentBlendSrc = blendSrc;\n\t\t\tcurrentBlendDst = blendDst;\n\t\t\tcurrentBlendSrcAlpha = blendSrcAlpha;\n\t\t\tcurrentBlendDstAlpha = blendDstAlpha;\n\n\t\t}\n\n\t\tcurrentBlending = blending;\n\t\tcurrentPremultipledAlpha = null;\n\n\t}\n\n\tfunction setMaterial( material, frontFaceCW ) {\n\n\t\tmaterial.side === DoubleSide\n\t\t\t? disable( 2884 )\n\t\t\t: enable( 2884 );\n\n\t\tlet flipSided = ( material.side === BackSide );\n\t\tif ( frontFaceCW ) flipSided = ! flipSided;\n\n\t\tsetFlipSided( flipSided );\n\n\t\t( material.blending === NormalBlending && material.transparent === false )\n\t\t\t? setBlending( NoBlending )\n\t\t\t: setBlending( material.blending, material.blendEquation, material.blendSrc, material.blendDst, material.blendEquationAlpha, material.blendSrcAlpha, material.blendDstAlpha, material.premultipliedAlpha );\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\tconst stencilWrite = material.stencilWrite;\n\t\tstencilBuffer.setTest( stencilWrite );\n\t\tif ( stencilWrite ) {\n\n\t\t\tstencilBuffer.setMask( material.stencilWriteMask );\n\t\t\tstencilBuffer.setFunc( material.stencilFunc, material.stencilRef, material.stencilFuncMask );\n\t\t\tstencilBuffer.setOp( material.stencilFail, material.stencilZFail, material.stencilZPass );\n\n\t\t}\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( 2304 );\n\n\t\t\t} else {\n\n\t\t\t\tgl.frontFace( 2305 );\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( 2884 );\n\n\t\t\tif ( cullFace !== currentCullFace ) {\n\n\t\t\t\tif ( cullFace === CullFaceBack ) {\n\n\t\t\t\t\tgl.cullFace( 1029 );\n\n\t\t\t\t} else if ( cullFace === CullFaceFront ) {\n\n\t\t\t\t\tgl.cullFace( 1028 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tgl.cullFace( 1032 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tdisable( 2884 );\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( 32823 );\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( 32823 );\n\n\t\t}\n\n\t}\n\n\tfunction setScissorTest( scissorTest ) {\n\n\t\tif ( scissorTest ) {\n\n\t\t\tenable( 3089 );\n\n\t\t} else {\n\n\t\t\tdisable( 3089 );\n\n\t\t}\n\n\t}\n\n\t// texture\n\n\tfunction activeTexture( webglSlot ) {\n\n\t\tif ( webglSlot === undefined ) webglSlot = 33984 + 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\tlet 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 unbindTexture() {\n\n\t\tconst boundTexture = currentBoundTextures[ currentTextureSlot ];\n\n\t\tif ( boundTexture !== undefined && boundTexture.type !== undefined ) {\n\n\t\t\tgl.bindTexture( boundTexture.type, null );\n\n\t\t\tboundTexture.type = undefined;\n\t\t\tboundTexture.texture = undefined;\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\tfunction texImage3D() {\n\n\t\ttry {\n\n\t\t\tgl.texImage3D.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\tenabledCapabilities = {};\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\tenable: enable,\n\t\tdisable: disable,\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\tunbindTexture: unbindTexture,\n\t\tcompressedTexImage2D: compressedTexImage2D,\n\t\ttexImage2D: texImage2D,\n\t\ttexImage3D: texImage3D,\n\n\t\tscissor: scissor,\n\t\tviewport: viewport,\n\n\t\treset: reset\n\n\t};\n\n}\n\nfunction WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info ) {\n\n\tconst isWebGL2 = capabilities.isWebGL2;\n\tconst maxTextures = capabilities.maxTextures;\n\tconst maxCubemapSize = capabilities.maxCubemapSize;\n\tconst maxTextureSize = capabilities.maxTextureSize;\n\tconst maxSamples = capabilities.maxSamples;\n\n\tconst _videoTextures = new WeakMap();\n\tlet _canvas;\n\n\t// cordova iOS (as of 5.0) still uses UIWebView, which provides OffscreenCanvas,\n\t// also OffscreenCanvas.getContext(\"webgl\"), but not OffscreenCanvas.getContext(\"2d\")!\n\t// Some implementations may only implement OffscreenCanvas partially (e.g. lacking 2d).\n\n\tlet useOffscreenCanvas = false;\n\n\ttry {\n\n\t\tuseOffscreenCanvas = typeof OffscreenCanvas !== 'undefined'\n\t\t\t&& ( new OffscreenCanvas( 1, 1 ).getContext( \"2d\" ) ) !== null;\n\n\t} catch ( err ) {\n\n\t\t// Ignore any errors\n\n\t}\n\n\tfunction createCanvas( width, height ) {\n\n\t\t// Use OffscreenCanvas when available. Specially needed in web workers\n\n\t\treturn useOffscreenCanvas ?\n\t\t\tnew OffscreenCanvas( width, height ) :\n\t\t\tdocument.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' );\n\n\t}\n\n\tfunction resizeImage( image, needsPowerOfTwo, needsNewCanvas, maxSize ) {\n\n\t\tlet scale = 1;\n\n\t\t// handle case if texture exceeds max size\n\n\t\tif ( image.width > maxSize || image.height > maxSize ) {\n\n\t\t\tscale = maxSize / Math.max( image.width, image.height );\n\n\t\t}\n\n\t\t// only perform resize if necessary\n\n\t\tif ( scale < 1 || needsPowerOfTwo === true ) {\n\n\t\t\t// only perform resize for certain image types\n\n\t\t\tif ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) ||\n\t\t\t\t( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) ||\n\t\t\t\t( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ) {\n\n\t\t\t\tconst floor = needsPowerOfTwo ? MathUtils.floorPowerOfTwo : Math.floor;\n\n\t\t\t\tconst width = floor( scale * image.width );\n\t\t\t\tconst height = floor( scale * image.height );\n\n\t\t\t\tif ( _canvas === undefined ) _canvas = createCanvas( width, height );\n\n\t\t\t\t// cube textures can't reuse the same canvas\n\n\t\t\t\tconst canvas = needsNewCanvas ? createCanvas( width, height ) : _canvas;\n\n\t\t\t\tcanvas.width = width;\n\t\t\t\tcanvas.height = height;\n\n\t\t\t\tconst context = canvas.getContext( '2d' );\n\t\t\t\tcontext.drawImage( image, 0, 0, width, height );\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture has been resized from (' + image.width + 'x' + image.height + ') to (' + width + 'x' + height + ').' );\n\n\t\t\t\treturn canvas;\n\n\t\t\t} else {\n\n\t\t\t\tif ( 'data' in image ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Image in DataTexture is too big (' + image.width + 'x' + image.height + ').' );\n\n\t\t\t\t}\n\n\t\t\t\treturn image;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn image;\n\n\t}\n\n\tfunction isPowerOfTwo( image ) {\n\n\t\treturn MathUtils.isPowerOfTwo( image.width ) && MathUtils.isPowerOfTwo( image.height );\n\n\t}\n\n\tfunction textureNeedsPowerOfTwo( texture ) {\n\n\t\tif ( isWebGL2 ) return false;\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, supportsMips ) {\n\n\t\treturn texture.generateMipmaps && supportsMips &&\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\tconst 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\tfunction getInternalFormat( internalFormatName, glFormat, glType ) {\n\n\t\tif ( isWebGL2 === false ) return glFormat;\n\n\t\tif ( internalFormatName !== null ) {\n\n\t\t\tif ( _gl[ internalFormatName ] !== undefined ) return _gl[ internalFormatName ];\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format \\'' + internalFormatName + '\\'' );\n\n\t\t}\n\n\t\tlet internalFormat = glFormat;\n\n\t\tif ( glFormat === 6403 ) {\n\n\t\t\tif ( glType === 5126 ) internalFormat = 33326;\n\t\t\tif ( glType === 5131 ) internalFormat = 33325;\n\t\t\tif ( glType === 5121 ) internalFormat = 33321;\n\n\t\t}\n\n\t\tif ( glFormat === 6407 ) {\n\n\t\t\tif ( glType === 5126 ) internalFormat = 34837;\n\t\t\tif ( glType === 5131 ) internalFormat = 34843;\n\t\t\tif ( glType === 5121 ) internalFormat = 32849;\n\n\t\t}\n\n\t\tif ( glFormat === 6408 ) {\n\n\t\t\tif ( glType === 5126 ) internalFormat = 34836;\n\t\t\tif ( glType === 5131 ) internalFormat = 34842;\n\t\t\tif ( glType === 5121 ) internalFormat = 32856;\n\n\t\t}\n\n\t\tif ( internalFormat === 33325 || internalFormat === 33326 ||\n\t\t\tinternalFormat === 34842 || internalFormat === 34836 ) {\n\n\t\t\textensions.get( 'EXT_color_buffer_float' );\n\n\t\t}\n\n\t\treturn internalFormat;\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 9728;\n\n\t\t}\n\n\t\treturn 9729;\n\n\t}\n\n\t//\n\n\tfunction onTextureDispose( event ) {\n\n\t\tconst 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\t_videoTextures.delete( texture );\n\n\t\t}\n\n\t\tinfo.memory.textures --;\n\n\t}\n\n\tfunction onRenderTargetDispose( event ) {\n\n\t\tconst 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\tconst textureProperties = properties.get( texture );\n\n\t\tif ( textureProperties.__webglInit === undefined ) return;\n\n\t\t_gl.deleteTexture( textureProperties.__webglTexture );\n\n\t\tproperties.remove( texture );\n\n\t}\n\n\tfunction deallocateRenderTarget( renderTarget ) {\n\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\t\tconst 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.isWebGLCubeRenderTarget ) {\n\n\t\t\tfor ( let 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\t\t\tif ( renderTargetProperties.__webglMultisampledFramebuffer ) _gl.deleteFramebuffer( renderTargetProperties.__webglMultisampledFramebuffer );\n\t\t\tif ( renderTargetProperties.__webglColorRenderbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglColorRenderbuffer );\n\t\t\tif ( renderTargetProperties.__webglDepthRenderbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthRenderbuffer );\n\n\t\t}\n\n\t\tproperties.remove( renderTarget.texture );\n\t\tproperties.remove( renderTarget );\n\n\t}\n\n\t//\n\n\tlet textureUnits = 0;\n\n\tfunction resetTextureUnits() {\n\n\t\ttextureUnits = 0;\n\n\t}\n\n\tfunction allocateTextureUnit() {\n\n\t\tconst textureUnit = textureUnits;\n\n\t\tif ( textureUnit >= maxTextures ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLTextures: Trying to use ' + textureUnit + ' texture units while this GPU supports only ' + maxTextures );\n\n\t\t}\n\n\t\ttextureUnits += 1;\n\n\t\treturn textureUnit;\n\n\t}\n\n\t//\n\n\tfunction setTexture2D( texture, slot ) {\n\n\t\tconst 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\tconst 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' );\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' );\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( 33984 + slot );\n\t\tstate.bindTexture( 3553, textureProperties.__webglTexture );\n\n\t}\n\n\tfunction setTexture2DArray( texture, slot ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\tuploadTexture( textureProperties, texture, slot );\n\t\t\treturn;\n\n\t\t}\n\n\t\tstate.activeTexture( 33984 + slot );\n\t\tstate.bindTexture( 35866, textureProperties.__webglTexture );\n\n\t}\n\n\tfunction setTexture3D( texture, slot ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\tuploadTexture( textureProperties, texture, slot );\n\t\t\treturn;\n\n\t\t}\n\n\t\tstate.activeTexture( 33984 + slot );\n\t\tstate.bindTexture( 32879, textureProperties.__webglTexture );\n\n\t}\n\n\tfunction setTextureCube( texture, slot ) {\n\n\t\tif ( texture.image.length !== 6 ) return;\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\tinitTexture( textureProperties, texture );\n\n\t\t\tstate.activeTexture( 33984 + slot );\n\t\t\tstate.bindTexture( 34067, textureProperties.__webglTexture );\n\n\t\t\t_gl.pixelStorei( 37440, texture.flipY );\n\n\t\t\tconst isCompressed = ( texture && ( texture.isCompressedTexture || texture.image[ 0 ].isCompressedTexture ) );\n\t\t\tconst isDataTexture = ( texture.image[ 0 ] && texture.image[ 0 ].isDataTexture );\n\n\t\t\tconst cubeImage = [];\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\tif ( ! isCompressed && ! isDataTexture ) {\n\n\t\t\t\t\tcubeImage[ i ] = resizeImage( texture.image[ i ], false, true, maxCubemapSize );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tcubeImage[ i ] = isDataTexture ? texture.image[ i ].image : texture.image[ i ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst image = cubeImage[ 0 ],\n\t\t\t\tsupportsMips = isPowerOfTwo( image ) || isWebGL2,\n\t\t\t\tglFormat = utils.convert( texture.format ),\n\t\t\t\tglType = utils.convert( texture.type ),\n\t\t\t\tglInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType );\n\n\t\t\tsetTextureParameters( 34067, texture, supportsMips );\n\n\t\t\tlet mipmaps;\n\n\t\t\tif ( isCompressed ) {\n\n\t\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\t\tmipmaps = cubeImage[ i ].mipmaps;\n\n\t\t\t\t\tfor ( let j = 0; j < mipmaps.length; j ++ ) {\n\n\t\t\t\t\t\tconst mipmap = mipmaps[ j ];\n\n\t\t\t\t\t\tif ( texture.format !== RGBAFormat && texture.format !== RGBFormat ) {\n\n\t\t\t\t\t\t\tif ( glFormat !== null ) {\n\n\t\t\t\t\t\t\t\tstate.compressedTexImage2D( 34069 + i, j, glInternalFormat, mipmap.width, mipmap.height, 0, mipmap.data );\n\n\t\t\t\t\t\t\t} else {\n\n\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}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tstate.texImage2D( 34069 + i, j, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\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\ttextureProperties.__maxMipLevel = mipmaps.length - 1;\n\n\t\t\t} else {\n\n\t\t\t\tmipmaps = texture.mipmaps;\n\n\t\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\t\tif ( isDataTexture ) {\n\n\t\t\t\t\t\tstate.texImage2D( 34069 + i, 0, glInternalFormat, cubeImage[ i ].width, cubeImage[ i ].height, 0, glFormat, glType, cubeImage[ i ].data );\n\n\t\t\t\t\t\tfor ( let j = 0; j < mipmaps.length; j ++ ) {\n\n\t\t\t\t\t\t\tconst mipmap = mipmaps[ j ];\n\t\t\t\t\t\t\tconst mipmapImage = mipmap.image[ i ].image;\n\n\t\t\t\t\t\t\tstate.texImage2D( 34069 + i, j + 1, glInternalFormat, mipmapImage.width, mipmapImage.height, 0, glFormat, glType, mipmapImage.data );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tstate.texImage2D( 34069 + i, 0, glInternalFormat, glFormat, glType, cubeImage[ i ] );\n\n\t\t\t\t\t\tfor ( let j = 0; j < mipmaps.length; j ++ ) {\n\n\t\t\t\t\t\t\tconst mipmap = mipmaps[ j ];\n\n\t\t\t\t\t\t\tstate.texImage2D( 34069 + i, j + 1, glInternalFormat, glFormat, glType, mipmap.image[ i ] );\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\ttextureProperties.__maxMipLevel = mipmaps.length;\n\n\t\t\t}\n\n\t\t\tif ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {\n\n\t\t\t\t// We assume images for cube map have the same size.\n\t\t\t\tgenerateMipmap( 34067, texture, image.width, image.height );\n\n\t\t\t}\n\n\t\t\ttextureProperties.__version = texture.version;\n\n\t\t\tif ( texture.onUpdate ) texture.onUpdate( texture );\n\n\t\t} else {\n\n\t\t\tstate.activeTexture( 33984 + slot );\n\t\t\tstate.bindTexture( 34067, textureProperties.__webglTexture );\n\n\t\t}\n\n\t}\n\n\tfunction setTextureCubeDynamic( texture, slot ) {\n\n\t\tstate.activeTexture( 33984 + slot );\n\t\tstate.bindTexture( 34067, properties.get( texture ).__webglTexture );\n\n\t}\n\n\tconst wrappingToGL = {\n\t\t[ RepeatWrapping ]: 10497,\n\t\t[ ClampToEdgeWrapping ]: 33071,\n\t\t[ MirroredRepeatWrapping ]: 33648\n\t};\n\n\tconst filterToGL = {\n\t\t[ NearestFilter ]: 9728,\n\t\t[ NearestMipmapNearestFilter ]: 9984,\n\t\t[ NearestMipmapLinearFilter ]: 9986,\n\n\t\t[ LinearFilter ]: 9729,\n\t\t[ LinearMipmapNearestFilter ]: 9985,\n\t\t[ LinearMipmapLinearFilter ]: 9987\n\t};\n\n\tfunction setTextureParameters( textureType, texture, supportsMips ) {\n\n\t\tif ( supportsMips ) {\n\n\t\t\t_gl.texParameteri( textureType, 10242, wrappingToGL[ texture.wrapS ] );\n\t\t\t_gl.texParameteri( textureType, 10243, wrappingToGL[ texture.wrapT ] );\n\n\t\t\tif ( textureType === 32879 || textureType === 35866 ) {\n\n\t\t\t\t_gl.texParameteri( textureType, 32882, wrappingToGL[ texture.wrapR ] );\n\n\t\t\t}\n\n\t\t\t_gl.texParameteri( textureType, 10240, filterToGL[ texture.magFilter ] );\n\t\t\t_gl.texParameteri( textureType, 10241, filterToGL[ texture.minFilter ] );\n\n\t\t} else {\n\n\t\t\t_gl.texParameteri( textureType, 10242, 33071 );\n\t\t\t_gl.texParameteri( textureType, 10243, 33071 );\n\n\t\t\tif ( textureType === 32879 || textureType === 35866 ) {\n\n\t\t\t\t_gl.texParameteri( textureType, 32882, 33071 );\n\n\t\t\t}\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.' );\n\n\t\t\t}\n\n\t\t\t_gl.texParameteri( textureType, 10240, filterFallback( texture.magFilter ) );\n\t\t\t_gl.texParameteri( textureType, 10241, 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.' );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst extension = 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 && ( isWebGL2 || 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 initTexture( textureProperties, texture ) {\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}\n\n\tfunction uploadTexture( textureProperties, texture, slot ) {\n\n\t\tlet textureType = 3553;\n\n\t\tif ( texture.isDataTexture2DArray ) textureType = 35866;\n\t\tif ( texture.isDataTexture3D ) textureType = 32879;\n\n\t\tinitTexture( textureProperties, texture );\n\n\t\tstate.activeTexture( 33984 + slot );\n\t\tstate.bindTexture( textureType, textureProperties.__webglTexture );\n\n\t\t_gl.pixelStorei( 37440, texture.flipY );\n\t\t_gl.pixelStorei( 37441, texture.premultiplyAlpha );\n\t\t_gl.pixelStorei( 3317, texture.unpackAlignment );\n\n\t\tconst needsPowerOfTwo = textureNeedsPowerOfTwo( texture ) && isPowerOfTwo( texture.image ) === false;\n\t\tconst image = resizeImage( texture.image, needsPowerOfTwo, false, maxTextureSize );\n\n\t\tconst supportsMips = isPowerOfTwo( image ) || isWebGL2,\n\t\t\tglFormat = utils.convert( texture.format );\n\n\t\tlet glType = utils.convert( texture.type ),\n\t\t\tglInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType );\n\n\t\tsetTextureParameters( textureType, texture, supportsMips );\n\n\t\tlet mipmap;\n\t\tconst mipmaps = texture.mipmaps;\n\n\t\tif ( texture.isDepthTexture ) {\n\n\t\t\t// populate depth texture with dummy data\n\n\t\t\tglInternalFormat = 6402;\n\n\t\t\tif ( isWebGL2 ) {\n\n\t\t\t\tif ( texture.type === FloatType ) {\n\n\t\t\t\t\tglInternalFormat = 36012;\n\n\t\t\t\t} else if ( texture.type === UnsignedIntType ) {\n\n\t\t\t\t\tglInternalFormat = 33190;\n\n\t\t\t\t} else if ( texture.type === UnsignedInt248Type ) {\n\n\t\t\t\t\tglInternalFormat = 35056;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tglInternalFormat = 33189; // WebGL2 requires sized internalformat for glTexImage2D\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( texture.type === FloatType ) {\n\n\t\t\t\t\tconsole.error( 'WebGLRenderer: Floating point depth texture requires WebGL2.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// validation checks for WebGL 1\n\n\t\t\tif ( texture.format === DepthFormat && glInternalFormat === 6402 ) {\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\tif ( texture.format === DepthStencilFormat && glInternalFormat === 6402 ) {\n\n\t\t\t\t// Depth stencil textures need the DEPTH_STENCIL internal format\n\t\t\t\t// (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/)\n\t\t\t\tglInternalFormat = 34041;\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\t//\n\n\t\t\tstate.texImage2D( 3553, 0, glInternalFormat, 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 && supportsMips ) {\n\n\t\t\t\tfor ( let i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\t\tmipmap = mipmaps[ i ];\n\t\t\t\t\tstate.texImage2D( 3553, i, glInternalFormat, 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( 3553, 0, glInternalFormat, 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 ( let 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 ( glFormat !== null ) {\n\n\t\t\t\t\t\tstate.compressedTexImage2D( 3553, i, glInternalFormat, 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( 3553, i, glInternalFormat, 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 if ( texture.isDataTexture2DArray ) {\n\n\t\t\tstate.texImage3D( 35866, 0, glInternalFormat, image.width, image.height, image.depth, 0, glFormat, glType, image.data );\n\t\t\ttextureProperties.__maxMipLevel = 0;\n\n\t\t} else if ( texture.isDataTexture3D ) {\n\n\t\t\tstate.texImage3D( 32879, 0, glInternalFormat, image.width, image.height, image.depth, 0, glFormat, glType, image.data );\n\t\t\ttextureProperties.__maxMipLevel = 0;\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 && supportsMips ) {\n\n\t\t\t\tfor ( let i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\t\tmipmap = mipmaps[ i ];\n\t\t\t\t\tstate.texImage2D( 3553, i, glInternalFormat, 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( 3553, 0, glInternalFormat, 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, supportsMips ) ) {\n\n\t\t\tgenerateMipmap( textureType, 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\tconst glFormat = utils.convert( renderTarget.texture.format );\n\t\tconst glType = utils.convert( renderTarget.texture.type );\n\t\tconst glInternalFormat = getInternalFormat( renderTarget.texture.internalFormat, glFormat, glType );\n\t\tstate.texImage2D( textureTarget, 0, glInternalFormat, renderTarget.width, renderTarget.height, 0, glFormat, glType, null );\n\t\t_gl.bindFramebuffer( 36160, framebuffer );\n\t\t_gl.framebufferTexture2D( 36160, attachment, textureTarget, properties.get( renderTarget.texture ).__webglTexture, 0 );\n\t\t_gl.bindFramebuffer( 36160, null );\n\n\t}\n\n\t// Setup storage for internal depth/stencil buffers and bind to correct framebuffer\n\tfunction setupRenderBufferStorage( renderbuffer, renderTarget, isMultisample ) {\n\n\t\t_gl.bindRenderbuffer( 36161, renderbuffer );\n\n\t\tif ( renderTarget.depthBuffer && ! renderTarget.stencilBuffer ) {\n\n\t\t\tlet glInternalFormat = 33189;\n\n\t\t\tif ( isMultisample ) {\n\n\t\t\t\tconst depthTexture = renderTarget.depthTexture;\n\n\t\t\t\tif ( depthTexture && depthTexture.isDepthTexture ) {\n\n\t\t\t\t\tif ( depthTexture.type === FloatType ) {\n\n\t\t\t\t\t\tglInternalFormat = 36012;\n\n\t\t\t\t\t} else if ( depthTexture.type === UnsignedIntType ) {\n\n\t\t\t\t\t\tglInternalFormat = 33190;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tconst samples = getRenderTargetSamples( renderTarget );\n\n\t\t\t\t_gl.renderbufferStorageMultisample( 36161, samples, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t} else {\n\n\t\t\t\t_gl.renderbufferStorage( 36161, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t}\n\n\t\t\t_gl.framebufferRenderbuffer( 36160, 36096, 36161, renderbuffer );\n\n\t\t} else if ( renderTarget.depthBuffer && renderTarget.stencilBuffer ) {\n\n\t\t\tif ( isMultisample ) {\n\n\t\t\t\tconst samples = getRenderTargetSamples( renderTarget );\n\n\t\t\t\t_gl.renderbufferStorageMultisample( 36161, samples, 35056, renderTarget.width, renderTarget.height );\n\n\t\t\t} else {\n\n\t\t\t\t_gl.renderbufferStorage( 36161, 34041, renderTarget.width, renderTarget.height );\n\n\t\t\t}\n\n\n\t\t\t_gl.framebufferRenderbuffer( 36160, 33306, 36161, renderbuffer );\n\n\t\t} else {\n\n\t\t\tconst glFormat = utils.convert( renderTarget.texture.format );\n\t\t\tconst glType = utils.convert( renderTarget.texture.type );\n\t\t\tconst glInternalFormat = getInternalFormat( renderTarget.texture.internalFormat, glFormat, glType );\n\n\t\t\tif ( isMultisample ) {\n\n\t\t\t\tconst samples = getRenderTargetSamples( renderTarget );\n\n\t\t\t\t_gl.renderbufferStorageMultisample( 36161, samples, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t} else {\n\n\t\t\t\t_gl.renderbufferStorage( 36161, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t}\n\n\t\t}\n\n\t\t_gl.bindRenderbuffer( 36161, 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\tconst isCube = ( renderTarget && renderTarget.isWebGLCubeRenderTarget );\n\t\tif ( isCube ) throw new Error( 'Depth Texture with cube render targets is not supported' );\n\n\t\t_gl.bindFramebuffer( 36160, 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\tconst webglDepthTexture = properties.get( renderTarget.depthTexture ).__webglTexture;\n\n\t\tif ( renderTarget.depthTexture.format === DepthFormat ) {\n\n\t\t\t_gl.framebufferTexture2D( 36160, 36096, 3553, webglDepthTexture, 0 );\n\n\t\t} else if ( renderTarget.depthTexture.format === DepthStencilFormat ) {\n\n\t\t\t_gl.framebufferTexture2D( 36160, 33306, 3553, 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\tconst renderTargetProperties = properties.get( renderTarget );\n\n\t\tconst isCube = ( renderTarget.isWebGLCubeRenderTarget === 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 ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\t\t_gl.bindFramebuffer( 36160, renderTargetProperties.__webglFramebuffer[ i ] );\n\t\t\t\t\trenderTargetProperties.__webglDepthbuffer[ i ] = _gl.createRenderbuffer();\n\t\t\t\t\tsetupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer[ i ], renderTarget, false );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t_gl.bindFramebuffer( 36160, renderTargetProperties.__webglFramebuffer );\n\t\t\t\trenderTargetProperties.__webglDepthbuffer = _gl.createRenderbuffer();\n\t\t\t\tsetupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer, renderTarget, false );\n\n\t\t\t}\n\n\t\t}\n\n\t\t_gl.bindFramebuffer( 36160, null );\n\n\t}\n\n\t// Set up GL resources for the render target\n\tfunction setupRenderTarget( renderTarget ) {\n\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\t\tconst 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\tconst isCube = ( renderTarget.isWebGLCubeRenderTarget === true );\n\t\tconst isMultisample = ( renderTarget.isWebGLMultisampleRenderTarget === true );\n\t\tconst supportsMips = isPowerOfTwo( renderTarget ) || isWebGL2;\n\n\t\t// Handles WebGL2 RGBFormat fallback - #18858\n\n\t\tif ( isWebGL2 && renderTarget.texture.format === RGBFormat && ( renderTarget.texture.type === FloatType || renderTarget.texture.type === HalfFloatType ) ) {\n\n\t\t\trenderTarget.texture.format = RGBAFormat;\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: Rendering to textures with RGB format is not supported. Using RGBA format instead.' );\n\n\t\t}\n\n\t\t// Setup framebuffer\n\n\t\tif ( isCube ) {\n\n\t\t\trenderTargetProperties.__webglFramebuffer = [];\n\n\t\t\tfor ( let 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\tif ( isMultisample ) {\n\n\t\t\t\tif ( isWebGL2 ) {\n\n\t\t\t\t\trenderTargetProperties.__webglMultisampledFramebuffer = _gl.createFramebuffer();\n\t\t\t\t\trenderTargetProperties.__webglColorRenderbuffer = _gl.createRenderbuffer();\n\n\t\t\t\t\t_gl.bindRenderbuffer( 36161, renderTargetProperties.__webglColorRenderbuffer );\n\n\t\t\t\t\tconst glFormat = utils.convert( renderTarget.texture.format );\n\t\t\t\t\tconst glType = utils.convert( renderTarget.texture.type );\n\t\t\t\t\tconst glInternalFormat = getInternalFormat( renderTarget.texture.internalFormat, glFormat, glType );\n\t\t\t\t\tconst samples = getRenderTargetSamples( renderTarget );\n\t\t\t\t\t_gl.renderbufferStorageMultisample( 36161, samples, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t\t\t_gl.bindFramebuffer( 36160, renderTargetProperties.__webglMultisampledFramebuffer );\n\t\t\t\t\t_gl.framebufferRenderbuffer( 36160, 36064, 36161, renderTargetProperties.__webglColorRenderbuffer );\n\t\t\t\t\t_gl.bindRenderbuffer( 36161, null );\n\n\t\t\t\t\tif ( renderTarget.depthBuffer ) {\n\n\t\t\t\t\t\trenderTargetProperties.__webglDepthRenderbuffer = _gl.createRenderbuffer();\n\t\t\t\t\t\tsetupRenderBufferStorage( renderTargetProperties.__webglDepthRenderbuffer, renderTarget, true );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t_gl.bindFramebuffer( 36160, null );\n\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Setup color buffer\n\n\t\tif ( isCube ) {\n\n\t\t\tstate.bindTexture( 34067, textureProperties.__webglTexture );\n\t\t\tsetTextureParameters( 34067, renderTarget.texture, supportsMips );\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer[ i ], renderTarget, 36064, 34069 + i );\n\n\t\t\t}\n\n\t\t\tif ( textureNeedsGenerateMipmaps( renderTarget.texture, supportsMips ) ) {\n\n\t\t\t\tgenerateMipmap( 34067, renderTarget.texture, renderTarget.width, renderTarget.height );\n\n\t\t\t}\n\n\t\t\tstate.bindTexture( 34067, null );\n\n\t\t} else {\n\n\t\t\tstate.bindTexture( 3553, textureProperties.__webglTexture );\n\t\t\tsetTextureParameters( 3553, renderTarget.texture, supportsMips );\n\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, 36064, 3553 );\n\n\t\t\tif ( textureNeedsGenerateMipmaps( renderTarget.texture, supportsMips ) ) {\n\n\t\t\t\tgenerateMipmap( 3553, renderTarget.texture, renderTarget.width, renderTarget.height );\n\n\t\t\t}\n\n\t\t\tstate.bindTexture( 3553, 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\tconst texture = renderTarget.texture;\n\t\tconst supportsMips = isPowerOfTwo( renderTarget ) || isWebGL2;\n\n\t\tif ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {\n\n\t\t\tconst target = renderTarget.isWebGLCubeRenderTarget ? 34067 : 3553;\n\t\t\tconst 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 updateMultisampleRenderTarget( renderTarget ) {\n\n\t\tif ( renderTarget.isWebGLMultisampleRenderTarget ) {\n\n\t\t\tif ( isWebGL2 ) {\n\n\t\t\t\tconst renderTargetProperties = properties.get( renderTarget );\n\n\t\t\t\t_gl.bindFramebuffer( 36008, renderTargetProperties.__webglMultisampledFramebuffer );\n\t\t\t\t_gl.bindFramebuffer( 36009, renderTargetProperties.__webglFramebuffer );\n\n\t\t\t\tconst width = renderTarget.width;\n\t\t\t\tconst height = renderTarget.height;\n\t\t\t\tlet mask = 16384;\n\n\t\t\t\tif ( renderTarget.depthBuffer ) mask |= 256;\n\t\t\t\tif ( renderTarget.stencilBuffer ) mask |= 1024;\n\n\t\t\t\t_gl.blitFramebuffer( 0, 0, width, height, 0, 0, width, height, mask, 9728 );\n\n\t\t\t\t_gl.bindFramebuffer( 36160, renderTargetProperties.__webglMultisampledFramebuffer ); // see #18905\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.' );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction getRenderTargetSamples( renderTarget ) {\n\n\t\treturn ( isWebGL2 && renderTarget.isWebGLMultisampleRenderTarget ) ?\n\t\t\tMath.min( maxSamples, renderTarget.samples ) : 0;\n\n\t}\n\n\tfunction updateVideoTexture( texture ) {\n\n\t\tconst frame = info.render.frame;\n\n\t\t// Check the last frame we updated the VideoTexture\n\n\t\tif ( _videoTextures.get( texture ) !== frame ) {\n\n\t\t\t_videoTextures.set( texture, frame );\n\t\t\ttexture.update();\n\n\t\t}\n\n\t}\n\n\t// backwards compatibility\n\n\tlet warnedTexture2D = false;\n\tlet warnedTextureCube = false;\n\n\tfunction safeSetTexture2D( texture, slot ) {\n\n\t\tif ( texture && texture.isWebGLRenderTarget ) {\n\n\t\t\tif ( warnedTexture2D === false ) {\n\n\t\t\t\tconsole.warn( \"THREE.WebGLTextures.safeSetTexture2D: don't use render targets as textures. Use their .texture property instead.\" );\n\t\t\t\twarnedTexture2D = true;\n\n\t\t\t}\n\n\t\t\ttexture = texture.texture;\n\n\t\t}\n\n\t\tsetTexture2D( texture, slot );\n\n\t}\n\n\tfunction safeSetTextureCube( texture, slot ) {\n\n\t\tif ( texture && texture.isWebGLCubeRenderTarget ) {\n\n\t\t\tif ( warnedTextureCube === false ) {\n\n\t\t\t\tconsole.warn( \"THREE.WebGLTextures.safeSetTextureCube: don't use cube render targets as textures. Use their .texture property instead.\" );\n\t\t\t\twarnedTextureCube = true;\n\n\t\t\t}\n\n\t\t\ttexture = texture.texture;\n\n\t\t}\n\n\t\t// currently relying on the fact that WebGLCubeRenderTarget.texture is a Texture and NOT a CubeTexture\n\t\t// TODO: unify these code paths\n\t\tif ( ( texture && texture.isCubeTexture ) ||\n\t\t\t( Array.isArray( texture.image ) && texture.image.length === 6 ) ) {\n\n\t\t\t// CompressedTexture can have Array in image :/\n\n\t\t\t// this function alone should take care of cube textures\n\t\t\tsetTextureCube( texture, slot );\n\n\t\t} else {\n\n\t\t\t// assumed: texture property of THREE.WebGLCubeRenderTarget\n\t\t\tsetTextureCubeDynamic( texture, slot );\n\n\t\t}\n\n\t}\n\n\t//\n\n\tthis.allocateTextureUnit = allocateTextureUnit;\n\tthis.resetTextureUnits = resetTextureUnits;\n\n\tthis.setTexture2D = setTexture2D;\n\tthis.setTexture2DArray = setTexture2DArray;\n\tthis.setTexture3D = setTexture3D;\n\tthis.setTextureCube = setTextureCube;\n\tthis.setTextureCubeDynamic = setTextureCubeDynamic;\n\tthis.setupRenderTarget = setupRenderTarget;\n\tthis.updateRenderTargetMipmap = updateRenderTargetMipmap;\n\tthis.updateMultisampleRenderTarget = updateMultisampleRenderTarget;\n\n\tthis.safeSetTexture2D = safeSetTexture2D;\n\tthis.safeSetTextureCube = safeSetTextureCube;\n\n}\n\nfunction WebGLUtils( gl, extensions, capabilities ) {\n\n\tconst isWebGL2 = capabilities.isWebGL2;\n\n\tfunction convert( p ) {\n\n\t\tlet extension;\n\n\t\tif ( p === UnsignedByteType ) return 5121;\n\t\tif ( p === UnsignedShort4444Type ) return 32819;\n\t\tif ( p === UnsignedShort5551Type ) return 32820;\n\t\tif ( p === UnsignedShort565Type ) return 33635;\n\n\t\tif ( p === ByteType ) return 5120;\n\t\tif ( p === ShortType ) return 5122;\n\t\tif ( p === UnsignedShortType ) return 5123;\n\t\tif ( p === IntType ) return 5124;\n\t\tif ( p === UnsignedIntType ) return 5125;\n\t\tif ( p === FloatType ) return 5126;\n\n\t\tif ( p === HalfFloatType ) {\n\n\t\t\tif ( isWebGL2 ) return 5131;\n\n\t\t\textension = extensions.get( 'OES_texture_half_float' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\treturn extension.HALF_FLOAT_OES;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( p === AlphaFormat ) return 6406;\n\t\tif ( p === RGBFormat ) return 6407;\n\t\tif ( p === RGBAFormat ) return 6408;\n\t\tif ( p === LuminanceFormat ) return 6409;\n\t\tif ( p === LuminanceAlphaFormat ) return 6410;\n\t\tif ( p === DepthFormat ) return 6402;\n\t\tif ( p === DepthStencilFormat ) return 34041;\n\t\tif ( p === RedFormat ) return 6403;\n\n\t\t// WebGL2 formats.\n\n\t\tif ( p === RedIntegerFormat ) return 36244;\n\t\tif ( p === RGFormat ) return 33319;\n\t\tif ( p === RGIntegerFormat ) return 33320;\n\t\tif ( p === RGBIntegerFormat ) return 36248;\n\t\tif ( p === RGBAIntegerFormat ) return 36249;\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} else {\n\n\t\t\t\treturn null;\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} else {\n\n\t\t\t\treturn null;\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 ) {\n\n\t\t\t\treturn extension.COMPRESSED_RGB_ETC1_WEBGL;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( p === RGB_ETC2_Format || p === RGBA_ETC2_EAC_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_etc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGB_ETC2_Format ) return extension.COMPRESSED_RGB8_ETC2;\n\t\t\t\tif ( p === RGBA_ETC2_EAC_Format ) return extension.COMPRESSED_RGBA8_ETC2_EAC;\n\n\t\t\t}\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\t\t\tp === SRGB8_ALPHA8_ASTC_4x4_Format || p === SRGB8_ALPHA8_ASTC_5x4_Format || p === SRGB8_ALPHA8_ASTC_5x5_Format ||\n\t\t\tp === SRGB8_ALPHA8_ASTC_6x5_Format || p === SRGB8_ALPHA8_ASTC_6x6_Format || p === SRGB8_ALPHA8_ASTC_8x5_Format ||\n\t\t\tp === SRGB8_ALPHA8_ASTC_8x6_Format || p === SRGB8_ALPHA8_ASTC_8x8_Format || p === SRGB8_ALPHA8_ASTC_10x5_Format ||\n\t\t\tp === SRGB8_ALPHA8_ASTC_10x6_Format || p === SRGB8_ALPHA8_ASTC_10x8_Format || p === SRGB8_ALPHA8_ASTC_10x10_Format ||\n\t\t\tp === SRGB8_ALPHA8_ASTC_12x10_Format || p === SRGB8_ALPHA8_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\t// TODO Complete?\n\n\t\t\t\treturn p;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( p === RGBA_BPTC_Format ) {\n\n\t\t\textension = extensions.get( 'EXT_texture_compression_bptc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\t// TODO Complete?\n\n\t\t\t\treturn p;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( p === UnsignedInt248Type ) {\n\n\t\t\tif ( isWebGL2 ) return 34042;\n\n\t\t\textension = extensions.get( 'WEBGL_depth_texture' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\treturn extension.UNSIGNED_INT_24_8_WEBGL;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn { convert: convert };\n\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\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\nfunction WebXRController() {\n\n\tthis._targetRay = null;\n\tthis._grip = null;\n\tthis._hand = null;\n\n}\n\nObject.assign( WebXRController.prototype, {\n\n\tconstructor: WebXRController,\n\n\tgetHandSpace: function () {\n\n\t\tif ( this._hand === null ) {\n\n\t\t\tthis._hand = new Group();\n\t\t\tthis._hand.matrixAutoUpdate = false;\n\t\t\tthis._hand.visible = false;\n\n\t\t\tthis._hand.joints = [];\n\t\t\tthis._hand.inputState = { pinching: false };\n\n\t\t\tif ( window.XRHand ) {\n\n\t\t\t\tfor ( let i = 0; i <= window.XRHand.LITTLE_PHALANX_TIP; i ++ ) {\n\n\t\t\t\t\t// The transform of this joint will be updated with the joint pose on each frame\n\t\t\t\t\tlet joint = new Group();\n\t\t\t\t\tjoint.matrixAutoUpdate = false;\n\t\t\t\t\tjoint.visible = false;\n\t\t\t\t\tthis._hand.joints.push( joint );\n\t\t\t\t\t// ??\n\t\t\t\t\tthis._hand.add( joint );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this._hand;\n\n\t},\n\n\tgetTargetRaySpace: function () {\n\n\t\tif ( this._targetRay === null ) {\n\n\t\t\tthis._targetRay = new Group();\n\t\t\tthis._targetRay.matrixAutoUpdate = false;\n\t\t\tthis._targetRay.visible = false;\n\n\t\t}\n\n\t\treturn this._targetRay;\n\n\t},\n\n\tgetGripSpace: function () {\n\n\t\tif ( this._grip === null ) {\n\n\t\t\tthis._grip = new Group();\n\t\t\tthis._grip.matrixAutoUpdate = false;\n\t\t\tthis._grip.visible = false;\n\n\t\t}\n\n\t\treturn this._grip;\n\n\t},\n\n\tdispatchEvent: function ( event ) {\n\n\t\tif ( this._targetRay !== null ) {\n\n\t\t\tthis._targetRay.dispatchEvent( event );\n\n\t\t}\n\n\t\tif ( this._grip !== null ) {\n\n\t\t\tthis._grip.dispatchEvent( event );\n\n\t\t}\n\n\t\tif ( this._hand !== null ) {\n\n\t\t\tthis._hand.dispatchEvent( event );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tdisconnect: function ( inputSource ) {\n\n\t\tthis.dispatchEvent( { type: 'disconnected', data: inputSource } );\n\n\t\tif ( this._targetRay !== null ) {\n\n\t\t\tthis._targetRay.visible = false;\n\n\t\t}\n\n\t\tif ( this._grip !== null ) {\n\n\t\t\tthis._grip.visible = false;\n\n\t\t}\n\n\t\tif ( this._hand !== null ) {\n\n\t\t\tthis._hand.visible = false;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tupdate: function ( inputSource, frame, referenceSpace ) {\n\n\t\tlet inputPose = null;\n\t\tlet gripPose = null;\n\t\tlet handPose = null;\n\n\t\tconst targetRay = this._targetRay;\n\t\tconst grip = this._grip;\n\t\tconst hand = this._hand;\n\n\t\tif ( inputSource ) {\n\n\t\t\tif ( inputSource.hand ) {\n\n\t\t\t\thandPose = true;\n\n\t\t\t\tfor ( let i = 0; i <= window.XRHand.LITTLE_PHALANX_TIP; i ++ ) {\n\n\t\t\t\t\tif ( inputSource.hand[ i ] ) {\n\n\t\t\t\t\t\t// Update the joints groups with the XRJoint poses\n\t\t\t\t\t\tlet jointPose = frame.getJointPose( inputSource.hand[ i ], referenceSpace );\n\t\t\t\t\t\tconst joint = hand.joints[ i ];\n\n\t\t\t\t\t\tif ( jointPose !== null ) {\n\n\t\t\t\t\t\t\tjoint.matrix.fromArray( jointPose.transform.matrix );\n\t\t\t\t\t\t\tjoint.matrix.decompose( joint.position, joint.rotation, joint.scale );\n\t\t\t\t\t\t\tjoint.jointRadius = jointPose.radius;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tjoint.visible = jointPose !== null;\n\n\t\t\t\t\t\t// Custom events\n\n\t\t\t\t\t\t// Check pinch\n\t\t\t\t\t\tconst indexTip = hand.joints[ window.XRHand.INDEX_PHALANX_TIP ];\n\t\t\t\t\t\tconst thumbTip = hand.joints[ window.XRHand.THUMB_PHALANX_TIP ];\n\t\t\t\t\t\tconst distance = indexTip.position.distanceTo( thumbTip.position );\n\n\t\t\t\t\t\tconst distanceToPinch = 0.02;\n\t\t\t\t\t\tconst threshold = 0.005;\n\n\t\t\t\t\t\tif ( hand.inputState.pinching && distance > distanceToPinch + threshold ) {\n\n\t\t\t\t\t\t\thand.inputState.pinching = false;\n\t\t\t\t\t\t\tthis.dispatchEvent( {\n\t\t\t\t\t\t\t\ttype: \"pinchend\",\n\t\t\t\t\t\t\t\thandedness: inputSource.handedness,\n\t\t\t\t\t\t\t\ttarget: this\n\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t} else if ( ! hand.inputState.pinching && distance <= distanceToPinch - threshold ) {\n\n\t\t\t\t\t\t\thand.inputState.pinching = true;\n\t\t\t\t\t\t\tthis.dispatchEvent( {\n\t\t\t\t\t\t\t\ttype: \"pinchstart\",\n\t\t\t\t\t\t\t\thandedness: inputSource.handedness,\n\t\t\t\t\t\t\t\ttarget: this\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} else {\n\n\t\t\t\tif ( targetRay !== null ) {\n\n\t\t\t\t\tinputPose = frame.getPose( inputSource.targetRaySpace, referenceSpace );\n\n\t\t\t\t\tif ( inputPose !== null ) {\n\n\t\t\t\t\t\ttargetRay.matrix.fromArray( inputPose.transform.matrix );\n\t\t\t\t\t\ttargetRay.matrix.decompose( targetRay.position, targetRay.rotation, targetRay.scale );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( grip !== null && inputSource.gripSpace ) {\n\n\t\t\t\t\tgripPose = frame.getPose( inputSource.gripSpace, referenceSpace );\n\n\t\t\t\t\tif ( gripPose !== null ) {\n\n\t\t\t\t\t\tgrip.matrix.fromArray( gripPose.transform.matrix );\n\t\t\t\t\t\tgrip.matrix.decompose( grip.position, grip.rotation, grip.scale );\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\tif ( targetRay !== null ) {\n\n\t\t\ttargetRay.visible = ( inputPose !== null );\n\n\t\t}\n\n\t\tif ( grip !== null ) {\n\n\t\t\tgrip.visible = ( gripPose !== null );\n\n\t\t}\n\n\t\tif ( hand !== null ) {\n\n\t\t\thand.visible = ( handPose !== null );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n} );\n\nfunction WebXRManager( renderer, gl ) {\n\n\tconst scope = this;\n\n\tlet session = null;\n\n\tlet framebufferScaleFactor = 1.0;\n\n\tlet referenceSpace = null;\n\tlet referenceSpaceType = 'local-floor';\n\n\tlet pose = null;\n\n\tconst controllers = [];\n\tconst inputSourcesMap = new Map();\n\n\t//\n\n\tconst cameraL = new PerspectiveCamera();\n\tcameraL.layers.enable( 1 );\n\tcameraL.viewport = new Vector4();\n\n\tconst cameraR = new PerspectiveCamera();\n\tcameraR.layers.enable( 2 );\n\tcameraR.viewport = new Vector4();\n\n\tconst cameras = [ cameraL, cameraR ];\n\n\tconst cameraVR = new ArrayCamera();\n\tcameraVR.layers.enable( 1 );\n\tcameraVR.layers.enable( 2 );\n\n\tlet _currentDepthNear = null;\n\tlet _currentDepthFar = null;\n\n\t//\n\n\tthis.enabled = false;\n\n\tthis.isPresenting = false;\n\n\tthis.getController = function ( index ) {\n\n\t\tlet controller = controllers[ index ];\n\n\t\tif ( controller === undefined ) {\n\n\t\t\tcontroller = new WebXRController();\n\t\t\tcontrollers[ index ] = controller;\n\n\t\t}\n\n\t\treturn controller.getTargetRaySpace();\n\n\t};\n\n\tthis.getControllerGrip = function ( index ) {\n\n\t\tlet controller = controllers[ index ];\n\n\t\tif ( controller === undefined ) {\n\n\t\t\tcontroller = new WebXRController();\n\t\t\tcontrollers[ index ] = controller;\n\n\t\t}\n\n\t\treturn controller.getGripSpace();\n\n\t};\n\n\tthis.getHand = function ( index ) {\n\n\t\tlet controller = controllers[ index ];\n\n\t\tif ( controller === undefined ) {\n\n\t\t\tcontroller = new WebXRController();\n\t\t\tcontrollers[ index ] = controller;\n\n\t\t}\n\n\t\treturn controller.getHandSpace();\n\n\t};\n\n\t//\n\n\tfunction onSessionEvent( event ) {\n\n\t\tconst controller = inputSourcesMap.get( event.inputSource );\n\n\t\tif ( controller ) {\n\n\t\t\tcontroller.dispatchEvent( { type: event.type } );\n\n\t\t}\n\n\t}\n\n\tfunction onSessionEnd() {\n\n\t\tinputSourcesMap.forEach( function ( controller, inputSource ) {\n\n\t\t\tcontroller.disconnect( inputSource );\n\n\t\t} );\n\n\t\tinputSourcesMap.clear();\n\n\t\t//\n\n\t\trenderer.setFramebuffer( null );\n\t\trenderer.setRenderTarget( renderer.getRenderTarget() ); // Hack #15830\n\t\tanimation.stop();\n\n\t\tscope.isPresenting = false;\n\n\t\tscope.dispatchEvent( { type: 'sessionend' } );\n\n\t}\n\n\tfunction onRequestReferenceSpace( value ) {\n\n\t\treferenceSpace = value;\n\n\t\tanimation.setContext( session );\n\t\tanimation.start();\n\n\t\tscope.isPresenting = true;\n\n\t\tscope.dispatchEvent( { type: 'sessionstart' } );\n\n\t}\n\n\tthis.setFramebufferScaleFactor = function ( value ) {\n\n\t\tframebufferScaleFactor = value;\n\n\t\tif ( scope.isPresenting === true ) {\n\n\t\t\tconsole.warn( 'THREE.WebXRManager: Cannot change framebuffer scale while presenting.' );\n\n\t\t}\n\n\t};\n\n\tthis.setReferenceSpaceType = function ( value ) {\n\n\t\treferenceSpaceType = value;\n\n\t\tif ( scope.isPresenting === true ) {\n\n\t\t\tconsole.warn( 'THREE.WebXRManager: Cannot change reference space type while presenting.' );\n\n\t\t}\n\n\t};\n\n\tthis.getReferenceSpace = function () {\n\n\t\treturn referenceSpace;\n\n\t};\n\n\tthis.getSession = function () {\n\n\t\treturn session;\n\n\t};\n\n\tthis.setSession = function ( value ) {\n\n\t\tsession = value;\n\n\t\tif ( session !== null ) {\n\n\t\t\tsession.addEventListener( 'select', onSessionEvent );\n\t\t\tsession.addEventListener( 'selectstart', onSessionEvent );\n\t\t\tsession.addEventListener( 'selectend', onSessionEvent );\n\t\t\tsession.addEventListener( 'squeeze', onSessionEvent );\n\t\t\tsession.addEventListener( 'squeezestart', onSessionEvent );\n\t\t\tsession.addEventListener( 'squeezeend', onSessionEvent );\n\t\t\tsession.addEventListener( 'end', onSessionEnd );\n\n\t\t\tconst attributes = gl.getContextAttributes();\n\n\t\t\tif ( attributes.xrCompatible !== true ) {\n\n\t\t\t\tgl.makeXRCompatible();\n\n\t\t\t}\n\n\t\t\tconst layerInit = {\n\t\t\t\tantialias: attributes.antialias,\n\t\t\t\talpha: attributes.alpha,\n\t\t\t\tdepth: attributes.depth,\n\t\t\t\tstencil: attributes.stencil,\n\t\t\t\tframebufferScaleFactor: framebufferScaleFactor\n\t\t\t};\n\n\t\t\t// eslint-disable-next-line no-undef\n\t\t\tconst baseLayer = new XRWebGLLayer( session, gl, layerInit );\n\n\t\t\tsession.updateRenderState( { baseLayer: baseLayer } );\n\n\t\t\tsession.requestReferenceSpace( referenceSpaceType ).then( onRequestReferenceSpace );\n\n\t\t\t//\n\n\t\t\tsession.addEventListener( 'inputsourceschange', updateInputSources );\n\n\t\t}\n\n\t};\n\n\tfunction updateInputSources( event ) {\n\n\t\tconst inputSources = session.inputSources;\n\n\t\t// Assign inputSources to available controllers\n\n\t\tfor ( let i = 0; i < controllers.length; i ++ ) {\n\n\t\t\tinputSourcesMap.set( inputSources[ i ], controllers[ i ] );\n\n\t\t}\n\n\t\t// Notify disconnected\n\n\t\tfor ( let i = 0; i < event.removed.length; i ++ ) {\n\n\t\t\tconst inputSource = event.removed[ i ];\n\t\t\tconst controller = inputSourcesMap.get( inputSource );\n\n\t\t\tif ( controller ) {\n\n\t\t\t\tcontroller.dispatchEvent( { type: 'disconnected', data: inputSource } );\n\t\t\t\tinputSourcesMap.delete( inputSource );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Notify connected\n\n\t\tfor ( let i = 0; i < event.added.length; i ++ ) {\n\n\t\t\tconst inputSource = event.added[ i ];\n\t\t\tconst controller = inputSourcesMap.get( inputSource );\n\n\t\t\tif ( controller ) {\n\n\t\t\t\tcontroller.dispatchEvent( { type: 'connected', data: inputSource } );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t//\n\n\tconst cameraLPos = new Vector3();\n\tconst cameraRPos = new Vector3();\n\n\t/**\n\t * Assumes 2 cameras that are parallel and share an X-axis, and that\n\t * the cameras' projection and world matrices have already been set.\n\t * And that near and far planes are identical for both cameras.\n\t * Visualization of this technique: https://computergraphics.stackexchange.com/a/4765\n\t */\n\tfunction setProjectionFromUnion( camera, cameraL, cameraR ) {\n\n\t\tcameraLPos.setFromMatrixPosition( cameraL.matrixWorld );\n\t\tcameraRPos.setFromMatrixPosition( cameraR.matrixWorld );\n\n\t\tconst ipd = cameraLPos.distanceTo( cameraRPos );\n\n\t\tconst projL = cameraL.projectionMatrix.elements;\n\t\tconst projR = cameraR.projectionMatrix.elements;\n\n\t\t// VR systems will have identical far and near planes, and\n\t\t// most likely identical top and bottom frustum extents.\n\t\t// Use the left camera for these values.\n\t\tconst near = projL[ 14 ] / ( projL[ 10 ] - 1 );\n\t\tconst far = projL[ 14 ] / ( projL[ 10 ] + 1 );\n\t\tconst topFov = ( projL[ 9 ] + 1 ) / projL[ 5 ];\n\t\tconst bottomFov = ( projL[ 9 ] - 1 ) / projL[ 5 ];\n\n\t\tconst leftFov = ( projL[ 8 ] - 1 ) / projL[ 0 ];\n\t\tconst rightFov = ( projR[ 8 ] + 1 ) / projR[ 0 ];\n\t\tconst left = near * leftFov;\n\t\tconst right = near * rightFov;\n\n\t\t// Calculate the new camera's position offset from the\n\t\t// left camera. xOffset should be roughly half `ipd`.\n\t\tconst zOffset = ipd / ( - leftFov + rightFov );\n\t\tconst xOffset = zOffset * - leftFov;\n\n\t\t// TODO: Better way to apply this offset?\n\t\tcameraL.matrixWorld.decompose( camera.position, camera.quaternion, camera.scale );\n\t\tcamera.translateX( xOffset );\n\t\tcamera.translateZ( zOffset );\n\t\tcamera.matrixWorld.compose( camera.position, camera.quaternion, camera.scale );\n\t\tcamera.matrixWorldInverse.getInverse( camera.matrixWorld );\n\n\t\t// Find the union of the frustum values of the cameras and scale\n\t\t// the values so that the near plane's position does not change in world space,\n\t\t// although must now be relative to the new union camera.\n\t\tconst near2 = near + zOffset;\n\t\tconst far2 = far + zOffset;\n\t\tconst left2 = left - xOffset;\n\t\tconst right2 = right + ( ipd - xOffset );\n\t\tconst top2 = topFov * far / far2 * near2;\n\t\tconst bottom2 = bottomFov * far / far2 * near2;\n\n\t\tcamera.projectionMatrix.makePerspective( left2, right2, top2, bottom2, near2, far2 );\n\n\t}\n\n\tfunction updateCamera( camera, parent ) {\n\n\t\tif ( parent === null ) {\n\n\t\t\tcamera.matrixWorld.copy( camera.matrix );\n\n\t\t} else {\n\n\t\t\tcamera.matrixWorld.multiplyMatrices( parent.matrixWorld, camera.matrix );\n\n\t\t}\n\n\t\tcamera.matrixWorldInverse.getInverse( camera.matrixWorld );\n\n\t}\n\n\tthis.getCamera = function ( camera ) {\n\n\t\tcameraVR.near = cameraR.near = cameraL.near = camera.near;\n\t\tcameraVR.far = cameraR.far = cameraL.far = camera.far;\n\n\t\tif ( _currentDepthNear !== cameraVR.near || _currentDepthFar !== cameraVR.far ) {\n\n\t\t\t// Note that the new renderState won't apply until the next frame. See #18320\n\n\t\t\tsession.updateRenderState( {\n\t\t\t\tdepthNear: cameraVR.near,\n\t\t\t\tdepthFar: cameraVR.far\n\t\t\t} );\n\n\t\t\t_currentDepthNear = cameraVR.near;\n\t\t\t_currentDepthFar = cameraVR.far;\n\n\t\t}\n\n\t\tconst parent = camera.parent;\n\t\tconst cameras = cameraVR.cameras;\n\n\t\tupdateCamera( cameraVR, parent );\n\n\t\tfor ( let i = 0; i < cameras.length; i ++ ) {\n\n\t\t\tupdateCamera( cameras[ i ], parent );\n\n\t\t}\n\n\t\t// update camera and its children\n\n\t\tcamera.matrixWorld.copy( cameraVR.matrixWorld );\n\n\t\tconst children = camera.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tchildren[ i ].updateMatrixWorld( true );\n\n\t\t}\n\n\t\t// update projection matrix for proper view frustum culling\n\n\t\tif ( cameras.length === 2 ) {\n\n\t\t\tsetProjectionFromUnion( cameraVR, cameraL, cameraR );\n\n\t\t} else {\n\n\t\t\t// assume single camera setup (AR)\n\n\t\t\tcameraVR.projectionMatrix.copy( cameraL.projectionMatrix );\n\n\t\t}\n\n\t\treturn cameraVR;\n\n\t};\n\n\t// Animation Loop\n\n\tlet onAnimationFrameCallback = null;\n\n\tfunction onAnimationFrame( time, frame ) {\n\n\t\tpose = frame.getViewerPose( referenceSpace );\n\n\t\tif ( pose !== null ) {\n\n\t\t\tconst views = pose.views;\n\t\t\tconst baseLayer = session.renderState.baseLayer;\n\n\t\t\trenderer.setFramebuffer( baseLayer.framebuffer );\n\n\t\t\tlet cameraVRNeedsUpdate = false;\n\n\t\t\t// check if it's necessary to rebuild cameraVR's camera list\n\n\t\t\tif ( views.length !== cameraVR.cameras.length ) {\n\n\t\t\t\tcameraVR.cameras.length = 0;\n\t\t\t\tcameraVRNeedsUpdate = true;\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0; i < views.length; i ++ ) {\n\n\t\t\t\tconst view = views[ i ];\n\t\t\t\tconst viewport = baseLayer.getViewport( view );\n\n\t\t\t\tconst camera = cameras[ i ];\n\t\t\t\tcamera.matrix.fromArray( view.transform.matrix );\n\t\t\t\tcamera.projectionMatrix.fromArray( view.projectionMatrix );\n\t\t\t\tcamera.viewport.set( viewport.x, viewport.y, viewport.width, viewport.height );\n\n\t\t\t\tif ( i === 0 ) {\n\n\t\t\t\t\tcameraVR.matrix.copy( camera.matrix );\n\n\t\t\t\t}\n\n\t\t\t\tif ( cameraVRNeedsUpdate === true ) {\n\n\t\t\t\t\tcameraVR.cameras.push( camera );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tconst inputSources = session.inputSources;\n\n\t\tfor ( let i = 0; i < controllers.length; i ++ ) {\n\n\t\t\tconst controller = controllers[ i ];\n\t\t\tconst inputSource = inputSources[ i ];\n\n\t\t\tcontroller.update( inputSource, frame, referenceSpace );\n\n\t\t}\n\n\t\tif ( onAnimationFrameCallback ) onAnimationFrameCallback( time, frame );\n\n\t}\n\n\tconst animation = new WebGLAnimation();\n\tanimation.setAnimationLoop( onAnimationFrame );\n\n\tthis.setAnimationLoop = function ( callback ) {\n\n\t\tonAnimationFrameCallback = callback;\n\n\t};\n\n\tthis.dispose = function () {};\n\n}\n\nObject.assign( WebXRManager.prototype, EventDispatcher.prototype );\n\nfunction WebGLMaterials( properties ) {\n\n\tfunction refreshFogUniforms( uniforms, fog ) {\n\n\t\tuniforms.fogColor.value.copy( 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 refreshMaterialUniforms( uniforms, material, environment, pixelRatio, height ) {\n\n\t\tif ( material.isMeshBasicMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\n\t\t} else if ( material.isMeshLambertMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsLambert( uniforms, material );\n\n\t\t} else if ( material.isMeshToonMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsToon( uniforms, material );\n\n\t\t} else if ( material.isMeshPhongMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsPhong( uniforms, material );\n\n\t\t} else if ( material.isMeshStandardMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material, environment );\n\n\t\t\tif ( material.isMeshPhysicalMaterial ) {\n\n\t\t\t\trefreshUniformsPhysical( uniforms, material, environment );\n\n\t\t\t} else {\n\n\t\t\t\trefreshUniformsStandard( uniforms, material, environment );\n\n\t\t\t}\n\n\t\t} else if ( material.isMeshMatcapMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsMatcap( uniforms, material );\n\n\t\t} else if ( material.isMeshDepthMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsDepth( uniforms, material );\n\n\t\t} else if ( material.isMeshDistanceMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsDistance( uniforms, material );\n\n\t\t} else if ( material.isMeshNormalMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsNormal( uniforms, material );\n\n\t\t} else if ( material.isLineBasicMaterial ) {\n\n\t\t\trefreshUniformsLine( uniforms, material );\n\n\t\t\tif ( material.isLineDashedMaterial ) {\n\n\t\t\t\trefreshUniformsDash( uniforms, material );\n\n\t\t\t}\n\n\t\t} else if ( material.isPointsMaterial ) {\n\n\t\t\trefreshUniformsPoints( uniforms, material, pixelRatio, height );\n\n\t\t} else if ( material.isSpriteMaterial ) {\n\n\t\t\trefreshUniformsSprites( uniforms, material );\n\n\t\t} else if ( material.isShadowMaterial ) {\n\n\t\t\tuniforms.color.value.copy( material.color );\n\t\t\tuniforms.opacity.value = material.opacity;\n\n\t\t} else if ( material.isShaderMaterial ) {\n\n\t\t\tmaterial.uniformsNeedUpdate = false; // #15581\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsCommon( uniforms, material, environment ) {\n\n\t\tuniforms.opacity.value = material.opacity;\n\n\t\tif ( material.color ) {\n\n\t\t\tuniforms.diffuse.value.copy( 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\tconst envMap = material.envMap || environment;\n\n\t\tif ( envMap ) {\n\n\t\t\tuniforms.envMap.value = envMap;\n\n\t\t\tuniforms.flipEnvMap.value = 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\tvar maxMipLevel = properties.get( envMap ).__maxMipLevel;\n\n\t\t\tif ( maxMipLevel !== undefined ) {\n\n\t\t\t\tuniforms.maxMipLevel.value = maxMipLevel;\n\n\t\t\t}\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\tlet 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\t// uv repeat and offset setting priorities for uv2\n\t\t// 1. ao map\n\t\t// 2. light map\n\n\t\tlet uv2ScaleMap;\n\n\t\tif ( material.aoMap ) {\n\n\t\t\tuv2ScaleMap = material.aoMap;\n\n\t\t} else if ( material.lightMap ) {\n\n\t\t\tuv2ScaleMap = material.lightMap;\n\n\t\t}\n\n\t\tif ( uv2ScaleMap !== undefined ) {\n\n\t\t\t// backwards compatibility\n\t\t\tif ( uv2ScaleMap.isWebGLRenderTarget ) {\n\n\t\t\t\tuv2ScaleMap = uv2ScaleMap.texture;\n\n\t\t\t}\n\n\t\t\tif ( uv2ScaleMap.matrixAutoUpdate === true ) {\n\n\t\t\t\tuv2ScaleMap.updateMatrix();\n\n\t\t\t}\n\n\t\t\tuniforms.uv2Transform.value.copy( uv2ScaleMap.matrix );\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsLine( uniforms, material ) {\n\n\t\tuniforms.diffuse.value.copy( 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, pixelRatio, height ) {\n\n\t\tuniforms.diffuse.value.copy( 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\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\t// uv repeat and offset setting priorities\n\t\t// 1. color map\n\t\t// 2. alpha map\n\n\t\tlet uvScaleMap;\n\n\t\tif ( material.map ) {\n\n\t\t\tuvScaleMap = material.map;\n\n\t\t} else if ( material.alphaMap ) {\n\n\t\t\tuvScaleMap = material.alphaMap;\n\n\t\t}\n\n\t\tif ( uvScaleMap !== undefined ) {\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 refreshUniformsSprites( uniforms, material ) {\n\n\t\tuniforms.diffuse.value.copy( material.color );\n\t\tuniforms.opacity.value = material.opacity;\n\t\tuniforms.rotation.value = material.rotation;\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\t// uv repeat and offset setting priorities\n\t\t// 1. color map\n\t\t// 2. alpha map\n\n\t\tlet uvScaleMap;\n\n\t\tif ( material.map ) {\n\n\t\t\tuvScaleMap = material.map;\n\n\t\t} else if ( material.alphaMap ) {\n\n\t\t\tuvScaleMap = material.alphaMap;\n\n\t\t}\n\n\t\tif ( uvScaleMap !== undefined ) {\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 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.copy( 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\t\t\tif ( material.side === BackSide ) uniforms.bumpScale.value *= - 1;\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\t\t\tif ( material.side === BackSide ) uniforms.normalScale.value.negate();\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\tif ( material.gradientMap ) {\n\n\t\t\tuniforms.gradientMap.value = material.gradientMap;\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\t\t\tif ( material.side === BackSide ) uniforms.bumpScale.value *= - 1;\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\t\t\tif ( material.side === BackSide ) uniforms.normalScale.value.negate();\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 refreshUniformsStandard( uniforms, material, environment ) {\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\t\t\tif ( material.side === BackSide ) uniforms.bumpScale.value *= - 1;\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\t\t\tif ( material.side === BackSide ) uniforms.normalScale.value.negate();\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 || environment ) {\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, environment ) {\n\n\t\trefreshUniformsStandard( uniforms, material, environment );\n\n\t\tuniforms.reflectivity.value = material.reflectivity; // also part of uniforms common\n\n\t\tuniforms.clearcoat.value = material.clearcoat;\n\t\tuniforms.clearcoatRoughness.value = material.clearcoatRoughness;\n\t\tif ( material.sheen ) uniforms.sheen.value.copy( material.sheen );\n\n\t\tif ( material.clearcoatMap ) {\n\n\t\t\tuniforms.clearcoatMap.value = material.clearcoatMap;\n\n\t\t}\n\n\t\tif ( material.clearcoatRoughnessMap ) {\n\n\t\t\tuniforms.clearcoatRoughnessMap.value = material.clearcoatRoughnessMap;\n\n\t\t}\n\n\t\tif ( material.clearcoatNormalMap ) {\n\n\t\t\tuniforms.clearcoatNormalScale.value.copy( material.clearcoatNormalScale );\n\t\t\tuniforms.clearcoatNormalMap.value = material.clearcoatNormalMap;\n\n\t\t\tif ( material.side === BackSide ) {\n\n\t\t\t\tuniforms.clearcoatNormalScale.value.negate();\n\n\t\t\t}\n\n\t\t}\n\n\t\tuniforms.transmission.value = material.transmission;\n\n\t\tif ( material.transmissionMap ) {\n\n\t\t\tuniforms.transmissionMap.value = material.transmissionMap;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsMatcap( uniforms, material ) {\n\n\t\tif ( material.matcap ) {\n\n\t\t\tuniforms.matcap.value = material.matcap;\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\t\t\tif ( material.side === BackSide ) uniforms.bumpScale.value *= - 1;\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\t\t\tif ( material.side === BackSide ) uniforms.normalScale.value.negate();\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 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\t\t\tif ( material.side === BackSide ) uniforms.bumpScale.value *= - 1;\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\t\t\tif ( material.side === BackSide ) uniforms.normalScale.value.negate();\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\treturn {\n\t\trefreshFogUniforms: refreshFogUniforms,\n\t\trefreshMaterialUniforms: refreshMaterialUniforms\n\t};\n\n}\n\nfunction WebGLRenderer( parameters ) {\n\n\tparameters = parameters || {};\n\n\tconst _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\t\t_failIfMajorPerformanceCaveat = parameters.failIfMajorPerformanceCaveat !== undefined ? parameters.failIfMajorPerformanceCaveat : false;\n\n\tlet currentRenderList = null;\n\tlet currentRenderState = null;\n\n\t// public properties\n\n\tthis.domElement = _canvas;\n\n\t// Debug configuration container\n\tthis.debug = {\n\n\t\t/**\n\t\t * Enables error checking and reporting when shader programs are being compiled\n\t\t * @type {boolean}\n\t\t */\n\t\tcheckShaderErrors: true\n\t};\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.outputEncoding = LinearEncoding;\n\n\t// physical lights\n\n\tthis.physicallyCorrectLights = false;\n\n\t// tone mapping\n\n\tthis.toneMapping = NoToneMapping;\n\tthis.toneMappingExposure = 1.0;\n\n\t// morphs\n\n\tthis.maxMorphTargets = 8;\n\tthis.maxMorphNormals = 4;\n\n\t// internal properties\n\n\tconst _this = this;\n\n\tlet _isContextLost = false;\n\n\t// internal state cache\n\n\tlet _framebuffer = null;\n\n\tlet _currentActiveCubeFace = 0;\n\tlet _currentActiveMipmapLevel = 0;\n\tlet _currentRenderTarget = null;\n\tlet _currentFramebuffer = null;\n\tlet _currentMaterialId = - 1;\n\n\tlet _currentCamera = null;\n\tlet _currentArrayCamera = null;\n\n\tconst _currentViewport = new Vector4();\n\tconst _currentScissor = new Vector4();\n\tlet _currentScissorTest = null;\n\n\t//\n\n\tlet _width = _canvas.width;\n\tlet _height = _canvas.height;\n\n\tlet _pixelRatio = 1;\n\tlet _opaqueSort = null;\n\tlet _transparentSort = null;\n\n\tconst _viewport = new Vector4( 0, 0, _width, _height );\n\tconst _scissor = new Vector4( 0, 0, _width, _height );\n\tlet _scissorTest = false;\n\n\t// frustum\n\n\tconst _frustum = new Frustum();\n\n\t// clipping\n\n\tconst _clipping = new WebGLClipping();\n\tlet _clippingEnabled = false;\n\tlet _localClippingEnabled = false;\n\n\t// camera matrices cache\n\n\tconst _projScreenMatrix = new Matrix4();\n\n\tconst _vector3 = new Vector3();\n\n\tconst _emptyScene = { background: null, fog: null, environment: null, overrideMaterial: null, isScene: true };\n\n\tfunction getTargetPixelRatio() {\n\n\t\treturn _currentRenderTarget === null ? _pixelRatio : 1;\n\n\t}\n\n\t// initialize\n\n\tlet _gl = _context;\n\n\tfunction getContext( contextNames, contextAttributes ) {\n\n\t\tfor ( let i = 0; i < contextNames.length; i ++ ) {\n\n\t\t\tconst contextName = contextNames[ i ];\n\t\t\tconst context = _canvas.getContext( contextName, contextAttributes );\n\t\t\tif ( context !== null ) return context;\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\ttry {\n\n\t\tconst 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\tfailIfMajorPerformanceCaveat: _failIfMajorPerformanceCaveat\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\tif ( _gl === null ) {\n\n\t\t\tconst contextNames = [ 'webgl2', 'webgl', 'experimental-webgl' ];\n\n\t\t\tif ( _this.isWebGL1Renderer === true ) {\n\n\t\t\t\tcontextNames.shift();\n\n\t\t\t}\n\n\t\t\t_gl = getContext( contextNames, contextAttributes );\n\n\t\t\tif ( _gl === null ) {\n\n\t\t\t\tif ( getContext( contextNames ) ) {\n\n\t\t\t\t\tthrow new Error( 'Error creating WebGL context with your selected attributes.' );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthrow new Error( 'Error creating WebGL context.' );\n\n\t\t\t\t}\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\t\tthrow error;\n\n\t}\n\n\tlet extensions, capabilities, state, info;\n\tlet properties, textures, attributes, geometries, objects;\n\tlet programCache, materials, renderLists, renderStates;\n\n\tlet background, morphtargets, bufferRenderer, indexedBufferRenderer;\n\n\tlet utils, bindingStates;\n\n\tfunction initGLContext() {\n\n\t\textensions = new WebGLExtensions( _gl );\n\n\t\tcapabilities = new WebGLCapabilities( _gl, extensions, parameters );\n\n\t\tif ( capabilities.isWebGL2 === false ) {\n\n\t\t\textensions.get( 'WEBGL_depth_texture' );\n\t\t\textensions.get( 'OES_texture_float' );\n\t\t\textensions.get( 'OES_texture_half_float' );\n\t\t\textensions.get( 'OES_texture_half_float_linear' );\n\t\t\textensions.get( 'OES_standard_derivatives' );\n\t\t\textensions.get( 'OES_element_index_uint' );\n\t\t\textensions.get( 'OES_vertex_array_object' );\n\t\t\textensions.get( 'ANGLE_instanced_arrays' );\n\n\t\t}\n\n\t\textensions.get( 'OES_texture_float_linear' );\n\n\t\tutils = new WebGLUtils( _gl, extensions, capabilities );\n\n\t\tstate = new WebGLState( _gl, extensions, capabilities );\n\t\tstate.scissor( _currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ).floor() );\n\t\tstate.viewport( _currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ).floor() );\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, capabilities );\n\t\tbindingStates = new WebGLBindingStates( _gl, extensions, attributes, capabilities );\n\t\tgeometries = new WebGLGeometries( _gl, attributes, info, bindingStates );\n\t\tobjects = new WebGLObjects( _gl, geometries, attributes, info );\n\t\tmorphtargets = new WebGLMorphtargets( _gl );\n\t\tprogramCache = new WebGLPrograms( _this, extensions, capabilities, bindingStates );\n\t\tmaterials = new WebGLMaterials( properties );\n\t\trenderLists = new WebGLRenderLists( properties );\n\t\trenderStates = new WebGLRenderStates();\n\n\t\tbackground = new WebGLBackground( _this, state, objects, _premultipliedAlpha );\n\n\t\tbufferRenderer = new WebGLBufferRenderer( _gl, extensions, info, capabilities );\n\t\tindexedBufferRenderer = new WebGLIndexedBufferRenderer( _gl, extensions, info, capabilities );\n\n\t\tinfo.programs = programCache.programs;\n\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// xr\n\n\tconst xr = new WebXRManager( _this, _gl );\n\n\tthis.xr = xr;\n\n\t// shadow map\n\n\tconst 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\tconst extension = extensions.get( 'WEBGL_lose_context' );\n\t\tif ( extension ) extension.loseContext();\n\n\t};\n\n\tthis.forceContextRestore = function () {\n\n\t\tconst 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 ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'WebGLRenderer: .getsize() now requires a Vector2 as an argument' );\n\n\t\t\ttarget = new Vector2();\n\n\t\t}\n\n\t\treturn target.set( _width, _height );\n\n\t};\n\n\tthis.setSize = function ( width, height, updateStyle ) {\n\n\t\tif ( xr.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 = Math.floor( width * _pixelRatio );\n\t\t_canvas.height = Math.floor( 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 ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'WebGLRenderer: .getdrawingBufferSize() now requires a Vector2 as an argument' );\n\n\t\t\ttarget = new Vector2();\n\n\t\t}\n\n\t\treturn target.set( _width * _pixelRatio, _height * _pixelRatio ).floor();\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 = Math.floor( width * pixelRatio );\n\t\t_canvas.height = Math.floor( height * pixelRatio );\n\n\t\tthis.setViewport( 0, 0, width, height );\n\n\t};\n\n\tthis.getCurrentViewport = function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'WebGLRenderer: .getCurrentViewport() now requires a Vector4 as an argument' );\n\n\t\t\ttarget = new Vector4();\n\n\t\t}\n\n\t\treturn target.copy( _currentViewport );\n\n\t};\n\n\tthis.getViewport = function ( target ) {\n\n\t\treturn target.copy( _viewport );\n\n\t};\n\n\tthis.setViewport = function ( x, y, width, height ) {\n\n\t\tif ( x.isVector4 ) {\n\n\t\t\t_viewport.set( x.x, x.y, x.z, x.w );\n\n\t\t} else {\n\n\t\t\t_viewport.set( x, y, width, height );\n\n\t\t}\n\n\t\tstate.viewport( _currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ).floor() );\n\n\t};\n\n\tthis.getScissor = function ( target ) {\n\n\t\treturn target.copy( _scissor );\n\n\t};\n\n\tthis.setScissor = function ( x, y, width, height ) {\n\n\t\tif ( x.isVector4 ) {\n\n\t\t\t_scissor.set( x.x, x.y, x.z, x.w );\n\n\t\t} else {\n\n\t\t\t_scissor.set( x, y, width, height );\n\n\t\t}\n\n\t\tstate.scissor( _currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ).floor() );\n\n\t};\n\n\tthis.getScissorTest = function () {\n\n\t\treturn _scissorTest;\n\n\t};\n\n\tthis.setScissorTest = function ( boolean ) {\n\n\t\tstate.setScissorTest( _scissorTest = boolean );\n\n\t};\n\n\tthis.setOpaqueSort = function ( method ) {\n\n\t\t_opaqueSort = method;\n\n\t};\n\n\tthis.setTransparentSort = function ( method ) {\n\n\t\t_transparentSort = method;\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\tlet bits = 0;\n\n\t\tif ( color === undefined || color ) bits |= 16384;\n\t\tif ( depth === undefined || depth ) bits |= 256;\n\t\tif ( stencil === undefined || stencil ) bits |= 1024;\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\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\t\tbindingStates.dispose();\n\n\t\txr.dispose();\n\n\t\tanimation.stop();\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\tconst 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\tconst programInfo = properties.get( material ).program;\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 ) {\n\n\t\tobject.render( function ( object ) {\n\n\t\t\t_this.renderBufferImmediate( object, program );\n\n\t\t} );\n\n\t}\n\n\tthis.renderBufferImmediate = function ( object, program ) {\n\n\t\tbindingStates.initAttributes();\n\n\t\tconst 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\tconst programAttributes = program.getAttributes();\n\n\t\tif ( object.hasPositions ) {\n\n\t\t\t_gl.bindBuffer( 34962, buffers.position );\n\t\t\t_gl.bufferData( 34962, object.positionArray, 35048 );\n\n\t\t\tbindingStates.enableAttribute( programAttributes.position );\n\t\t\t_gl.vertexAttribPointer( programAttributes.position, 3, 5126, false, 0, 0 );\n\n\t\t}\n\n\t\tif ( object.hasNormals ) {\n\n\t\t\t_gl.bindBuffer( 34962, buffers.normal );\n\t\t\t_gl.bufferData( 34962, object.normalArray, 35048 );\n\n\t\t\tbindingStates.enableAttribute( programAttributes.normal );\n\t\t\t_gl.vertexAttribPointer( programAttributes.normal, 3, 5126, false, 0, 0 );\n\n\t\t}\n\n\t\tif ( object.hasUvs ) {\n\n\t\t\t_gl.bindBuffer( 34962, buffers.uv );\n\t\t\t_gl.bufferData( 34962, object.uvArray, 35048 );\n\n\t\t\tbindingStates.enableAttribute( programAttributes.uv );\n\t\t\t_gl.vertexAttribPointer( programAttributes.uv, 2, 5126, false, 0, 0 );\n\n\t\t}\n\n\t\tif ( object.hasColors ) {\n\n\t\t\t_gl.bindBuffer( 34962, buffers.color );\n\t\t\t_gl.bufferData( 34962, object.colorArray, 35048 );\n\n\t\t\tbindingStates.enableAttribute( programAttributes.color );\n\t\t\t_gl.vertexAttribPointer( programAttributes.color, 3, 5126, false, 0, 0 );\n\n\t\t}\n\n\t\tbindingStates.disableUnusedAttributes();\n\n\t\t_gl.drawArrays( 4, 0, object.count );\n\n\t\tobject.count = 0;\n\n\t};\n\n\tthis.renderBufferDirect = function ( camera, scene, geometry, material, object, group ) {\n\n\t\tif ( scene === null ) scene = _emptyScene; // renderBufferDirect second parameter used to be fog (could be null)\n\n\t\tconst frontFaceCW = ( object.isMesh && object.matrixWorld.determinant() < 0 );\n\n\t\tconst program = setProgram( camera, scene, material, object );\n\n\t\tstate.setMaterial( material, frontFaceCW );\n\n\t\t//\n\n\t\tlet index = geometry.index;\n\t\tconst position = geometry.attributes.position;\n\n\t\t//\n\n\t\tif ( index === null ) {\n\n\t\t\tif ( position === undefined || position.count === 0 ) return;\n\n\t\t} else if ( index.count === 0 ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t//\n\n\t\tlet 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\tif ( material.morphTargets || material.morphNormals ) {\n\n\t\t\tmorphtargets.update( object, geometry, material, program );\n\n\t\t}\n\n\t\tbindingStates.setup( object, material, program, geometry, index );\n\n\t\tlet attribute;\n\t\tlet 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\t//\n\n\t\tconst dataCount = ( index !== null ) ? index.count : position.count;\n\n\t\tconst rangeStart = geometry.drawRange.start * rangeFactor;\n\t\tconst rangeCount = geometry.drawRange.count * rangeFactor;\n\n\t\tconst groupStart = group !== null ? group.start * rangeFactor : 0;\n\t\tconst groupCount = group !== null ? group.count * rangeFactor : Infinity;\n\n\t\tconst drawStart = Math.max( rangeStart, groupStart );\n\t\tconst drawEnd = Math.min( dataCount, rangeStart + rangeCount, groupStart + groupCount ) - 1;\n\n\t\tconst 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( 1 );\n\n\t\t\t} else {\n\n\t\t\t\trenderer.setMode( 4 );\n\n\t\t\t}\n\n\t\t} else if ( object.isLine ) {\n\n\t\t\tlet 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( 1 );\n\n\t\t\t} else if ( object.isLineLoop ) {\n\n\t\t\t\trenderer.setMode( 2 );\n\n\t\t\t} else {\n\n\t\t\t\trenderer.setMode( 3 );\n\n\t\t\t}\n\n\t\t} else if ( object.isPoints ) {\n\n\t\t\trenderer.setMode( 0 );\n\n\t\t} else if ( object.isSprite ) {\n\n\t\t\trenderer.setMode( 4 );\n\n\t\t}\n\n\t\tif ( object.isInstancedMesh ) {\n\n\t\t\trenderer.renderInstances( drawStart, drawCount, object.count );\n\n\t\t} else if ( geometry.isInstancedBufferGeometry ) {\n\n\t\t\tconst instanceCount = Math.min( geometry.instanceCount, geometry._maxInstanceCount );\n\n\t\t\trenderer.renderInstances( drawStart, drawCount, instanceCount );\n\n\t\t} else {\n\n\t\t\trenderer.render( drawStart, drawCount );\n\n\t\t}\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\tconst compiled = new WeakMap();\n\n\t\tscene.traverse( function ( object ) {\n\n\t\t\tlet material = object.material;\n\n\t\t\tif ( material ) {\n\n\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\tfor ( let i = 0; i < material.length; i ++ ) {\n\n\t\t\t\t\t\tlet material2 = material[ i ];\n\n\t\t\t\t\t\tif ( compiled.has( material2 ) === false ) {\n\n\t\t\t\t\t\t\tinitMaterial( material2, scene, object );\n\t\t\t\t\t\t\tcompiled.set( material2 );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( compiled.has( material ) === false ) {\n\n\t\t\t\t\tinitMaterial( material, scene, object );\n\t\t\t\t\tcompiled.set( material );\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\tlet onAnimationFrameCallback = null;\n\n\tfunction onAnimationFrame( time ) {\n\n\t\tif ( xr.isPresenting ) return;\n\t\tif ( onAnimationFrameCallback ) onAnimationFrameCallback( time );\n\n\t}\n\n\tconst animation = new WebGLAnimation();\n\tanimation.setAnimationLoop( onAnimationFrame );\n\n\tif ( typeof window !== 'undefined' ) animation.setContext( window );\n\n\tthis.setAnimationLoop = function ( callback ) {\n\n\t\tonAnimationFrameCallback = callback;\n\t\txr.setAnimationLoop( callback );\n\n\t\t( callback === null ) ? animation.stop() : animation.start();\n\n\t};\n\n\t// Rendering\n\n\tthis.render = function ( scene, camera ) {\n\n\t\tlet renderTarget, forceClear;\n\n\t\tif ( arguments[ 2 ] !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer.render(): the renderTarget argument has been removed. Use .setRenderTarget() instead.' );\n\t\t\trenderTarget = arguments[ 2 ];\n\n\t\t}\n\n\t\tif ( arguments[ 3 ] !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer.render(): the forceClear argument has been removed. Use .clear() instead.' );\n\t\t\tforceClear = arguments[ 3 ];\n\n\t\t}\n\n\t\tif ( camera !== undefined && camera.isCamera !== true ) {\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 === true ) return;\n\n\t\t// reset caching for this frame\n\n\t\tbindingStates.resetDefaultState();\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 ( xr.enabled === true && xr.isPresenting === true ) {\n\n\t\t\tcamera = xr.getCamera( camera );\n\n\t\t}\n\n\t\t//\n\t\tif ( scene.isScene === true ) scene.onBeforeRender( _this, scene, camera, renderTarget || _currentRenderTarget );\n\n\t\tcurrentRenderState = renderStates.get( scene, camera );\n\t\tcurrentRenderState.init();\n\n\t\t_projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );\n\t\t_frustum.setFromProjectionMatrix( _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, 0, _this.sortObjects );\n\n\t\tcurrentRenderList.finish();\n\n\t\tif ( _this.sortObjects === true ) {\n\n\t\t\tcurrentRenderList.sort( _opaqueSort, _transparentSort );\n\n\t\t}\n\n\t\t//\n\n\t\tif ( _clippingEnabled === true ) _clipping.beginShadows();\n\n\t\tconst shadowsArray = currentRenderState.state.shadowsArray;\n\n\t\tshadowMap.render( shadowsArray, scene, camera );\n\n\t\tcurrentRenderState.setupLights( camera );\n\n\t\tif ( _clippingEnabled === true ) _clipping.endShadows();\n\n\t\t//\n\n\t\tif ( this.info.autoReset === true ) this.info.reset();\n\n\t\tif ( renderTarget !== undefined ) {\n\n\t\t\tthis.setRenderTarget( renderTarget );\n\n\t\t}\n\n\t\t//\n\n\t\tbackground.render( currentRenderList, scene, camera, forceClear );\n\n\t\t// render scene\n\n\t\tconst opaqueObjects = currentRenderList.opaque;\n\t\tconst transparentObjects = currentRenderList.transparent;\n\n\t\tif ( opaqueObjects.length > 0 ) renderObjects( opaqueObjects, scene, camera );\n\t\tif ( transparentObjects.length > 0 ) renderObjects( transparentObjects, scene, camera );\n\n\t\t//\n\n\t\tif ( scene.isScene === true ) scene.onAfterRender( _this, scene, camera );\n\n\t\t//\n\n\t\tif ( _currentRenderTarget !== null ) {\n\n\t\t\t// Generate mipmap if we're using any kind of mipmap filtering\n\n\t\t\ttextures.updateRenderTargetMipmap( _currentRenderTarget );\n\n\t\t\t// resolve multisample renderbuffers to a single-sample texture if necessary\n\n\t\t\ttextures.updateMultisampleRenderTarget( _currentRenderTarget );\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\t// _gl.finish();\n\n\t\tcurrentRenderList = null;\n\t\tcurrentRenderState = null;\n\n\t};\n\n\tfunction projectObject( object, camera, groupOrder, sortObjects ) {\n\n\t\tif ( object.visible === false ) return;\n\n\t\tconst visible = object.layers.test( camera.layers );\n\n\t\tif ( visible ) {\n\n\t\t\tif ( object.isGroup ) {\n\n\t\t\t\tgroupOrder = object.renderOrder;\n\n\t\t\t} else if ( object.isLOD ) {\n\n\t\t\t\tif ( object.autoUpdate === true ) object.update( camera );\n\n\t\t\t} else if ( 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\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\tconst geometry = objects.update( object );\n\t\t\t\t\tconst material = object.material;\n\n\t\t\t\t\tif ( material.visible ) {\n\n\t\t\t\t\t\tcurrentRenderList.push( object, geometry, material, groupOrder, _vector3.z, null );\n\n\t\t\t\t\t}\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, groupOrder, _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\t// update skeleton only once in a frame\n\n\t\t\t\t\tif ( object.skeleton.frame !== info.render.frame ) {\n\n\t\t\t\t\t\tobject.skeleton.update();\n\t\t\t\t\t\tobject.skeleton.frame = info.render.frame;\n\n\t\t\t\t\t}\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\tconst geometry = objects.update( object );\n\t\t\t\t\tconst material = object.material;\n\n\t\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\t\tconst groups = geometry.groups;\n\n\t\t\t\t\t\tfor ( let i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\t\t\t\t\tconst group = groups[ i ];\n\t\t\t\t\t\t\tconst 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, groupOrder, _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, groupOrder, _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\tconst children = object.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tprojectObject( children[ i ], camera, groupOrder, sortObjects );\n\n\t\t}\n\n\t}\n\n\tfunction renderObjects( renderList, scene, camera ) {\n\n\t\tconst overrideMaterial = scene.isScene === true ? scene.overrideMaterial : null;\n\n\t\tfor ( let i = 0, l = renderList.length; i < l; i ++ ) {\n\n\t\t\tconst renderItem = renderList[ i ];\n\n\t\t\tconst object = renderItem.object;\n\t\t\tconst geometry = renderItem.geometry;\n\t\t\tconst material = overrideMaterial === null ? renderItem.material : overrideMaterial;\n\t\t\tconst group = renderItem.group;\n\n\t\t\tif ( camera.isArrayCamera ) {\n\n\t\t\t\t_currentArrayCamera = camera;\n\n\t\t\t\tconst cameras = camera.cameras;\n\n\t\t\t\tfor ( let j = 0, jl = cameras.length; j < jl; j ++ ) {\n\n\t\t\t\t\tconst camera2 = cameras[ j ];\n\n\t\t\t\t\tif ( object.layers.test( camera2.layers ) ) {\n\n\t\t\t\t\t\tstate.viewport( _currentViewport.copy( camera2.viewport ) );\n\n\t\t\t\t\t\tcurrentRenderState.setupLights( camera2 );\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\tconst program = setProgram( camera, scene, material, object );\n\n\t\t\tstate.setMaterial( material );\n\n\t\t\tbindingStates.reset();\n\n\t\t\trenderObjectImmediate( object, program );\n\n\t\t} else {\n\n\t\t\t_this.renderBufferDirect( camera, scene, 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, scene, object ) {\n\n\t\tif ( scene.isScene !== true ) scene = _emptyScene; // scene could be a Mesh, Line, Points, ...\n\n\t\tconst materialProperties = properties.get( material );\n\n\t\tconst lights = currentRenderState.state.lights;\n\t\tconst shadowsArray = currentRenderState.state.shadowsArray;\n\n\t\tconst lightsStateVersion = lights.state.version;\n\n\t\tconst parameters = programCache.getParameters( material, lights.state, shadowsArray, scene, _clipping.numPlanes, _clipping.numIntersection, object );\n\t\tconst programCacheKey = programCache.getProgramCacheKey( parameters );\n\n\t\tlet program = materialProperties.program;\n\t\tlet 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.cacheKey !== programCacheKey ) {\n\n\t\t\t// changed glsl or parameters\n\t\t\treleaseMaterialProgramReference( material );\n\n\t\t} else if ( materialProperties.lightsStateVersion !== lightsStateVersion ) {\n\n\t\t\tmaterialProperties.lightsStateVersion = lightsStateVersion;\n\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\tparameters.uniforms = programCache.getUniforms( material, parameters );\n\n\t\t\tmaterial.onBeforeCompile( parameters, _this );\n\n\t\t\tprogram = programCache.acquireProgram( parameters, programCacheKey );\n\n\t\t\tmaterialProperties.program = program;\n\t\t\tmaterialProperties.uniforms = parameters.uniforms;\n\t\t\tmaterialProperties.outputEncoding = parameters.outputEncoding;\n\n\t\t}\n\n\t\tconst programAttributes = program.getAttributes();\n\n\t\tif ( material.morphTargets ) {\n\n\t\t\tmaterial.numSupportedMorphTargets = 0;\n\n\t\t\tfor ( let 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 ( let 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\tconst uniforms = materialProperties.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.environment = material.isMeshStandardMaterial ? scene.environment : null;\n\t\tmaterialProperties.fog = scene.fog;\n\n\t\t// store the light setup it was created for\n\n\t\tmaterialProperties.needsLights = materialNeedsLights( material );\n\t\tmaterialProperties.lightsStateVersion = lightsStateVersion;\n\n\t\tif ( materialProperties.needsLights ) {\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.lightProbe.value = lights.state.probe;\n\t\t\tuniforms.directionalLights.value = lights.state.directional;\n\t\t\tuniforms.directionalLightShadows.value = lights.state.directionalShadow;\n\t\t\tuniforms.spotLights.value = lights.state.spot;\n\t\t\tuniforms.spotLightShadows.value = lights.state.spotShadow;\n\t\t\tuniforms.rectAreaLights.value = lights.state.rectArea;\n\t\t\tuniforms.pointLights.value = lights.state.point;\n\t\t\tuniforms.pointLightShadows.value = lights.state.pointShadow;\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\tconst 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, scene, material, object ) {\n\n\t\tif ( scene.isScene !== true ) scene = _emptyScene; // scene could be a Mesh, Line, Points, ...\n\n\t\ttextures.resetTextureUnits();\n\n\t\tconst fog = scene.fog;\n\t\tconst environment = material.isMeshStandardMaterial ? scene.environment : null;\n\t\tconst encoding = ( _currentRenderTarget === null ) ? _this.outputEncoding : _currentRenderTarget.texture.encoding;\n\n\t\tconst materialProperties = properties.get( material );\n\t\tconst lights = currentRenderState.state.lights;\n\n\t\tif ( _clippingEnabled === true ) {\n\n\t\t\tif ( _localClippingEnabled === true || camera !== _currentCamera ) {\n\n\t\t\t\tconst 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.version === materialProperties.__version ) {\n\n\t\t\tif ( materialProperties.program === undefined ) {\n\n\t\t\t\tinitMaterial( material, scene, object );\n\n\t\t\t} else if ( material.fog && materialProperties.fog !== fog ) {\n\n\t\t\t\tinitMaterial( material, scene, object );\n\n\t\t\t} else if ( materialProperties.environment !== environment ) {\n\n\t\t\t\tinitMaterial( material, scene, object );\n\n\t\t\t} else if ( materialProperties.needsLights && ( materialProperties.lightsStateVersion !== lights.state.version ) ) {\n\n\t\t\t\tinitMaterial( material, scene, object );\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\tinitMaterial( material, scene, object );\n\n\t\t\t} else if ( materialProperties.outputEncoding !== encoding ) {\n\n\t\t\t\tinitMaterial( material, scene, object );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tinitMaterial( material, scene, object );\n\t\t\tmaterialProperties.__version = material.version;\n\n\t\t}\n\n\t\tlet refreshProgram = false;\n\t\tlet refreshMaterial = false;\n\t\tlet refreshLights = false;\n\n\t\tconst program = materialProperties.program,\n\t\t\tp_uniforms = program.getUniforms(),\n\t\t\tm_uniforms = materialProperties.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 || _currentCamera !== camera ) {\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\tif ( _currentCamera !== camera ) {\n\n\t\t\t\t_currentCamera = 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.isMeshToonMaterial ||\n\t\t\t\tmaterial.isMeshStandardMaterial ||\n\t\t\t\tmaterial.envMap ) {\n\n\t\t\t\tconst 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.isMeshToonMaterial ||\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\n\t\t\t\tp_uniforms.setValue( _gl, 'isOrthographic', camera.isOrthographicCamera === true );\n\n\t\t\t}\n\n\t\t\tif ( material.isMeshPhongMaterial ||\n\t\t\t\tmaterial.isMeshToonMaterial ||\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.isShadowMaterial ||\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// otherwise textures used for skinning can take over texture units reserved for other material textures\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\tconst skeleton = object.skeleton;\n\n\t\t\tif ( skeleton ) {\n\n\t\t\t\tconst 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\tlet size = Math.sqrt( bones.length * 4 ); // 4 pixels needed for 1 matrix\n\t\t\t\t\t\tsize = MathUtils.ceilPowerOfTwo( size );\n\t\t\t\t\t\tsize = Math.max( size, 4 );\n\n\t\t\t\t\t\tconst 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\tconst boneTexture = new DataTexture( boneMatrices, size, size, RGBAFormat, FloatType );\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, textures );\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 || materialProperties.receiveShadow !== object.receiveShadow ) {\n\n\t\t\tmaterialProperties.receiveShadow = object.receiveShadow;\n\t\t\tp_uniforms.setValue( _gl, 'receiveShadow', object.receiveShadow );\n\n\t\t}\n\n\t\tif ( refreshMaterial ) {\n\n\t\t\tp_uniforms.setValue( _gl, 'toneMappingExposure', _this.toneMappingExposure );\n\n\t\t\tif ( materialProperties.needsLights ) {\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\tmaterials.refreshFogUniforms( m_uniforms, fog );\n\n\t\t\t}\n\n\t\t\tmaterials.refreshMaterialUniforms( m_uniforms, material, environment, _pixelRatio, _height );\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, textures );\n\n\t\t}\n\n\t\tif ( material.isShaderMaterial && material.uniformsNeedUpdate === true ) {\n\n\t\t\tWebGLUniforms.upload( _gl, materialProperties.uniformsList, m_uniforms, textures );\n\t\t\tmaterial.uniformsNeedUpdate = false;\n\n\t\t}\n\n\t\tif ( material.isSpriteMaterial ) {\n\n\t\t\tp_uniforms.setValue( _gl, 'center', object.center );\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// 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\t\tuniforms.lightProbe.needsUpdate = value;\n\n\t\tuniforms.directionalLights.needsUpdate = value;\n\t\tuniforms.directionalLightShadows.needsUpdate = value;\n\t\tuniforms.pointLights.needsUpdate = value;\n\t\tuniforms.pointLightShadows.needsUpdate = value;\n\t\tuniforms.spotLights.needsUpdate = value;\n\t\tuniforms.spotLightShadows.needsUpdate = value;\n\t\tuniforms.rectAreaLights.needsUpdate = value;\n\t\tuniforms.hemisphereLights.needsUpdate = value;\n\n\t}\n\n\tfunction materialNeedsLights( material ) {\n\n\t\treturn material.isMeshLambertMaterial || material.isMeshToonMaterial || material.isMeshPhongMaterial ||\n\t\t\tmaterial.isMeshStandardMaterial || material.isShadowMaterial ||\n\t\t\t( material.isShaderMaterial && material.lights === true );\n\n\t}\n\n\t//\n\tthis.setFramebuffer = function ( value ) {\n\n\t\tif ( _framebuffer !== value && _currentRenderTarget === null ) _gl.bindFramebuffer( 36160, value );\n\n\t\t_framebuffer = value;\n\n\t};\n\n\tthis.getActiveCubeFace = function () {\n\n\t\treturn _currentActiveCubeFace;\n\n\t};\n\n\tthis.getActiveMipmapLevel = function () {\n\n\t\treturn _currentActiveMipmapLevel;\n\n\t};\n\n\tthis.getRenderTarget = function () {\n\n\t\treturn _currentRenderTarget;\n\n\t};\n\n\tthis.setRenderTarget = function ( renderTarget, activeCubeFace, activeMipmapLevel ) {\n\n\t\t_currentRenderTarget = renderTarget;\n\t\t_currentActiveCubeFace = activeCubeFace;\n\t\t_currentActiveMipmapLevel = activeMipmapLevel;\n\n\t\tif ( renderTarget && properties.get( renderTarget ).__webglFramebuffer === undefined ) {\n\n\t\t\ttextures.setupRenderTarget( renderTarget );\n\n\t\t}\n\n\t\tlet framebuffer = _framebuffer;\n\t\tlet isCube = false;\n\n\t\tif ( renderTarget ) {\n\n\t\t\tconst __webglFramebuffer = properties.get( renderTarget ).__webglFramebuffer;\n\n\t\t\tif ( renderTarget.isWebGLCubeRenderTarget ) {\n\n\t\t\t\tframebuffer = __webglFramebuffer[ activeCubeFace || 0 ];\n\t\t\t\tisCube = true;\n\n\t\t\t} else if ( renderTarget.isWebGLMultisampleRenderTarget ) {\n\n\t\t\t\tframebuffer = properties.get( renderTarget ).__webglMultisampledFramebuffer;\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 ).floor();\n\t\t\t_currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ).floor();\n\t\t\t_currentScissorTest = _scissorTest;\n\n\t\t}\n\n\t\tif ( _currentFramebuffer !== framebuffer ) {\n\n\t\t\t_gl.bindFramebuffer( 36160, 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\tconst textureProperties = properties.get( renderTarget.texture );\n\t\t\t_gl.framebufferTexture2D( 36160, 36064, 34069 + ( activeCubeFace || 0 ), textureProperties.__webglTexture, activeMipmapLevel || 0 );\n\n\t\t}\n\n\t};\n\n\tthis.readRenderTargetPixels = function ( renderTarget, x, y, width, height, buffer, activeCubeFaceIndex ) {\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\tlet framebuffer = properties.get( renderTarget ).__webglFramebuffer;\n\n\t\tif ( renderTarget.isWebGLCubeRenderTarget && activeCubeFaceIndex !== undefined ) {\n\n\t\t\tframebuffer = framebuffer[ activeCubeFaceIndex ];\n\n\t\t}\n\n\t\tif ( framebuffer ) {\n\n\t\t\tlet restore = false;\n\n\t\t\tif ( framebuffer !== _currentFramebuffer ) {\n\n\t\t\t\t_gl.bindFramebuffer( 36160, framebuffer );\n\n\t\t\t\trestore = true;\n\n\t\t\t}\n\n\t\t\ttry {\n\n\t\t\t\tconst texture = renderTarget.texture;\n\t\t\t\tconst textureFormat = texture.format;\n\t\t\t\tconst textureType = texture.type;\n\n\t\t\t\tif ( textureFormat !== RGBAFormat && utils.convert( textureFormat ) !== _gl.getParameter( 35739 ) ) {\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( 35738 ) && // IE11, Edge and Chrome Mac < 52 (#9513)\n\t\t\t\t\t! ( textureType === FloatType && ( capabilities.isWebGL2 || extensions.get( 'OES_texture_float' ) || extensions.get( 'WEBGL_color_buffer_float' ) ) ) && // Chrome Mac >= 52 and Firefox\n\t\t\t\t\t! ( textureType === HalfFloatType && ( capabilities.isWebGL2 ? extensions.get( 'EXT_color_buffer_float' ) : 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( 36160 ) === 36053 ) {\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( 36160, _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\tif ( level === undefined ) level = 0;\n\n\t\tconst levelScale = Math.pow( 2, - level );\n\t\tconst width = Math.floor( texture.image.width * levelScale );\n\t\tconst height = Math.floor( texture.image.height * levelScale );\n\t\tconst glFormat = utils.convert( texture.format );\n\n\t\ttextures.setTexture2D( texture, 0 );\n\n\t\t_gl.copyTexImage2D( 3553, level, glFormat, position.x, position.y, width, height, 0 );\n\n\t\tstate.unbindTexture();\n\n\t};\n\n\tthis.copyTextureToTexture = function ( position, srcTexture, dstTexture, level ) {\n\n\t\tif ( level === undefined ) level = 0;\n\n\t\tconst width = srcTexture.image.width;\n\t\tconst height = srcTexture.image.height;\n\t\tconst glFormat = utils.convert( dstTexture.format );\n\t\tconst glType = utils.convert( dstTexture.type );\n\n\t\ttextures.setTexture2D( dstTexture, 0 );\n\n\t\t// As another texture upload may have changed pixelStorei\n\t\t// parameters, make sure they are correct for the dstTexture\n\t\t_gl.pixelStorei( 37440, dstTexture.flipY );\n\t\t_gl.pixelStorei( 37441, dstTexture.premultiplyAlpha );\n\t\t_gl.pixelStorei( 3317, dstTexture.unpackAlignment );\n\n\t\tif ( srcTexture.isDataTexture ) {\n\n\t\t\t_gl.texSubImage2D( 3553, level, position.x, position.y, width, height, glFormat, glType, srcTexture.image.data );\n\n\t\t} else {\n\n\t\t\tif ( srcTexture.isCompressedTexture ) {\n\n\t\t\t\t_gl.compressedTexSubImage2D( 3553, level, position.x, position.y, srcTexture.mipmaps[ 0 ].width, srcTexture.mipmaps[ 0 ].height, glFormat, srcTexture.mipmaps[ 0 ].data );\n\n\t\t\t} else {\n\n\t\t\t\t_gl.texSubImage2D( 3553, level, position.x, position.y, glFormat, glType, srcTexture.image );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Generate mipmaps only when copying level 0\n\t\tif ( level === 0 && dstTexture.generateMipmaps ) _gl.generateMipmap( 3553 );\n\n\t\tstate.unbindTexture();\n\n\t};\n\n\tthis.initTexture = function ( texture ) {\n\n\t\ttextures.setTexture2D( texture, 0 );\n\n\t\tstate.unbindTexture();\n\n\t};\n\n\tif ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) {\n\n\t\t__THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'observe', { detail: this } ) ); // eslint-disable-line no-undef\n\n\t}\n\n}\n\nfunction WebGL1Renderer( parameters ) {\n\n\tWebGLRenderer.call( this, parameters );\n\n}\n\nWebGL1Renderer.prototype = Object.assign( Object.create( WebGLRenderer.prototype ), {\n\n\tconstructor: WebGL1Renderer,\n\n\tisWebGL1Renderer: true\n\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\nObject.assign( FogExp2.prototype, {\n\n\tisFogExp2: true,\n\n\tclone: function () {\n\n\t\treturn new FogExp2( this.color, this.density );\n\n\t},\n\n\ttoJSON: function ( /* meta */ ) {\n\n\t\treturn {\n\t\t\ttype: 'FogExp2',\n\t\t\tcolor: this.color.getHex(),\n\t\t\tdensity: this.density\n\t\t};\n\n\t}\n\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\nObject.assign( Fog.prototype, {\n\n\tisFog: true,\n\n\tclone: function () {\n\n\t\treturn new Fog( this.color, this.near, this.far );\n\n\t},\n\n\ttoJSON: function ( /* meta */ ) {\n\n\t\treturn {\n\t\t\ttype: 'Fog',\n\t\t\tcolor: this.color.getHex(),\n\t\t\tnear: this.near,\n\t\t\tfar: this.far\n\t\t};\n\n\t}\n\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.usage = StaticDrawUsage;\n\tthis.updateRange = { offset: 0, count: - 1 };\n\n\tthis.version = 0;\n\n\tthis.uuid = MathUtils.generateUUID();\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\tsetUsage: function ( value ) {\n\n\t\tthis.usage = 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.usage = source.usage;\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 ( let 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 ( data ) {\n\n\t\tif ( data.arrayBuffers === undefined ) {\n\n\t\t\tdata.arrayBuffers = {};\n\n\t\t}\n\n\t\tif ( this.array.buffer._uuid === undefined ) {\n\n\t\t\tthis.array.buffer._uuid = MathUtils.generateUUID();\n\n\t\t}\n\n\t\tif ( data.arrayBuffers[ this.array.buffer._uuid ] === undefined ) {\n\n\t\t\tdata.arrayBuffers[ this.array.buffer._uuid ] = this.array.slice( 0 ).buffer;\n\n\t\t}\n\n\t\tconst array = new this.array.constructor( data.arrayBuffers[ this.array.buffer._uuid ] );\n\n\t\tconst ib = new InterleavedBuffer( array, this.stride );\n\t\tib.setUsage( this.usage );\n\n\t\treturn ib;\n\n\t},\n\n\tonUpload: function ( callback ) {\n\n\t\tthis.onUploadCallback = callback;\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function ( data ) {\n\n\t\tif ( data.arrayBuffers === undefined ) {\n\n\t\t\tdata.arrayBuffers = {};\n\n\t\t}\n\n\t\t// generate UUID for array buffer if necessary\n\n\t\tif ( this.array.buffer._uuid === undefined ) {\n\n\t\t\tthis.array.buffer._uuid = MathUtils.generateUUID();\n\n\t\t}\n\n\t\tif ( data.arrayBuffers[ this.array.buffer._uuid ] === undefined ) {\n\n\t\t\tdata.arrayBuffers[ this.array.buffer._uuid ] = Array.prototype.slice.call( new Uint32Array( this.array.buffer ) );\n\n\t\t}\n\n\t\t//\n\n\t\treturn {\n\t\t\tuuid: this.uuid,\n\t\t\tbuffer: this.array.buffer._uuid,\n\t\t\ttype: this.array.constructor.name,\n\t\t\tstride: this.stride\n\t\t};\n\n\t}\n\n} );\n\nconst _vector$6 = new Vector3();\n\nfunction InterleavedBufferAttribute( interleavedBuffer, itemSize, offset, normalized ) {\n\n\tthis.name = '';\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\tneedsUpdate: {\n\n\t\tset: function ( value ) {\n\n\t\t\tthis.data.needsUpdate = value;\n\n\t\t}\n\n\t}\n\n} );\n\nObject.assign( InterleavedBufferAttribute.prototype, {\n\n\tisInterleavedBufferAttribute: true,\n\n\tapplyMatrix4: function ( m ) {\n\n\t\tfor ( let i = 0, l = this.data.count; i < l; i ++ ) {\n\n\t\t\t_vector$6.x = this.getX( i );\n\t\t\t_vector$6.y = this.getY( i );\n\t\t\t_vector$6.z = this.getZ( i );\n\n\t\t\t_vector$6.applyMatrix4( m );\n\n\t\t\tthis.setXYZ( i, _vector$6.x, _vector$6.y, _vector$6.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\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\tclone: function ( data ) {\n\n\t\tif ( data === undefined ) {\n\n\t\t\tconsole.log( 'THREE.InterleavedBufferAttribute.clone(): Cloning an interlaved buffer attribute will deinterleave buffer data.' );\n\n\t\t\tconst array = [];\n\n\t\t\tfor ( let i = 0; i < this.count; i ++ ) {\n\n\t\t\t\tconst index = i * this.data.stride + this.offset;\n\n\t\t\t\tfor ( let j = 0; j < this.itemSize; j ++ ) {\n\n\t\t\t\t\tarray.push( this.data.array[ index + j ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn new BufferAttribute( new this.array.constructor( array ), this.itemSize, this.normalized );\n\n\t\t} else {\n\n\t\t\tif ( data.interleavedBuffers === undefined ) {\n\n\t\t\t\tdata.interleavedBuffers = {};\n\n\t\t\t}\n\n\t\t\tif ( data.interleavedBuffers[ this.data.uuid ] === undefined ) {\n\n\t\t\t\tdata.interleavedBuffers[ this.data.uuid ] = this.data.clone( data );\n\n\t\t\t}\n\n\t\t\treturn new InterleavedBufferAttribute( data.interleavedBuffers[ this.data.uuid ], this.itemSize, this.offset, this.normalized );\n\n\t\t}\n\n\t},\n\n\ttoJSON: function ( data ) {\n\n\t\tif ( data === undefined ) {\n\n\t\t\tconsole.log( 'THREE.InterleavedBufferAttribute.toJSON(): Serializing an interlaved buffer attribute will deinterleave buffer data.' );\n\n\t\t\tconst array = [];\n\n\t\t\tfor ( let i = 0; i < this.count; i ++ ) {\n\n\t\t\t\tconst index = i * this.data.stride + this.offset;\n\n\t\t\t\tfor ( let j = 0; j < this.itemSize; j ++ ) {\n\n\t\t\t\t\tarray.push( this.data.array[ index + j ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// deinterleave data and save it as an ordinary buffer attribute for now\n\n\t\t\treturn {\n\t\t\t\titemSize: this.itemSize,\n\t\t\t\ttype: this.array.constructor.name,\n\t\t\t\tarray: array,\n\t\t\t\tnormalized: this.normalized\n\t\t\t};\n\n\t\t} else {\n\n\t\t\t// save as true interlaved attribtue\n\n\t\t\tif ( data.interleavedBuffers === undefined ) {\n\n\t\t\t\tdata.interleavedBuffers = {};\n\n\t\t\t}\n\n\t\t\tif ( data.interleavedBuffers[ this.data.uuid ] === undefined ) {\n\n\t\t\t\tdata.interleavedBuffers[ this.data.uuid ] = this.data.toJSON( data );\n\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tisInterleavedBufferAttribute: true,\n\t\t\t\titemSize: this.itemSize,\n\t\t\t\tdata: this.data.uuid,\n\t\t\t\toffset: this.offset,\n\t\t\t\tnormalized: this.normalized\n\t\t\t};\n\n\t\t}\n\n\t}\n\n} );\n\n/**\n * parameters = {\n * color: ,\n * map: new THREE.Texture( ),\n * alphaMap: new THREE.Texture( ),\n * rotation: ,\n * sizeAttenuation: \n * }\n */\n\nfunction SpriteMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'SpriteMaterial';\n\n\tthis.color = new Color( 0xffffff );\n\n\tthis.map = null;\n\n\tthis.alphaMap = null;\n\n\tthis.rotation = 0;\n\n\tthis.sizeAttenuation = true;\n\n\tthis.transparent = true;\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\n\tthis.map = source.map;\n\n\tthis.alphaMap = source.alphaMap;\n\n\tthis.rotation = source.rotation;\n\n\tthis.sizeAttenuation = source.sizeAttenuation;\n\n\treturn this;\n\n};\n\nlet _geometry;\n\nconst _intersectPoint = new Vector3();\nconst _worldScale = new Vector3();\nconst _mvPosition = new Vector3();\n\nconst _alignedPosition = new Vector2();\nconst _rotatedPosition = new Vector2();\nconst _viewWorldMatrix = new Matrix4();\n\nconst _vA$1 = new Vector3();\nconst _vB$1 = new Vector3();\nconst _vC$1 = new Vector3();\n\nconst _uvA$1 = new Vector2();\nconst _uvB$1 = new Vector2();\nconst _uvC$1 = new Vector2();\n\nfunction Sprite( material ) {\n\n\tObject3D.call( this );\n\n\tthis.type = 'Sprite';\n\n\tif ( _geometry === undefined ) {\n\n\t\t_geometry = new BufferGeometry();\n\n\t\tconst float32Array = new Float32Array( [\n\t\t\t- 0.5, - 0.5, 0, 0, 0,\n\t\t\t0.5, - 0.5, 0, 1, 0,\n\t\t\t0.5, 0.5, 0, 1, 1,\n\t\t\t- 0.5, 0.5, 0, 0, 1\n\t\t] );\n\n\t\tconst interleavedBuffer = new InterleavedBuffer( float32Array, 5 );\n\n\t\t_geometry.setIndex( [ 0, 1, 2,\t0, 2, 3 ] );\n\t\t_geometry.setAttribute( 'position', new InterleavedBufferAttribute( interleavedBuffer, 3, 0, false ) );\n\t\t_geometry.setAttribute( 'uv', new InterleavedBufferAttribute( interleavedBuffer, 2, 3, false ) );\n\n\t}\n\n\tthis.geometry = _geometry;\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 ( raycaster, intersects ) {\n\n\t\tif ( raycaster.camera === null ) {\n\n\t\t\tconsole.error( 'THREE.Sprite: \"Raycaster.camera\" needs to be set in order to raycast against sprites.' );\n\n\t\t}\n\n\t\t_worldScale.setFromMatrixScale( this.matrixWorld );\n\n\t\t_viewWorldMatrix.copy( raycaster.camera.matrixWorld );\n\t\tthis.modelViewMatrix.multiplyMatrices( raycaster.camera.matrixWorldInverse, this.matrixWorld );\n\n\t\t_mvPosition.setFromMatrixPosition( this.modelViewMatrix );\n\n\t\tif ( raycaster.camera.isPerspectiveCamera && this.material.sizeAttenuation === false ) {\n\n\t\t\t_worldScale.multiplyScalar( - _mvPosition.z );\n\n\t\t}\n\n\t\tconst rotation = this.material.rotation;\n\t\tlet sin, cos;\n\n\t\tif ( rotation !== 0 ) {\n\n\t\t\tcos = Math.cos( rotation );\n\t\t\tsin = Math.sin( rotation );\n\n\t\t}\n\n\t\tconst center = this.center;\n\n\t\ttransformVertex( _vA$1.set( - 0.5, - 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos );\n\t\ttransformVertex( _vB$1.set( 0.5, - 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos );\n\t\ttransformVertex( _vC$1.set( 0.5, 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos );\n\n\t\t_uvA$1.set( 0, 0 );\n\t\t_uvB$1.set( 1, 0 );\n\t\t_uvC$1.set( 1, 1 );\n\n\t\t// check first triangle\n\t\tlet intersect = raycaster.ray.intersectTriangle( _vA$1, _vB$1, _vC$1, false, _intersectPoint );\n\n\t\tif ( intersect === null ) {\n\n\t\t\t// check second triangle\n\t\t\ttransformVertex( _vB$1.set( - 0.5, 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos );\n\t\t\t_uvB$1.set( 0, 1 );\n\n\t\t\tintersect = raycaster.ray.intersectTriangle( _vA$1, _vC$1, _vB$1, false, _intersectPoint );\n\t\t\tif ( intersect === null ) {\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst distance = raycaster.ray.origin.distanceTo( _intersectPoint );\n\n\t\tif ( distance < raycaster.near || distance > raycaster.far ) return;\n\n\t\tintersects.push( {\n\n\t\t\tdistance: distance,\n\t\t\tpoint: _intersectPoint.clone(),\n\t\t\tuv: Triangle.getUV( _intersectPoint, _vA$1, _vB$1, _vC$1, _uvA$1, _uvB$1, _uvC$1, new Vector2() ),\n\t\t\tface: null,\n\t\t\tobject: this\n\n\t\t} );\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\tthis.material = source.material;\n\n\t\treturn this;\n\n\t}\n\n} );\n\nfunction transformVertex( vertexPosition, mvPosition, center, scale, sin, cos ) {\n\n\t// compute position in camera space\n\t_alignedPosition.subVectors( vertexPosition, center ).addScalar( 0.5 ).multiply( scale );\n\n\t// to check if rotation is not zero\n\tif ( sin !== undefined ) {\n\n\t\t_rotatedPosition.x = ( cos * _alignedPosition.x ) - ( sin * _alignedPosition.y );\n\t\t_rotatedPosition.y = ( sin * _alignedPosition.x ) + ( cos * _alignedPosition.y );\n\n\t} else {\n\n\t\t_rotatedPosition.copy( _alignedPosition );\n\n\t}\n\n\n\tvertexPosition.copy( mvPosition );\n\tvertexPosition.x += _rotatedPosition.x;\n\tvertexPosition.y += _rotatedPosition.y;\n\n\t// transform to world space\n\tvertexPosition.applyMatrix4( _viewWorldMatrix );\n\n}\n\nconst _v1$4 = new Vector3();\nconst _v2$2 = new Vector3();\n\nfunction LOD() {\n\n\tObject3D.call( this );\n\n\tthis._currentLevel = 0;\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\tthis.autoUpdate = true;\n\n}\n\nLOD.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: LOD,\n\n\tisLOD: true,\n\n\tcopy: function ( source ) {\n\n\t\tObject3D.prototype.copy.call( this, source, false );\n\n\t\tconst levels = source.levels;\n\n\t\tfor ( let i = 0, l = levels.length; i < l; i ++ ) {\n\n\t\t\tconst level = levels[ i ];\n\n\t\t\tthis.addLevel( level.object.clone(), level.distance );\n\n\t\t}\n\n\t\tthis.autoUpdate = source.autoUpdate;\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\tconst levels = this.levels;\n\n\t\tlet l;\n\n\t\tfor ( 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\treturn this;\n\n\t},\n\n\tgetCurrentLevel: function () {\n\n\t\treturn this._currentLevel;\n\n\t},\n\n\tgetObjectForDistance: function ( distance ) {\n\n\t\tconst levels = this.levels;\n\n\t\tif ( levels.length > 0 ) {\n\n\t\t\tlet i, l;\n\n\t\t\tfor ( i = 1, l = levels.length; i < l; i ++ ) {\n\n\t\t\t\tif ( distance < levels[ i ].distance ) {\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn levels[ i - 1 ].object;\n\n\t\t}\n\n\t\treturn null;\n\n\t},\n\n\traycast: function ( raycaster, intersects ) {\n\n\t\tconst levels = this.levels;\n\n\t\tif ( levels.length > 0 ) {\n\n\t\t\t_v1$4.setFromMatrixPosition( this.matrixWorld );\n\n\t\t\tconst distance = raycaster.ray.origin.distanceTo( _v1$4 );\n\n\t\t\tthis.getObjectForDistance( distance ).raycast( raycaster, intersects );\n\n\t\t}\n\n\t},\n\n\tupdate: function ( camera ) {\n\n\t\tconst levels = this.levels;\n\n\t\tif ( levels.length > 1 ) {\n\n\t\t\t_v1$4.setFromMatrixPosition( camera.matrixWorld );\n\t\t\t_v2$2.setFromMatrixPosition( this.matrixWorld );\n\n\t\t\tconst distance = _v1$4.distanceTo( _v2$2 ) / camera.zoom;\n\n\t\t\tlevels[ 0 ].object.visible = true;\n\n\t\t\tlet i, l;\n\n\t\t\tfor ( i = 1, l = levels.length; i < l; i ++ ) {\n\n\t\t\t\tif ( distance >= levels[ i ].distance ) {\n\n\t\t\t\t\tlevels[ i - 1 ].object.visible = false;\n\t\t\t\t\tlevels[ i ].object.visible = true;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis._currentLevel = i - 1;\n\n\t\t\tfor ( ; i < l; i ++ ) {\n\n\t\t\t\tlevels[ i ].object.visible = false;\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\tconst data = Object3D.prototype.toJSON.call( this, meta );\n\n\t\tif ( this.autoUpdate === false ) data.object.autoUpdate = false;\n\n\t\tdata.object.levels = [];\n\n\t\tconst levels = this.levels;\n\n\t\tfor ( let i = 0, l = levels.length; i < l; i ++ ) {\n\n\t\t\tconst 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\nfunction SkinnedMesh( geometry, material ) {\n\n\tif ( geometry && geometry.isGeometry ) {\n\n\t\tconsole.error( 'THREE.SkinnedMesh no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t}\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}\n\nSkinnedMesh.prototype = Object.assign( Object.create( Mesh.prototype ), {\n\n\tconstructor: SkinnedMesh,\n\n\tisSkinnedMesh: true,\n\n\tcopy: function ( source ) {\n\n\t\tMesh.prototype.copy.call( this, source );\n\n\t\tthis.bindMode = source.bindMode;\n\t\tthis.bindMatrix.copy( source.bindMatrix );\n\t\tthis.bindMatrixInverse.copy( source.bindMatrixInverse );\n\n\t\tthis.skeleton = source.skeleton;\n\n\t\treturn this;\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\tconst vector = new Vector4();\n\n\t\tconst skinWeight = this.geometry.attributes.skinWeight;\n\n\t\tfor ( let i = 0, l = skinWeight.count; i < l; i ++ ) {\n\n\t\t\tvector.x = skinWeight.getX( i );\n\t\t\tvector.y = skinWeight.getY( i );\n\t\t\tvector.z = skinWeight.getZ( i );\n\t\t\tvector.w = skinWeight.getW( i );\n\n\t\t\tconst scale = 1.0 / vector.manhattanLength();\n\n\t\t\tif ( scale !== Infinity ) {\n\n\t\t\t\tvector.multiplyScalar( scale );\n\n\t\t\t} else {\n\n\t\t\t\tvector.set( 1, 0, 0, 0 ); // do something reasonable\n\n\t\t\t}\n\n\t\t\tskinWeight.setXYZW( i, vector.x, vector.y, vector.z, vector.w );\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\tboneTransform: ( function () {\n\n\t\tconst basePosition = new Vector3();\n\n\t\tconst skinIndex = new Vector4();\n\t\tconst skinWeight = new Vector4();\n\n\t\tconst vector = new Vector3();\n\t\tconst matrix = new Matrix4();\n\n\t\treturn function ( index, target ) {\n\n\t\t\tconst skeleton = this.skeleton;\n\t\t\tconst geometry = this.geometry;\n\n\t\t\tskinIndex.fromBufferAttribute( geometry.attributes.skinIndex, index );\n\t\t\tskinWeight.fromBufferAttribute( geometry.attributes.skinWeight, index );\n\n\t\t\tbasePosition.fromBufferAttribute( geometry.attributes.position, index ).applyMatrix4( this.bindMatrix );\n\n\t\t\ttarget.set( 0, 0, 0 );\n\n\t\t\tfor ( let i = 0; i < 4; i ++ ) {\n\n\t\t\t\tconst weight = skinWeight.getComponent( i );\n\n\t\t\t\tif ( weight !== 0 ) {\n\n\t\t\t\t\tconst boneIndex = skinIndex.getComponent( i );\n\n\t\t\t\t\tmatrix.multiplyMatrices( skeleton.bones[ boneIndex ].matrixWorld, skeleton.boneInverses[ boneIndex ] );\n\n\t\t\t\t\ttarget.addScaledVector( vector.copy( basePosition ).applyMatrix4( matrix ), weight );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn target.applyMatrix4( this.bindMatrixInverse );\n\n\t\t};\n\n\t}() )\n\n} );\n\nconst _offsetMatrix = new Matrix4();\nconst _identityMatrix = new Matrix4();\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\tthis.frame = - 1;\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 ( let 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 ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tconst 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\t// recover the bind-time world matrices\n\n\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tconst bone = 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 ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tconst bone = 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\tconst bones = this.bones;\n\t\tconst boneInverses = this.boneInverses;\n\t\tconst boneMatrices = this.boneMatrices;\n\t\tconst boneTexture = this.boneTexture;\n\n\t\t// flatten bone matrices to array\n\n\t\tfor ( let i = 0, il = bones.length; i < il; i ++ ) {\n\n\t\t\t// compute the offset between the current and the original transform\n\n\t\t\tconst matrix = bones[ i ] ? bones[ i ].matrixWorld : _identityMatrix;\n\n\t\t\t_offsetMatrix.multiplyMatrices( matrix, boneInverses[ i ] );\n\t\t\t_offsetMatrix.toArray( boneMatrices, i * 16 );\n\n\t\t}\n\n\t\tif ( boneTexture !== undefined ) {\n\n\t\t\tboneTexture.needsUpdate = true;\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 ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tconst 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\tdispose: function ( ) {\n\n\t\tif ( this.boneTexture ) {\n\n\t\t\tthis.boneTexture.dispose();\n\n\t\t\tthis.boneTexture = undefined;\n\n\t\t}\n\n\t}\n\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\nconst _instanceLocalMatrix = new Matrix4();\nconst _instanceWorldMatrix = new Matrix4();\n\nconst _instanceIntersects = [];\n\nconst _mesh = new Mesh();\n\nfunction InstancedMesh( geometry, material, count ) {\n\n\tMesh.call( this, geometry, material );\n\n\tthis.instanceMatrix = new BufferAttribute( new Float32Array( count * 16 ), 16 );\n\n\tthis.count = count;\n\n\tthis.frustumCulled = false;\n\n}\n\nInstancedMesh.prototype = Object.assign( Object.create( Mesh.prototype ), {\n\n\tconstructor: InstancedMesh,\n\n\tisInstancedMesh: true,\n\n\tcopy: function ( source ) {\n\n\t\tMesh.prototype.copy.call( this, source );\n\n\t\tthis.instanceMatrix.copy( source.instanceMatrix );\n\t\tthis.count = source.count;\n\n\t\treturn this;\n\n\t},\n\n\tgetMatrixAt: function ( index, matrix ) {\n\n\t\tmatrix.fromArray( this.instanceMatrix.array, index * 16 );\n\n\t},\n\n\traycast: function ( raycaster, intersects ) {\n\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst raycastTimes = this.count;\n\n\t\t_mesh.geometry = this.geometry;\n\t\t_mesh.material = this.material;\n\n\t\tif ( _mesh.material === undefined ) return;\n\n\t\tfor ( let instanceId = 0; instanceId < raycastTimes; instanceId ++ ) {\n\n\t\t\t// calculate the world matrix for each instance\n\n\t\t\tthis.getMatrixAt( instanceId, _instanceLocalMatrix );\n\n\t\t\t_instanceWorldMatrix.multiplyMatrices( matrixWorld, _instanceLocalMatrix );\n\n\t\t\t// the mesh represents this single instance\n\n\t\t\t_mesh.matrixWorld = _instanceWorldMatrix;\n\n\t\t\t_mesh.raycast( raycaster, _instanceIntersects );\n\n\t\t\t// process the result of raycast\n\n\t\t\tfor ( let i = 0, l = _instanceIntersects.length; i < l; i ++ ) {\n\n\t\t\t\tconst intersect = _instanceIntersects[ i ];\n\t\t\t\tintersect.instanceId = instanceId;\n\t\t\t\tintersect.object = this;\n\t\t\t\tintersects.push( intersect );\n\n\t\t\t}\n\n\t\t\t_instanceIntersects.length = 0;\n\n\t\t}\n\n\t},\n\n\tsetMatrixAt: function ( index, matrix ) {\n\n\t\tmatrix.toArray( this.instanceMatrix.array, index * 16 );\n\n\t},\n\n\tupdateMorphTargets: function () {\n\n\t}\n\n} );\n\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.morphTargets = 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\tthis.morphTargets = source.morphTargets;\n\n\treturn this;\n\n};\n\nconst _start = new Vector3();\nconst _end = new Vector3();\nconst _inverseMatrix$1 = new Matrix4();\nconst _ray$1 = new Ray();\nconst _sphere$2 = new Sphere();\n\nfunction Line( geometry, material, mode ) {\n\n\tif ( mode === 1 ) {\n\n\t\tconsole.error( 'THREE.Line: parameter THREE.LinePieces no longer supported. Use THREE.LineSegments instead.' );\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();\n\n\tthis.updateMorphTargets();\n\n}\n\nLine.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Line,\n\n\tisLine: true,\n\n\tcopy: function ( source ) {\n\n\t\tObject3D.prototype.copy.call( this, source );\n\n\t\tthis.material = source.material;\n\t\tthis.geometry = source.geometry;\n\n\t\treturn this;\n\n\t},\n\n\tcomputeLineDistances: function () {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\t// we assume non-indexed geometry\n\n\t\t\tif ( geometry.index === null ) {\n\n\t\t\t\tconst positionAttribute = geometry.attributes.position;\n\t\t\t\tconst lineDistances = [ 0 ];\n\n\t\t\t\tfor ( let i = 1, l = positionAttribute.count; i < l; i ++ ) {\n\n\t\t\t\t\t_start.fromBufferAttribute( positionAttribute, i - 1 );\n\t\t\t\t\t_end.fromBufferAttribute( positionAttribute, i );\n\n\t\t\t\t\tlineDistances[ i ] = lineDistances[ i - 1 ];\n\t\t\t\t\tlineDistances[ i ] += _start.distanceTo( _end );\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.setAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' );\n\n\t\t\t}\n\n\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\tconst vertices = geometry.vertices;\n\t\t\tconst lineDistances = geometry.lineDistances;\n\n\t\t\tlineDistances[ 0 ] = 0;\n\n\t\t\tfor ( let i = 1, l = vertices.length; i < l; i ++ ) {\n\n\t\t\t\tlineDistances[ i ] = lineDistances[ i - 1 ];\n\t\t\t\tlineDistances[ i ] += vertices[ i - 1 ].distanceTo( vertices[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\traycast: function ( raycaster, intersects ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst threshold = raycaster.params.Line.threshold;\n\n\t\t// Checking boundingSphere distance to ray\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere$2.copy( geometry.boundingSphere );\n\t\t_sphere$2.applyMatrix4( matrixWorld );\n\t\t_sphere$2.radius += threshold;\n\n\t\tif ( raycaster.ray.intersectsSphere( _sphere$2 ) === false ) return;\n\n\t\t//\n\n\t\t_inverseMatrix$1.getInverse( matrixWorld );\n\t\t_ray$1.copy( raycaster.ray ).applyMatrix4( _inverseMatrix$1 );\n\n\t\tconst localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 );\n\t\tconst localThresholdSq = localThreshold * localThreshold;\n\n\t\tconst vStart = new Vector3();\n\t\tconst vEnd = new Vector3();\n\t\tconst interSegment = new Vector3();\n\t\tconst interRay = new Vector3();\n\t\tconst step = ( this && this.isLineSegments ) ? 2 : 1;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tconst index = geometry.index;\n\t\t\tconst attributes = geometry.attributes;\n\t\t\tconst positions = attributes.position.array;\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\tconst indices = index.array;\n\n\t\t\t\tfor ( let i = 0, l = indices.length - 1; i < l; i += step ) {\n\n\t\t\t\t\tconst a = indices[ i ];\n\t\t\t\t\tconst b = indices[ i + 1 ];\n\n\t\t\t\t\tvStart.fromArray( positions, a * 3 );\n\t\t\t\t\tvEnd.fromArray( positions, b * 3 );\n\n\t\t\t\t\tconst distSq = _ray$1.distanceSqToSegment( vStart, vEnd, interRay, interSegment );\n\n\t\t\t\t\tif ( distSq > localThresholdSq ) 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\tconst 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} else {\n\n\t\t\t\tfor ( let i = 0, l = positions.length / 3 - 1; i < l; i += step ) {\n\n\t\t\t\t\tvStart.fromArray( positions, 3 * i );\n\t\t\t\t\tvEnd.fromArray( positions, 3 * i + 3 );\n\n\t\t\t\t\tconst distSq = _ray$1.distanceSqToSegment( vStart, vEnd, interRay, interSegment );\n\n\t\t\t\t\tif ( distSq > localThresholdSq ) 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\tconst 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} else if ( geometry.isGeometry ) {\n\n\t\t\tconst vertices = geometry.vertices;\n\t\t\tconst nbVertices = vertices.length;\n\n\t\t\tfor ( let i = 0; i < nbVertices - 1; i += step ) {\n\n\t\t\t\tconst distSq = _ray$1.distanceSqToSegment( vertices[ i ], vertices[ i + 1 ], interRay, interSegment );\n\n\t\t\t\tif ( distSq > localThresholdSq ) continue;\n\n\t\t\t\tinterRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation\n\n\t\t\t\tconst distance = raycaster.ray.origin.distanceTo( interRay );\n\n\t\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) continue;\n\n\t\t\t\tintersects.push( {\n\n\t\t\t\t\tdistance: distance,\n\t\t\t\t\t// What do we want? intersection point on the ray or on the segment??\n\t\t\t\t\t// point: raycaster.ray.at( distance ),\n\t\t\t\t\tpoint: interSegment.clone().applyMatrix4( this.matrixWorld ),\n\t\t\t\t\tindex: i,\n\t\t\t\t\tface: null,\n\t\t\t\t\tfaceIndex: null,\n\t\t\t\t\tobject: this\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\tupdateMorphTargets: function () {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tconst morphAttributes = geometry.morphAttributes;\n\t\t\tconst keys = Object.keys( morphAttributes );\n\n\t\t\tif ( keys.length > 0 ) {\n\n\t\t\t\tconst 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 ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) {\n\n\t\t\t\t\t\tconst name = 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\tconst morphTargets = geometry.morphTargets;\n\n\t\t\tif ( morphTargets !== undefined && morphTargets.length > 0 ) {\n\n\t\t\t\tconsole.error( 'THREE.Line.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n} );\n\nconst _start$1 = new Vector3();\nconst _end$1 = new Vector3();\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\tconst geometry = this.geometry;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\t// we assume non-indexed geometry\n\n\t\t\tif ( geometry.index === null ) {\n\n\t\t\t\tconst positionAttribute = geometry.attributes.position;\n\t\t\t\tconst lineDistances = [];\n\n\t\t\t\tfor ( let i = 0, l = positionAttribute.count; i < l; i += 2 ) {\n\n\t\t\t\t\t_start$1.fromBufferAttribute( positionAttribute, i );\n\t\t\t\t\t_end$1.fromBufferAttribute( positionAttribute, 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$1.distanceTo( _end$1 );\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.setAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' );\n\n\t\t\t}\n\n\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\tconst vertices = geometry.vertices;\n\t\t\tconst lineDistances = geometry.lineDistances;\n\n\t\t\tfor ( let i = 0, l = vertices.length; i < l; i += 2 ) {\n\n\t\t\t\t_start$1.copy( vertices[ i ] );\n\t\t\t\t_end$1.copy( vertices[ i + 1 ] );\n\n\t\t\t\tlineDistances[ i ] = ( i === 0 ) ? 0 : lineDistances[ i - 1 ];\n\t\t\t\tlineDistances[ i + 1 ] = lineDistances[ i ] + _start$1.distanceTo( _end$1 );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\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 * parameters = {\n * color: ,\n * opacity: ,\n * map: new THREE.Texture( ),\n * alphaMap: new THREE.Texture( ),\n *\n * size: ,\n * sizeAttenuation: \n *\n * morphTargets: \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.alphaMap = null;\n\n\tthis.size = 1;\n\tthis.sizeAttenuation = true;\n\n\tthis.morphTargets = 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.alphaMap = source.alphaMap;\n\n\tthis.size = source.size;\n\tthis.sizeAttenuation = source.sizeAttenuation;\n\n\tthis.morphTargets = source.morphTargets;\n\n\treturn this;\n\n};\n\nconst _inverseMatrix$2 = new Matrix4();\nconst _ray$2 = new Ray();\nconst _sphere$3 = new Sphere();\nconst _position$1 = new Vector3();\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();\n\n\tthis.updateMorphTargets();\n\n}\n\nPoints.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Points,\n\n\tisPoints: true,\n\n\tcopy: function ( source ) {\n\n\t\tObject3D.prototype.copy.call( this, source );\n\n\t\tthis.material = source.material;\n\t\tthis.geometry = source.geometry;\n\n\t\treturn this;\n\n\t},\n\n\traycast: function ( raycaster, intersects ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst threshold = raycaster.params.Points.threshold;\n\n\t\t// Checking boundingSphere distance to ray\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere$3.copy( geometry.boundingSphere );\n\t\t_sphere$3.applyMatrix4( matrixWorld );\n\t\t_sphere$3.radius += threshold;\n\n\t\tif ( raycaster.ray.intersectsSphere( _sphere$3 ) === false ) return;\n\n\t\t//\n\n\t\t_inverseMatrix$2.getInverse( matrixWorld );\n\t\t_ray$2.copy( raycaster.ray ).applyMatrix4( _inverseMatrix$2 );\n\n\t\tconst localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 );\n\t\tconst localThresholdSq = localThreshold * localThreshold;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tconst index = geometry.index;\n\t\t\tconst attributes = geometry.attributes;\n\t\t\tconst positions = attributes.position.array;\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\tconst indices = index.array;\n\n\t\t\t\tfor ( let i = 0, il = indices.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst a = indices[ i ];\n\n\t\t\t\t\t_position$1.fromArray( positions, a * 3 );\n\n\t\t\t\t\ttestPoint( _position$1, a, localThresholdSq, matrixWorld, raycaster, intersects, this );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tfor ( let i = 0, l = positions.length / 3; i < l; i ++ ) {\n\n\t\t\t\t\t_position$1.fromArray( positions, i * 3 );\n\n\t\t\t\t\ttestPoint( _position$1, i, localThresholdSq, matrixWorld, raycaster, intersects, this );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst vertices = geometry.vertices;\n\n\t\t\tfor ( let i = 0, l = vertices.length; i < l; i ++ ) {\n\n\t\t\t\ttestPoint( vertices[ i ], i, localThresholdSq, matrixWorld, raycaster, intersects, this );\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\tupdateMorphTargets: function () {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tconst morphAttributes = geometry.morphAttributes;\n\t\t\tconst keys = Object.keys( morphAttributes );\n\n\t\t\tif ( keys.length > 0 ) {\n\n\t\t\t\tconst 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 ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) {\n\n\t\t\t\t\t\tconst name = 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\tconst morphTargets = geometry.morphTargets;\n\n\t\t\tif ( morphTargets !== undefined && morphTargets.length > 0 ) {\n\n\t\t\t\tconsole.error( 'THREE.Points.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n} );\n\nfunction testPoint( point, index, localThresholdSq, matrixWorld, raycaster, intersects, object ) {\n\n\tconst rayPointDistanceSq = _ray$2.distanceSqToPoint( point );\n\n\tif ( rayPointDistanceSq < localThresholdSq ) {\n\n\t\tconst intersectPoint = new Vector3();\n\n\t\t_ray$2.closestPointToPoint( point, intersectPoint );\n\t\tintersectPoint.applyMatrix4( matrixWorld );\n\n\t\tconst distance = raycaster.ray.origin.distanceTo( intersectPoint );\n\n\t\tif ( distance < raycaster.near || distance > raycaster.far ) return;\n\n\t\tintersects.push( {\n\n\t\t\tdistance: distance,\n\t\t\tdistanceToRay: Math.sqrt( rayPointDistanceSq ),\n\t\t\tpoint: intersectPoint,\n\t\t\tindex: index,\n\t\t\tface: null,\n\t\t\tobject: object\n\n\t\t} );\n\n\t}\n\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.format = format !== undefined ? format : RGBFormat;\n\n\tthis.minFilter = minFilter !== undefined ? minFilter : LinearFilter;\n\tthis.magFilter = magFilter !== undefined ? magFilter : LinearFilter;\n\n\tthis.generateMipmaps = false;\n\n\tconst scope = this;\n\n\tfunction updateVideo() {\n\n\t\tscope.needsUpdate = true;\n\t\tvideo.requestVideoFrameCallback( updateVideo );\n\n\t}\n\n\tif ( 'requestVideoFrameCallback' in video ) {\n\n\t\tvideo.requestVideoFrameCallback( updateVideo );\n\n\t}\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\tconst video = this.image;\n\t\tconst hasVideoFrameCallback = 'requestVideoFrameCallback' in video;\n\n\t\tif ( hasVideoFrameCallback === false && video.readyState >= video.HAVE_CURRENT_DATA ) {\n\n\t\t\tthis.needsUpdate = true;\n\n\t\t}\n\n\t}\n\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\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;\nCanvasTexture.prototype.isCanvasTexture = true;\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\nfunction WireframeGeometry( geometry ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'WireframeGeometry';\n\n\t// buffer\n\n\tconst vertices = [];\n\n\t// helper variables\n\n\tconst edge = [ 0, 0 ], edges = {};\n\tconst keys = [ 'a', 'b', 'c' ];\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\tconst faces = geometry.faces;\n\n\t\tfor ( let i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\t\tconst face = faces[ i ];\n\n\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\tconst edge1 = face[ keys[ j ] ];\n\t\t\t\tconst edge2 = 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\tconst key = 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 ( const key in edges ) {\n\n\t\t\tconst e = edges[ key ];\n\n\t\t\tlet vertex = 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\tlet vertex = new Vector3();\n\n\t\tif ( geometry.index !== null ) {\n\n\t\t\t// indexed BufferGeometry\n\n\t\t\tconst position = geometry.attributes.position;\n\t\t\tconst indices = geometry.index;\n\t\t\tlet groups = 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 ( let o = 0, ol = groups.length; o < ol; ++ o ) {\n\n\t\t\t\tconst group = groups[ o ];\n\n\t\t\t\tconst start = group.start;\n\t\t\t\tconst count = group.count;\n\n\t\t\t\tfor ( let i = start, l = ( start + count ); i < l; i += 3 ) {\n\n\t\t\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\t\tconst edge1 = indices.getX( i + j );\n\t\t\t\t\t\tconst edge2 = 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\tconst key = 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 ( const key in edges ) {\n\n\t\t\t\tconst e = 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\tconst position = geometry.attributes.position;\n\n\t\t\tfor ( let i = 0, l = ( position.count / 3 ); i < l; i ++ ) {\n\n\t\t\t\tfor ( let 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\tconst index1 = 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\tconst index2 = 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.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\n}\n\nWireframeGeometry.prototype = Object.create( BufferGeometry.prototype );\nWireframeGeometry.prototype.constructor = WireframeGeometry;\n\n/**\n * Parametric Surfaces Geometry\n * based on the brilliant article by @prideout https://prideout.net/blog/old/blog/index.html@p=44.html\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\tconst indices = [];\n\tconst vertices = [];\n\tconst normals = [];\n\tconst uvs = [];\n\n\tconst EPS = 0.00001;\n\n\tconst normal = new Vector3();\n\n\tconst p0 = new Vector3(), p1 = new Vector3();\n\tconst pu = new Vector3(), pv = new Vector3();\n\n\tif ( func.length < 3 ) {\n\n\t\tconsole.error( 'THREE.ParametricGeometry: Function must now modify a Vector3 as third parameter.' );\n\n\t}\n\n\t// generate vertices, normals and uvs\n\n\tconst sliceCount = slices + 1;\n\n\tfor ( let i = 0; i <= stacks; i ++ ) {\n\n\t\tconst v = i / stacks;\n\n\t\tfor ( let j = 0; j <= slices; j ++ ) {\n\n\t\t\tconst 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 ( let i = 0; i < stacks; i ++ ) {\n\n\t\tfor ( let j = 0; j < slices; j ++ ) {\n\n\t\t\tconst a = i * sliceCount + j;\n\t\t\tconst b = i * sliceCount + j + 1;\n\t\t\tconst c = ( i + 1 ) * sliceCount + j + 1;\n\t\t\tconst 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.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n}\n\nParametricBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nParametricBufferGeometry.prototype.constructor = ParametricBufferGeometry;\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\tconst vertexBuffer = [];\n\tconst 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\tapplyRadius( radius );\n\n\t// finally, create the uv data\n\n\tgenerateUVs();\n\n\t// build non-indexed geometry\n\n\tthis.setAttribute( 'position', new Float32BufferAttribute( vertexBuffer, 3 ) );\n\tthis.setAttribute( 'normal', new Float32BufferAttribute( vertexBuffer.slice(), 3 ) );\n\tthis.setAttribute( '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\tconst a = new Vector3();\n\t\tconst b = new Vector3();\n\t\tconst c = new Vector3();\n\n\t\t// iterate over all faces and apply a subdivison with the given detail value\n\n\t\tfor ( let 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\tconst 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\tconst v = [];\n\n\t\t// construct all of the vertices for this subdivision\n\n\t\tfor ( let i = 0; i <= cols; i ++ ) {\n\n\t\t\tv[ i ] = [];\n\n\t\t\tconst aj = a.clone().lerp( c, i / cols );\n\t\t\tconst bj = b.clone().lerp( c, i / cols );\n\n\t\t\tconst rows = cols - i;\n\n\t\t\tfor ( let 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 ( let i = 0; i < cols; i ++ ) {\n\n\t\t\tfor ( let j = 0; j < 2 * ( cols - i ) - 1; j ++ ) {\n\n\t\t\t\tconst 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 applyRadius( radius ) {\n\n\t\tconst vertex = new Vector3();\n\n\t\t// iterate over the entire buffer and apply the radius to each vertex\n\n\t\tfor ( let 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\tconst vertex = new Vector3();\n\n\t\tfor ( let 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\tconst u = azimuth( vertex ) / 2 / Math.PI + 0.5;\n\t\t\tconst 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 ( let i = 0; i < uvBuffer.length; i += 6 ) {\n\n\t\t\t// uv data of a single face\n\n\t\t\tconst x0 = uvBuffer[ i + 0 ];\n\t\t\tconst x1 = uvBuffer[ i + 2 ];\n\t\t\tconst x2 = uvBuffer[ i + 4 ];\n\n\t\t\tconst max = Math.max( x0, x1, x2 );\n\t\t\tconst 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\tconst 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\tconst a = new Vector3();\n\t\tconst b = new Vector3();\n\t\tconst c = new Vector3();\n\n\t\tconst centroid = new Vector3();\n\n\t\tconst uvA = new Vector2();\n\t\tconst uvB = new Vector2();\n\t\tconst uvC = new Vector2();\n\n\t\tfor ( let 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\tconst 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// 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\tconst vertices = [\n\t\t1, 1, 1, \t- 1, - 1, 1, \t- 1, 1, - 1, \t1, - 1, - 1\n\t];\n\n\tconst 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// 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\tconst 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\tconst 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// 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\tconst t = ( 1 + Math.sqrt( 5 ) ) / 2;\n\n\tconst 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\tconst 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// 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\tconst t = ( 1 + Math.sqrt( 5 ) ) / 2;\n\tconst r = 1 / t;\n\n\tconst 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\tconst 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// 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\tconst 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\tconst 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\tconst vertex = new Vector3();\n\tconst normal = new Vector3();\n\tconst uv = new Vector2();\n\tlet P = new Vector3();\n\n\t// buffer\n\n\tconst vertices = [];\n\tconst normals = [];\n\tconst uvs = [];\n\tconst indices = [];\n\n\t// create buffer data\n\n\tgenerateBufferData();\n\n\t// build geometry\n\n\tthis.setIndex( indices );\n\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t// functions\n\n\tfunction generateBufferData() {\n\n\t\tfor ( let 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\tconst N = frames.normals[ i ];\n\t\tconst B = frames.binormals[ i ];\n\n\t\t// generate normals and vertices for the current segment\n\n\t\tfor ( let j = 0; j <= radialSegments; j ++ ) {\n\n\t\t\tconst v = j / radialSegments * Math.PI * 2;\n\n\t\t\tconst sin = Math.sin( v );\n\t\t\tconst 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 ( let j = 1; j <= tubularSegments; j ++ ) {\n\n\t\t\tfor ( let i = 1; i <= radialSegments; i ++ ) {\n\n\t\t\t\tconst a = ( radialSegments + 1 ) * ( j - 1 ) + ( i - 1 );\n\t\t\t\tconst b = ( radialSegments + 1 ) * j + ( i - 1 );\n\t\t\t\tconst c = ( radialSegments + 1 ) * j + i;\n\t\t\t\tconst 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 ( let i = 0; i <= tubularSegments; i ++ ) {\n\n\t\t\tfor ( let 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\nTubeBufferGeometry.prototype.toJSON = function () {\n\n\tconst data = BufferGeometry.prototype.toJSON.call( this );\n\n\tdata.path = this.parameters.path.toJSON();\n\n\treturn data;\n\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\tconst indices = [];\n\tconst vertices = [];\n\tconst normals = [];\n\tconst uvs = [];\n\n\t// helper variables\n\n\tconst vertex = new Vector3();\n\tconst normal = new Vector3();\n\n\tconst P1 = new Vector3();\n\tconst P2 = new Vector3();\n\n\tconst B = new Vector3();\n\tconst T = new Vector3();\n\tconst N = new Vector3();\n\n\t// generate vertices, normals and uvs\n\n\tfor ( let 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\tconst 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 ( let 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\tconst v = j / radialSegments * Math.PI * 2;\n\t\t\tconst cx = - tube * Math.cos( v );\n\t\t\tconst 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 ( let j = 1; j <= tubularSegments; j ++ ) {\n\n\t\tfor ( let i = 1; i <= radialSegments; i ++ ) {\n\n\t\t\t// indices\n\n\t\t\tconst a = ( radialSegments + 1 ) * ( j - 1 ) + ( i - 1 );\n\t\t\tconst b = ( radialSegments + 1 ) * j + ( i - 1 );\n\t\t\tconst c = ( radialSegments + 1 ) * j + i;\n\t\t\tconst 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.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\tthis.setAttribute( '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\tconst cu = Math.cos( u );\n\t\tconst su = Math.sin( u );\n\t\tconst quOverP = q / p * u;\n\t\tconst 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// 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\tconst indices = [];\n\tconst vertices = [];\n\tconst normals = [];\n\tconst uvs = [];\n\n\t// helper variables\n\n\tconst center = new Vector3();\n\tconst vertex = new Vector3();\n\tconst normal = new Vector3();\n\n\t// generate vertices, normals and uvs\n\n\tfor ( let j = 0; j <= radialSegments; j ++ ) {\n\n\t\tfor ( let i = 0; i <= tubularSegments; i ++ ) {\n\n\t\t\tconst u = i / tubularSegments * arc;\n\t\t\tconst 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 ( let j = 1; j <= radialSegments; j ++ ) {\n\n\t\tfor ( let i = 1; i <= tubularSegments; i ++ ) {\n\n\t\t\t// indices\n\n\t\t\tconst a = ( tubularSegments + 1 ) * j + i - 1;\n\t\t\tconst b = ( tubularSegments + 1 ) * ( j - 1 ) + i - 1;\n\t\t\tconst c = ( tubularSegments + 1 ) * ( j - 1 ) + i;\n\t\t\tconst 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.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n}\n\nTorusBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nTorusBufferGeometry.prototype.constructor = TorusBufferGeometry;\n\n/**\n * Port from https://github.com/mapbox/earcut (v2.2.2)\n */\n\nconst Earcut = {\n\n\ttriangulate: function ( data, holeIndices, dim ) {\n\n\t\tdim = dim || 2;\n\n\t\tlet 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 || outerNode.next === outerNode.prev ) return triangles;\n\n\t\tlet 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\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 ( let 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\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\nfunction linkedList( data, start, end, dim, clockwise ) {\n\n\tlet 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\nfunction filterPoints( start, end ) {\n\n\tif ( ! start ) return start;\n\tif ( ! end ) end = start;\n\n\tlet p = start,\n\t\tagain;\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)\nfunction earcutLinked( ear, triangles, dim, minX, minY, invSize, pass ) {\n\n\tif ( ! ear ) return;\n\n\t// interlink polygon nodes in z-order\n\tif ( ! pass && invSize ) indexCurve( ear, minX, minY, invSize );\n\n\tlet stop = ear,\n\t\tprev, next;\n\n\t// iterate through ears, slicing them one by one\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 vertex 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\t\tif ( ear === stop ) {\n\n\t\t\t// try filtering points and slicing again\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( filterPoints( ear ), triangles, dim );\n\t\t\t\tearcutLinked( ear, triangles, dim, minX, minY, invSize, 2 );\n\n\t\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\nfunction isEar( ear ) {\n\n\tlet 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\tlet 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 ) &&\n\t\t\tarea( p.prev, p, p.next ) >= 0 ) return false;\n\t\tp = p.next;\n\n\t}\n\n\treturn true;\n\n}\n\nfunction isEarHashed( ear, minX, minY, invSize ) {\n\n\tlet 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\tlet 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\tlet minZ = zOrder( minTX, minTY, minX, minY, invSize ),\n\t\tmaxZ = zOrder( maxTX, maxTY, minX, minY, invSize );\n\n\tlet p = ear.prevZ,\n\t\tn = ear.nextZ;\n\n\t// look for points inside the triangle in both directions\n\twhile ( p && p.z >= minZ && n && n.z <= maxZ ) {\n\n\t\tif ( p !== ear.prev && p !== ear.next &&\n\t\t\tpointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y ) &&\n\t\t\tarea( p.prev, p, p.next ) >= 0 ) return false;\n\t\tp = p.prevZ;\n\n\t\tif ( n !== ear.prev && n !== ear.next &&\n\t\t\tpointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y ) &&\n\t\t\tarea( n.prev, n, n.next ) >= 0 ) return false;\n\t\tn = n.nextZ;\n\n\t}\n\n\t// look for remaining points in decreasing z-order\n\twhile ( p && p.z >= minZ ) {\n\n\t\tif ( p !== ear.prev && p !== ear.next &&\n\t\t\tpointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y ) &&\n\t\t\tarea( p.prev, p, p.next ) >= 0 ) return false;\n\t\tp = p.prevZ;\n\n\t}\n\n\t// look for remaining points in increasing z-order\n\twhile ( n && n.z <= maxZ ) {\n\n\t\tif ( n !== ear.prev && n !== ear.next &&\n\t\t\tpointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y ) &&\n\t\t\tarea( n.prev, n, n.next ) >= 0 ) return false;\n\t\tn = n.nextZ;\n\n\t}\n\n\treturn true;\n\n}\n\n// go through all polygon nodes and cure small local self-intersections\nfunction cureLocalIntersections( start, triangles, dim ) {\n\n\tlet p = start;\n\tdo {\n\n\t\tlet a = p.prev,\n\t\t\tb = 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\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 filterPoints( p );\n\n}\n\n// try splitting polygon into two and triangulate them independently\nfunction splitEarcut( start, triangles, dim, minX, minY, invSize ) {\n\n\t// look for a valid diagonal that divides the polygon into two\n\tlet a = start;\n\tdo {\n\n\t\tlet b = a.next.next;\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\t\t\t\tlet c = splitPolygon( a, b );\n\n\t\t\t\t// filter colinear points around the cuts\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\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\nfunction eliminateHoles( data, holeIndices, outerNode, dim ) {\n\n\tlet queue = [],\n\t\ti, 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\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\nfunction eliminateHole( hole, outerNode ) {\n\n\touterNode = findHoleBridge( hole, outerNode );\n\tif ( outerNode ) {\n\n\t\tconst b = splitPolygon( outerNode, hole );\n\n\t\t// filter collinear points around the cuts\n\t\tfilterPoints( outerNode, outerNode.next );\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\nfunction findHoleBridge( hole, outerNode ) {\n\n\tlet 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\tdo {\n\n\t\tif ( hy <= p.y && hy >= p.next.y && p.next.y !== p.y ) {\n\n\t\t\tlet x = p.x + ( hy - p.y ) * ( p.next.x - p.x ) / ( p.next.y - p.y );\n\t\t\tif ( x <= hx && x > qx ) {\n\n\t\t\t\tqx = x;\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; // hole touches outer segment; pick leftmost 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\tlet stop = m,\n\t\tmx = m.x,\n\t\tmy = m.y,\n\t\ttanMin = Infinity,\n\t\ttan;\n\n\tp = m;\n\n\tdo {\n\n\t\tif ( hx >= p.x && p.x >= mx && hx !== p.x &&\n\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 ( locallyInside( p, hole ) && ( tan < tanMin || ( tan === tanMin && ( p.x > m.x || ( p.x === m.x && sectorContainsSector( m, p ) ) ) ) ) ) {\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} while ( p !== stop );\n\n\treturn m;\n\n}\n\n// whether sector in vertex m contains sector in vertex p in the same coordinates\nfunction sectorContainsSector( m, p ) {\n\n\treturn area( m.prev, m, p.prev ) < 0 && area( p.next, m, m.next ) < 0;\n\n}\n\n// interlink polygon nodes in z-order\nfunction indexCurve( start, minX, minY, invSize ) {\n\n\tlet p = start;\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\nfunction sortLinked( list ) {\n\n\tlet i, p, q, e, tail, numMerges, pSize, qSize,\n\t\tinSize = 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\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\nfunction zOrder( x, y, minX, minY, invSize ) {\n\n\t// coords are transformed into non-negative 15-bit integer range\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\nfunction getLeftmost( start ) {\n\n\tlet p = start,\n\t\tleftmost = start;\n\tdo {\n\n\t\tif ( p.x < leftmost.x || ( p.x === leftmost.x && p.y < leftmost.y ) ) 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\nfunction pointInTriangle( ax, ay, bx, by, cx, cy, px, py ) {\n\n\treturn ( cx - px ) * ( ay - py ) - ( ax - px ) * ( cy - py ) >= 0 &&\n\t\t\t( ax - px ) * ( by - py ) - ( bx - px ) * ( ay - py ) >= 0 &&\n\t\t\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)\nfunction isValidDiagonal( a, b ) {\n\n\treturn a.next.i !== b.i && a.prev.i !== b.i && ! intersectsPolygon( a, b ) && // dones't intersect other edges\n\t\t( locallyInside( a, b ) && locallyInside( b, a ) && middleInside( a, b ) && // locally visible\n\t\t( area( a.prev, a, b.prev ) || area( a, b.prev, b ) ) || // does not create opposite-facing sectors\n\t\tequals( a, b ) && area( a.prev, a, a.next ) > 0 && area( b.prev, b, b.next ) > 0 ); // special zero-length case\n\n}\n\n// signed area of a triangle\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\nfunction equals( p1, p2 ) {\n\n\treturn p1.x === p2.x && p1.y === p2.y;\n\n}\n\n// check if two segments intersect\nfunction intersects( p1, q1, p2, q2 ) {\n\n\tconst o1 = sign( area( p1, q1, p2 ) );\n\tconst o2 = sign( area( p1, q1, q2 ) );\n\tconst o3 = sign( area( p2, q2, p1 ) );\n\tconst o4 = sign( area( p2, q2, q1 ) );\n\n\tif ( o1 !== o2 && o3 !== o4 ) return true; // general case\n\n\tif ( o1 === 0 && onSegment( p1, p2, q1 ) ) return true; // p1, q1 and p2 are collinear and p2 lies on p1q1\n\tif ( o2 === 0 && onSegment( p1, q2, q1 ) ) return true; // p1, q1 and q2 are collinear and q2 lies on p1q1\n\tif ( o3 === 0 && onSegment( p2, p1, q2 ) ) return true; // p2, q2 and p1 are collinear and p1 lies on p2q2\n\tif ( o4 === 0 && onSegment( p2, q1, q2 ) ) return true; // p2, q2 and q1 are collinear and q1 lies on p2q2\n\n\treturn false;\n\n}\n\n// for collinear points p, q, r, check if point q lies on segment pr\nfunction onSegment( p, q, r ) {\n\n\treturn q.x <= Math.max( p.x, r.x ) && q.x >= Math.min( p.x, r.x ) && q.y <= Math.max( p.y, r.y ) && q.y >= Math.min( p.y, r.y );\n\n}\n\nfunction sign( num ) {\n\n\treturn num > 0 ? 1 : num < 0 ? - 1 : 0;\n\n}\n\n// check if a polygon diagonal intersects any polygon segments\nfunction intersectsPolygon( a, b ) {\n\n\tlet p = a;\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\tintersects( p, p.next, a, b ) ) return true;\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\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\nfunction middleInside( a, b ) {\n\n\tlet p = a,\n\t\tinside = false,\n\t\tpx = ( a.x + b.x ) / 2,\n\t\tpy = ( a.y + b.y ) / 2;\n\tdo {\n\n\t\tif ( ( ( p.y > py ) !== ( p.next.y > py ) ) && p.next.y !== p.y &&\n\t\t\t\t( px < ( p.next.x - p.x ) * ( py - p.y ) / ( p.next.y - p.y ) + p.x ) )\n\t\t\tinside = ! inside;\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\nfunction splitPolygon( a, b ) {\n\n\tlet 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)\nfunction insertNode( i, x, y, last ) {\n\n\tconst 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// vertex 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 vertex 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\tlet sum = 0;\n\tfor ( let 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\nconst ShapeUtils = {\n\n\t// calculate area of the contour polygon\n\n\tarea: function ( contour ) {\n\n\t\tconst n = contour.length;\n\t\tlet a = 0.0;\n\n\t\tfor ( let 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\tconst vertices = []; // flat array of vertices like [ x0,y0, x1,y1, x2,y2, ... ]\n\t\tconst holeIndices = []; // array of hole indices\n\t\tconst 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\tlet holeIndex = contour.length;\n\n\t\tholes.forEach( removeDupEndPts );\n\n\t\tfor ( let 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\tconst triangles = Earcut.triangulate( vertices, holeIndices );\n\n\t\t//\n\n\t\tfor ( let 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\tconst 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 ( let 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 * 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 * depth: , // 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 (including bevelOffset) is bevel\n * bevelOffset: , // how far from shape outline does bevel start\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\nExtrudeGeometry.prototype.toJSON = function () {\n\n\tconst data = Geometry.prototype.toJSON.call( this );\n\n\tconst shapes = this.parameters.shapes;\n\tconst options = this.parameters.options;\n\n\treturn toJSON( shapes, options, data );\n\n};\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\tconst scope = this;\n\n\tconst verticesArray = [];\n\tconst uvArray = [];\n\n\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\tconst shape = shapes[ i ];\n\t\taddShape( shape );\n\n\t}\n\n\t// build geometry\n\n\tthis.setAttribute( 'position', new Float32BufferAttribute( verticesArray, 3 ) );\n\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvArray, 2 ) );\n\n\tthis.computeVertexNormals();\n\n\t// functions\n\n\tfunction addShape( shape ) {\n\n\t\tconst placeholder = [];\n\n\t\t// options\n\n\t\tconst curveSegments = options.curveSegments !== undefined ? options.curveSegments : 12;\n\t\tconst steps = options.steps !== undefined ? options.steps : 1;\n\t\tlet depth = options.depth !== undefined ? options.depth : 100;\n\n\t\tlet bevelEnabled = options.bevelEnabled !== undefined ? options.bevelEnabled : true;\n\t\tlet bevelThickness = options.bevelThickness !== undefined ? options.bevelThickness : 6;\n\t\tlet bevelSize = options.bevelSize !== undefined ? options.bevelSize : bevelThickness - 2;\n\t\tlet bevelOffset = options.bevelOffset !== undefined ? options.bevelOffset : 0;\n\t\tlet bevelSegments = options.bevelSegments !== undefined ? options.bevelSegments : 3;\n\n\t\tconst extrudePath = options.extrudePath;\n\n\t\tconst uvgen = options.UVGenerator !== undefined ? options.UVGenerator : WorldUVGenerator;\n\n\t\t// deprecated options\n\n\t\tif ( options.amount !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.ExtrudeBufferGeometry: amount has been renamed to depth.' );\n\t\t\tdepth = options.amount;\n\n\t\t}\n\n\t\t//\n\n\t\tlet extrudePts, extrudeByPath = false;\n\t\tlet 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\t\t\tbevelOffset = 0;\n\n\t\t}\n\n\t\t// Variables initialization\n\n\t\tconst shapePoints = shape.extractPoints( curveSegments );\n\n\t\tlet vertices = shapePoints.shape;\n\t\tconst holes = shapePoints.holes;\n\n\t\tconst 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 ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\tconst ahole = 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\tconst faces = ShapeUtils.triangulateShape( vertices, holes );\n\n\t\t/* Vertices */\n\n\t\tconst contour = vertices; // vertices has all points but contour has only points of circumference\n\n\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\tconst ahole = 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\tconst vlen = vertices.length, 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\tlet 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\tconst v_prev_x = inPt.x - inPrev.x,\n\t\t\t\tv_prev_y = inPt.y - inPrev.y;\n\t\t\tconst v_next_x = inNext.x - inPt.x,\n\t\t\t\tv_next_y = inNext.y - inPt.y;\n\n\t\t\tconst 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\tconst 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\tconst v_prev_len = Math.sqrt( v_prev_lensq );\n\t\t\t\tconst 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\tconst ptPrevShift_x = ( inPrev.x - v_prev_y / v_prev_len );\n\t\t\t\tconst ptPrevShift_y = ( inPrev.y + v_prev_x / v_prev_len );\n\n\t\t\t\tconst ptNextShift_x = ( inNext.x - v_next_y / v_next_len );\n\t\t\t\tconst 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\tconst 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\tconst 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\tlet direction_eq = false; // assumes: opposite\n\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\tconst contourMovements = [];\n\n\t\tfor ( let 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\tconst holesMovements = [];\n\t\tlet oneHoleMovements, verticesMovements = contourMovements.concat();\n\n\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\tconst ahole = holes[ h ];\n\n\t\t\toneHoleMovements = [];\n\n\t\t\tfor ( let 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 ( let b = 0; b < bevelSegments; b ++ ) {\n\n\t\t\t//for ( b = bevelSegments; b > 0; b -- ) {\n\n\t\t\tconst t = b / bevelSegments;\n\t\t\tconst z = bevelThickness * Math.cos( t * Math.PI / 2 );\n\t\t\tconst bs = bevelSize * Math.sin( t * Math.PI / 2 ) + bevelOffset;\n\n\t\t\t// contract shape\n\n\t\t\tfor ( let i = 0, il = contour.length; i < il; i ++ ) {\n\n\t\t\t\tconst vert = 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 ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\tconst ahole = holes[ h ];\n\t\t\t\toneHoleMovements = holesMovements[ h ];\n\n\t\t\t\tfor ( let i = 0, il = ahole.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst vert = 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\tconst bs = bevelSize + bevelOffset;\n\n\t\t// Back facing vertices\n\n\t\tfor ( let i = 0; i < vlen; i ++ ) {\n\n\t\t\tconst vert = 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\tfor ( let s = 1; s <= steps; s ++ ) {\n\n\t\t\tfor ( let i = 0; i < vlen; i ++ ) {\n\n\t\t\t\tconst vert = 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, depth / 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 ( let b = bevelSegments - 1; b >= 0; b -- ) {\n\n\t\t\tconst t = b / bevelSegments;\n\t\t\tconst z = bevelThickness * Math.cos( t * Math.PI / 2 );\n\t\t\tconst bs = bevelSize * Math.sin( t * Math.PI / 2 ) + bevelOffset;\n\n\t\t\t// contract shape\n\n\t\t\tfor ( let i = 0, il = contour.length; i < il; i ++ ) {\n\n\t\t\t\tconst vert = scalePt2( contour[ i ], contourMovements[ i ], bs );\n\t\t\t\tv( vert.x, vert.y, depth + z );\n\n\t\t\t}\n\n\t\t\t// expand holes\n\n\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\tconst ahole = holes[ h ];\n\t\t\t\toneHoleMovements = holesMovements[ h ];\n\n\t\t\t\tfor ( let i = 0, il = ahole.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst vert = 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, depth + 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\tconst start = verticesArray.length / 3;\n\n\t\t\tif ( bevelEnabled ) {\n\n\t\t\t\tlet layer = 0; // steps + 1\n\t\t\t\tlet offset = vlen * layer;\n\n\t\t\t\t// Bottom faces\n\n\t\t\t\tfor ( let i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\tconst face = 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 ( let i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\tconst face = 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 ( let i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\tconst face = 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 ( let i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\tconst face = 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\tconst start = verticesArray.length / 3;\n\t\t\tlet layeroffset = 0;\n\t\t\tsidewalls( contour, layeroffset );\n\t\t\tlayeroffset += contour.length;\n\n\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\tconst ahole = 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\tlet i = contour.length;\n\n\t\t\twhile ( -- i >= 0 ) {\n\n\t\t\t\tconst j = i;\n\t\t\t\tlet k = 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\tfor ( let s = 0, sl = ( steps + bevelSegments * 2 ); s < sl; s ++ ) {\n\n\t\t\t\t\tconst slen1 = vlen * s;\n\t\t\t\t\tconst slen2 = vlen * ( s + 1 );\n\n\t\t\t\t\tconst 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\tconst nextIndex = verticesArray.length / 3;\n\t\t\tconst 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\tconst nextIndex = verticesArray.length / 3;\n\t\t\tconst 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\nExtrudeBufferGeometry.prototype.toJSON = function () {\n\n\tconst data = BufferGeometry.prototype.toJSON.call( this );\n\n\tconst shapes = this.parameters.shapes;\n\tconst options = this.parameters.options;\n\n\treturn toJSON( shapes, options, data );\n\n};\n\n//\n\nconst WorldUVGenerator = {\n\n\tgenerateTopUV: function ( geometry, vertices, indexA, indexB, indexC ) {\n\n\t\tconst a_x = vertices[ indexA * 3 ];\n\t\tconst a_y = vertices[ indexA * 3 + 1 ];\n\t\tconst b_x = vertices[ indexB * 3 ];\n\t\tconst b_y = vertices[ indexB * 3 + 1 ];\n\t\tconst c_x = vertices[ indexC * 3 ];\n\t\tconst 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\tconst a_x = vertices[ indexA * 3 ];\n\t\tconst a_y = vertices[ indexA * 3 + 1 ];\n\t\tconst a_z = vertices[ indexA * 3 + 2 ];\n\t\tconst b_x = vertices[ indexB * 3 ];\n\t\tconst b_y = vertices[ indexB * 3 + 1 ];\n\t\tconst b_z = vertices[ indexB * 3 + 2 ];\n\t\tconst c_x = vertices[ indexC * 3 ];\n\t\tconst c_y = vertices[ indexC * 3 + 1 ];\n\t\tconst c_z = vertices[ indexC * 3 + 2 ];\n\t\tconst d_x = vertices[ indexD * 3 ];\n\t\tconst d_y = vertices[ indexD * 3 + 1 ];\n\t\tconst 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\nfunction toJSON( shapes, options, data ) {\n\n\t//\n\n\tdata.shapes = [];\n\n\tif ( Array.isArray( shapes ) ) {\n\n\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\tconst 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\t//\n\n\tif ( options.extrudePath !== undefined ) data.options.extrudePath = options.extrudePath.toJSON();\n\n\treturn data;\n\n}\n\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 (including bevelOffset) is bevel\n * bevelOffset: // how far from text outline does bevel start\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\tconst 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\tconst shapes = font.generateShapes( text, parameters.size );\n\n\t// translate parameters to ExtrudeGeometry API\n\n\tparameters.depth = 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// 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\tconst thetaEnd = Math.min( thetaStart + thetaLength, Math.PI );\n\n\tlet index = 0;\n\tconst grid = [];\n\n\tconst vertex = new Vector3();\n\tconst normal = new Vector3();\n\n\t// buffers\n\n\tconst indices = [];\n\tconst vertices = [];\n\tconst normals = [];\n\tconst uvs = [];\n\n\t// generate vertices, normals and uvs\n\n\tfor ( let iy = 0; iy <= heightSegments; iy ++ ) {\n\n\t\tconst verticesRow = [];\n\n\t\tconst v = iy / heightSegments;\n\n\t\t// special case for the poles\n\n\t\tlet uOffset = 0;\n\n\t\tif ( iy == 0 && thetaStart == 0 ) {\n\n\t\t\tuOffset = 0.5 / widthSegments;\n\n\t\t} else if ( iy == heightSegments && thetaEnd == Math.PI ) {\n\n\t\t\tuOffset = - 0.5 / widthSegments;\n\n\t\t}\n\n\t\tfor ( let ix = 0; ix <= widthSegments; ix ++ ) {\n\n\t\t\tconst 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.copy( vertex ).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 + uOffset, 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 ( let iy = 0; iy < heightSegments; iy ++ ) {\n\n\t\tfor ( let ix = 0; ix < widthSegments; ix ++ ) {\n\n\t\t\tconst a = grid[ iy ][ ix + 1 ];\n\t\t\tconst b = grid[ iy ][ ix ];\n\t\t\tconst c = grid[ iy + 1 ][ ix ];\n\t\t\tconst 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.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n}\n\nSphereBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nSphereBufferGeometry.prototype.constructor = SphereBufferGeometry;\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\tconst indices = [];\n\tconst vertices = [];\n\tconst normals = [];\n\tconst uvs = [];\n\n\t// some helper variables\n\n\tlet radius = innerRadius;\n\tconst radiusStep = ( ( outerRadius - innerRadius ) / phiSegments );\n\tconst vertex = new Vector3();\n\tconst uv = new Vector2();\n\n\t// generate vertices, normals and uvs\n\n\tfor ( let j = 0; j <= phiSegments; j ++ ) {\n\n\t\tfor ( let 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\tconst segment = 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 ( let j = 0; j < phiSegments; j ++ ) {\n\n\t\tconst thetaSegmentLevel = j * ( thetaSegments + 1 );\n\n\t\tfor ( let i = 0; i < thetaSegments; i ++ ) {\n\n\t\t\tconst segment = i + thetaSegmentLevel;\n\n\t\t\tconst a = segment;\n\t\t\tconst b = segment + thetaSegments + 1;\n\t\t\tconst c = segment + thetaSegments + 2;\n\t\t\tconst 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.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n}\n\nRingBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nRingBufferGeometry.prototype.constructor = RingBufferGeometry;\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 = MathUtils.clamp( phiLength, 0, Math.PI * 2 );\n\n\n\t// buffers\n\n\tconst indices = [];\n\tconst vertices = [];\n\tconst uvs = [];\n\n\t// helper variables\n\n\tconst inverseSegments = 1.0 / segments;\n\tconst vertex = new Vector3();\n\tconst uv = new Vector2();\n\n\t// generate vertices and uvs\n\n\tfor ( let i = 0; i <= segments; i ++ ) {\n\n\t\tconst phi = phiStart + i * inverseSegments * phiLength;\n\n\t\tconst sin = Math.sin( phi );\n\t\tconst cos = Math.cos( phi );\n\n\t\tfor ( let 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 ( let i = 0; i < segments; i ++ ) {\n\n\t\tfor ( let j = 0; j < ( points.length - 1 ); j ++ ) {\n\n\t\t\tconst base = j + i * points.length;\n\n\t\t\tconst a = base;\n\t\t\tconst b = base + points.length;\n\t\t\tconst c = base + points.length + 1;\n\t\t\tconst 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.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tthis.setAttribute( '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\tconst normals = this.attributes.normal.array;\n\t\tconst n1 = new Vector3();\n\t\tconst n2 = new Vector3();\n\t\tconst n = new Vector3();\n\n\t\t// this is the buffer offset for the last line of vertices\n\n\t\tconst base = segments * points.length * 3;\n\n\t\tfor ( let 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// 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\tconst data = Geometry.prototype.toJSON.call( this );\n\n\tconst shapes = this.parameters.shapes;\n\n\treturn toJSON$1( 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\tconst indices = [];\n\tconst vertices = [];\n\tconst normals = [];\n\tconst uvs = [];\n\n\t// helper variables\n\n\tlet groupStart = 0;\n\tlet 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 ( let 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.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\n\t// helper functions\n\n\tfunction addShape( shape ) {\n\n\t\tconst indexOffset = vertices.length / 3;\n\t\tconst points = shape.extractPoints( curveSegments );\n\n\t\tlet shapeVertices = points.shape;\n\t\tconst 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}\n\n\t\tfor ( let i = 0, l = shapeHoles.length; i < l; i ++ ) {\n\n\t\t\tconst shapeHole = shapeHoles[ i ];\n\n\t\t\tif ( ShapeUtils.isClockWise( shapeHole ) === true ) {\n\n\t\t\t\tshapeHoles[ i ] = shapeHole.reverse();\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst faces = ShapeUtils.triangulateShape( shapeVertices, shapeHoles );\n\n\t\t// join vertices of inner and outer paths to a single array\n\n\t\tfor ( let i = 0, l = shapeHoles.length; i < l; i ++ ) {\n\n\t\t\tconst shapeHole = shapeHoles[ i ];\n\t\t\tshapeVertices = shapeVertices.concat( shapeHole );\n\n\t\t}\n\n\t\t// vertices, normals, uvs\n\n\t\tfor ( let i = 0, l = shapeVertices.length; i < l; i ++ ) {\n\n\t\t\tconst 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 ( let i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\t\tconst face = faces[ i ];\n\n\t\t\tconst a = face[ 0 ] + indexOffset;\n\t\t\tconst b = face[ 1 ] + indexOffset;\n\t\t\tconst 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\tconst data = BufferGeometry.prototype.toJSON.call( this );\n\n\tconst shapes = this.parameters.shapes;\n\n\treturn toJSON$1( shapes, data );\n\n};\n\n//\n\nfunction toJSON$1( shapes, data ) {\n\n\tdata.shapes = [];\n\n\tif ( Array.isArray( shapes ) ) {\n\n\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\tconst 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\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\tconst vertices = [];\n\n\t// helper variables\n\n\tconst thresholdDot = Math.cos( MathUtils.DEG2RAD * thresholdAngle );\n\tconst edge = [ 0, 0 ], edges = {};\n\tlet edge1, edge2, key;\n\tconst keys = [ 'a', 'b', 'c' ];\n\n\t// prepare source geometry\n\n\tlet 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\tconst sourceVertices = geometry2.vertices;\n\tconst faces = geometry2.faces;\n\n\t// now create a data structure where each entry represents an edge with its adjoining faces\n\n\tfor ( let i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\tconst face = faces[ i ];\n\n\t\tfor ( let 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\tconst 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\tlet 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.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\n}\n\nEdgesGeometry.prototype = Object.create( BufferGeometry.prototype );\nEdgesGeometry.prototype.constructor = EdgesGeometry;\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\tconst 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\tconst indices = [];\n\tconst vertices = [];\n\tconst normals = [];\n\tconst uvs = [];\n\n\t// helper variables\n\n\tlet index = 0;\n\tconst indexArray = [];\n\tconst halfHeight = height / 2;\n\tlet 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.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\tfunction generateTorso() {\n\n\t\tconst normal = new Vector3();\n\t\tconst vertex = new Vector3();\n\n\t\tlet groupCount = 0;\n\n\t\t// this will be used to calculate the normal\n\t\tconst slope = ( radiusBottom - radiusTop ) / height;\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( let y = 0; y <= heightSegments; y ++ ) {\n\n\t\t\tconst indexRow = [];\n\n\t\t\tconst v = y / heightSegments;\n\n\t\t\t// calculate the radius of the current row\n\n\t\t\tconst radius = v * ( radiusBottom - radiusTop ) + radiusTop;\n\n\t\t\tfor ( let x = 0; x <= radialSegments; x ++ ) {\n\n\t\t\t\tconst u = x / radialSegments;\n\n\t\t\t\tconst theta = u * thetaLength + thetaStart;\n\n\t\t\t\tconst sinTheta = Math.sin( theta );\n\t\t\t\tconst 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 ( let x = 0; x < radialSegments; x ++ ) {\n\n\t\t\tfor ( let 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\tconst a = indexArray[ y ][ x ];\n\t\t\t\tconst b = indexArray[ y + 1 ][ x ];\n\t\t\t\tconst c = indexArray[ y + 1 ][ x + 1 ];\n\t\t\t\tconst 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\tlet centerIndexStart, centerIndexEnd;\n\n\t\tconst uv = new Vector2();\n\t\tconst vertex = new Vector3();\n\n\t\tlet groupCount = 0;\n\n\t\tconst radius = ( top === true ) ? radiusTop : radiusBottom;\n\t\tconst 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 ( let 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 ( let x = 0; x <= radialSegments; x ++ ) {\n\n\t\t\tconst u = x / radialSegments;\n\t\t\tconst theta = u * thetaLength + thetaStart;\n\n\t\t\tconst cosTheta = Math.cos( theta );\n\t\t\tconst 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 ( let x = 0; x < radialSegments; x ++ ) {\n\n\t\t\tconst c = centerIndexStart + x;\n\t\t\tconst 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// 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// 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\tconst indices = [];\n\tconst vertices = [];\n\tconst normals = [];\n\tconst uvs = [];\n\n\t// helper variables\n\n\tconst vertex = new Vector3();\n\tconst 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 ( let s = 0, i = 3; s <= segments; s ++, i += 3 ) {\n\n\t\tconst 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 ( let 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.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n}\n\nCircleBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nCircleBufferGeometry.prototype.constructor = CircleBufferGeometry;\n\nvar Geometries = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\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 * 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\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 * 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 * normalMapType: THREE.TangentSpaceNormalMap,\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 = 1.0;\n\tthis.metalness = 0.0;\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.normalMapType = TangentSpaceNormalMap;\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.vertexTangents = 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.normalMapType = source.normalMapType;\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\tthis.vertexTangents = source.vertexTangents;\n\n\treturn this;\n\n};\n\n/**\n * parameters = {\n * clearcoat: ,\n * clearcoatMap: new THREE.Texture( ),\n * clearcoatRoughness: ,\n * clearcoatRoughnessMap: new THREE.Texture( ),\n * clearcoatNormalScale: ,\n * clearcoatNormalMap: new THREE.Texture( ),\n *\n * reflectivity: ,\n *\n * sheen: ,\n *\n * transmission: ,\n * transmissionMap: new THREE.Texture( )\n * }\n */\n\nfunction MeshPhysicalMaterial( parameters ) {\n\n\tMeshStandardMaterial.call( this );\n\n\tthis.defines = {\n\n\t\t'STANDARD': '',\n\t\t'PHYSICAL': ''\n\n\t};\n\n\tthis.type = 'MeshPhysicalMaterial';\n\n\tthis.clearcoat = 0.0;\n\tthis.clearcoatMap = null;\n\tthis.clearcoatRoughness = 0.0;\n\tthis.clearcoatRoughnessMap = null;\n\tthis.clearcoatNormalScale = new Vector2( 1, 1 );\n\tthis.clearcoatNormalMap = null;\n\n\tthis.reflectivity = 0.5; // maps to F0 = 0.04\n\n\tthis.sheen = null; // null will disable sheen bsdf\n\n\tthis.transmission = 0.0;\n\tthis.transmissionMap = null;\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 = {\n\n\t\t'STANDARD': '',\n\t\t'PHYSICAL': ''\n\n\t};\n\n\tthis.clearcoat = source.clearcoat;\n\tthis.clearcoatMap = source.clearcoatMap;\n\tthis.clearcoatRoughness = source.clearcoatRoughness;\n\tthis.clearcoatRoughnessMap = source.clearcoatRoughnessMap;\n\tthis.clearcoatNormalMap = source.clearcoatNormalMap;\n\tthis.clearcoatNormalScale.copy( source.clearcoatNormalScale );\n\n\tthis.reflectivity = source.reflectivity;\n\n\tif ( source.sheen ) {\n\n\t\tthis.sheen = ( this.sheen || new Color() ).copy( source.sheen );\n\n\t} else {\n\n\t\tthis.sheen = null;\n\n\t}\n\n\tthis.transmission = source.transmission;\n\tthis.transmissionMap = source.transmissionMap;\n\n\treturn this;\n\n};\n\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 * normalMapType: THREE.TangentSpaceNormalMap,\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.MultiplyOperation,\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.normalMapType = TangentSpaceNormalMap;\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.normalMapType = source.normalMapType;\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 * parameters = {\n * color: ,\n *\n * map: new THREE.Texture( ),\n * gradientMap: 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 * normalMapType: THREE.TangentSpaceNormalMap,\n * normalScale: ,\n *\n * displacementMap: new THREE.Texture( ),\n * displacementScale: ,\n * displacementBias: ,\n *\n * alphaMap: new THREE.Texture( ),\n *\n * wireframe: ,\n * wireframeLinewidth: ,\n *\n * skinning: ,\n * morphTargets: ,\n * morphNormals: \n * }\n */\n\nfunction MeshToonMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.defines = { 'TOON': '' };\n\n\tthis.type = 'MeshToonMaterial';\n\n\tthis.color = new Color( 0xffffff );\n\n\tthis.map = null;\n\tthis.gradientMap = 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.normalMapType = TangentSpaceNormalMap;\n\tthis.normalScale = new Vector2( 1, 1 );\n\n\tthis.displacementMap = null;\n\tthis.displacementScale = 1;\n\tthis.displacementBias = 0;\n\n\tthis.alphaMap = null;\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\nMeshToonMaterial.prototype = Object.create( Material.prototype );\nMeshToonMaterial.prototype.constructor = MeshToonMaterial;\n\nMeshToonMaterial.prototype.isMeshToonMaterial = true;\n\nMeshToonMaterial.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\tthis.gradientMap = source.gradientMap;\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.normalMapType = source.normalMapType;\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.alphaMap = source.alphaMap;\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 * parameters = {\n * opacity: ,\n *\n * bumpMap: new THREE.Texture( ),\n * bumpScale: ,\n *\n * normalMap: new THREE.Texture( ),\n * normalMapType: THREE.TangentSpaceNormalMap,\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.normalMapType = TangentSpaceNormalMap;\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\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.normalMapType = source.normalMapType;\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 * 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 * parameters = {\n * color: ,\n * opacity: ,\n *\n * matcap: new THREE.Texture( ),\n *\n * map: new THREE.Texture( ),\n *\n * bumpMap: new THREE.Texture( ),\n * bumpScale: ,\n *\n * normalMap: new THREE.Texture( ),\n * normalMapType: THREE.TangentSpaceNormalMap,\n * normalScale: ,\n *\n * displacementMap: new THREE.Texture( ),\n * displacementScale: ,\n * displacementBias: ,\n *\n * alphaMap: new THREE.Texture( ),\n *\n * skinning: ,\n * morphTargets: ,\n * morphNormals: \n * }\n */\n\nfunction MeshMatcapMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.defines = { 'MATCAP': '' };\n\n\tthis.type = 'MeshMatcapMaterial';\n\n\tthis.color = new Color( 0xffffff ); // diffuse\n\n\tthis.matcap = null;\n\n\tthis.map = null;\n\n\tthis.bumpMap = null;\n\tthis.bumpScale = 1;\n\n\tthis.normalMap = null;\n\tthis.normalMapType = TangentSpaceNormalMap;\n\tthis.normalScale = new Vector2( 1, 1 );\n\n\tthis.displacementMap = null;\n\tthis.displacementScale = 1;\n\tthis.displacementBias = 0;\n\n\tthis.alphaMap = null;\n\n\tthis.skinning = false;\n\tthis.morphTargets = false;\n\tthis.morphNormals = false;\n\n\tthis.setValues( parameters );\n\n}\n\nMeshMatcapMaterial.prototype = Object.create( Material.prototype );\nMeshMatcapMaterial.prototype.constructor = MeshMatcapMaterial;\n\nMeshMatcapMaterial.prototype.isMeshMatcapMaterial = true;\n\nMeshMatcapMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.defines = { 'MATCAP': '' };\n\n\tthis.color.copy( source.color );\n\n\tthis.matcap = source.matcap;\n\n\tthis.map = source.map;\n\n\tthis.bumpMap = source.bumpMap;\n\tthis.bumpScale = source.bumpScale;\n\n\tthis.normalMap = source.normalMap;\n\tthis.normalMapType = source.normalMapType;\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.alphaMap = source.alphaMap;\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 * 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\nvar Materials = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\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\tMeshMatcapMaterial: MeshMatcapMaterial,\n\tLineDashedMaterial: LineDashedMaterial,\n\tLineBasicMaterial: LineBasicMaterial,\n\tMaterial: Material\n});\n\nconst 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! 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! ( 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\tconst n = times.length;\n\t\tconst result = new Array( n );\n\t\tfor ( let 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\tconst nValues = values.length;\n\t\tconst result = new values.constructor( nValues );\n\n\t\tfor ( let i = 0, dstOffset = 0; dstOffset !== nValues; ++ i ) {\n\n\t\t\tconst srcOffset = order[ i ] * stride;\n\n\t\t\tfor ( let 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\tlet 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\tlet 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\tsubclip: function ( sourceClip, name, startFrame, endFrame, fps ) {\n\n\t\tfps = fps || 30;\n\n\t\tconst clip = sourceClip.clone();\n\n\t\tclip.name = name;\n\n\t\tconst tracks = [];\n\n\t\tfor ( let i = 0; i < clip.tracks.length; ++ i ) {\n\n\t\t\tconst track = clip.tracks[ i ];\n\t\t\tconst valueSize = track.getValueSize();\n\n\t\t\tconst times = [];\n\t\t\tconst values = [];\n\n\t\t\tfor ( let j = 0; j < track.times.length; ++ j ) {\n\n\t\t\t\tconst frame = track.times[ j ] * fps;\n\n\t\t\t\tif ( frame < startFrame || frame >= endFrame ) continue;\n\n\t\t\t\ttimes.push( track.times[ j ] );\n\n\t\t\t\tfor ( let k = 0; k < valueSize; ++ k ) {\n\n\t\t\t\t\tvalues.push( track.values[ j * valueSize + k ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( times.length === 0 ) continue;\n\n\t\t\ttrack.times = AnimationUtils.convertArray( times, track.times.constructor );\n\t\t\ttrack.values = AnimationUtils.convertArray( values, track.values.constructor );\n\n\t\t\ttracks.push( track );\n\n\t\t}\n\n\t\tclip.tracks = tracks;\n\n\t\t// find minimum .times value across all tracks in the trimmed clip\n\n\t\tlet minStartTime = Infinity;\n\n\t\tfor ( let i = 0; i < clip.tracks.length; ++ i ) {\n\n\t\t\tif ( minStartTime > clip.tracks[ i ].times[ 0 ] ) {\n\n\t\t\t\tminStartTime = clip.tracks[ i ].times[ 0 ];\n\n\t\t\t}\n\n\t\t}\n\n\t\t// shift all tracks such that clip begins at t=0\n\n\t\tfor ( let i = 0; i < clip.tracks.length; ++ i ) {\n\n\t\t\tclip.tracks[ i ].shift( - 1 * minStartTime );\n\n\t\t}\n\n\t\tclip.resetDuration();\n\n\t\treturn clip;\n\n\t},\n\n\tmakeClipAdditive: function ( targetClip, referenceFrame, referenceClip, fps ) {\n\n\t\tif ( referenceFrame === undefined ) referenceFrame = 0;\n\t\tif ( referenceClip === undefined ) referenceClip = targetClip;\n\t\tif ( fps === undefined || fps <= 0 ) fps = 30;\n\n\t\tconst numTracks = targetClip.tracks.length;\n\t\tconst referenceTime = referenceFrame / fps;\n\n\t\t// Make each track's values relative to the values at the reference frame\n\t\tfor ( let i = 0; i < numTracks; ++ i ) {\n\n\t\t\tconst referenceTrack = referenceClip.tracks[ i ];\n\t\t\tconst referenceTrackType = referenceTrack.ValueTypeName;\n\n\t\t\t// Skip this track if it's non-numeric\n\t\t\tif ( referenceTrackType === 'bool' || referenceTrackType === 'string' ) continue;\n\n\t\t\t// Find the track in the target clip whose name and type matches the reference track\n\t\t\tconst targetTrack = targetClip.tracks.find( function ( track ) {\n\n\t\t\t\treturn track.name === referenceTrack.name\n\t\t\t\t&& track.ValueTypeName === referenceTrackType;\n\n\t\t\t} );\n\n\t\t\tif ( targetTrack === undefined ) continue;\n\n\t\t\tconst valueSize = referenceTrack.getValueSize();\n\t\t\tconst lastIndex = referenceTrack.times.length - 1;\n\t\t\tlet referenceValue;\n\n\t\t\t// Find the value to subtract out of the track\n\t\t\tif ( referenceTime <= referenceTrack.times[ 0 ] ) {\n\n\t\t\t\t// Reference frame is earlier than the first keyframe, so just use the first keyframe\n\t\t\t\treferenceValue = AnimationUtils.arraySlice( referenceTrack.values, 0, referenceTrack.valueSize );\n\n\t\t\t} else if ( referenceTime >= referenceTrack.times[ lastIndex ] ) {\n\n\t\t\t\t// Reference frame is after the last keyframe, so just use the last keyframe\n\t\t\t\tconst startIndex = lastIndex * valueSize;\n\t\t\t\treferenceValue = AnimationUtils.arraySlice( referenceTrack.values, startIndex );\n\n\t\t\t} else {\n\n\t\t\t\t// Interpolate to the reference value\n\t\t\t\tconst interpolant = referenceTrack.createInterpolant();\n\t\t\t\tinterpolant.evaluate( referenceTime );\n\t\t\t\treferenceValue = interpolant.resultBuffer;\n\n\t\t\t}\n\n\t\t\t// Conjugate the quaternion\n\t\t\tif ( referenceTrackType === 'quaternion' ) {\n\n\t\t\t\tconst referenceQuat = new Quaternion(\n\t\t\t\t\treferenceValue[ 0 ],\n\t\t\t\t\treferenceValue[ 1 ],\n\t\t\t\t\treferenceValue[ 2 ],\n\t\t\t\t\treferenceValue[ 3 ]\n\t\t\t\t).normalize().conjugate();\n\t\t\t\treferenceQuat.toArray( referenceValue );\n\n\t\t\t}\n\n\t\t\t// Subtract the reference value from all of the track values\n\n\t\t\tconst numTimes = targetTrack.times.length;\n\t\t\tfor ( let j = 0; j < numTimes; ++ j ) {\n\n\t\t\t\tconst valueStart = j * valueSize;\n\n\t\t\t\tif ( referenceTrackType === 'quaternion' ) {\n\n\t\t\t\t\t// Multiply the conjugate for quaternion track types\n\t\t\t\t\tQuaternion.multiplyQuaternionsFlat(\n\t\t\t\t\t\ttargetTrack.values,\n\t\t\t\t\t\tvalueStart,\n\t\t\t\t\t\treferenceValue,\n\t\t\t\t\t\t0,\n\t\t\t\t\t\ttargetTrack.values,\n\t\t\t\t\t\tvalueStart\n\t\t\t\t\t);\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Subtract each value for all other numeric track types\n\t\t\t\t\tfor ( let k = 0; k < valueSize; ++ k ) {\n\n\t\t\t\t\t\ttargetTrack.values[ valueStart + k ] -= referenceValue[ k ];\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\ttargetClip.blendMode = AdditiveAnimationBlendMode;\n\n\t\treturn targetClip;\n\n\t}\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 */\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\tlet 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\tlet 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 ( let 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\tconst 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 ( let 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\tconst 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\tconst 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 ( let 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 * 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\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\tlet 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\tconst 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\tconst 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\tconst sP = - wP * ppp + 2 * wP * pp - wP * p;\n\t\tconst s0 = ( 1 + wP ) * ppp + ( - 1.5 - 2 * wP ) * pp + ( - 0.5 + wP ) * p + 1;\n\t\tconst s1 = ( - 1 - wN ) * ppp + ( 1.5 + wN ) * pp + 0.5 * p;\n\t\tconst sN = wN * ppp - wN * pp;\n\n\t\t// combine data linearly\n\n\t\tfor ( let 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\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\tconst 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 ( let 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\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\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}\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\ttoJSON: function ( track ) {\n\n\t\tconst trackType = track.constructor;\n\n\t\tlet 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\tconst 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} );\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\tlet 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\tconst 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 this;\n\n\t\t}\n\n\t\tthis.createInterpolant = factoryMethod;\n\n\t\treturn this;\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\tconst times = this.times;\n\n\t\t\tfor ( let 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\tconst times = this.times;\n\n\t\t\tfor ( let 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\tconst times = this.times,\n\t\t\tnKeys = times.length;\n\n\t\tlet from = 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 ) {\n\n\t\t\t\tto = Math.max( to, 1 );\n\t\t\t\tfrom = to - 1;\n\n\t\t\t}\n\n\t\t\tconst 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\tlet valid = true;\n\n\t\tconst 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\tconst 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\tlet prevTime = null;\n\n\t\tfor ( let i = 0; i !== nKeys; i ++ ) {\n\n\t\t\tconst 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 ( let i = 0, n = values.length; i !== n; ++ i ) {\n\n\t\t\t\t\tconst 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\t// times or values may be shared with other tracks, so overwriting is unsafe\n\t\tconst times = AnimationUtils.arraySlice( this.times ),\n\t\t\tvalues = AnimationUtils.arraySlice( this.values ),\n\t\t\tstride = this.getValueSize(),\n\n\t\t\tsmoothInterpolation = this.getInterpolation() === InterpolateSmooth,\n\n\t\t\tlastIndex = times.length - 1;\n\n\t\tlet writeIndex = 1;\n\n\t\tfor ( let i = 1; i < lastIndex; ++ i ) {\n\n\t\t\tlet keep = false;\n\n\t\t\tconst time = times[ i ];\n\t\t\tconst 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\tconst 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 ( let j = 0; j !== stride; ++ j ) {\n\n\t\t\t\t\t\tconst 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\tconst readOffset = i * stride,\n\t\t\t\t\t\twriteOffset = writeIndex * stride;\n\n\t\t\t\t\tfor ( let 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 ( let 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} else {\n\n\t\t\tthis.times = times;\n\t\t\tthis.values = values;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\tconst times = AnimationUtils.arraySlice( this.times, 0 );\n\t\tconst values = AnimationUtils.arraySlice( this.values, 0 );\n\n\t\tconst TypedKeyframeTrack = this.constructor;\n\t\tconst track = new TypedKeyframeTrack( this.name, times, values );\n\n\t\t// Interpolant argument to constructor is not saved, so copy the factory method directly.\n\t\ttrack.createInterpolant = this.createInterpolant;\n\n\t\treturn track;\n\n\t}\n\n} );\n\n/**\n * A Track of Boolean keyframe values.\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 * A Track of keyframe values that represent color.\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 * A Track of numeric keyframe values.\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 * Spherical linear unit quaternion interpolant.\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\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\n\t\t\talpha = ( t - t0 ) / ( t1 - t0 );\n\n\t\tlet offset = i1 * stride;\n\n\t\tfor ( let 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 * A Track of quaternion keyframe values.\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 * A Track that interpolates Strings\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 * A Track of vectored keyframe values.\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\nfunction AnimationClip( name, duration, tracks, blendMode ) {\n\n\tthis.name = name;\n\tthis.tracks = tracks;\n\tthis.duration = ( duration !== undefined ) ? duration : - 1;\n\tthis.blendMode = ( blendMode !== undefined ) ? blendMode : NormalAnimationBlendMode;\n\n\tthis.uuid = MathUtils.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}\n\nfunction getTrackTypeForValueTypeName( typeName ) {\n\n\tswitch ( typeName.toLowerCase() ) {\n\n\t\tcase 'scalar':\n\t\tcase 'double':\n\t\tcase 'float':\n\t\tcase 'number':\n\t\tcase 'integer':\n\n\t\t\treturn NumberKeyframeTrack;\n\n\t\tcase 'vector':\n\t\tcase 'vector2':\n\t\tcase 'vector3':\n\t\tcase 'vector4':\n\n\t\t\treturn VectorKeyframeTrack;\n\n\t\tcase 'color':\n\n\t\t\treturn ColorKeyframeTrack;\n\n\t\tcase 'quaternion':\n\n\t\t\treturn QuaternionKeyframeTrack;\n\n\t\tcase 'bool':\n\t\tcase 'boolean':\n\n\t\t\treturn BooleanKeyframeTrack;\n\n\t\tcase 'string':\n\n\t\t\treturn StringKeyframeTrack;\n\n\t}\n\n\tthrow new Error( 'THREE.KeyframeTrack: Unsupported typeName: ' + typeName );\n\n}\n\nfunction parseKeyframeTrack( json ) {\n\n\tif ( json.type === undefined ) {\n\n\t\tthrow new Error( 'THREE.KeyframeTrack: track type undefined, can not parse' );\n\n\t}\n\n\tconst trackType = getTrackTypeForValueTypeName( json.type );\n\n\tif ( json.times === undefined ) {\n\n\t\tconst times = [], values = [];\n\n\t\tAnimationUtils.flattenJSON( json.keys, times, values, 'value' );\n\n\t\tjson.times = times;\n\t\tjson.values = values;\n\n\t}\n\n\t// derived classes can define a static parse method\n\tif ( trackType.parse !== undefined ) {\n\n\t\treturn trackType.parse( json );\n\n\t} else {\n\n\t\t// by default, we assume a constructor compatible with the base\n\t\treturn new trackType( json.name, json.times, json.values, json.interpolation );\n\n\t}\n\n}\n\nObject.assign( AnimationClip, {\n\n\tparse: function ( json ) {\n\n\t\tconst tracks = [],\n\t\t\tjsonTracks = json.tracks,\n\t\t\tframeTime = 1.0 / ( json.fps || 1.0 );\n\n\t\tfor ( let i = 0, n = jsonTracks.length; i !== n; ++ i ) {\n\n\t\t\ttracks.push( parseKeyframeTrack( jsonTracks[ i ] ).scale( frameTime ) );\n\n\t\t}\n\n\t\treturn new AnimationClip( json.name, json.duration, tracks, json.blendMode );\n\n\t},\n\n\ttoJSON: function ( clip ) {\n\n\t\tconst tracks = [],\n\t\t\tclipTracks = clip.tracks;\n\n\t\tconst json = {\n\n\t\t\t'name': clip.name,\n\t\t\t'duration': clip.duration,\n\t\t\t'tracks': tracks,\n\t\t\t'uuid': clip.uuid,\n\t\t\t'blendMode': clip.blendMode\n\n\t\t};\n\n\t\tfor ( let 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\tconst numMorphTargets = morphTargetSequence.length;\n\t\tconst tracks = [];\n\n\t\tfor ( let i = 0; i < numMorphTargets; i ++ ) {\n\n\t\t\tlet times = [];\n\t\t\tlet 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\tconst 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\tlet clipArray = objectOrClipArray;\n\n\t\tif ( ! Array.isArray( objectOrClipArray ) ) {\n\n\t\t\tconst o = objectOrClipArray;\n\t\t\tclipArray = o.geometry && o.geometry.animations || o.animations;\n\n\t\t}\n\n\t\tfor ( let 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\tconst 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\tconst 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 ( let i = 0, il = morphTargets.length; i < il; i ++ ) {\n\n\t\t\tconst morphTarget = morphTargets[ i ];\n\t\t\tconst parts = morphTarget.name.match( pattern );\n\n\t\t\tif ( parts && parts.length > 1 ) {\n\n\t\t\t\tconst name = parts[ 1 ];\n\n\t\t\t\tlet animationMorphTargets = animationToMorphTargets[ name ];\n\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\tconst clips = [];\n\n\t\tfor ( const 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\tconst 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\tconst times = [];\n\t\t\t\tconst 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\tconst tracks = [];\n\n\t\tconst clipName = animation.name || 'default';\n\t\tconst fps = animation.fps || 30;\n\t\tconst blendMode = animation.blendMode;\n\n\t\t// automatic length determination in AnimationClip.\n\t\tlet duration = animation.length || - 1;\n\n\t\tconst hierarchyTracks = animation.hierarchy || [];\n\n\t\tfor ( let h = 0; h < hierarchyTracks.length; h ++ ) {\n\n\t\t\tconst 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\tconst morphTargetNames = {};\n\n\t\t\t\tlet k;\n\n\t\t\t\tfor ( k = 0; k < animationKeys.length; k ++ ) {\n\n\t\t\t\t\tif ( animationKeys[ k ].morphTargets ) {\n\n\t\t\t\t\t\tfor ( let 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 ( const morphTargetName in morphTargetNames ) {\n\n\t\t\t\t\tconst times = [];\n\t\t\t\t\tconst values = [];\n\n\t\t\t\t\tfor ( let m = 0; m !== animationKeys[ k ].morphTargets.length; ++ m ) {\n\n\t\t\t\t\t\tconst 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\tconst 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\tconst clip = new AnimationClip( clipName, duration, tracks, blendMode );\n\n\t\treturn clip;\n\n\t}\n\n} );\n\nObject.assign( AnimationClip.prototype, {\n\n\tresetDuration: function () {\n\n\t\tconst tracks = this.tracks;\n\t\tlet duration = 0;\n\n\t\tfor ( let i = 0, n = tracks.length; i !== n; ++ i ) {\n\n\t\t\tconst 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\treturn this;\n\n\t},\n\n\ttrim: function () {\n\n\t\tfor ( let 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\tvalidate: function () {\n\n\t\tlet valid = true;\n\n\t\tfor ( let i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\tvalid = valid && this.tracks[ i ].validate();\n\n\t\t}\n\n\t\treturn valid;\n\n\t},\n\n\toptimize: function () {\n\n\t\tfor ( let 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\tclone: function () {\n\n\t\tconst tracks = [];\n\n\t\tfor ( let i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\ttracks.push( this.tracks[ i ].clone() );\n\n\t\t}\n\n\t\treturn new AnimationClip( this.name, this.duration, tracks, this.blendMode );\n\n\t}\n\n} );\n\nconst 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\nfunction LoadingManager( onLoad, onProgress, onError ) {\n\n\tconst scope = this;\n\n\tlet isLoading = false;\n\tlet itemsLoaded = 0;\n\tlet itemsTotal = 0;\n\tlet urlModifier = undefined;\n\tconst handlers = [];\n\n\t// Refer to #5689 for the reason why we don't set .onStart\n\t// in the constructor\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\n\t\treturn this;\n\n\t};\n\n\tthis.addHandler = function ( regex, loader ) {\n\n\t\thandlers.push( regex, loader );\n\n\t\treturn this;\n\n\t};\n\n\tthis.removeHandler = function ( regex ) {\n\n\t\tconst index = handlers.indexOf( regex );\n\n\t\tif ( index !== - 1 ) {\n\n\t\t\thandlers.splice( index, 2 );\n\n\t\t}\n\n\t\treturn this;\n\n\t};\n\n\tthis.getHandler = function ( file ) {\n\n\t\tfor ( let i = 0, l = handlers.length; i < l; i += 2 ) {\n\n\t\t\tconst regex = handlers[ i ];\n\t\t\tconst loader = handlers[ i + 1 ];\n\n\t\t\tif ( regex.global ) regex.lastIndex = 0; // see #17920\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\nconst DefaultLoadingManager = new LoadingManager();\n\nfunction Loader( manager ) {\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n\tthis.crossOrigin = 'anonymous';\n\tthis.path = '';\n\tthis.resourcePath = '';\n\tthis.requestHeader = {};\n\n}\n\nObject.assign( Loader.prototype, {\n\n\tload: function ( /* url, onLoad, onProgress, onError */ ) {},\n\n\tloadAsync: function ( url, onProgress ) {\n\n\t\tconst scope = this;\n\n\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\tscope.load( url, resolve, onProgress, reject );\n\n\t\t} );\n\n\t},\n\n\tparse: function ( /* data */ ) {},\n\n\tsetCrossOrigin: function ( crossOrigin ) {\n\n\t\tthis.crossOrigin = crossOrigin;\n\t\treturn this;\n\n\t},\n\n\tsetPath: function ( path ) {\n\n\t\tthis.path = path;\n\t\treturn this;\n\n\t},\n\n\tsetResourcePath: function ( resourcePath ) {\n\n\t\tthis.resourcePath = resourcePath;\n\t\treturn this;\n\n\t},\n\n\tsetRequestHeader: function ( requestHeader ) {\n\n\t\tthis.requestHeader = requestHeader;\n\t\treturn this;\n\n\t}\n\n} );\n\nconst loading = {};\n\nfunction FileLoader( manager ) {\n\n\tLoader.call( this, manager );\n\n}\n\nFileLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\tconstructor: FileLoader,\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\tconst scope = this;\n\n\t\tconst 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\tconst dataUriRegex = /^data:(.*?)(;base64)?,(.*)$/;\n\t\tconst dataUriRegexResult = url.match( dataUriRegex );\n\t\tlet request;\n\n\t\t// Safari can not handle Data URIs through XMLHttpRequest so process manually\n\t\tif ( dataUriRegexResult ) {\n\n\t\t\tconst mimeType = dataUriRegexResult[ 1 ];\n\t\t\tconst isBase64 = !! dataUriRegexResult[ 2 ];\n\n\t\t\tlet data = dataUriRegexResult[ 3 ];\n\t\t\tdata = decodeURIComponent( data );\n\n\t\t\tif ( isBase64 ) data = atob( data );\n\n\t\t\ttry {\n\n\t\t\t\tlet response;\n\t\t\t\tconst 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\tconst view = new Uint8Array( data.length );\n\n\t\t\t\t\t\tfor ( let 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\tconst 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\tsetTimeout( 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\tsetTimeout( function () {\n\n\t\t\t\t\tif ( onError ) onError( error );\n\n\t\t\t\t\tscope.manager.itemError( url );\n\t\t\t\t\tscope.manager.itemEnd( 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\trequest = 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\tconst response = this.response;\n\n\t\t\t\tconst callbacks = loading[ url ];\n\n\t\t\t\tdelete loading[ url ];\n\n\t\t\t\tif ( this.status === 200 || 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\tif ( this.status === 0 ) console.warn( 'THREE.FileLoader: HTTP Status 0 received.' );\n\n\t\t\t\t\t// Add to cache only on HTTP success, so that we do not cache\n\t\t\t\t\t// error response bodies as proper responses to requests.\n\t\t\t\t\tCache.add( url, response );\n\n\t\t\t\t\tfor ( let i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst 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 ( let i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst 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.itemError( url );\n\t\t\t\t\tscope.manager.itemEnd( 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\tconst callbacks = loading[ url ];\n\n\t\t\t\tfor ( let i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst 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\tconst callbacks = loading[ url ];\n\n\t\t\t\tdelete loading[ url ];\n\n\t\t\t\tfor ( let i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst 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.itemError( url );\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, false );\n\n\t\t\trequest.addEventListener( 'abort', function ( event ) {\n\n\t\t\t\tconst callbacks = loading[ url ];\n\n\t\t\t\tdelete loading[ url ];\n\n\t\t\t\tfor ( let i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst 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.itemError( url );\n\t\t\t\tscope.manager.itemEnd( 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 ( const 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\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} );\n\nfunction AnimationLoader( manager ) {\n\n\tLoader.call( this, manager );\n\n}\n\nAnimationLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\tconstructor: AnimationLoader,\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( JSON.parse( text ) ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t},\n\n\tparse: function ( json ) {\n\n\t\tconst animations = [];\n\n\t\tfor ( let i = 0; i < json.length; i ++ ) {\n\n\t\t\tconst 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} );\n\n/**\n * Abstract Base class to block based textures loader (dds, pvr, ...)\n *\n * Sub classes have to implement the parse() method which will be used in load().\n */\n\nfunction CompressedTextureLoader( manager ) {\n\n\tLoader.call( this, manager );\n\n}\n\nCompressedTextureLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\tconstructor: CompressedTextureLoader,\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst images = [];\n\n\t\tconst texture = new CompressedTexture();\n\t\ttexture.image = images;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( this.requestHeader );\n\n\t\tlet loaded = 0;\n\n\t\tfunction loadTexture( i ) {\n\n\t\t\tloader.load( url[ i ], function ( buffer ) {\n\n\t\t\t\tconst texDatas = scope.parse( 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\tfor ( let 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\tconst texDatas = scope.parse( buffer, true );\n\n\t\t\t\tif ( texDatas.isCubemap ) {\n\n\t\t\t\t\tconst faces = texDatas.mipmaps.length / texDatas.mipmapCount;\n\n\t\t\t\t\tfor ( let f = 0; f < faces; f ++ ) {\n\n\t\t\t\t\t\timages[ f ] = { mipmaps: [] };\n\n\t\t\t\t\t\tfor ( let 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} );\n\n/**\n * Abstract Base class to load generic binary textures formats (rgbe, hdr, ...)\n *\n * Sub classes have to implement the parse() method which will be used in load().\n */\n\nfunction DataTextureLoader( manager ) {\n\n\tLoader.call( this, manager );\n\n}\n\nDataTextureLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\tconstructor: DataTextureLoader,\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst texture = new DataTexture();\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setPath( this.path );\n\t\tloader.load( url, function ( buffer ) {\n\n\t\t\tconst texData = scope.parse( buffer );\n\n\t\t\tif ( ! texData ) return;\n\n\t\t\tif ( texData.image !== undefined ) {\n\n\t\t\t\ttexture.image = texData.image;\n\n\t\t\t} else if ( texData.data !== undefined ) {\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 = texData.wrapS !== undefined ? texData.wrapS : ClampToEdgeWrapping;\n\t\t\ttexture.wrapT = texData.wrapT !== undefined ? texData.wrapT : ClampToEdgeWrapping;\n\n\t\t\ttexture.magFilter = texData.magFilter !== undefined ? texData.magFilter : LinearFilter;\n\t\t\ttexture.minFilter = texData.minFilter !== undefined ? texData.minFilter : LinearFilter;\n\n\t\t\ttexture.anisotropy = texData.anisotropy !== undefined ? texData.anisotropy : 1;\n\n\t\t\tif ( texData.format !== undefined ) {\n\n\t\t\t\ttexture.format = texData.format;\n\n\t\t\t}\n\n\t\t\tif ( texData.type !== undefined ) {\n\n\t\t\t\ttexture.type = texData.type;\n\n\t\t\t}\n\n\t\t\tif ( texData.mipmaps !== undefined ) {\n\n\t\t\t\ttexture.mipmaps = texData.mipmaps;\n\t\t\t\ttexture.minFilter = LinearMipmapLinearFilter; // presumably...\n\n\t\t\t}\n\n\t\t\tif ( texData.mipmapCount === 1 ) {\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\nfunction ImageLoader( manager ) {\n\n\tLoader.call( this, manager );\n\n}\n\nImageLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\tconstructor: ImageLoader,\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tif ( this.path !== undefined ) url = this.path + url;\n\n\t\turl = this.manager.resolveURL( url );\n\n\t\tconst scope = this;\n\n\t\tconst 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\tconst image = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'img' );\n\n\t\tfunction onImageLoad() {\n\n\t\t\timage.removeEventListener( 'load', onImageLoad, false );\n\t\t\timage.removeEventListener( 'error', onImageError, false );\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}\n\n\t\tfunction onImageError( event ) {\n\n\t\t\timage.removeEventListener( 'load', onImageLoad, false );\n\t\t\timage.removeEventListener( 'error', onImageError, false );\n\n\t\t\tif ( onError ) onError( event );\n\n\t\t\tscope.manager.itemError( url );\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t}\n\n\t\timage.addEventListener( 'load', onImageLoad, false );\n\t\timage.addEventListener( 'error', onImageError, 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} );\n\nfunction CubeTextureLoader( manager ) {\n\n\tLoader.call( this, manager );\n\n}\n\nCubeTextureLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\tconstructor: CubeTextureLoader,\n\n\tload: function ( urls, onLoad, onProgress, onError ) {\n\n\t\tconst texture = new CubeTexture();\n\n\t\tconst loader = new ImageLoader( this.manager );\n\t\tloader.setCrossOrigin( this.crossOrigin );\n\t\tloader.setPath( this.path );\n\n\t\tlet 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 ( let 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} );\n\nfunction TextureLoader( manager ) {\n\n\tLoader.call( this, manager );\n\n}\n\nTextureLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\tconstructor: TextureLoader,\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tconst texture = new Texture();\n\n\t\tconst 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\tconst isJPEG = url.search( /\\.jpe?g($|\\?)/i ) > 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} );\n\n/**\n * Extensible curve object.\n *\n * Some common of curve methods:\n * .getPoint( t, optionalTarget ), .getTangent( t, optionalTarget )\n * .getPointAt( u, optionalTarget ), .getTangentAt( u, optionalTarget )\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\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\tconst 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\tconst points = [];\n\n\t\tfor ( let 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\tconst points = [];\n\n\t\tfor ( let 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\tconst 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\tconst cache = [];\n\t\tlet current, last = this.getPoint( 0 );\n\t\tlet sum = 0;\n\n\t\tcache.push( 0 );\n\n\t\tfor ( let 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\tconst arcLengths = this.getLengths();\n\n\t\tlet i = 0, il = arcLengths.length;\n\n\t\tlet 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\tlet 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\tconst lengthBefore = arcLengths[ i ];\n\t\tconst lengthAfter = arcLengths[ i + 1 ];\n\n\t\tconst segmentLength = lengthAfter - lengthBefore;\n\n\t\t// determine where we are between the 'before' and 'after' points\n\n\t\tconst segmentFraction = ( targetArcLength - lengthBefore ) / segmentLength;\n\n\t\t// add that fractional amount to t\n\n\t\tconst 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, optionalTarget ) {\n\n\t\tconst delta = 0.0001;\n\t\tlet t1 = t - delta;\n\t\tlet 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\tconst pt1 = this.getPoint( t1 );\n\t\tconst pt2 = this.getPoint( t2 );\n\n\t\tconst tangent = optionalTarget || ( ( pt1.isVector2 ) ? new Vector2() : new Vector3() );\n\n\t\ttangent.copy( pt2 ).sub( pt1 ).normalize();\n\n\t\treturn tangent;\n\n\t},\n\n\tgetTangentAt: function ( u, optionalTarget ) {\n\n\t\tconst t = this.getUtoTmapping( u );\n\t\treturn this.getTangent( t, optionalTarget );\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\tconst normal = new Vector3();\n\n\t\tconst tangents = [];\n\t\tconst normals = [];\n\t\tconst binormals = [];\n\n\t\tconst vec = new Vector3();\n\t\tconst mat = new Matrix4();\n\n\t\t// compute the tangent vectors for each segment on the curve\n\n\t\tfor ( let i = 0; i <= segments; i ++ ) {\n\n\t\t\tconst u = i / segments;\n\n\t\t\ttangents[ i ] = this.getTangentAt( u, new Vector3() );\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\tlet min = Number.MAX_VALUE;\n\t\tconst tx = Math.abs( tangents[ 0 ].x );\n\t\tconst ty = Math.abs( tangents[ 0 ].y );\n\t\tconst 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 ( let 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\tconst theta = Math.acos( MathUtils.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\tlet theta = Math.acos( MathUtils.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 ( let 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\tconst 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\tconst point = optionalTarget || new Vector2();\n\n\tconst twoPi = Math.PI * 2;\n\tlet deltaAngle = this.aEndAngle - this.aStartAngle;\n\tconst 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\tconst angle = this.aStartAngle + t * deltaAngle;\n\tlet x = this.aX + this.xRadius * Math.cos( angle );\n\tlet y = this.aY + this.yRadius * Math.sin( angle );\n\n\tif ( this.aRotation !== 0 ) {\n\n\t\tconst cos = Math.cos( this.aRotation );\n\t\tconst sin = Math.sin( this.aRotation );\n\n\t\tconst tx = x - this.aX;\n\t\tconst 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\tconst 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 * 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\tlet 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\tlet t1 = ( x1 - x0 ) / dt0 - ( x2 - x0 ) / ( dt0 + dt1 ) + ( x2 - x1 ) / dt1;\n\t\t\tlet 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\tconst t2 = t * t;\n\t\t\tconst 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\nconst tmp = new Vector3();\nconst px = new CubicPoly(), py = new CubicPoly(), 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 !== undefined ) ? 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\tconst point = optionalTarget || new Vector3();\n\n\tconst points = this.points;\n\tconst l = points.length;\n\n\tconst p = ( l - ( this.closed ? 0 : 1 ) ) * t;\n\tlet intPoint = Math.floor( p );\n\tlet 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\tlet 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\tconst pow = this.curveType === 'chordal' ? 0.5 : 0.25;\n\t\tlet dt0 = Math.pow( p0.distanceToSquared( p1 ), pow );\n\t\tlet dt1 = Math.pow( p1.distanceToSquared( p2 ), pow );\n\t\tlet 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 ( let i = 0, l = source.points.length; i < l; i ++ ) {\n\n\t\tconst 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\tconst data = Curve.prototype.toJSON.call( this );\n\n\tdata.points = [];\n\n\tfor ( let i = 0, l = this.points.length; i < l; i ++ ) {\n\n\t\tconst 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 ( let i = 0, l = json.points.length; i < l; i ++ ) {\n\n\t\tconst 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 * 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\tconst v0 = ( p2 - p0 ) * 0.5;\n\tconst v1 = ( p3 - p1 ) * 0.5;\n\tconst t2 = t * t;\n\tconst 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\tconst 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\tconst k = 1 - t;\n\treturn k * k * k * p;\n\n}\n\nfunction CubicBezierP1( t, p ) {\n\n\tconst 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\tconst point = optionalTarget || new Vector2();\n\n\tconst 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\tconst 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\tconst point = optionalTarget || new Vector3();\n\n\tconst 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\tconst 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\tconst 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, optionalTarget ) {\n\n\tconst tangent = optionalTarget || new Vector2();\n\n\ttangent.copy( this.v2 ).sub( this.v1 ).normalize();\n\n\treturn tangent;\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\tconst 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\tconst 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\tconst 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\tconst point = optionalTarget || new Vector2();\n\n\tconst 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\tconst 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\tconst point = optionalTarget || new Vector3();\n\n\tconst 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\tconst 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 ) {\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\tconst point = optionalTarget || new Vector2();\n\n\tconst points = this.points;\n\tconst p = ( points.length - 1 ) * t;\n\n\tconst intPoint = Math.floor( p );\n\tconst weight = p - intPoint;\n\n\tconst p0 = points[ intPoint === 0 ? intPoint : intPoint - 1 ];\n\tconst p1 = points[ intPoint ];\n\tconst p2 = points[ intPoint > points.length - 2 ? points.length - 1 : intPoint + 1 ];\n\tconst 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 ( let i = 0, l = source.points.length; i < l; i ++ ) {\n\n\t\tconst 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\tconst data = Curve.prototype.toJSON.call( this );\n\n\tdata.points = [];\n\n\tfor ( let i = 0, l = this.points.length; i < l; i ++ ) {\n\n\t\tconst 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 ( let i = 0, l = json.points.length; i < l; i ++ ) {\n\n\t\tconst point = json.points[ i ];\n\t\tthis.points.push( new Vector2().fromArray( point ) );\n\n\t}\n\n\treturn this;\n\n};\n\nvar Curves = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\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 *\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\tconst startPoint = this.curves[ 0 ].getPoint( 0 );\n\t\tconst 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\tconst d = t * this.getLength();\n\t\tconst curveLengths = this.getCurveLengths();\n\t\tlet 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\tconst diff = curveLengths[ i ] - d;\n\t\t\t\tconst curve = this.curves[ i ];\n\n\t\t\t\tconst segmentLength = curve.getLength();\n\t\t\t\tconst 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 ( let i = 0, l = source.curves.length; i < l; i ++ ) {\n\n\t\t\tconst 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\tconst data = Curve.prototype.toJSON.call( this );\n\n\t\tdata.autoClose = this.autoClose;\n\t\tdata.curves = [];\n\n\t\tfor ( let i = 0, l = this.curves.length; i < l; i ++ ) {\n\n\t\t\tconst 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 ( let i = 0, l = json.curves.length; i < l; i ++ ) {\n\n\t\t\tconst 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\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 ( let 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\treturn this;\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\treturn this;\n\n\t},\n\n\tlineTo: function ( x, y ) {\n\n\t\tconst 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\treturn this;\n\n\t},\n\n\tquadraticCurveTo: function ( aCPx, aCPy, aX, aY ) {\n\n\t\tconst 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\treturn this;\n\n\t},\n\n\tbezierCurveTo: function ( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ) {\n\n\t\tconst 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\treturn this;\n\n\t},\n\n\tsplineThru: function ( pts /*Array of Vector*/ ) {\n\n\t\tconst npts = [ this.currentPoint.clone() ].concat( pts );\n\n\t\tconst curve = new SplineCurve( npts );\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.copy( pts[ pts.length - 1 ] );\n\n\t\treturn this;\n\n\t},\n\n\tarc: function ( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {\n\n\t\tconst x0 = this.currentPoint.x;\n\t\tconst y0 = this.currentPoint.y;\n\n\t\tthis.absarc( aX + x0, aY + y0, aRadius,\n\t\t\taStartAngle, aEndAngle, aClockwise );\n\n\t\treturn this;\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\treturn this;\n\n\t},\n\n\tellipse: function ( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) {\n\n\t\tconst x0 = this.currentPoint.x;\n\t\tconst y0 = this.currentPoint.y;\n\n\t\tthis.absellipse( aX + x0, aY + y0, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation );\n\n\t\treturn this;\n\n\t},\n\n\tabsellipse: function ( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) {\n\n\t\tconst 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\tconst 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\tconst lastPoint = curve.getPoint( 1 );\n\t\tthis.currentPoint.copy( lastPoint );\n\n\t\treturn this;\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\tconst 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\nfunction Shape( points ) {\n\n\tPath.call( this, points );\n\n\tthis.uuid = MathUtils.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\tconst holesPts = [];\n\n\t\tfor ( let 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 ( let i = 0, l = source.holes.length; i < l; i ++ ) {\n\n\t\t\tconst 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\tconst data = Path.prototype.toJSON.call( this );\n\n\t\tdata.uuid = this.uuid;\n\t\tdata.holes = [];\n\n\t\tfor ( let i = 0, l = this.holes.length; i < l; i ++ ) {\n\n\t\t\tconst 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 ( let i = 0, l = json.holes.length; i < l; i ++ ) {\n\n\t\t\tconst 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\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\tconst 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\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\nfunction LightShadow( camera ) {\n\n\tthis.camera = camera;\n\n\tthis.bias = 0;\n\tthis.normalBias = 0;\n\tthis.radius = 1;\n\n\tthis.mapSize = new Vector2( 512, 512 );\n\n\tthis.map = null;\n\tthis.mapPass = null;\n\tthis.matrix = new Matrix4();\n\n\tthis.autoUpdate = true;\n\tthis.needsUpdate = false;\n\n\tthis._frustum = new Frustum();\n\tthis._frameExtents = new Vector2( 1, 1 );\n\n\tthis._viewportCount = 1;\n\n\tthis._viewports = [\n\n\t\tnew Vector4( 0, 0, 1, 1 )\n\n\t];\n\n}\n\nObject.assign( LightShadow.prototype, {\n\n\t_projScreenMatrix: new Matrix4(),\n\n\t_lightPositionWorld: new Vector3(),\n\n\t_lookTarget: new Vector3(),\n\n\tgetViewportCount: function () {\n\n\t\treturn this._viewportCount;\n\n\t},\n\n\tgetFrustum: function () {\n\n\t\treturn this._frustum;\n\n\t},\n\n\tupdateMatrices: function ( light ) {\n\n\t\tconst shadowCamera = this.camera,\n\t\t\tshadowMatrix = this.matrix,\n\t\t\tprojScreenMatrix = this._projScreenMatrix,\n\t\t\tlookTarget = this._lookTarget,\n\t\t\tlightPositionWorld = this._lightPositionWorld;\n\n\t\tlightPositionWorld.setFromMatrixPosition( light.matrixWorld );\n\t\tshadowCamera.position.copy( lightPositionWorld );\n\n\t\tlookTarget.setFromMatrixPosition( light.target.matrixWorld );\n\t\tshadowCamera.lookAt( lookTarget );\n\t\tshadowCamera.updateMatrixWorld();\n\n\t\tprojScreenMatrix.multiplyMatrices( shadowCamera.projectionMatrix, shadowCamera.matrixWorldInverse );\n\t\tthis._frustum.setFromProjectionMatrix( projScreenMatrix );\n\n\t\tshadowMatrix.set(\n\t\t\t0.5, 0.0, 0.0, 0.5,\n\t\t\t0.0, 0.5, 0.0, 0.5,\n\t\t\t0.0, 0.0, 0.5, 0.5,\n\t\t\t0.0, 0.0, 0.0, 1.0\n\t\t);\n\n\t\tshadowMatrix.multiply( shadowCamera.projectionMatrix );\n\t\tshadowMatrix.multiply( shadowCamera.matrixWorldInverse );\n\n\t},\n\n\tgetViewport: function ( viewportIndex ) {\n\n\t\treturn this._viewports[ viewportIndex ];\n\n\t},\n\n\tgetFrameExtents: function () {\n\n\t\treturn this._frameExtents;\n\n\t},\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\tconst object = {};\n\n\t\tif ( this.bias !== 0 ) object.bias = this.bias;\n\t\tif ( this.normalBias !== 0 ) object.normalBias = this.normalBias;\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\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\tupdateMatrices: function ( light ) {\n\n\t\tconst camera = this.camera;\n\n\t\tconst fov = MathUtils.RAD2DEG * 2 * light.angle;\n\t\tconst aspect = this.mapSize.width / this.mapSize.height;\n\t\tconst 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\tLightShadow.prototype.updateMatrices.call( this, light );\n\n\t}\n\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\nfunction PointLightShadow() {\n\n\tLightShadow.call( this, new PerspectiveCamera( 90, 1, 0.5, 500 ) );\n\n\tthis._frameExtents = new Vector2( 4, 2 );\n\n\tthis._viewportCount = 6;\n\n\tthis._viewports = [\n\t\t// These viewports map a cube-map onto a 2D texture with the\n\t\t// following orientation:\n\t\t//\n\t\t// xzXZ\n\t\t// y Y\n\t\t//\n\t\t// X - Positive x direction\n\t\t// x - Negative x direction\n\t\t// Y - Positive y direction\n\t\t// y - Negative y direction\n\t\t// Z - Positive z direction\n\t\t// z - Negative z direction\n\n\t\t// positive X\n\t\tnew Vector4( 2, 1, 1, 1 ),\n\t\t// negative X\n\t\tnew Vector4( 0, 1, 1, 1 ),\n\t\t// positive Z\n\t\tnew Vector4( 3, 1, 1, 1 ),\n\t\t// negative Z\n\t\tnew Vector4( 1, 1, 1, 1 ),\n\t\t// positive Y\n\t\tnew Vector4( 3, 0, 1, 1 ),\n\t\t// negative Y\n\t\tnew Vector4( 1, 0, 1, 1 )\n\t];\n\n\tthis._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\tthis._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}\n\nPointLightShadow.prototype = Object.assign( Object.create( LightShadow.prototype ), {\n\n\tconstructor: PointLightShadow,\n\n\tisPointLightShadow: true,\n\n\tupdateMatrices: function ( light, viewportIndex ) {\n\n\t\tif ( viewportIndex === undefined ) viewportIndex = 0;\n\n\t\tconst camera = this.camera,\n\t\t\tshadowMatrix = this.matrix,\n\t\t\tlightPositionWorld = this._lightPositionWorld,\n\t\t\tlookTarget = this._lookTarget,\n\t\t\tprojScreenMatrix = this._projScreenMatrix;\n\n\t\tlightPositionWorld.setFromMatrixPosition( light.matrixWorld );\n\t\tcamera.position.copy( lightPositionWorld );\n\n\t\tlookTarget.copy( camera.position );\n\t\tlookTarget.add( this._cubeDirections[ viewportIndex ] );\n\t\tcamera.up.copy( this._cubeUps[ viewportIndex ] );\n\t\tcamera.lookAt( lookTarget );\n\t\tcamera.updateMatrixWorld();\n\n\t\tshadowMatrix.makeTranslation( - lightPositionWorld.x, - lightPositionWorld.y, - lightPositionWorld.z );\n\n\t\tprojScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );\n\t\tthis._frustum.setFromProjectionMatrix( projScreenMatrix );\n\n\t}\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 PointLightShadow();\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\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 !== undefined ) ? left : - 1;\n\tthis.right = ( right !== undefined ) ? right : 1;\n\tthis.top = ( top !== undefined ) ? top : 1;\n\tthis.bottom = ( bottom !== undefined ) ? bottom : - 1;\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\tconst dx = ( this.right - this.left ) / ( 2 * this.zoom );\n\t\tconst dy = ( this.top - this.bottom ) / ( 2 * this.zoom );\n\t\tconst cx = ( this.right + this.left ) / 2;\n\t\tconst cy = ( this.top + this.bottom ) / 2;\n\n\t\tlet left = cx - dx;\n\t\tlet right = cx + dx;\n\t\tlet top = cy + dy;\n\t\tlet bottom = cy - dy;\n\n\t\tif ( this.view !== null && this.view.enabled ) {\n\n\t\t\tconst scaleW = ( this.right - this.left ) / this.view.fullWidth / this.zoom;\n\t\t\tconst scaleH = ( this.top - this.bottom ) / this.view.fullHeight / this.zoom;\n\n\t\t\tleft += scaleW * this.view.offsetX;\n\t\t\tright = left + scaleW * this.view.width;\n\t\t\ttop -= scaleH * this.view.offsetY;\n\t\t\tbottom = top - scaleH * this.view.height;\n\n\t\t}\n\n\t\tthis.projectionMatrix.makeOrthographic( left, right, top, bottom, this.near, this.far );\n\n\t\tthis.projectionMatrixInverse.getInverse( this.projectionMatrix );\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\tconst 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\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\tisDirectionalLightShadow: true,\n\n\tupdateMatrices: function ( light ) {\n\n\t\tLightShadow.prototype.updateMatrices.call( this, light );\n\n\t}\n\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\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\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\tconst 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 * Primary reference:\n * https://graphics.stanford.edu/papers/envmap/envmap.pdf\n *\n * Secondary reference:\n * https://www.ppsloan.org/publications/StupidSH36.pdf\n */\n\n// 3-band SH defined by 9 coefficients\n\nfunction SphericalHarmonics3() {\n\n\tthis.coefficients = [];\n\n\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\tthis.coefficients.push( new Vector3() );\n\n\t}\n\n}\n\nObject.assign( SphericalHarmonics3.prototype, {\n\n\tisSphericalHarmonics3: true,\n\n\tset: function ( coefficients ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].copy( coefficients[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tzero: function () {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].set( 0, 0, 0 );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\t// get the radiance in the direction of the normal\n\t// target is a Vector3\n\tgetAt: function ( normal, target ) {\n\n\t\t// normal is assumed to be unit length\n\n\t\tconst x = normal.x, y = normal.y, z = normal.z;\n\n\t\tconst coeff = this.coefficients;\n\n\t\t// band 0\n\t\ttarget.copy( coeff[ 0 ] ).multiplyScalar( 0.282095 );\n\n\t\t// band 1\n\t\ttarget.addScaledVector( coeff[ 1 ], 0.488603 * y );\n\t\ttarget.addScaledVector( coeff[ 2 ], 0.488603 * z );\n\t\ttarget.addScaledVector( coeff[ 3 ], 0.488603 * x );\n\n\t\t// band 2\n\t\ttarget.addScaledVector( coeff[ 4 ], 1.092548 * ( x * y ) );\n\t\ttarget.addScaledVector( coeff[ 5 ], 1.092548 * ( y * z ) );\n\t\ttarget.addScaledVector( coeff[ 6 ], 0.315392 * ( 3.0 * z * z - 1.0 ) );\n\t\ttarget.addScaledVector( coeff[ 7 ], 1.092548 * ( x * z ) );\n\t\ttarget.addScaledVector( coeff[ 8 ], 0.546274 * ( x * x - y * y ) );\n\n\t\treturn target;\n\n\t},\n\n\t// get the irradiance (radiance convolved with cosine lobe) in the direction of the normal\n\t// target is a Vector3\n\t// https://graphics.stanford.edu/papers/envmap/envmap.pdf\n\tgetIrradianceAt: function ( normal, target ) {\n\n\t\t// normal is assumed to be unit length\n\n\t\tconst x = normal.x, y = normal.y, z = normal.z;\n\n\t\tconst coeff = this.coefficients;\n\n\t\t// band 0\n\t\ttarget.copy( coeff[ 0 ] ).multiplyScalar( 0.886227 ); // π * 0.282095\n\n\t\t// band 1\n\t\ttarget.addScaledVector( coeff[ 1 ], 2.0 * 0.511664 * y ); // ( 2 * π / 3 ) * 0.488603\n\t\ttarget.addScaledVector( coeff[ 2 ], 2.0 * 0.511664 * z );\n\t\ttarget.addScaledVector( coeff[ 3 ], 2.0 * 0.511664 * x );\n\n\t\t// band 2\n\t\ttarget.addScaledVector( coeff[ 4 ], 2.0 * 0.429043 * x * y ); // ( π / 4 ) * 1.092548\n\t\ttarget.addScaledVector( coeff[ 5 ], 2.0 * 0.429043 * y * z );\n\t\ttarget.addScaledVector( coeff[ 6 ], 0.743125 * z * z - 0.247708 ); // ( π / 4 ) * 0.315392 * 3\n\t\ttarget.addScaledVector( coeff[ 7 ], 2.0 * 0.429043 * x * z );\n\t\ttarget.addScaledVector( coeff[ 8 ], 0.429043 * ( x * x - y * y ) ); // ( π / 4 ) * 0.546274\n\n\t\treturn target;\n\n\t},\n\n\tadd: function ( sh ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].add( sh.coefficients[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\taddScaledSH: function ( sh, s ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].addScaledVector( sh.coefficients[ i ], s );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tscale: function ( s ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].multiplyScalar( s );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tlerp: function ( sh, alpha ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].lerp( sh.coefficients[ i ], alpha );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tequals: function ( sh ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tif ( ! this.coefficients[ i ].equals( sh.coefficients[ i ] ) ) {\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\tcopy: function ( sh ) {\n\n\t\treturn this.set( sh.coefficients );\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tfromArray: function ( array, offset ) {\n\n\t\tif ( offset === undefined ) offset = 0;\n\n\t\tconst coefficients = this.coefficients;\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tcoefficients[ i ].fromArray( array, offset + ( i * 3 ) );\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\tconst coefficients = this.coefficients;\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tcoefficients[ i ].toArray( array, offset + ( i * 3 ) );\n\n\t\t}\n\n\t\treturn array;\n\n\t}\n\n} );\n\nObject.assign( SphericalHarmonics3, {\n\n\t// evaluate the basis functions\n\t// shBasis is an Array[ 9 ]\n\tgetBasisAt: function ( normal, shBasis ) {\n\n\t\t// normal is assumed to be unit length\n\n\t\tconst x = normal.x, y = normal.y, z = normal.z;\n\n\t\t// band 0\n\t\tshBasis[ 0 ] = 0.282095;\n\n\t\t// band 1\n\t\tshBasis[ 1 ] = 0.488603 * y;\n\t\tshBasis[ 2 ] = 0.488603 * z;\n\t\tshBasis[ 3 ] = 0.488603 * x;\n\n\t\t// band 2\n\t\tshBasis[ 4 ] = 1.092548 * x * y;\n\t\tshBasis[ 5 ] = 1.092548 * y * z;\n\t\tshBasis[ 6 ] = 0.315392 * ( 3 * z * z - 1 );\n\t\tshBasis[ 7 ] = 1.092548 * x * z;\n\t\tshBasis[ 8 ] = 0.546274 * ( x * x - y * y );\n\n\t}\n\n} );\n\nfunction LightProbe( sh, intensity ) {\n\n\tLight.call( this, undefined, intensity );\n\n\tthis.type = 'LightProbe';\n\n\tthis.sh = ( sh !== undefined ) ? sh : new SphericalHarmonics3();\n\n}\n\nLightProbe.prototype = Object.assign( Object.create( Light.prototype ), {\n\n\tconstructor: LightProbe,\n\n\tisLightProbe: true,\n\n\tcopy: function ( source ) {\n\n\t\tLight.prototype.copy.call( this, source );\n\n\t\tthis.sh.copy( source.sh );\n\n\t\treturn this;\n\n\t},\n\n\tfromJSON: function ( json ) {\n\n\t\tthis.intensity = json.intensity; // TODO: Move this bit to Light.fromJSON();\n\t\tthis.sh.fromArray( json.sh );\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\tconst data = Light.prototype.toJSON.call( this, meta );\n\n\t\tdata.object.sh = this.sh.toArray();\n\n\t\treturn data;\n\n\t}\n\n} );\n\nfunction MaterialLoader( manager ) {\n\n\tLoader.call( this, manager );\n\n\tthis.textures = {};\n\n}\n\nMaterialLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\tconstructor: MaterialLoader,\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( JSON.parse( text ) ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t},\n\n\tparse: function ( json ) {\n\n\t\tconst 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\tconst 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.sheen !== undefined ) material.sheen = new Color().setHex( json.sheen );\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.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.combine !== undefined ) material.combine = json.combine;\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\n\t\tif ( json.stencilWrite !== undefined ) material.stencilWrite = json.stencilWrite;\n\t\tif ( json.stencilWriteMask !== undefined ) material.stencilWriteMask = json.stencilWriteMask;\n\t\tif ( json.stencilFunc !== undefined ) material.stencilFunc = json.stencilFunc;\n\t\tif ( json.stencilRef !== undefined ) material.stencilRef = json.stencilRef;\n\t\tif ( json.stencilFuncMask !== undefined ) material.stencilFuncMask = json.stencilFuncMask;\n\t\tif ( json.stencilFail !== undefined ) material.stencilFail = json.stencilFail;\n\t\tif ( json.stencilZFail !== undefined ) material.stencilZFail = json.stencilZFail;\n\t\tif ( json.stencilZPass !== undefined ) material.stencilZPass = json.stencilZPass;\n\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.morphNormals !== undefined ) material.morphNormals = json.morphNormals;\n\t\tif ( json.dithering !== undefined ) material.dithering = json.dithering;\n\n\t\tif ( json.vertexTangents !== undefined ) material.vertexTangents = json.vertexTangents;\n\n\t\tif ( json.visible !== undefined ) material.visible = json.visible;\n\n\t\tif ( json.toneMapped !== undefined ) material.toneMapped = json.toneMapped;\n\n\t\tif ( json.userData !== undefined ) material.userData = json.userData;\n\n\t\tif ( json.vertexColors !== undefined ) {\n\n\t\t\tif ( typeof json.vertexColors === 'number' ) {\n\n\t\t\t\tmaterial.vertexColors = ( json.vertexColors > 0 ) ? true : false;\n\n\t\t\t} else {\n\n\t\t\t\tmaterial.vertexColors = json.vertexColors;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Shader Material\n\n\t\tif ( json.uniforms !== undefined ) {\n\n\t\t\tfor ( const name in json.uniforms ) {\n\n\t\t\t\tconst uniform = json.uniforms[ name ];\n\n\t\t\t\tmaterial.uniforms[ name ] = {};\n\n\t\t\t\tswitch ( uniform.type ) {\n\n\t\t\t\t\tcase 't':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = getTexture( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'c':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Color().setHex( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'v2':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Vector2().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'v3':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Vector3().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'v4':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Vector4().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'm3':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Matrix3().fromArray( uniform.value );\n\n\t\t\t\t\tcase 'm4':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Matrix4().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = uniform.value;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( json.defines !== undefined ) material.defines = json.defines;\n\t\tif ( json.vertexShader !== undefined ) material.vertexShader = json.vertexShader;\n\t\tif ( json.fragmentShader !== undefined ) material.fragmentShader = json.fragmentShader;\n\n\t\tif ( json.extensions !== undefined ) {\n\n\t\t\tfor ( const key in json.extensions ) {\n\n\t\t\t\tmaterial.extensions[ key ] = json.extensions[ key ];\n\n\t\t\t}\n\n\t\t}\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\t\tif ( json.matcap !== undefined ) material.matcap = getTexture( json.matcap );\n\n\t\tif ( json.alphaMap !== undefined ) material.alphaMap = getTexture( json.alphaMap );\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.normalMapType !== undefined ) material.normalMapType = json.normalMapType;\n\t\tif ( json.normalScale !== undefined ) {\n\n\t\t\tlet 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\t\tif ( json.envMapIntensity !== undefined ) material.envMapIntensity = json.envMapIntensity;\n\n\t\tif ( json.reflectivity !== undefined ) material.reflectivity = json.reflectivity;\n\t\tif ( json.refractionRatio !== undefined ) material.refractionRatio = json.refractionRatio;\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\tif ( json.clearcoatMap !== undefined ) material.clearcoatMap = getTexture( json.clearcoatMap );\n\t\tif ( json.clearcoatRoughnessMap !== undefined ) material.clearcoatRoughnessMap = getTexture( json.clearcoatRoughnessMap );\n\t\tif ( json.clearcoatNormalMap !== undefined ) material.clearcoatNormalMap = getTexture( json.clearcoatNormalMap );\n\t\tif ( json.clearcoatNormalScale !== undefined ) material.clearcoatNormalScale = new Vector2().fromArray( json.clearcoatNormalScale );\n\n\t\tif ( json.transmission !== undefined ) material.transmission = json.transmission;\n\t\tif ( json.transmissionMap !== undefined ) material.transmissionMap = getTexture( json.transmissionMap );\n\n\t\treturn material;\n\n\t},\n\n\tsetTextures: function ( value ) {\n\n\t\tthis.textures = value;\n\t\treturn this;\n\n\t}\n\n} );\n\nconst 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\tlet s = '';\n\n\t\tfor ( let 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\ttry {\n\n\t\t\t// merges multi-byte utf-8 characters.\n\n\t\t\treturn decodeURIComponent( escape( s ) );\n\n\t\t} catch ( e ) { // see #16358\n\n\t\t\treturn s;\n\n\t\t}\n\n\t},\n\n\textractUrlBase: function ( url ) {\n\n\t\tconst 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\nfunction InstancedBufferGeometry() {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'InstancedBufferGeometry';\n\tthis.instanceCount = Infinity;\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.instanceCount = source.instanceCount;\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\tconst data = BufferGeometry.prototype.toJSON.call( this );\n\n\t\tdata.instanceCount = this.instanceCount;\n\n\t\tdata.isInstancedBufferGeometry = true;\n\n\t\treturn data;\n\n\t}\n\n} );\n\nfunction InstancedBufferAttribute( array, itemSize, normalized, meshPerAttribute ) {\n\n\tif ( typeof ( normalized ) === 'number' ) {\n\n\t\tmeshPerAttribute = normalized;\n\n\t\tnormalized = false;\n\n\t\tconsole.error( 'THREE.InstancedBufferAttribute: The constructor now expects normalized as the third argument.' );\n\n\t}\n\n\tBufferAttribute.call( this, array, itemSize, normalized );\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\ttoJSON: function ()\t{\n\n\t\tconst data = BufferAttribute.prototype.toJSON.call( this );\n\n\t\tdata.meshPerAttribute = this.meshPerAttribute;\n\n\t\tdata.isInstancedBufferAttribute = true;\n\n\t\treturn data;\n\n\t}\n\n} );\n\nfunction BufferGeometryLoader( manager ) {\n\n\tLoader.call( this, manager );\n\n}\n\nBufferGeometryLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\tconstructor: BufferGeometryLoader,\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( JSON.parse( text ) ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t},\n\n\tparse: function ( json ) {\n\n\t\tconst interleavedBufferMap = {};\n\t\tconst arrayBufferMap = {};\n\n\t\tfunction getInterleavedBuffer( json, uuid ) {\n\n\t\t\tif ( interleavedBufferMap[ uuid ] !== undefined ) return interleavedBufferMap[ uuid ];\n\n\t\t\tconst interleavedBuffers = json.interleavedBuffers;\n\t\t\tconst interleavedBuffer = interleavedBuffers[ uuid ];\n\n\t\t\tconst buffer = getArrayBuffer( json, interleavedBuffer.buffer );\n\n\t\t\tconst array = new TYPED_ARRAYS[ interleavedBuffer.type ]( buffer );\n\t\t\tconst ib = new InterleavedBuffer( array, interleavedBuffer.stride );\n\t\t\tib.uuid = interleavedBuffer.uuid;\n\n\t\t\tinterleavedBufferMap[ uuid ] = ib;\n\n\t\t\treturn ib;\n\n\t\t}\n\n\t\tfunction getArrayBuffer( json, uuid ) {\n\n\t\t\tif ( arrayBufferMap[ uuid ] !== undefined ) return arrayBufferMap[ uuid ];\n\n\t\t\tconst arrayBuffers = json.arrayBuffers;\n\t\t\tconst arrayBuffer = arrayBuffers[ uuid ];\n\n\t\t\tconst ab = new Uint32Array( arrayBuffer ).buffer;\n\n\t\t\tarrayBufferMap[ uuid ] = ab;\n\n\t\t\treturn ab;\n\n\t\t}\n\n\t\tconst geometry = json.isInstancedBufferGeometry ? new InstancedBufferGeometry() : new BufferGeometry();\n\n\t\tconst index = json.data.index;\n\n\t\tif ( index !== undefined ) {\n\n\t\t\tconst typedArray = new TYPED_ARRAYS[ index.type ]( index.array );\n\t\t\tgeometry.setIndex( new BufferAttribute( typedArray, 1 ) );\n\n\t\t}\n\n\t\tconst attributes = json.data.attributes;\n\n\t\tfor ( const key in attributes ) {\n\n\t\t\tconst attribute = attributes[ key ];\n\t\t\tlet bufferAttribute;\n\n\t\t\tif ( attribute.isInterleavedBufferAttribute ) {\n\n\t\t\t\tconst interleavedBuffer = getInterleavedBuffer( json.data, attribute.data );\n\t\t\t\tbufferAttribute = new InterleavedBufferAttribute( interleavedBuffer, attribute.itemSize, attribute.offset, attribute.normalized );\n\n\t\t\t} else {\n\n\t\t\t\tconst typedArray = new TYPED_ARRAYS[ attribute.type ]( attribute.array );\n\t\t\t\tconst bufferAttributeConstr = attribute.isInstancedBufferAttribute ? InstancedBufferAttribute : BufferAttribute;\n\t\t\t\tbufferAttribute = new bufferAttributeConstr( typedArray, attribute.itemSize, attribute.normalized );\n\n\t\t\t}\n\n\t\t\tif ( attribute.name !== undefined ) bufferAttribute.name = attribute.name;\n\t\t\tgeometry.setAttribute( key, bufferAttribute );\n\n\t\t}\n\n\t\tconst morphAttributes = json.data.morphAttributes;\n\n\t\tif ( morphAttributes ) {\n\n\t\t\tfor ( const key in morphAttributes ) {\n\n\t\t\t\tconst attributeArray = morphAttributes[ key ];\n\n\t\t\t\tconst array = [];\n\n\t\t\t\tfor ( let i = 0, il = attributeArray.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst attribute = attributeArray[ i ];\n\t\t\t\t\tlet bufferAttribute;\n\n\t\t\t\t\tif ( attribute.isInterleavedBufferAttribute ) {\n\n\t\t\t\t\t\tconst interleavedBuffer = getInterleavedBuffer( json.data, attribute.data );\n\t\t\t\t\t\tbufferAttribute = new InterleavedBufferAttribute( interleavedBuffer, attribute.itemSize, attribute.offset, attribute.normalized );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconst typedArray = new TYPED_ARRAYS[ attribute.type ]( attribute.array );\n\t\t\t\t\t\tbufferAttribute = new BufferAttribute( typedArray, attribute.itemSize, attribute.normalized );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( attribute.name !== undefined ) bufferAttribute.name = attribute.name;\n\t\t\t\t\tarray.push( bufferAttribute );\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.morphAttributes[ key ] = array;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst morphTargetsRelative = json.data.morphTargetsRelative;\n\n\t\tif ( morphTargetsRelative ) {\n\n\t\t\tgeometry.morphTargetsRelative = true;\n\n\t\t}\n\n\t\tconst groups = json.data.groups || json.data.drawcalls || json.data.offsets;\n\n\t\tif ( groups !== undefined ) {\n\n\t\t\tfor ( let i = 0, n = groups.length; i !== n; ++ i ) {\n\n\t\t\t\tconst 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\tconst boundingSphere = json.data.boundingSphere;\n\n\t\tif ( boundingSphere !== undefined ) {\n\n\t\t\tconst 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\tif ( json.name ) geometry.name = json.name;\n\t\tif ( json.userData ) geometry.userData = json.userData;\n\n\t\treturn geometry;\n\n\t}\n\n} );\n\nconst 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\nfunction ObjectLoader( manager ) {\n\n\tLoader.call( this, manager );\n\n}\n\nObjectLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\tconstructor: ObjectLoader,\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst path = ( this.path === '' ) ? LoaderUtils.extractUrlBase( url ) : this.path;\n\t\tthis.resourcePath = this.resourcePath || path;\n\n\t\tconst loader = new FileLoader( scope.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\tlet 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\tconst 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 );\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\tparse: function ( json, onLoad ) {\n\n\t\tconst shapes = this.parseShape( json.shapes );\n\t\tconst geometries = this.parseGeometries( json.geometries, shapes );\n\n\t\tconst images = this.parseImages( json.images, function () {\n\n\t\t\tif ( onLoad !== undefined ) onLoad( object );\n\n\t\t} );\n\n\t\tconst textures = this.parseTextures( json.textures, images );\n\t\tconst materials = this.parseMaterials( json.materials, textures );\n\n\t\tconst 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\tconst shapes = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tconst 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\tconst geometries = {};\n\t\tlet geometryShapes;\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tconst bufferGeometryLoader = new BufferGeometryLoader();\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tlet geometry;\n\t\t\t\tconst 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 'TubeGeometry':\n\t\t\t\t\tcase 'TubeBufferGeometry':\n\n\t\t\t\t\t\t// This only works for built-in curves (e.g. CatmullRomCurve3).\n\t\t\t\t\t\t// User defined curves or instances of CurvePath will not be deserialized.\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tnew Curves[ data.path.type ]().fromJSON( data.path ),\n\t\t\t\t\t\t\tdata.tubularSegments,\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.radialSegments,\n\t\t\t\t\t\t\tdata.closed\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\tgeometryShapes = [];\n\n\t\t\t\t\t\tfor ( let j = 0, jl = data.shapes.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\t\tconst 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\n\t\t\t\t\tcase 'ExtrudeGeometry':\n\t\t\t\t\tcase 'ExtrudeBufferGeometry':\n\n\t\t\t\t\t\tgeometryShapes = [];\n\n\t\t\t\t\t\tfor ( let j = 0, jl = data.shapes.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\t\tconst 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\tconst extrudePath = data.options.extrudePath;\n\n\t\t\t\t\t\tif ( extrudePath !== undefined ) {\n\n\t\t\t\t\t\t\tdata.options.extrudePath = new Curves[ extrudePath.type ]().fromJSON( extrudePath );\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.options\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'BufferGeometry':\n\t\t\t\t\tcase 'InstancedBufferGeometry':\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\tconsole.error( 'THREE.ObjectLoader: Loading \"Geometry\" is not supported anymore.' );\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\t\t\t\tif ( geometry.isBufferGeometry === true && data.userData !== undefined ) geometry.userData = data.userData;\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\tconst cache = {}; // MultiMaterial\n\t\tconst materials = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tconst loader = new MaterialLoader();\n\t\t\tloader.setTextures( textures );\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tconst 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\tconst array = [];\n\n\t\t\t\t\tfor ( let j = 0; j < data.materials.length; j ++ ) {\n\n\t\t\t\t\t\tconst material = data.materials[ j ];\n\n\t\t\t\t\t\tif ( cache[ material.uuid ] === undefined ) {\n\n\t\t\t\t\t\t\tcache[ material.uuid ] = loader.parse( material );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tarray.push( cache[ material.uuid ] );\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\tif ( cache[ data.uuid ] === undefined ) {\n\n\t\t\t\t\t\tcache[ data.uuid ] = loader.parse( data );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tmaterials[ data.uuid ] = cache[ data.uuid ];\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\tconst animations = [];\n\n\t\tfor ( let i = 0; i < json.length; i ++ ) {\n\n\t\t\tconst data = json[ i ];\n\n\t\t\tconst clip = AnimationClip.parse( data );\n\n\t\t\tif ( data.uuid !== undefined ) clip.uuid = data.uuid;\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\tconst scope = this;\n\t\tconst images = {};\n\n\t\tlet loader;\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.itemError( url );\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t} );\n\n\t\t}\n\n\t\tif ( json !== undefined && json.length > 0 ) {\n\n\t\t\tconst manager = new LoadingManager( onLoad );\n\n\t\t\tloader = new ImageLoader( manager );\n\t\t\tloader.setCrossOrigin( this.crossOrigin );\n\n\t\t\tfor ( let i = 0, il = json.length; i < il; i ++ ) {\n\n\t\t\t\tconst image = json[ i ];\n\t\t\t\tconst url = image.url;\n\n\t\t\t\tif ( Array.isArray( url ) ) {\n\n\t\t\t\t\t// load array of images e.g CubeTexture\n\n\t\t\t\t\timages[ image.uuid ] = [];\n\n\t\t\t\t\tfor ( let j = 0, jl = url.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\tconst currentUrl = url[ j ];\n\n\t\t\t\t\t\tconst path = /^(\\/\\/)|([a-z]+:(\\/\\/)?)/i.test( currentUrl ) ? currentUrl : scope.resourcePath + currentUrl;\n\n\t\t\t\t\t\timages[ image.uuid ].push( loadImage( path ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// load single image\n\n\t\t\t\t\tconst path = /^(\\/\\/)|([a-z]+:(\\/\\/)?)/i.test( image.url ) ? image.url : scope.resourcePath + image.url;\n\n\t\t\t\t\timages[ image.uuid ] = loadImage( path );\n\n\t\t\t\t}\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\tconst textures = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tconst 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\tlet texture;\n\n\t\t\t\tif ( Array.isArray( images[ data.image ] ) ) {\n\n\t\t\t\t\ttexture = new CubeTexture( images[ data.image ] );\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttexture = new Texture( images[ data.image ] );\n\n\t\t\t\t}\n\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\t\t\t\tif ( data.type !== undefined ) texture.type = data.type;\n\t\t\t\tif ( data.encoding !== undefined ) texture.encoding = data.encoding;\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\tif ( data.premultiplyAlpha !== undefined ) texture.premultiplyAlpha = data.premultiplyAlpha;\n\t\t\t\tif ( data.unpackAlignment !== undefined ) texture.unpackAlignment = data.unpackAlignment;\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\tlet 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\tconst array = [];\n\n\t\t\t\tfor ( let i = 0, l = name.length; i < l; i ++ ) {\n\n\t\t\t\t\tconst 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\tlet geometry, material;\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 'LightProbe':\n\n\t\t\t\tobject = new LightProbe().fromJSON( data );\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\tgeometry = getGeometry( data.geometry );\n\t\t\t\tmaterial = getMaterial( data.material );\n\n\t\t\t\tobject = new Mesh( geometry, material );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'InstancedMesh':\n\n\t\t\t\tgeometry = getGeometry( data.geometry );\n\t\t\t\tmaterial = getMaterial( data.material );\n\t\t\t\tconst count = data.count;\n\t\t\t\tconst instanceMatrix = data.instanceMatrix;\n\n\t\t\t\tobject = new InstancedMesh( geometry, material, count );\n\t\t\t\tobject.instanceMatrix = new BufferAttribute( new Float32Array( instanceMatrix.array ), 16 );\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.normalBias !== undefined ) object.shadow.normalBias = data.shadow.normalBias;\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\t\tif ( data.layers !== undefined ) object.layers.mask = data.layers;\n\n\t\tif ( data.children !== undefined ) {\n\n\t\t\tconst children = data.children;\n\n\t\t\tfor ( let 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\tif ( data.autoUpdate !== undefined ) object.autoUpdate = data.autoUpdate;\n\n\t\t\tconst levels = data.levels;\n\n\t\t\tfor ( let l = 0; l < levels.length; l ++ ) {\n\n\t\t\t\tconst level = levels[ l ];\n\t\t\t\tconst 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\nconst TEXTURE_MAPPING = {\n\tUVMapping: UVMapping,\n\tCubeReflectionMapping: CubeReflectionMapping,\n\tCubeRefractionMapping: CubeRefractionMapping,\n\tEquirectangularReflectionMapping: EquirectangularReflectionMapping,\n\tEquirectangularRefractionMapping: EquirectangularRefractionMapping,\n\tCubeUVReflectionMapping: CubeUVReflectionMapping,\n\tCubeUVRefractionMapping: CubeUVRefractionMapping\n};\n\nconst TEXTURE_WRAPPING = {\n\tRepeatWrapping: RepeatWrapping,\n\tClampToEdgeWrapping: ClampToEdgeWrapping,\n\tMirroredRepeatWrapping: MirroredRepeatWrapping\n};\n\nconst TEXTURE_FILTER = {\n\tNearestFilter: NearestFilter,\n\tNearestMipmapNearestFilter: NearestMipmapNearestFilter,\n\tNearestMipmapLinearFilter: NearestMipmapLinearFilter,\n\tLinearFilter: LinearFilter,\n\tLinearMipmapNearestFilter: LinearMipmapNearestFilter,\n\tLinearMipmapLinearFilter: LinearMipmapLinearFilter\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\tLoader.call( this, manager );\n\n\tthis.options = { premultiplyAlpha: 'none' };\n\n}\n\nImageBitmapLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\tconstructor: ImageBitmapLoader,\n\n\tisImageBitmapLoader: true,\n\n\tsetOptions: function setOptions( options ) {\n\n\t\tthis.options = options;\n\n\t\treturn this;\n\n\t},\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\tconst scope = this;\n\n\t\tconst 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.itemError( url );\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t} );\n\n\t\tscope.manager.itemStart( url );\n\n\t}\n\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\treturn this;\n\n\t},\n\n\tlineTo: function ( x, y ) {\n\n\t\tthis.currentPath.lineTo( x, y );\n\n\t\treturn this;\n\n\t},\n\n\tquadraticCurveTo: function ( aCPx, aCPy, aX, aY ) {\n\n\t\tthis.currentPath.quadraticCurveTo( aCPx, aCPy, aX, aY );\n\n\t\treturn this;\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\treturn this;\n\n\t},\n\n\tsplineThru: function ( pts ) {\n\n\t\tthis.currentPath.splineThru( pts );\n\n\t\treturn this;\n\n\t},\n\n\ttoShapes: function ( isCCW, noHoles ) {\n\n\t\tfunction toShapesNoHoles( inSubpaths ) {\n\n\t\t\tconst shapes = [];\n\n\t\t\tfor ( let i = 0, l = inSubpaths.length; i < l; i ++ ) {\n\n\t\t\t\tconst tmpPath = inSubpaths[ i ];\n\n\t\t\t\tconst 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\tconst 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\tlet inside = false;\n\t\t\tfor ( let p = polyLen - 1, q = 0; q < polyLen; p = q ++ ) {\n\n\t\t\t\tlet edgeLowPt = inPolygon[ p ];\n\t\t\t\tlet edgeHighPt = inPolygon[ q ];\n\n\t\t\t\tlet edgeDx = edgeHighPt.x - edgeLowPt.x;\n\t\t\t\tlet 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\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\tconst 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\tconst isClockWise = ShapeUtils.isClockWise;\n\n\t\tconst subPaths = this.subPaths;\n\t\tif ( subPaths.length === 0 ) return [];\n\n\t\tif ( noHoles === true )\treturn\ttoShapesNoHoles( subPaths );\n\n\n\t\tlet 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\tlet holesFirst = ! isClockWise( subPaths[ 0 ].getPoints() );\n\t\tholesFirst = isCCW ? ! holesFirst : holesFirst;\n\n\t\t// console.log(\"Holes first\", holesFirst);\n\n\t\tconst betterShapeHoles = [];\n\t\tconst newShapes = [];\n\t\tlet newShapeHoles = [];\n\t\tlet mainIdx = 0;\n\t\tlet tmpPoints;\n\n\t\tnewShapes[ mainIdx ] = undefined;\n\t\tnewShapeHoles[ mainIdx ] = [];\n\n\t\tfor ( let 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\tlet ambiguous = false;\n\t\t\tconst toChange = [];\n\n\t\t\tfor ( let 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 ( let sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) {\n\n\t\t\t\tconst sho = newShapeHoles[ sIdx ];\n\n\t\t\t\tfor ( let hIdx = 0; hIdx < sho.length; hIdx ++ ) {\n\n\t\t\t\t\tconst ho = sho[ hIdx ];\n\t\t\t\t\tlet hole_unassigned = true;\n\n\t\t\t\t\tfor ( let 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\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\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\tlet tmpHoles;\n\n\t\tfor ( let 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 ( let 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\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 ) {\n\n\t\tif ( size === undefined ) size = 100;\n\n\t\tconst shapes = [];\n\t\tconst paths = createPaths( text, size, this.data );\n\n\t\tfor ( let 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, data ) {\n\n\tconst chars = Array.from ? Array.from( text ) : String( text ).split( '' ); // workaround for IE11, see #13988\n\tconst scale = size / data.resolution;\n\tconst line_height = ( data.boundingBox.yMax - data.boundingBox.yMin + data.underlineThickness ) * scale;\n\n\tconst paths = [];\n\n\tlet offsetX = 0, offsetY = 0;\n\n\tfor ( let i = 0; i < chars.length; i ++ ) {\n\n\t\tconst 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\tconst ret = createPath( char, 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, scale, offsetX, offsetY, data ) {\n\n\tconst glyph = data.glyphs[ char ] || data.glyphs[ '?' ];\n\n\tif ( ! glyph ) {\n\n\t\tconsole.error( 'THREE.Font: character \"' + char + '\" does not exists in font family ' + data.familyName + '.' );\n\n\t\treturn;\n\n\t}\n\n\tconst path = new ShapePath();\n\n\tlet x, y, cpx, cpy, cpx1, cpy1, cpx2, cpy2;\n\n\tif ( glyph.o ) {\n\n\t\tconst outline = glyph._cachedOutline || ( glyph._cachedOutline = glyph.o.split( ' ' ) );\n\n\t\tfor ( let i = 0, l = outline.length; i < l; ) {\n\n\t\t\tconst 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\nfunction FontLoader( manager ) {\n\n\tLoader.call( this, manager );\n\n}\n\nFontLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\tconstructor: FontLoader,\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\tlet 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\tconst 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} );\n\nlet _context;\n\nconst AudioContext = {\n\n\tgetContext: function () {\n\n\t\tif ( _context === undefined ) {\n\n\t\t\t_context = 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\t_context = value;\n\n\t}\n\n};\n\nfunction AudioLoader( manager ) {\n\n\tLoader.call( this, manager );\n\n}\n\nAudioLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\tconstructor: AudioLoader,\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( scope.manager );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setPath( scope.path );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.load( url, function ( buffer ) {\n\n\t\t\ttry {\n\n\t\t\t\t// Create a copy of the buffer. The `decodeAudioData` method\n\t\t\t\t// detaches the buffer when complete, preventing reuse.\n\t\t\t\tconst bufferCopy = buffer.slice( 0 );\n\n\t\t\t\tconst context = AudioContext.getContext();\n\t\t\t\tcontext.decodeAudioData( bufferCopy, function ( audioBuffer ) {\n\n\t\t\t\t\tonLoad( audioBuffer );\n\n\t\t\t\t} );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n} );\n\nfunction HemisphereLightProbe( skyColor, groundColor, intensity ) {\n\n\tLightProbe.call( this, undefined, intensity );\n\n\tconst color1 = new Color().set( skyColor );\n\tconst color2 = new Color().set( groundColor );\n\n\tconst sky = new Vector3( color1.r, color1.g, color1.b );\n\tconst ground = new Vector3( color2.r, color2.g, color2.b );\n\n\t// without extra factor of PI in the shader, should = 1 / Math.sqrt( Math.PI );\n\tconst c0 = Math.sqrt( Math.PI );\n\tconst c1 = c0 * Math.sqrt( 0.75 );\n\n\tthis.sh.coefficients[ 0 ].copy( sky ).add( ground ).multiplyScalar( c0 );\n\tthis.sh.coefficients[ 1 ].copy( sky ).sub( ground ).multiplyScalar( c1 );\n\n}\n\nHemisphereLightProbe.prototype = Object.assign( Object.create( LightProbe.prototype ), {\n\n\tconstructor: HemisphereLightProbe,\n\n\tisHemisphereLightProbe: true,\n\n\tcopy: function ( source ) { // modifying colors not currently supported\n\n\t\tLightProbe.prototype.copy.call( this, source );\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\tconst data = LightProbe.prototype.toJSON.call( this, meta );\n\n\t\t// data.sh = this.sh.toArray(); // todo\n\n\t\treturn data;\n\n\t}\n\n} );\n\nfunction AmbientLightProbe( color, intensity ) {\n\n\tLightProbe.call( this, undefined, intensity );\n\n\tconst color1 = new Color().set( color );\n\n\t// without extra factor of PI in the shader, would be 2 / Math.sqrt( Math.PI );\n\tthis.sh.coefficients[ 0 ].set( color1.r, color1.g, color1.b ).multiplyScalar( 2 * Math.sqrt( Math.PI ) );\n\n}\n\nAmbientLightProbe.prototype = Object.assign( Object.create( LightProbe.prototype ), {\n\n\tconstructor: AmbientLightProbe,\n\n\tisAmbientLightProbe: true,\n\n\tcopy: function ( source ) { // modifying color not currently supported\n\n\t\tLightProbe.prototype.copy.call( this, source );\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\tconst data = LightProbe.prototype.toJSON.call( this, meta );\n\n\t\t// data.sh = this.sh.toArray(); // todo\n\n\t\treturn data;\n\n\t}\n\n} );\n\nconst _eyeRight = new Matrix4();\nconst _eyeLeft = new Matrix4();\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\tthis._cache = {\n\t\tfocus: null,\n\t\tfov: null,\n\t\taspect: null,\n\t\tnear: null,\n\t\tfar: null,\n\t\tzoom: null,\n\t\teyeSep: null\n\t};\n\n}\n\nObject.assign( StereoCamera.prototype, {\n\n\tupdate: function ( camera ) {\n\n\t\tconst cache = this._cache;\n\n\t\tconst needsUpdate = cache.focus !== camera.focus || cache.fov !== camera.fov ||\n\t\t\tcache.aspect !== camera.aspect * this.aspect || cache.near !== camera.near ||\n\t\t\tcache.far !== camera.far || cache.zoom !== camera.zoom || cache.eyeSep !== this.eyeSep;\n\n\t\tif ( needsUpdate ) {\n\n\t\t\tcache.focus = camera.focus;\n\t\t\tcache.fov = camera.fov;\n\t\t\tcache.aspect = camera.aspect * this.aspect;\n\t\t\tcache.near = camera.near;\n\t\t\tcache.far = camera.far;\n\t\t\tcache.zoom = camera.zoom;\n\t\t\tcache.eyeSep = this.eyeSep;\n\n\t\t\t// Off-axis stereoscopic effect based on\n\t\t\t// http://paulbourke.net/stereographics/stereorender/\n\n\t\t\tconst projectionMatrix = camera.projectionMatrix.clone();\n\t\t\tconst eyeSepHalf = cache.eyeSep / 2;\n\t\t\tconst eyeSepOnProjection = eyeSepHalf * cache.near / cache.focus;\n\t\t\tconst ymax = ( cache.near * Math.tan( MathUtils.DEG2RAD * cache.fov * 0.5 ) ) / cache.zoom;\n\t\t\tlet xmin, xmax;\n\n\t\t\t// translate xOffset\n\n\t\t\t_eyeLeft.elements[ 12 ] = - eyeSepHalf;\n\t\t\t_eyeRight.elements[ 12 ] = eyeSepHalf;\n\n\t\t\t// for left eye\n\n\t\t\txmin = - ymax * cache.aspect + eyeSepOnProjection;\n\t\t\txmax = ymax * cache.aspect + eyeSepOnProjection;\n\n\t\t\tprojectionMatrix.elements[ 0 ] = 2 * cache.near / ( xmax - xmin );\n\t\t\tprojectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin );\n\n\t\t\tthis.cameraL.projectionMatrix.copy( projectionMatrix );\n\n\t\t\t// for right eye\n\n\t\t\txmin = - ymax * cache.aspect - eyeSepOnProjection;\n\t\t\txmax = ymax * cache.aspect - eyeSepOnProjection;\n\n\t\t\tprojectionMatrix.elements[ 0 ] = 2 * cache.near / ( xmax - xmin );\n\t\t\tprojectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin );\n\n\t\t\tthis.cameraR.projectionMatrix.copy( projectionMatrix );\n\n\t\t}\n\n\t\tthis.cameraL.matrixWorld.copy( camera.matrixWorld ).multiply( _eyeLeft );\n\t\tthis.cameraR.matrixWorld.copy( camera.matrixWorld ).multiply( _eyeRight );\n\n\t}\n\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\tlet 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\tconst 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\nconst _position$2 = new Vector3();\nconst _quaternion$3 = new Quaternion();\nconst _scale$1 = new Vector3();\nconst _orientation = new Vector3();\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\tthis.timeDelta = 0;\n\n\t// private\n\n\tthis._clock = new Clock();\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\treturn this;\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\treturn this;\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\treturn this;\n\n\t},\n\n\tupdateMatrixWorld: function ( force ) {\n\n\t\tObject3D.prototype.updateMatrixWorld.call( this, force );\n\n\t\tconst listener = this.context.listener;\n\t\tconst up = this.up;\n\n\t\tthis.timeDelta = this._clock.getDelta();\n\n\t\tthis.matrixWorld.decompose( _position$2, _quaternion$3, _scale$1 );\n\n\t\t_orientation.set( 0, 0, - 1 ).applyQuaternion( _quaternion$3 );\n\n\t\tif ( listener.positionX ) {\n\n\t\t\t// code path for Chrome (see #14393)\n\n\t\t\tconst endTime = this.context.currentTime + this.timeDelta;\n\n\t\t\tlistener.positionX.linearRampToValueAtTime( _position$2.x, endTime );\n\t\t\tlistener.positionY.linearRampToValueAtTime( _position$2.y, endTime );\n\t\t\tlistener.positionZ.linearRampToValueAtTime( _position$2.z, endTime );\n\t\t\tlistener.forwardX.linearRampToValueAtTime( _orientation.x, endTime );\n\t\t\tlistener.forwardY.linearRampToValueAtTime( _orientation.y, endTime );\n\t\t\tlistener.forwardZ.linearRampToValueAtTime( _orientation.z, endTime );\n\t\t\tlistener.upX.linearRampToValueAtTime( up.x, endTime );\n\t\t\tlistener.upY.linearRampToValueAtTime( up.y, endTime );\n\t\t\tlistener.upZ.linearRampToValueAtTime( up.z, endTime );\n\n\t\t} else {\n\n\t\t\tlistener.setPosition( _position$2.x, _position$2.y, _position$2.z );\n\t\t\tlistener.setOrientation( _orientation.x, _orientation.y, _orientation.z, up.x, up.y, up.z );\n\n\t\t}\n\n\t}\n\n} );\n\nfunction Audio( listener ) {\n\n\tObject3D.call( this );\n\n\tthis.type = 'Audio';\n\n\tthis.listener = listener;\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.detune = 0;\n\tthis.loop = false;\n\tthis.loopStart = 0;\n\tthis.loopEnd = 0;\n\tthis.offset = 0;\n\tthis.duration = undefined;\n\tthis.playbackRate = 1;\n\tthis.isPlaying = false;\n\tthis.hasPlaybackControl = true;\n\tthis.sourceType = 'empty';\n\n\tthis._startedAt = 0;\n\tthis._progress = 0;\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\tsetMediaElementSource: function ( mediaElement ) {\n\n\t\tthis.hasPlaybackControl = false;\n\t\tthis.sourceType = 'mediaNode';\n\t\tthis.source = this.context.createMediaElementSource( mediaElement );\n\t\tthis.connect();\n\n\t\treturn this;\n\n\t},\n\n\tsetMediaStreamSource: function ( mediaStream ) {\n\n\t\tthis.hasPlaybackControl = false;\n\t\tthis.sourceType = 'mediaStreamNode';\n\t\tthis.source = this.context.createMediaStreamSource( mediaStream );\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 ( delay ) {\n\n\t\tif ( delay === undefined ) delay = 0;\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\tthis._startedAt = this.context.currentTime + delay;\n\n\t\tconst source = this.context.createBufferSource();\n\t\tsource.buffer = this.buffer;\n\t\tsource.loop = this.loop;\n\t\tsource.loopStart = this.loopStart;\n\t\tsource.loopEnd = this.loopEnd;\n\t\tsource.onended = this.onEnded.bind( this );\n\t\tsource.start( this._startedAt, this._progress + this.offset, this.duration );\n\n\t\tthis.isPlaying = true;\n\n\t\tthis.source = source;\n\n\t\tthis.setDetune( this.detune );\n\t\tthis.setPlaybackRate( this.playbackRate );\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\t// update current progress\n\n\t\t\tthis._progress += Math.max( this.context.currentTime - this._startedAt, 0 ) * this.playbackRate;\n\n\t\t\tif ( this.loop === true ) {\n\n\t\t\t\t// ensure _progress does not exceed duration with looped audios\n\n\t\t\t\tthis._progress = this._progress % ( this.duration || this.buffer.duration );\n\n\t\t\t}\n\n\t\t\tthis.source.stop();\n\t\t\tthis.source.onended = null;\n\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._progress = 0;\n\n\t\tthis.source.stop();\n\t\tthis.source.onended = null;\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 ( let 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 ( let 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\tsetDetune: function ( value ) {\n\n\t\tthis.detune = value;\n\n\t\tif ( this.source.detune === undefined ) return; // only set detune when available\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tthis.source.detune.setTargetAtTime( this.detune, this.context.currentTime, 0.01 );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tgetDetune: function () {\n\n\t\treturn this.detune;\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.setTargetAtTime( this.playbackRate, this.context.currentTime, 0.01 );\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\tsetLoopStart: function ( value ) {\n\n\t\tthis.loopStart = value;\n\n\t\treturn this;\n\n\t},\n\n\tsetLoopEnd: function ( value ) {\n\n\t\tthis.loopEnd = value;\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\nconst _position$3 = new Vector3();\nconst _quaternion$4 = new Quaternion();\nconst _scale$2 = new Vector3();\nconst _orientation$1 = new Vector3();\n\nfunction PositionalAudio( listener ) {\n\n\tAudio.call( this, listener );\n\n\tthis.panner = this.context.createPanner();\n\tthis.panner.panningModel = 'HRTF';\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\treturn this;\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\treturn this;\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\treturn this;\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\treturn this;\n\n\t},\n\n\tsetDirectionalCone: function ( coneInnerAngle, coneOuterAngle, coneOuterGain ) {\n\n\t\tthis.panner.coneInnerAngle = coneInnerAngle;\n\t\tthis.panner.coneOuterAngle = coneOuterAngle;\n\t\tthis.panner.coneOuterGain = coneOuterGain;\n\n\t\treturn this;\n\n\t},\n\n\tupdateMatrixWorld: function ( force ) {\n\n\t\tObject3D.prototype.updateMatrixWorld.call( this, force );\n\n\t\tif ( this.hasPlaybackControl === true && this.isPlaying === false ) return;\n\n\t\tthis.matrixWorld.decompose( _position$3, _quaternion$4, _scale$2 );\n\n\t\t_orientation$1.set( 0, 0, 1 ).applyQuaternion( _quaternion$4 );\n\n\t\tconst panner = this.panner;\n\n\t\tif ( panner.positionX ) {\n\n\t\t\t// code path for Chrome and Firefox (see #14393)\n\n\t\t\tconst endTime = this.context.currentTime + this.listener.timeDelta;\n\n\t\t\tpanner.positionX.linearRampToValueAtTime( _position$3.x, endTime );\n\t\t\tpanner.positionY.linearRampToValueAtTime( _position$3.y, endTime );\n\t\t\tpanner.positionZ.linearRampToValueAtTime( _position$3.z, endTime );\n\t\t\tpanner.orientationX.linearRampToValueAtTime( _orientation$1.x, endTime );\n\t\t\tpanner.orientationY.linearRampToValueAtTime( _orientation$1.y, endTime );\n\t\t\tpanner.orientationZ.linearRampToValueAtTime( _orientation$1.z, endTime );\n\n\t\t} else {\n\n\t\t\tpanner.setPosition( _position$3.x, _position$3.y, _position$3.z );\n\t\t\tpanner.setOrientation( _orientation$1.x, _orientation$1.y, _orientation$1.z );\n\n\t\t}\n\n\t}\n\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\tlet value = 0;\n\t\tconst data = this.getFrequencyData();\n\n\t\tfor ( let 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\nfunction PropertyMixer( binding, typeName, valueSize ) {\n\n\tthis.binding = binding;\n\tthis.valueSize = valueSize;\n\n\tlet mixFunction,\n\t\tmixFunctionAdditive,\n\t\tsetIdentity;\n\n\t// buffer layout: [ incoming | accu0 | accu1 | orig | addAccu | (optional work) ]\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\t//\n\t// 'add' is used for additive cumulative results\n\t//\n\t// 'work' is optional and is only present for quaternion types. It is used\n\t// to store intermediate quaternion multiplication results\n\n\tswitch ( typeName ) {\n\n\t\tcase 'quaternion':\n\t\t\tmixFunction = this._slerp;\n\t\t\tmixFunctionAdditive = this._slerpAdditive;\n\t\t\tsetIdentity = this._setAdditiveIdentityQuaternion;\n\n\t\t\tthis.buffer = new Float64Array( valueSize * 6 );\n\t\t\tthis._workIndex = 5;\n\t\t\tbreak;\n\n\t\tcase 'string':\n\t\tcase 'bool':\n\t\t\tmixFunction = this._select;\n\n\t\t\t// Use the regular mix function and for additive on these types,\n\t\t\t// additive is not relevant for non-numeric types\n\t\t\tmixFunctionAdditive = this._select;\n\n\t\t\tsetIdentity = this._setAdditiveIdentityOther;\n\n\t\t\tthis.buffer = new Array( valueSize * 5 );\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tmixFunction = this._lerp;\n\t\t\tmixFunctionAdditive = this._lerpAdditive;\n\t\t\tsetIdentity = this._setAdditiveIdentityNumeric;\n\n\t\t\tthis.buffer = new Float64Array( valueSize * 5 );\n\n\t}\n\n\tthis._mixBufferRegion = mixFunction;\n\tthis._mixBufferRegionAdditive = mixFunctionAdditive;\n\tthis._setIdentity = setIdentity;\n\tthis._origIndex = 3;\n\tthis._addIndex = 4;\n\n\tthis.cumulativeWeight = 0;\n\tthis.cumulativeWeightAdditive = 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\tconst buffer = this.buffer,\n\t\t\tstride = this.valueSize,\n\t\t\toffset = accuIndex * stride + stride;\n\n\t\tlet currentWeight = this.cumulativeWeight;\n\n\t\tif ( currentWeight === 0 ) {\n\n\t\t\t// accuN := incoming * weight\n\n\t\t\tfor ( let 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\tconst 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// accumulate data in the 'incoming' region into 'add'\n\taccumulateAdditive: function ( weight ) {\n\n\t\tconst buffer = this.buffer,\n\t\t\tstride = this.valueSize,\n\t\t\toffset = stride * this._addIndex;\n\n\t\tif ( this.cumulativeWeightAdditive === 0 ) {\n\n\t\t\t// add = identity\n\n\t\t\tthis._setIdentity();\n\n\t\t}\n\n\t\t// add := add + incoming * weight\n\n\t\tthis._mixBufferRegionAdditive( buffer, offset, 0, weight, stride );\n\t\tthis.cumulativeWeightAdditive += weight;\n\n\t},\n\n\t// apply the state of 'accu' to the binding when accus differ\n\tapply: function ( accuIndex ) {\n\n\t\tconst stride = this.valueSize,\n\t\t\tbuffer = this.buffer,\n\t\t\toffset = accuIndex * stride + stride,\n\n\t\t\tweight = this.cumulativeWeight,\n\t\t\tweightAdditive = this.cumulativeWeightAdditive,\n\n\t\t\tbinding = this.binding;\n\n\t\tthis.cumulativeWeight = 0;\n\t\tthis.cumulativeWeightAdditive = 0;\n\n\t\tif ( weight < 1 ) {\n\n\t\t\t// accuN := accuN + original * ( 1 - cumulativeWeight )\n\n\t\t\tconst originalValueOffset = stride * this._origIndex;\n\n\t\t\tthis._mixBufferRegion(\n\t\t\t\tbuffer, offset, originalValueOffset, 1 - weight, stride );\n\n\t\t}\n\n\t\tif ( weightAdditive > 0 ) {\n\n\t\t\t// accuN := accuN + additive accuN\n\n\t\t\tthis._mixBufferRegionAdditive( buffer, offset, this._addIndex * stride, 1, stride );\n\n\t\t}\n\n\t\tfor ( let 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\tconst binding = this.binding;\n\n\t\tconst buffer = this.buffer,\n\t\t\tstride = this.valueSize,\n\n\t\t\toriginalValueOffset = stride * this._origIndex;\n\n\t\tbinding.getValue( buffer, originalValueOffset );\n\n\t\t// accu[0..1] := orig -- initially detect changes against the original\n\t\tfor ( let i = stride, e = originalValueOffset; i !== e; ++ i ) {\n\n\t\t\tbuffer[ i ] = buffer[ originalValueOffset + ( i % stride ) ];\n\n\t\t}\n\n\t\t// Add to identity for additive\n\t\tthis._setIdentity();\n\n\t\tthis.cumulativeWeight = 0;\n\t\tthis.cumulativeWeightAdditive = 0;\n\n\t},\n\n\t// apply the state previously taken via 'saveOriginalState' to the binding\n\trestoreOriginalState: function () {\n\n\t\tconst originalValueOffset = this.valueSize * 3;\n\t\tthis.binding.setValue( this.buffer, originalValueOffset );\n\n\t},\n\n\t_setAdditiveIdentityNumeric: function () {\n\n\t\tconst startIndex = this._addIndex * this.valueSize;\n\t\tconst endIndex = startIndex + this.valueSize;\n\n\t\tfor ( let i = startIndex; i < endIndex; i ++ ) {\n\n\t\t\tthis.buffer[ i ] = 0;\n\n\t\t}\n\n\t},\n\n\t_setAdditiveIdentityQuaternion: function () {\n\n\t\tthis._setAdditiveIdentityNumeric();\n\t\tthis.buffer[ this._addIndex * 4 + 3 ] = 1;\n\n\t},\n\n\t_setAdditiveIdentityOther: function () {\n\n\t\tconst startIndex = this._origIndex * this.valueSize;\n\t\tconst targetIndex = this._addIndex * this.valueSize;\n\n\t\tfor ( let i = 0; i < this.valueSize; i ++ ) {\n\n\t\t\tthis.buffer[ targetIndex + i ] = this.buffer[ startIndex + i ];\n\n\t\t}\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 ( let 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_slerpAdditive: function ( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\tconst workOffset = this._workIndex * stride;\n\n\t\t// Store result in intermediate buffer offset\n\t\tQuaternion.multiplyQuaternionsFlat( buffer, workOffset, buffer, dstOffset, buffer, srcOffset );\n\n\t\t// Slerp to the intermediate result\n\t\tQuaternion.slerpFlat( buffer, dstOffset, buffer, dstOffset, buffer, workOffset, t );\n\n\t},\n\n\t_lerp: function ( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\tconst s = 1 - t;\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tconst 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\t_lerpAdditive: function ( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tconst j = dstOffset + i;\n\n\t\t\tbuffer[ j ] = buffer[ j ] + buffer[ srcOffset + i ] * t;\n\n\t\t}\n\n\t}\n\n} );\n\n// Characters [].:/ are reserved for track binding syntax.\nconst _RESERVED_CHARS_RE = '\\\\[\\\\]\\\\.:\\\\/';\nconst _reservedRe = new RegExp( '[' + _RESERVED_CHARS_RE + ']', 'g' );\n\n// Attempts to allow node names from any language. ES5's `\\w` regexp matches\n// only latin characters, and the unicode \\p{L} is not yet supported. So\n// instead, we exclude reserved characters and match everything else.\nconst _wordChar = '[^' + _RESERVED_CHARS_RE + ']';\nconst _wordCharOrDot = '[^' + _RESERVED_CHARS_RE.replace( '\\\\.', '' ) + ']';\n\n// Parent directories, delimited by '/' or ':'. Currently unused, but must\n// be matched to parse the rest of the track name.\nconst _directoryRe = /((?:WC+[\\/:])*)/.source.replace( 'WC', _wordChar );\n\n// Target node. May contain word characters (a-zA-Z0-9_) and '.' or '-'.\nconst _nodeRe = /(WCOD+)?/.source.replace( 'WCOD', _wordCharOrDot );\n\n// Object on target node, and accessor. May not contain reserved\n// characters. Accessor may contain any character except closing bracket.\nconst _objectRe = /(?:\\.(WC+)(?:\\[(.+)\\])?)?/.source.replace( 'WC', _wordChar );\n\n// Property and accessor. May not contain reserved characters. Accessor may\n// contain any non-bracket characters.\nconst _propertyRe = /\\.(WC+)(?:\\[(.+)\\])?/.source.replace( 'WC', _wordChar );\n\nconst _trackRe = new RegExp( ''\n\t+ '^'\n\t+ _directoryRe\n\t+ _nodeRe\n\t+ _objectRe\n\t+ _propertyRe\n\t+ '$'\n);\n\nconst _supportedObjectNames = [ 'material', 'materials', 'bones' ];\n\nfunction Composite( targetGroup, path, optionalParsedPath ) {\n\n\tconst 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\tconst 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\tconst bindings = this._bindings;\n\n\t\tfor ( let i = this._targetGroup.nCachedObjects_, 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\tconst bindings = this._bindings;\n\n\t\tfor ( let i = this._targetGroup.nCachedObjects_, 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\tconst bindings = this._bindings;\n\n\t\tfor ( let i = this._targetGroup.nCachedObjects_, 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 ( name ) {\n\n\t\treturn name.replace( /\\s/g, '_' ).replace( _reservedRe, '' );\n\n\t},\n\n\tparseTrackName: function ( trackName ) {\n\n\t\tconst matches = _trackRe.exec( trackName );\n\n\t\tif ( ! matches ) {\n\n\t\t\tthrow new Error( 'PropertyBinding: Cannot parse trackName: ' + trackName );\n\n\t\t}\n\n\t\tconst results = {\n\t\t\t// directoryName: matches[ 1 ], // (tschw) currently unused\n\t\t\tnodeName: matches[ 2 ],\n\t\t\tobjectName: matches[ 3 ],\n\t\t\tobjectIndex: matches[ 4 ],\n\t\t\tpropertyName: matches[ 5 ], // required\n\t\t\tpropertyIndex: matches[ 6 ]\n\t\t};\n\n\t\tconst lastDot = results.nodeName && results.nodeName.lastIndexOf( '.' );\n\n\t\tif ( lastDot !== undefined && lastDot !== - 1 ) {\n\n\t\t\tconst objectName = results.nodeName.substring( lastDot + 1 );\n\n\t\t\t// Object names must be checked against an allowlist. Otherwise, there\n\t\t\t// is no way to parse 'foo.bar.baz': 'baz' must be a property, but\n\t\t\t// 'bar' could be the objectName, or part of a nodeName (which can\n\t\t\t// include '.' characters).\n\t\t\tif ( _supportedObjectNames.indexOf( objectName ) !== - 1 ) {\n\n\t\t\t\tresults.nodeName = results.nodeName.substring( 0, lastDot );\n\t\t\t\tresults.objectName = objectName;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( results.propertyName === null || results.propertyName.length === 0 ) {\n\n\t\t\tthrow new Error( 'PropertyBinding: can not parse propertyName from trackName: ' + trackName );\n\n\t\t}\n\n\t\treturn results;\n\n\t},\n\n\tfindNode: function ( root, nodeName ) {\n\n\t\tif ( ! nodeName || nodeName === \"\" || 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\tconst 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\tconst searchNodeSubtree = function ( children ) {\n\n\t\t\t\tfor ( let i = 0; i < children.length; i ++ ) {\n\n\t\t\t\t\tconst 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\tconst 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\tconst 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\tconst source = this.resolvedProperty;\n\n\t\t\tfor ( let 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\tconst dest = this.resolvedProperty;\n\n\t\t\t\tfor ( let 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\tconst dest = this.resolvedProperty;\n\n\t\t\t\tfor ( let 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\tconst dest = this.resolvedProperty;\n\n\t\t\t\tfor ( let 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\tlet 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\tlet 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 ( let 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\tconst nodeProperty = targetObject[ propertyName ];\n\n\t\tif ( nodeProperty === undefined ) {\n\n\t\t\tconst 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\tlet versioning = this.Versioning.None;\n\n\t\tthis.targetObject = targetObject;\n\n\t\tif ( targetObject.needsUpdate !== undefined ) { // material\n\n\t\t\tversioning = this.Versioning.NeedsUpdate;\n\n\t\t} else if ( targetObject.matrixWorldNeedsUpdate !== undefined ) { // node transform\n\n\t\t\tversioning = this.Versioning.MatrixWorldNeedsUpdate;\n\n\t\t}\n\n\t\t// determine how the property gets bound\n\t\tlet 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\tif ( targetObject.morphTargetDictionary[ propertyIndex ] !== undefined ) {\n\n\t\t\t\t\t\tpropertyIndex = targetObject.morphTargetDictionary[ propertyIndex ];\n\n\t\t\t\t\t}\n\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences on THREE.Geometry. Use THREE.BufferGeometry instead.', this );\n\t\t\t\t\treturn;\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 * - Add objects you would otherwise pass as 'root' to the\n * constructor or the .clipAction method of AnimationMixer.\n *\n * - Instead pass this object as 'root'.\n *\n * - You can also add and remove objects later when the mixer\n * is running.\n *\n * Note:\n *\n * Objects of this class appear as one object to the mixer,\n * so cache control of the individual objects must be done\n * on the group.\n *\n * Limitation:\n *\n * - The animated properties must be compatible among the\n * all objects in the group.\n *\n * - A single property can either be controlled through a\n * target group or directly, but not both.\n */\n\nfunction AnimationObjectGroup() {\n\n\tthis.uuid = MathUtils.generateUUID();\n\n\t// cached objects followed by the active ones\n\tthis._objects = Array.prototype.slice.call( arguments );\n\n\tthis.nCachedObjects_ = 0; // threshold\n\t// note: read by PropertyBinding.Composite\n\n\tconst indices = {};\n\tthis._indicesByUUID = indices; // for bookkeeping\n\n\tfor ( let i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\tindices[ arguments[ i ].uuid ] = i;\n\n\t}\n\n\tthis._paths = []; // inside: string\n\tthis._parsedPaths = []; // inside: { we don't care, here }\n\tthis._bindings = []; // inside: Array< PropertyBinding >\n\tthis._bindingsIndicesByPath = {}; // inside: indices in these arrays\n\n\tconst 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\tconst objects = this._objects,\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\n\t\tlet knownObject = undefined,\n\t\t\tnObjects = objects.length,\n\t\t\tnCachedObjects = this.nCachedObjects_;\n\n\t\tfor ( let i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tconst object = arguments[ i ],\n\t\t\t\tuuid = object.uuid;\n\t\t\tlet index = 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 ( let 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\tconst 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 ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\tconst bindingsForPath = bindings[ j ],\n\t\t\t\t\t\tlastCached = bindingsForPath[ firstActiveIndex ];\n\n\t\t\t\t\tlet binding = 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'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\tconst objects = this._objects,\n\t\t\tindicesByUUID = this._indicesByUUID,\n\t\t\tbindings = this._bindings,\n\t\t\tnBindings = bindings.length;\n\n\t\tlet nCachedObjects = this.nCachedObjects_;\n\n\t\tfor ( let i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tconst 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\tconst 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 ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\tconst 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\tconst objects = this._objects,\n\t\t\tindicesByUUID = this._indicesByUUID,\n\t\t\tbindings = this._bindings,\n\t\t\tnBindings = bindings.length;\n\n\t\tlet nCachedObjects = this.nCachedObjects_,\n\t\t\tnObjects = objects.length;\n\n\t\tfor ( let i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tconst 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\tconst 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 ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\t\tconst 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\tconst 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 ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\t\tconst 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\tlet 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\tconst 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 ( let i = nCachedObjects, n = objects.length; i !== n; ++ i ) {\n\n\t\t\tconst 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\tconst indicesByPath = this._bindingsIndicesByPath,\n\t\t\tindex = indicesByPath[ path ];\n\n\t\tif ( index !== undefined ) {\n\n\t\t\tconst 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\nfunction AnimationAction( mixer, clip, localRoot, blendMode ) {\n\n\tthis._mixer = mixer;\n\tthis._clip = clip;\n\tthis._localRoot = localRoot || null;\n\tthis.blendMode = blendMode || clip.blendMode;\n\n\tconst tracks = clip.tracks,\n\t\tnTracks = tracks.length,\n\t\tinterpolants = new Array( nTracks );\n\n\tconst interpolantSettings = {\n\t\tendingStart: ZeroCurvatureEnding,\n\t\tendingEnd: ZeroCurvatureEnding\n\t};\n\n\tfor ( let i = 0; i !== nTracks; ++ i ) {\n\n\t\tconst 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; // bound by the mixer\n\n\t// inside: PropertyMixer (managed by the mixer)\n\tthis._propertyBindings = new Array( nTracks );\n\n\tthis._cacheIndex = null; // for the memory manager\n\tthis._byClipCacheIndex = null; // 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; // no. of repetitions when looping\n\n\tthis.paused = false; // true -> zero effective time scale\n\tthis.enabled = true; // false -> zero effective weight\n\n\tthis.clampWhenFinished = false;// keep feeding the last frame?\n\n\tthis.zeroSlopeAtStart = true;// for smooth interpolation w/o separate\n\tthis.zeroSlopeAtEnd = true;// 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; // restart clip\n\t\tthis._loopCount = - 1;// forget previous loops\n\t\tthis._startTime = null;// 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\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\tconst 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\tlet 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\tconst mixer = this._mixer,\n\t\t\tnow = mixer.time,\n\t\t\ttimeScale = this.timeScale;\n\n\t\tlet interpolant = this._timeScaleInterpolant;\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\tconst 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\tlet 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\tconst startTime = this._startTime;\n\n\t\tif ( startTime !== null ) {\n\n\t\t\t// check for scheduled start of action\n\n\t\t\tconst 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\tconst 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\tconst weight = this._updateWeight( time );\n\n\t\tif ( weight > 0 ) {\n\n\t\t\tconst interpolants = this._interpolants;\n\t\t\tconst propertyMixers = this._propertyBindings;\n\n\t\t\tswitch ( this.blendMode ) {\n\n\t\t\t\tcase AdditiveAnimationBlendMode:\n\n\t\t\t\t\tfor ( let j = 0, m = interpolants.length; j !== m; ++ j ) {\n\n\t\t\t\t\t\tinterpolants[ j ].evaluate( clipTime );\n\t\t\t\t\t\tpropertyMixers[ j ].accumulateAdditive( weight );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase NormalAnimationBlendMode:\n\t\t\t\tdefault:\n\n\t\t\t\t\tfor ( let j = 0, m = interpolants.length; j !== m; ++ j ) {\n\n\t\t\t\t\t\tinterpolants[ j ].evaluate( clipTime );\n\t\t\t\t\t\tpropertyMixers[ j ].accumulate( accuIndex, weight );\n\n\t\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\t_updateWeight: function ( time ) {\n\n\t\tlet weight = 0;\n\n\t\tif ( this.enabled ) {\n\n\t\t\tweight = this.weight;\n\t\t\tconst interpolant = this._weightInterpolant;\n\n\t\t\tif ( interpolant !== null ) {\n\n\t\t\t\tconst 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\tlet timeScale = 0;\n\n\t\tif ( ! this.paused ) {\n\n\t\t\ttimeScale = this.timeScale;\n\n\t\t\tconst interpolant = this._timeScaleInterpolant;\n\n\t\t\tif ( interpolant !== null ) {\n\n\t\t\t\tconst 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\tconst duration = this._clip.duration;\n\t\tconst loop = this.loop;\n\n\t\tlet time = this.time + deltaTime;\n\t\tlet loopCount = this._loopCount;\n\n\t\tconst pingPong = ( loop === LoopPingPong );\n\n\t\tif ( deltaTime === 0 ) {\n\n\t\t\tif ( loopCount === - 1 ) return time;\n\n\t\t\treturn ( pingPong && ( loopCount & 1 ) === 1 ) ? duration - time : time;\n\n\t\t}\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 {\n\n\t\t\t\t\tthis.time = time;\n\n\t\t\t\t\tbreak handle_stop;\n\n\t\t\t\t}\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.time = time;\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\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\tconst 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\tconst 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.time = time;\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\tconst 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.time = time;\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} else {\n\n\t\t\t\tthis.time = time;\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\treturn duration - time;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn time;\n\n\t},\n\n\t_setEndings: function ( atStart, atEnd, pingPong ) {\n\n\t\tconst settings = this._interpolantSettings;\n\n\t\tif ( pingPong ) {\n\n\t\t\tsettings.endingStart = ZeroSlopeEnding;\n\t\t\tsettings.endingEnd = 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\tconst mixer = this._mixer, now = mixer.time;\n\t\tlet interpolant = 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\tconst times = interpolant.parameterPositions,\n\t\t\tvalues = interpolant.sampleValues;\n\n\t\ttimes[ 0 ] = now;\n\t\tvalues[ 0 ] = weightNow;\n\t\ttimes[ 1 ] = now + duration;\n\t\tvalues[ 1 ] = weightThen;\n\n\t\treturn this;\n\n\t}\n\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\tconst 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\n\t\tlet bindingsByName = 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 ( let i = 0; i !== nTracks; ++ i ) {\n\n\t\t\tconst track = tracks[ i ],\n\t\t\t\ttrackName = track.name;\n\n\t\t\tlet binding = 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\tconst 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\tconst 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\tconst bindings = action._propertyBindings;\n\n\t\t\t// increment reference counts / sort out state\n\t\t\tfor ( let i = 0, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\t\tconst 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\tconst bindings = action._propertyBindings;\n\n\t\t\t// decrement reference counts / sort out state\n\t\t\tfor ( let i = 0, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\t\tconst 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// \tknownActions: Array< AnimationAction > - used as prototypes\n\t\t// \tactionByRoot: AnimationAction - 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\tconst 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\tconst 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\tconst actions = this._actions,\n\t\t\tactionsByClip = this._actionsByClip;\n\n\t\tlet actionsForClip = 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\tconst 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\tconst 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\tconst 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\tconst 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\tconst bindings = action._propertyBindings;\n\n\t\tfor ( let i = 0, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tconst 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\tconst 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\tconst 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\tconst bindingsByRoot = this._bindingsByRootAndName,\n\t\t\tbindings = this._bindings;\n\n\t\tlet bindingByName = bindingsByRoot[ rootUuid ];\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\tconst 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\tif ( Object.keys( bindingByName ).length === 0 ) {\n\n\t\t\tdelete bindingsByRoot[ rootUuid ];\n\n\t\t}\n\n\t},\n\n\t_lendBinding: function ( binding ) {\n\n\t\tconst 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\tconst 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\tconst interpolants = this._controlInterpolants,\n\t\t\tlastActiveIndex = this._nActiveControlInterpolants ++;\n\n\t\tlet interpolant = 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\tconst 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, blendMode ) {\n\n\t\tconst root = optionalRoot || this._root,\n\t\t\trootUuid = root.uuid;\n\n\t\tlet clipObject = typeof clip === 'string' ? AnimationClip.findByName( root, clip ) : clip;\n\n\t\tconst clipUuid = clipObject !== null ? clipObject.uuid : clip;\n\n\t\tlet actionsForClip = this._actionsByClip[ clipUuid ],\n\t\t\tprototypeAction = null;\n\n\t\tif ( blendMode === undefined ) {\n\n\t\t\tif ( clipObject !== null ) {\n\n\t\t\t\tblendMode = clipObject.blendMode;\n\n\t\t\t} else {\n\n\t\t\t\tblendMode = NormalAnimationBlendMode;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( actionsForClip !== undefined ) {\n\n\t\t\tconst existingAction = actionsForClip.actionByRoot[ rootUuid ];\n\n\t\t\tif ( existingAction !== undefined && existingAction.blendMode === blendMode ) {\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\tconst newAction = new AnimationAction( this, clipObject, optionalRoot, blendMode );\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\tconst 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\tconst actions = this._actions,\n\t\t\tnActions = this._nActiveActions;\n\n\t\tfor ( let i = nActions - 1; i >= 0; -- i ) {\n\n\t\t\tactions[ i ].stop();\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\tconst 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 ( let i = 0; i !== nActions; ++ i ) {\n\n\t\t\tconst 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\tconst bindings = this._bindings,\n\t\t\tnBindings = this._nActiveBindings;\n\n\t\tfor ( let 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// Allows you to seek to a specific time in an animation.\n\tsetTime: function ( timeInSeconds ) {\n\n\t\tthis.time = 0; // Zero out time attribute for AnimationMixer object;\n\t\tfor ( let i = 0; i < this._actions.length; i ++ ) {\n\n\t\t\tthis._actions[ i ].time = 0; // Zero out time attribute for all associated AnimationAction objects.\n\n\t\t}\n\n\t\treturn this.update( timeInSeconds ); // Update used to set exact time. Returns \"this\" AnimationMixer object.\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\tconst 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\tconst actionsToRemove = actionsForClip.knownActions;\n\n\t\t\tfor ( let i = 0, n = actionsToRemove.length; i !== n; ++ i ) {\n\n\t\t\t\tconst action = actionsToRemove[ i ];\n\n\t\t\t\tthis._deactivateAction( action );\n\n\t\t\t\tconst 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\tconst rootUuid = root.uuid,\n\t\t\tactionsByClip = this._actionsByClip;\n\n\t\tfor ( const clipUuid in actionsByClip ) {\n\n\t\t\tconst 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\tconst bindingsByRoot = this._bindingsByRootAndName,\n\t\t\tbindingByName = bindingsByRoot[ rootUuid ];\n\n\t\tif ( bindingByName !== undefined ) {\n\n\t\t\tfor ( const trackName in bindingByName ) {\n\n\t\t\t\tconst 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\tconst 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\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\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\tclone: function ( data ) {\n\n\t\tconst ib = InterleavedBuffer.prototype.clone.call( this, data );\n\n\t\tib.meshPerAttribute = this.meshPerAttribute;\n\n\t\treturn ib;\n\n\t},\n\n\ttoJSON: function ( data ) {\n\n\t\tconst json = InterleavedBuffer.prototype.toJSON.call( this, data );\n\n\t\tjson.isInstancedInterleavedBuffer = true;\n\t\tjson.meshPerAttribute = this.meshPerAttribute;\n\n\t\treturn json;\n\n\t}\n\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\tthis.camera = null;\n\tthis.layers = new Layers();\n\n\tthis.params = {\n\t\tMesh: {},\n\t\tLine: { threshold: 1 },\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.layers.test( raycaster.layers ) ) {\n\n\t\tobject.raycast( raycaster, intersects );\n\n\t}\n\n\tif ( recursive === true ) {\n\n\t\tconst children = object.children;\n\n\t\tfor ( let 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\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\t\t\tthis.camera = camera;\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\t\t\tthis.camera = camera;\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\tconst 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\tconst 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 ( let 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 * Ref: https://en.wikipedia.org/wiki/Spherical_coordinate_system\n *\n * The polar angle (phi) is measured from the positive y-axis. The positive y-axis is up.\n * The azimuthal angle (theta) is measured from the positive z-axis.\n */\n\nclass Spherical {\n\n\tconstructor( radius = 1, phi = 0, theta = 0 ) {\n\n\t\tthis.radius = radius;\n\t\tthis.phi = phi; // polar angle\n\t\tthis.theta = theta; // azimuthal angle\n\n\t\treturn this;\n\n\t}\n\n\tset( 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() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( 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() {\n\n\t\tconst 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( v ) {\n\n\t\treturn this.setFromCartesianCoords( v.x, v.y, v.z );\n\n\t}\n\n\tsetFromCartesianCoords( x, y, z ) {\n\n\t\tthis.radius = Math.sqrt( x * x + y * y + z * z );\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( x, z );\n\t\t\tthis.phi = Math.acos( MathUtils.clamp( y / this.radius, - 1, 1 ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\n/**\n * Ref: https://en.wikipedia.org/wiki/Cylindrical_coordinate_system\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 ( v ) {\n\n\t\treturn this.setFromCartesianCoords( v.x, v.y, v.z );\n\n\t},\n\n\tsetFromCartesianCoords: function ( x, y, z ) {\n\n\t\tthis.radius = Math.sqrt( x * x + z * z );\n\t\tthis.theta = Math.atan2( x, z );\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n} );\n\nconst _vector$7 = new Vector2();\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 ( let 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 ( center, size ) {\n\n\t\tconst halfSize = _vector$7.copy( size ).multiplyScalar( 0.5 );\n\t\tthis.min.copy( center ).sub( halfSize );\n\t\tthis.max.copy( center ).add( halfSize );\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 ( 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 ( point ) {\n\n\t\tconst clampedPoint = _vector$7.copy( point ).clamp( this.min, this.max );\n\t\treturn clampedPoint.sub( point ).length();\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\nconst _startP = new Vector3();\nconst _startEnd = new Vector3();\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 ( point, clampToLine ) {\n\n\t\t_startP.subVectors( point, this.start );\n\t\t_startEnd.subVectors( this.end, this.start );\n\n\t\tconst startEnd2 = _startEnd.dot( _startEnd );\n\t\tconst startEnd_startP = _startEnd.dot( _startP );\n\n\t\tlet t = startEnd_startP / startEnd2;\n\n\t\tif ( clampToLine ) {\n\n\t\t\tt = MathUtils.clamp( t, 0, 1 );\n\n\t\t}\n\n\t\treturn t;\n\n\t},\n\n\tclosestPointToPoint: function ( point, clampToLine, target ) {\n\n\t\tconst 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\nfunction ImmediateRenderObject( material ) {\n\n\tObject3D.call( this );\n\n\tthis.material = material;\n\tthis.render = function ( /* renderCallback */ ) {};\n\n\tthis.hasPositions = false;\n\tthis.hasNormals = false;\n\tthis.hasColors = false;\n\tthis.hasUvs = false;\n\n\tthis.positionArray = null;\n\tthis.normalArray = null;\n\tthis.colorArray = null;\n\tthis.uvArray = null;\n\n\tthis.count = 0;\n\n}\n\nImmediateRenderObject.prototype = Object.create( Object3D.prototype );\nImmediateRenderObject.prototype.constructor = ImmediateRenderObject;\n\nImmediateRenderObject.prototype.isImmediateRenderObject = true;\n\nconst _vector$8 = new Vector3();\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\tconst geometry = new BufferGeometry();\n\n\tconst 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 ( let i = 0, j = 1, l = 32; i < l; i ++, j ++ ) {\n\n\t\tconst p1 = ( i / l ) * Math.PI * 2;\n\t\tconst 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.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\n\tconst material = new LineBasicMaterial( { fog: false, toneMapped: 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\tthis.light.updateMatrixWorld();\n\n\tconst coneLength = this.light.distance ? this.light.distance : 1000;\n\tconst coneWidth = coneLength * Math.tan( this.light.angle );\n\n\tthis.cone.scale.set( coneWidth, coneWidth, coneLength );\n\n\t_vector$8.setFromMatrixPosition( this.light.target.matrixWorld );\n\n\tthis.cone.lookAt( _vector$8 );\n\n\tif ( this.color !== undefined ) {\n\n\t\tthis.cone.material.color.set( this.color );\n\n\t} else {\n\n\t\tthis.cone.material.color.copy( this.light.color );\n\n\t}\n\n};\n\nconst _vector$9 = new Vector3();\nconst _boneMatrix = new Matrix4();\nconst _matrixWorldInv = new Matrix4();\n\nfunction getBoneList( object ) {\n\n\tconst boneList = [];\n\n\tif ( object && object.isBone ) {\n\n\t\tboneList.push( object );\n\n\t}\n\n\tfor ( let 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\tconst bones = getBoneList( object );\n\n\tconst geometry = new BufferGeometry();\n\n\tconst vertices = [];\n\tconst colors = [];\n\n\tconst color1 = new Color( 0, 0, 1 );\n\tconst color2 = new Color( 0, 1, 0 );\n\n\tfor ( let i = 0; i < bones.length; i ++ ) {\n\n\t\tconst 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.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\tconst material = new LineBasicMaterial( { vertexColors: true, depthTest: false, depthWrite: false, toneMapped: false, transparent: true } );\n\n\tLineSegments.call( this, geometry, material );\n\n\tthis.type = 'SkeletonHelper';\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.isSkeletonHelper = true;\n\nSkeletonHelper.prototype.updateMatrixWorld = function ( force ) {\n\n\tconst bones = this.bones;\n\n\tconst geometry = this.geometry;\n\tconst position = geometry.getAttribute( 'position' );\n\n\t_matrixWorldInv.getInverse( this.root.matrixWorld );\n\n\tfor ( let i = 0, j = 0; i < bones.length; i ++ ) {\n\n\t\tconst bone = bones[ i ];\n\n\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\t_boneMatrix.multiplyMatrices( _matrixWorldInv, bone.matrixWorld );\n\t\t\t_vector$9.setFromMatrixPosition( _boneMatrix );\n\t\t\tposition.setXYZ( j, _vector$9.x, _vector$9.y, _vector$9.z );\n\n\t\t\t_boneMatrix.multiplyMatrices( _matrixWorldInv, bone.parent.matrixWorld );\n\t\t\t_vector$9.setFromMatrixPosition( _boneMatrix );\n\t\t\tposition.setXYZ( j + 1, _vector$9.x, _vector$9.y, _vector$9.z );\n\n\t\t\tj += 2;\n\n\t\t}\n\n\t}\n\n\tgeometry.getAttribute( 'position' ).needsUpdate = true;\n\n\tObject3D.prototype.updateMatrixWorld.call( this, force );\n\n};\n\nfunction PointLightHelper( light, sphereSize, color ) {\n\n\tthis.light = light;\n\tthis.light.updateMatrixWorld();\n\n\tthis.color = color;\n\n\tconst geometry = new SphereBufferGeometry( sphereSize, 4, 2 );\n\tconst material = new MeshBasicMaterial( { wireframe: true, fog: false, toneMapped: false } );\n\n\tMesh.call( this, geometry, material );\n\n\tthis.type = 'PointLightHelper';\n\n\tthis.matrix = this.light.matrixWorld;\n\tthis.matrixAutoUpdate = false;\n\n\tthis.update();\n\n\n\t/*\n\tconst distanceGeometry = new THREE.IcosahedronBufferGeometry( 1, 2 );\n\tconst 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\tconst 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\tconst 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\nconst _vector$a = new Vector3();\nconst _color1 = new Color();\nconst _color2 = new Color();\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\tconst geometry = new OctahedronBufferGeometry( size );\n\tgeometry.rotateY( Math.PI * 0.5 );\n\n\tthis.material = new MeshBasicMaterial( { wireframe: true, fog: false, toneMapped: false } );\n\tif ( this.color === undefined ) this.material.vertexColors = true;\n\n\tconst position = geometry.getAttribute( 'position' );\n\tconst colors = new Float32Array( position.count * 3 );\n\n\tgeometry.setAttribute( '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\tconst mesh = this.children[ 0 ];\n\n\tif ( this.color !== undefined ) {\n\n\t\tthis.material.color.set( this.color );\n\n\t} else {\n\n\t\tconst colors = mesh.geometry.getAttribute( 'color' );\n\n\t\t_color1.copy( this.light.color );\n\t\t_color2.copy( this.light.groundColor );\n\n\t\tfor ( let i = 0, l = colors.count; i < l; i ++ ) {\n\n\t\t\tconst color = ( i < ( l / 2 ) ) ? _color1 : _color2;\n\n\t\t\tcolors.setXYZ( i, color.r, color.g, color.b );\n\n\t\t}\n\n\t\tcolors.needsUpdate = true;\n\n\t}\n\n\tmesh.lookAt( _vector$a.setFromMatrixPosition( this.light.matrixWorld ).negate() );\n\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\tconst center = divisions / 2;\n\tconst step = size / divisions;\n\tconst halfSize = size / 2;\n\n\tconst vertices = [], colors = [];\n\n\tfor ( let 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\tconst 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\tconst geometry = new BufferGeometry();\n\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\tconst material = new LineBasicMaterial( { vertexColors: true, toneMapped: false } );\n\n\tLineSegments.call( this, geometry, material );\n\n\tthis.type = 'GridHelper';\n\n}\n\nGridHelper.prototype = Object.create( LineSegments.prototype );\nGridHelper.prototype.constructor = GridHelper;\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\tconst vertices = [];\n\tconst colors = [];\n\n\t// create the radials\n\n\tfor ( let i = 0; i <= radials; i ++ ) {\n\n\t\tconst v = ( i / radials ) * ( Math.PI * 2 );\n\n\t\tconst x = Math.sin( v ) * radius;\n\t\tconst z = Math.cos( v ) * radius;\n\n\t\tvertices.push( 0, 0, 0 );\n\t\tvertices.push( x, 0, z );\n\n\t\tconst color = ( 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 ( let i = 0; i <= circles; i ++ ) {\n\n\t\tconst color = ( i & 1 ) ? color1 : color2;\n\n\t\tconst r = radius - ( radius / circles * i );\n\n\t\tfor ( let j = 0; j < divisions; j ++ ) {\n\n\t\t\t// first vertex\n\n\t\t\tlet v = ( j / divisions ) * ( Math.PI * 2 );\n\n\t\t\tlet x = Math.sin( v ) * r;\n\t\t\tlet z = 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\tconst geometry = new BufferGeometry();\n\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\tconst material = new LineBasicMaterial( { vertexColors: true, toneMapped: false } );\n\n\tLineSegments.call( this, geometry, material );\n\n\tthis.type = 'PolarGridHelper';\n\n}\n\nPolarGridHelper.prototype = Object.create( LineSegments.prototype );\nPolarGridHelper.prototype.constructor = PolarGridHelper;\n\nconst _v1$5 = new Vector3();\nconst _v2$3 = new Vector3();\nconst _v3$1 = new Vector3();\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\tlet geometry = new BufferGeometry();\n\tgeometry.setAttribute( '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\tconst material = new LineBasicMaterial( { fog: false, toneMapped: false } );\n\n\tthis.lightPlane = new Line( geometry, material );\n\tthis.add( this.lightPlane );\n\n\tgeometry = new BufferGeometry();\n\tgeometry.setAttribute( '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\t_v1$5.setFromMatrixPosition( this.light.matrixWorld );\n\t_v2$3.setFromMatrixPosition( this.light.target.matrixWorld );\n\t_v3$1.subVectors( _v2$3, _v1$5 );\n\n\tthis.lightPlane.lookAt( _v2$3 );\n\n\tif ( this.color !== undefined ) {\n\n\t\tthis.lightPlane.material.color.set( this.color );\n\t\tthis.targetLine.material.color.set( this.color );\n\n\t} else {\n\n\t\tthis.lightPlane.material.color.copy( this.light.color );\n\t\tthis.targetLine.material.color.copy( this.light.color );\n\n\t}\n\n\tthis.targetLine.lookAt( _v2$3 );\n\tthis.targetLine.scale.z = _v3$1.length();\n\n};\n\nconst _vector$b = new Vector3();\nconst _camera = new Camera();\n\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\tconst geometry = new BufferGeometry();\n\tconst material = new LineBasicMaterial( { color: 0xffffff, vertexColors: true, toneMapped: false } );\n\n\tconst vertices = [];\n\tconst colors = [];\n\n\tconst pointMap = {};\n\n\t// colors\n\n\tconst colorFrustum = new Color( 0xffaa00 );\n\tconst colorCone = new Color( 0xff0000 );\n\tconst colorUp = new Color( 0x00aaff );\n\tconst colorTarget = new Color( 0xffffff );\n\tconst 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.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\tLineSegments.call( this, geometry, material );\n\n\tthis.type = 'CameraHelper';\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\tconst geometry = this.geometry;\n\tconst pointMap = this.pointMap;\n\n\tconst w = 1, h = 1;\n\n\t// we need just camera projection matrix inverse\n\t// world matrix must be identity\n\n\t_camera.projectionMatrixInverse.copy( this.camera.projectionMatrixInverse );\n\n\t// center / target\n\n\tsetPoint( 'c', pointMap, geometry, _camera, 0, 0, - 1 );\n\tsetPoint( 't', pointMap, geometry, _camera, 0, 0, 1 );\n\n\t// near\n\n\tsetPoint( 'n1', pointMap, geometry, _camera, - w, - h, - 1 );\n\tsetPoint( 'n2', pointMap, geometry, _camera, w, - h, - 1 );\n\tsetPoint( 'n3', pointMap, geometry, _camera, - w, h, - 1 );\n\tsetPoint( 'n4', pointMap, geometry, _camera, w, h, - 1 );\n\n\t// far\n\n\tsetPoint( 'f1', pointMap, geometry, _camera, - w, - h, 1 );\n\tsetPoint( 'f2', pointMap, geometry, _camera, w, - h, 1 );\n\tsetPoint( 'f3', pointMap, geometry, _camera, - w, h, 1 );\n\tsetPoint( 'f4', pointMap, geometry, _camera, w, h, 1 );\n\n\t// up\n\n\tsetPoint( 'u1', pointMap, geometry, _camera, w * 0.7, h * 1.1, - 1 );\n\tsetPoint( 'u2', pointMap, geometry, _camera, - w * 0.7, h * 1.1, - 1 );\n\tsetPoint( 'u3', pointMap, geometry, _camera, 0, h * 2, - 1 );\n\n\t// cross\n\n\tsetPoint( 'cf1', pointMap, geometry, _camera, - w, 0, 1 );\n\tsetPoint( 'cf2', pointMap, geometry, _camera, w, 0, 1 );\n\tsetPoint( 'cf3', pointMap, geometry, _camera, 0, - h, 1 );\n\tsetPoint( 'cf4', pointMap, geometry, _camera, 0, h, 1 );\n\n\tsetPoint( 'cn1', pointMap, geometry, _camera, - w, 0, - 1 );\n\tsetPoint( 'cn2', pointMap, geometry, _camera, w, 0, - 1 );\n\tsetPoint( 'cn3', pointMap, geometry, _camera, 0, - h, - 1 );\n\tsetPoint( 'cn4', pointMap, geometry, _camera, 0, h, - 1 );\n\n\tgeometry.getAttribute( 'position' ).needsUpdate = true;\n\n};\n\nfunction setPoint( point, pointMap, geometry, camera, x, y, z ) {\n\n\t_vector$b.set( x, y, z ).unproject( camera );\n\n\tconst points = pointMap[ point ];\n\n\tif ( points !== undefined ) {\n\n\t\tconst position = geometry.getAttribute( 'position' );\n\n\t\tfor ( let i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\tposition.setXYZ( points[ i ], _vector$b.x, _vector$b.y, _vector$b.z );\n\n\t\t}\n\n\t}\n\n}\n\nconst _box$3 = new Box3();\n\nfunction BoxHelper( object, color ) {\n\n\tthis.object = object;\n\n\tif ( color === undefined ) color = 0xffff00;\n\n\tconst 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\tconst positions = new Float32Array( 8 * 3 );\n\n\tconst geometry = new BufferGeometry();\n\tgeometry.setIndex( new BufferAttribute( indices, 1 ) );\n\tgeometry.setAttribute( 'position', new BufferAttribute( positions, 3 ) );\n\n\tLineSegments.call( this, geometry, new LineBasicMaterial( { color: color, toneMapped: false } ) );\n\n\tthis.type = 'BoxHelper';\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 ( object ) {\n\n\tif ( object !== undefined ) {\n\n\t\tconsole.warn( 'THREE.BoxHelper: .update() has no longer arguments.' );\n\n\t}\n\n\tif ( this.object !== undefined ) {\n\n\t\t_box$3.setFromObject( this.object );\n\n\t}\n\n\tif ( _box$3.isEmpty() ) return;\n\n\tconst min = _box$3.min;\n\tconst max = _box$3.max;\n\n\t/*\n\t 5____4\n\t1/___0/|\n\t| 6__|_7\n\t2/___3/\n\n\t0: max.x, max.y, max.z\n\t1: min.x, max.y, max.z\n\t2: min.x, min.y, max.z\n\t3: max.x, min.y, max.z\n\t4: max.x, max.y, min.z\n\t5: min.x, max.y, min.z\n\t6: min.x, min.y, min.z\n\t7: max.x, min.y, min.z\n\t*/\n\n\tconst position = this.geometry.attributes.position;\n\tconst array = position.array;\n\n\tarray[ 0 ] = max.x; array[ 1 ] = max.y; array[ 2 ] = max.z;\n\tarray[ 3 ] = min.x; array[ 4 ] = max.y; array[ 5 ] = max.z;\n\tarray[ 6 ] = min.x; array[ 7 ] = min.y; array[ 8 ] = max.z;\n\tarray[ 9 ] = max.x; array[ 10 ] = min.y; array[ 11 ] = max.z;\n\tarray[ 12 ] = max.x; array[ 13 ] = max.y; array[ 14 ] = min.z;\n\tarray[ 15 ] = min.x; array[ 16 ] = max.y; array[ 17 ] = min.z;\n\tarray[ 18 ] = min.x; array[ 19 ] = min.y; array[ 20 ] = min.z;\n\tarray[ 21 ] = max.x; array[ 22 ] = min.y; array[ 23 ] = min.z;\n\n\tposition.needsUpdate = true;\n\n\tthis.geometry.computeBoundingSphere();\n\n\n};\n\nBoxHelper.prototype.setFromObject = function ( object ) {\n\n\tthis.object = object;\n\tthis.update();\n\n\treturn this;\n\n};\n\nBoxHelper.prototype.copy = function ( source ) {\n\n\tLineSegments.prototype.copy.call( this, source );\n\n\tthis.object = source.object;\n\n\treturn this;\n\n};\n\nfunction Box3Helper( box, color ) {\n\n\tthis.type = 'Box3Helper';\n\n\tthis.box = box;\n\n\tif ( color === undefined ) color = 0xffff00;\n\n\tconst 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\tconst 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\tconst geometry = new BufferGeometry();\n\n\tgeometry.setIndex( new BufferAttribute( indices, 1 ) );\n\n\tgeometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\n\tLineSegments.call( this, geometry, new LineBasicMaterial( { color: color, toneMapped: false } ) );\n\n\tthis.type = 'Box3Helper';\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\tconst 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\nfunction PlaneHelper( plane, size, hex ) {\n\n\tthis.plane = plane;\n\n\tthis.size = ( size === undefined ) ? 1 : size;\n\n\tconst color = ( hex !== undefined ) ? hex : 0xffff00;\n\n\tconst 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\tconst geometry = new BufferGeometry();\n\tgeometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\tgeometry.computeBoundingSphere();\n\n\tLine.call( this, geometry, new LineBasicMaterial( { color: color, toneMapped: false } ) );\n\n\tthis.type = 'PlaneHelper';\n\n\t//\n\n\tconst positions2 = [ 1, 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, 1, 1, - 1, - 1, 1, 1, - 1, 1 ];\n\n\tconst geometry2 = new BufferGeometry();\n\tgeometry2.setAttribute( '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, toneMapped: false } ) ) );\n\n}\n\nPlaneHelper.prototype = Object.create( Line.prototype );\nPlaneHelper.prototype.constructor = PlaneHelper;\n\nPlaneHelper.prototype.updateMatrixWorld = function ( force ) {\n\n\tlet 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.children[ 0 ].material.side = ( scale < 0 ) ? BackSide : FrontSide; // renderer flips side when determinant < 0; flipping not wanted here\n\n\tthis.lookAt( this.plane.normal );\n\n\tObject3D.prototype.updateMatrixWorld.call( this, force );\n\n};\n\nconst _axis = new Vector3();\nlet _lineGeometry, _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\tthis.type = 'ArrowHelper';\n\n\tif ( dir === undefined ) dir = new Vector3( 0, 0, 1 );\n\tif ( origin === undefined ) origin = new Vector3( 0, 0, 0 );\n\tif ( length === undefined ) length = 1;\n\tif ( color === undefined ) color = 0xffff00;\n\tif ( headLength === undefined ) headLength = 0.2 * length;\n\tif ( headWidth === undefined ) headWidth = 0.2 * headLength;\n\n\tif ( _lineGeometry === undefined ) {\n\n\t\t_lineGeometry = new BufferGeometry();\n\t\t_lineGeometry.setAttribute( 'position', new Float32BufferAttribute( [ 0, 0, 0, 0, 1, 0 ], 3 ) );\n\n\t\t_coneGeometry = new CylinderBufferGeometry( 0, 0.5, 1, 5, 1 );\n\t\t_coneGeometry.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, toneMapped: false } ) );\n\tthis.line.matrixAutoUpdate = false;\n\tthis.add( this.line );\n\n\tthis.cone = new Mesh( _coneGeometry, new MeshBasicMaterial( { color: color, toneMapped: false } ) );\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 ( dir ) {\n\n\t// dir is assumed to be normalized\n\n\tif ( dir.y > 0.99999 ) {\n\n\t\tthis.quaternion.set( 0, 0, 0, 1 );\n\n\t} else if ( dir.y < - 0.99999 ) {\n\n\t\tthis.quaternion.set( 1, 0, 0, 0 );\n\n\t} else {\n\n\t\t_axis.set( dir.z, 0, - dir.x ).normalize();\n\n\t\tconst radians = Math.acos( dir.y );\n\n\t\tthis.quaternion.setFromAxisAngle( _axis, radians );\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.0001, length - headLength ), 1 ); // see #17458\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.set( color );\n\tthis.cone.material.color.set( color );\n\n};\n\nArrowHelper.prototype.copy = function ( source ) {\n\n\tObject3D.prototype.copy.call( this, source, false );\n\n\tthis.line.copy( source.line );\n\tthis.cone.copy( source.cone );\n\n\treturn this;\n\n};\n\nfunction AxesHelper( size ) {\n\n\tsize = size || 1;\n\n\tconst 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\tconst 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\tconst geometry = new BufferGeometry();\n\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\tconst material = new LineBasicMaterial( { vertexColors: true, toneMapped: false } );\n\n\tLineSegments.call( this, geometry, material );\n\n\tthis.type = 'AxesHelper';\n\n}\n\nAxesHelper.prototype = Object.create( LineSegments.prototype );\nAxesHelper.prototype.constructor = AxesHelper;\n\nconst LOD_MIN = 4;\nconst LOD_MAX = 8;\nconst SIZE_MAX = Math.pow( 2, LOD_MAX );\n\n// The standard deviations (radians) associated with the extra mips. These are\n// chosen to approximate a Trowbridge-Reitz distribution function times the\n// geometric shadowing function. These sigma values squared must match the\n// variance #defines in cube_uv_reflection_fragment.glsl.js.\nconst EXTRA_LOD_SIGMA = [ 0.125, 0.215, 0.35, 0.446, 0.526, 0.582 ];\n\nconst TOTAL_LODS = LOD_MAX - LOD_MIN + 1 + EXTRA_LOD_SIGMA.length;\n\n// The maximum length of the blur for loop. Smaller sigmas will use fewer\n// samples and exit early, but not recompile the shader.\nconst MAX_SAMPLES = 20;\n\nconst ENCODINGS = {\n\t[ LinearEncoding ]: 0,\n\t[ sRGBEncoding ]: 1,\n\t[ RGBEEncoding ]: 2,\n\t[ RGBM7Encoding ]: 3,\n\t[ RGBM16Encoding ]: 4,\n\t[ RGBDEncoding ]: 5,\n\t[ GammaEncoding ]: 6\n};\n\nconst _flatCamera = new OrthographicCamera();\nconst { _lodPlanes, _sizeLods, _sigmas } = _createPlanes();\nlet _oldTarget = null;\n\n// Golden Ratio\nconst PHI = ( 1 + Math.sqrt( 5 ) ) / 2;\nconst INV_PHI = 1 / PHI;\n\n// Vertices of a dodecahedron (except the opposites, which represent the\n// same axis), used as axis directions evenly spread on a sphere.\nconst _axisDirections = [\n\tnew Vector3( 1, 1, 1 ),\n\tnew Vector3( - 1, 1, 1 ),\n\tnew Vector3( 1, 1, - 1 ),\n\tnew Vector3( - 1, 1, - 1 ),\n\tnew Vector3( 0, PHI, INV_PHI ),\n\tnew Vector3( 0, PHI, - INV_PHI ),\n\tnew Vector3( INV_PHI, 0, PHI ),\n\tnew Vector3( - INV_PHI, 0, PHI ),\n\tnew Vector3( PHI, INV_PHI, 0 ),\n\tnew Vector3( - PHI, INV_PHI, 0 ) ];\n\n/**\n * This class generates a Prefiltered, Mipmapped Radiance Environment Map\n * (PMREM) from a cubeMap environment texture. This allows different levels of\n * blur to be quickly accessed based on material roughness. It is packed into a\n * special CubeUV format that allows us to perform custom interpolation so that\n * we can support nonlinear formats such as RGBE. Unlike a traditional mipmap\n * chain, it only goes down to the LOD_MIN level (above), and then creates extra\n * even more filtered 'mips' at the same LOD_MIN resolution, associated with\n * higher roughness levels. In this way we maintain resolution to smoothly\n * interpolate diffuse lighting while limiting sampling computation.\n */\n\nfunction PMREMGenerator( renderer ) {\n\n\tthis._renderer = renderer;\n\tthis._pingPongRenderTarget = null;\n\n\tthis._blurMaterial = _getBlurShader( MAX_SAMPLES );\n\tthis._equirectShader = null;\n\tthis._cubemapShader = null;\n\n\tthis._compileMaterial( this._blurMaterial );\n\n}\n\nPMREMGenerator.prototype = {\n\n\tconstructor: PMREMGenerator,\n\n\t/**\n\t * Generates a PMREM from a supplied Scene, which can be faster than using an\n\t * image if networking bandwidth is low. Optional sigma specifies a blur radius\n\t * in radians to be applied to the scene before PMREM generation. Optional near\n\t * and far planes ensure the scene is rendered in its entirety (the cubeCamera\n\t * is placed at the origin).\n\t */\n\tfromScene: function ( scene, sigma = 0, near = 0.1, far = 100 ) {\n\n\t\t_oldTarget = this._renderer.getRenderTarget();\n\t\tconst cubeUVRenderTarget = this._allocateTargets();\n\n\t\tthis._sceneToCubeUV( scene, near, far, cubeUVRenderTarget );\n\t\tif ( sigma > 0 ) {\n\n\t\t\tthis._blur( cubeUVRenderTarget, 0, 0, sigma );\n\n\t\t}\n\n\t\tthis._applyPMREM( cubeUVRenderTarget );\n\t\tthis._cleanup( cubeUVRenderTarget );\n\n\t\treturn cubeUVRenderTarget;\n\n\t},\n\n\t/**\n\t * Generates a PMREM from an equirectangular texture, which can be either LDR\n\t * (RGBFormat) or HDR (RGBEFormat). The ideal input image size is 1k (1024 x 512),\n\t * as this matches best with the 256 x 256 cubemap output.\n\t */\n\tfromEquirectangular: function ( equirectangular ) {\n\n\t\treturn this._fromTexture( equirectangular );\n\n\t},\n\n\t/**\n\t * Generates a PMREM from an cubemap texture, which can be either LDR\n\t * (RGBFormat) or HDR (RGBEFormat). The ideal input cube size is 256 x 256,\n\t * as this matches best with the 256 x 256 cubemap output.\n\t */\n\tfromCubemap: function ( cubemap ) {\n\n\t\treturn this._fromTexture( cubemap );\n\n\t},\n\n\t/**\n\t * Pre-compiles the cubemap shader. You can get faster start-up by invoking this method during\n\t * your texture's network fetch for increased concurrency.\n\t */\n\tcompileCubemapShader: function () {\n\n\t\tif ( this._cubemapShader === null ) {\n\n\t\t\tthis._cubemapShader = _getCubemapShader();\n\t\t\tthis._compileMaterial( this._cubemapShader );\n\n\t\t}\n\n\t},\n\n\t/**\n\t * Pre-compiles the equirectangular shader. You can get faster start-up by invoking this method during\n\t * your texture's network fetch for increased concurrency.\n\t */\n\tcompileEquirectangularShader: function () {\n\n\t\tif ( this._equirectShader === null ) {\n\n\t\t\tthis._equirectShader = _getEquirectShader();\n\t\t\tthis._compileMaterial( this._equirectShader );\n\n\t\t}\n\n\t},\n\n\t/**\n\t * Disposes of the PMREMGenerator's internal memory. Note that PMREMGenerator is a static class,\n\t * so you should not need more than one PMREMGenerator object. If you do, calling dispose() on\n\t * one of them will cause any others to also become unusable.\n\t */\n\tdispose: function () {\n\n\t\tthis._blurMaterial.dispose();\n\n\t\tif ( this._cubemapShader !== null ) this._cubemapShader.dispose();\n\t\tif ( this._equirectShader !== null ) this._equirectShader.dispose();\n\n\t\tfor ( let i = 0; i < _lodPlanes.length; i ++ ) {\n\n\t\t\t_lodPlanes[ i ].dispose();\n\n\t\t}\n\n\t},\n\n\t// private interface\n\n\t_cleanup: function ( outputTarget ) {\n\n\t\tthis._pingPongRenderTarget.dispose();\n\t\tthis._renderer.setRenderTarget( _oldTarget );\n\t\toutputTarget.scissorTest = false;\n\t\t_setViewport( outputTarget, 0, 0, outputTarget.width, outputTarget.height );\n\n\t},\n\n\t_fromTexture: function ( texture ) {\n\n\t\t_oldTarget = this._renderer.getRenderTarget();\n\t\tconst cubeUVRenderTarget = this._allocateTargets( texture );\n\t\tthis._textureToCubeUV( texture, cubeUVRenderTarget );\n\t\tthis._applyPMREM( cubeUVRenderTarget );\n\t\tthis._cleanup( cubeUVRenderTarget );\n\n\t\treturn cubeUVRenderTarget;\n\n\t},\n\n\t_allocateTargets: function ( texture ) { // warning: null texture is valid\n\n\t\tconst params = {\n\t\t\tmagFilter: NearestFilter,\n\t\t\tminFilter: NearestFilter,\n\t\t\tgenerateMipmaps: false,\n\t\t\ttype: UnsignedByteType,\n\t\t\tformat: RGBEFormat,\n\t\t\tencoding: _isLDR( texture ) ? texture.encoding : RGBEEncoding,\n\t\t\tdepthBuffer: false,\n\t\t\tstencilBuffer: false\n\t\t};\n\n\t\tconst cubeUVRenderTarget = _createRenderTarget( params );\n\t\tcubeUVRenderTarget.depthBuffer = texture ? false : true;\n\t\tthis._pingPongRenderTarget = _createRenderTarget( params );\n\t\treturn cubeUVRenderTarget;\n\n\t},\n\n\t_compileMaterial: function ( material ) {\n\n\t\tconst tmpMesh = new Mesh( _lodPlanes[ 0 ], material );\n\t\tthis._renderer.compile( tmpMesh, _flatCamera );\n\n\t},\n\n\t_sceneToCubeUV: function ( scene, near, far, cubeUVRenderTarget ) {\n\n\t\tconst fov = 90;\n\t\tconst aspect = 1;\n\t\tconst cubeCamera = new PerspectiveCamera( fov, aspect, near, far );\n\t\tconst upSign = [ 1, - 1, 1, 1, 1, 1 ];\n\t\tconst forwardSign = [ 1, 1, 1, - 1, - 1, - 1 ];\n\t\tconst renderer = this._renderer;\n\n\t\tconst outputEncoding = renderer.outputEncoding;\n\t\tconst toneMapping = renderer.toneMapping;\n\t\tconst clearColor = renderer.getClearColor();\n\t\tconst clearAlpha = renderer.getClearAlpha();\n\n\t\trenderer.toneMapping = NoToneMapping;\n\t\trenderer.outputEncoding = LinearEncoding;\n\n\t\tlet background = scene.background;\n\t\tif ( background && background.isColor ) {\n\n\t\t\tbackground.convertSRGBToLinear();\n\t\t\t// Convert linear to RGBE\n\t\t\tconst maxComponent = Math.max( background.r, background.g, background.b );\n\t\t\tconst fExp = Math.min( Math.max( Math.ceil( Math.log2( maxComponent ) ), - 128.0 ), 127.0 );\n\t\t\tbackground = background.multiplyScalar( Math.pow( 2.0, - fExp ) );\n\t\t\tconst alpha = ( fExp + 128.0 ) / 255.0;\n\t\t\trenderer.setClearColor( background, alpha );\n\t\t\tscene.background = null;\n\n\t\t}\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tconst col = i % 3;\n\t\t\tif ( col == 0 ) {\n\n\t\t\t\tcubeCamera.up.set( 0, upSign[ i ], 0 );\n\t\t\t\tcubeCamera.lookAt( forwardSign[ i ], 0, 0 );\n\n\t\t\t} else if ( col == 1 ) {\n\n\t\t\t\tcubeCamera.up.set( 0, 0, upSign[ i ] );\n\t\t\t\tcubeCamera.lookAt( 0, forwardSign[ i ], 0 );\n\n\t\t\t} else {\n\n\t\t\t\tcubeCamera.up.set( 0, upSign[ i ], 0 );\n\t\t\t\tcubeCamera.lookAt( 0, 0, forwardSign[ i ] );\n\n\t\t\t}\n\n\t\t\t_setViewport( cubeUVRenderTarget,\n\t\t\t\tcol * SIZE_MAX, i > 2 ? SIZE_MAX : 0, SIZE_MAX, SIZE_MAX );\n\t\t\trenderer.setRenderTarget( cubeUVRenderTarget );\n\t\t\trenderer.render( scene, cubeCamera );\n\n\t\t}\n\n\t\trenderer.toneMapping = toneMapping;\n\t\trenderer.outputEncoding = outputEncoding;\n\t\trenderer.setClearColor( clearColor, clearAlpha );\n\n\t},\n\n\t_textureToCubeUV: function ( texture, cubeUVRenderTarget ) {\n\n\t\tconst renderer = this._renderer;\n\n\t\tif ( texture.isCubeTexture ) {\n\n\t\t\tif ( this._cubemapShader == null ) {\n\n\t\t\t\tthis._cubemapShader = _getCubemapShader();\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( this._equirectShader == null ) {\n\n\t\t\t\tthis._equirectShader = _getEquirectShader();\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst material = texture.isCubeTexture ? this._cubemapShader : this._equirectShader;\n\t\tconst mesh = new Mesh( _lodPlanes[ 0 ], material );\n\n\t\tconst uniforms = material.uniforms;\n\n\t\tuniforms[ 'envMap' ].value = texture;\n\n\t\tif ( ! texture.isCubeTexture ) {\n\n\t\t\tuniforms[ 'texelSize' ].value.set( 1.0 / texture.image.width, 1.0 / texture.image.height );\n\n\t\t}\n\n\t\tuniforms[ 'inputEncoding' ].value = ENCODINGS[ texture.encoding ];\n\t\tuniforms[ 'outputEncoding' ].value = ENCODINGS[ cubeUVRenderTarget.texture.encoding ];\n\n\t\t_setViewport( cubeUVRenderTarget, 0, 0, 3 * SIZE_MAX, 2 * SIZE_MAX );\n\n\t\trenderer.setRenderTarget( cubeUVRenderTarget );\n\t\trenderer.render( mesh, _flatCamera );\n\n\t},\n\n\t_applyPMREM: function ( cubeUVRenderTarget ) {\n\n\t\tconst renderer = this._renderer;\n\t\tconst autoClear = renderer.autoClear;\n\t\trenderer.autoClear = false;\n\n\t\tfor ( let i = 1; i < TOTAL_LODS; i ++ ) {\n\n\t\t\tconst sigma = Math.sqrt( _sigmas[ i ] * _sigmas[ i ] - _sigmas[ i - 1 ] * _sigmas[ i - 1 ] );\n\n\t\t\tconst poleAxis = _axisDirections[ ( i - 1 ) % _axisDirections.length ];\n\n\t\t\tthis._blur( cubeUVRenderTarget, i - 1, i, sigma, poleAxis );\n\n\t\t}\n\n\t\trenderer.autoClear = autoClear;\n\n\t},\n\n\t/**\n\t * This is a two-pass Gaussian blur for a cubemap. Normally this is done\n\t * vertically and horizontally, but this breaks down on a cube. Here we apply\n\t * the blur latitudinally (around the poles), and then longitudinally (towards\n\t * the poles) to approximate the orthogonally-separable blur. It is least\n\t * accurate at the poles, but still does a decent job.\n\t */\n\t_blur: function ( cubeUVRenderTarget, lodIn, lodOut, sigma, poleAxis ) {\n\n\t\tconst pingPongRenderTarget = this._pingPongRenderTarget;\n\n\t\tthis._halfBlur(\n\t\t\tcubeUVRenderTarget,\n\t\t\tpingPongRenderTarget,\n\t\t\tlodIn,\n\t\t\tlodOut,\n\t\t\tsigma,\n\t\t\t'latitudinal',\n\t\t\tpoleAxis );\n\n\t\tthis._halfBlur(\n\t\t\tpingPongRenderTarget,\n\t\t\tcubeUVRenderTarget,\n\t\t\tlodOut,\n\t\t\tlodOut,\n\t\t\tsigma,\n\t\t\t'longitudinal',\n\t\t\tpoleAxis );\n\n\t},\n\n\t_halfBlur: function ( targetIn, targetOut, lodIn, lodOut, sigmaRadians, direction, poleAxis ) {\n\n\t\tconst renderer = this._renderer;\n\t\tconst blurMaterial = this._blurMaterial;\n\n\t\tif ( direction !== 'latitudinal' && direction !== 'longitudinal' ) {\n\n\t\t\tconsole.error(\n\t\t\t\t'blur direction must be either latitudinal or longitudinal!' );\n\n\t\t}\n\n\t\t// Number of standard deviations at which to cut off the discrete approximation.\n\t\tconst STANDARD_DEVIATIONS = 3;\n\n\t\tconst blurMesh = new Mesh( _lodPlanes[ lodOut ], blurMaterial );\n\t\tconst blurUniforms = blurMaterial.uniforms;\n\n\t\tconst pixels = _sizeLods[ lodIn ] - 1;\n\t\tconst radiansPerPixel = isFinite( sigmaRadians ) ? Math.PI / ( 2 * pixels ) : 2 * Math.PI / ( 2 * MAX_SAMPLES - 1 );\n\t\tconst sigmaPixels = sigmaRadians / radiansPerPixel;\n\t\tconst samples = isFinite( sigmaRadians ) ? 1 + Math.floor( STANDARD_DEVIATIONS * sigmaPixels ) : MAX_SAMPLES;\n\n\t\tif ( samples > MAX_SAMPLES ) {\n\n\t\t\tconsole.warn( `sigmaRadians, ${\n\t\t\t\tsigmaRadians}, is too large and will clip, as it requested ${\n\t\t\t\tsamples} samples when the maximum is set to ${MAX_SAMPLES}` );\n\n\t\t}\n\n\t\tconst weights = [];\n\t\tlet sum = 0;\n\n\t\tfor ( let i = 0; i < MAX_SAMPLES; ++ i ) {\n\n\t\t\tconst x = i / sigmaPixels;\n\t\t\tconst weight = Math.exp( - x * x / 2 );\n\t\t\tweights.push( weight );\n\n\t\t\tif ( i == 0 ) {\n\n\t\t\t\tsum += weight;\n\n\t\t\t} else if ( i < samples ) {\n\n\t\t\t\tsum += 2 * weight;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( let i = 0; i < weights.length; i ++ ) {\n\n\t\t\tweights[ i ] = weights[ i ] / sum;\n\n\t\t}\n\n\t\tblurUniforms[ 'envMap' ].value = targetIn.texture;\n\t\tblurUniforms[ 'samples' ].value = samples;\n\t\tblurUniforms[ 'weights' ].value = weights;\n\t\tblurUniforms[ 'latitudinal' ].value = direction === 'latitudinal';\n\n\t\tif ( poleAxis ) {\n\n\t\t\tblurUniforms[ 'poleAxis' ].value = poleAxis;\n\n\t\t}\n\n\t\tblurUniforms[ 'dTheta' ].value = radiansPerPixel;\n\t\tblurUniforms[ 'mipInt' ].value = LOD_MAX - lodIn;\n\t\tblurUniforms[ 'inputEncoding' ].value = ENCODINGS[ targetIn.texture.encoding ];\n\t\tblurUniforms[ 'outputEncoding' ].value = ENCODINGS[ targetIn.texture.encoding ];\n\n\t\tconst outputSize = _sizeLods[ lodOut ];\n\t\tconst x = 3 * Math.max( 0, SIZE_MAX - 2 * outputSize );\n\t\tconst y = ( lodOut === 0 ? 0 : 2 * SIZE_MAX ) + 2 * outputSize * ( lodOut > LOD_MAX - LOD_MIN ? lodOut - LOD_MAX + LOD_MIN : 0 );\n\n\t\t_setViewport( targetOut, x, y, 3 * outputSize, 2 * outputSize );\n\t\trenderer.setRenderTarget( targetOut );\n\t\trenderer.render( blurMesh, _flatCamera );\n\n\t}\n\n};\n\nfunction _isLDR( texture ) {\n\n\tif ( texture === undefined || texture.type !== UnsignedByteType ) return false;\n\n\treturn texture.encoding === LinearEncoding || texture.encoding === sRGBEncoding || texture.encoding === GammaEncoding;\n\n}\n\nfunction _createPlanes() {\n\n\tconst _lodPlanes = [];\n\tconst _sizeLods = [];\n\tconst _sigmas = [];\n\n\tlet lod = LOD_MAX;\n\n\tfor ( let i = 0; i < TOTAL_LODS; i ++ ) {\n\n\t\tconst sizeLod = Math.pow( 2, lod );\n\t\t_sizeLods.push( sizeLod );\n\t\tlet sigma = 1.0 / sizeLod;\n\n\t\tif ( i > LOD_MAX - LOD_MIN ) {\n\n\t\t\tsigma = EXTRA_LOD_SIGMA[ i - LOD_MAX + LOD_MIN - 1 ];\n\n\t\t} else if ( i == 0 ) {\n\n\t\t\tsigma = 0;\n\n\t\t}\n\n\t\t_sigmas.push( sigma );\n\n\t\tconst texelSize = 1.0 / ( sizeLod - 1 );\n\t\tconst min = - texelSize / 2;\n\t\tconst max = 1 + texelSize / 2;\n\t\tconst uv1 = [ min, min, max, min, max, max, min, min, max, max, min, max ];\n\n\t\tconst cubeFaces = 6;\n\t\tconst vertices = 6;\n\t\tconst positionSize = 3;\n\t\tconst uvSize = 2;\n\t\tconst faceIndexSize = 1;\n\n\t\tconst position = new Float32Array( positionSize * vertices * cubeFaces );\n\t\tconst uv = new Float32Array( uvSize * vertices * cubeFaces );\n\t\tconst faceIndex = new Float32Array( faceIndexSize * vertices * cubeFaces );\n\n\t\tfor ( let face = 0; face < cubeFaces; face ++ ) {\n\n\t\t\tconst x = ( face % 3 ) * 2 / 3 - 1;\n\t\t\tconst y = face > 2 ? 0 : - 1;\n\t\t\tconst coordinates = [\n\t\t\t\tx, y, 0,\n\t\t\t\tx + 2 / 3, y, 0,\n\t\t\t\tx + 2 / 3, y + 1, 0,\n\t\t\t\tx, y, 0,\n\t\t\t\tx + 2 / 3, y + 1, 0,\n\t\t\t\tx, y + 1, 0\n\t\t\t];\n\t\t\tposition.set( coordinates, positionSize * vertices * face );\n\t\t\tuv.set( uv1, uvSize * vertices * face );\n\t\t\tconst fill = [ face, face, face, face, face, face ];\n\t\t\tfaceIndex.set( fill, faceIndexSize * vertices * face );\n\n\t\t}\n\n\t\tconst planes = new BufferGeometry();\n\t\tplanes.setAttribute( 'position', new BufferAttribute( position, positionSize ) );\n\t\tplanes.setAttribute( 'uv', new BufferAttribute( uv, uvSize ) );\n\t\tplanes.setAttribute( 'faceIndex', new BufferAttribute( faceIndex, faceIndexSize ) );\n\t\t_lodPlanes.push( planes );\n\n\t\tif ( lod > LOD_MIN ) {\n\n\t\t\tlod --;\n\n\t\t}\n\n\t}\n\n\treturn { _lodPlanes, _sizeLods, _sigmas };\n\n}\n\nfunction _createRenderTarget( params ) {\n\n\tconst cubeUVRenderTarget = new WebGLRenderTarget( 3 * SIZE_MAX, 3 * SIZE_MAX, params );\n\tcubeUVRenderTarget.texture.mapping = CubeUVReflectionMapping;\n\tcubeUVRenderTarget.texture.name = 'PMREM.cubeUv';\n\tcubeUVRenderTarget.scissorTest = true;\n\treturn cubeUVRenderTarget;\n\n}\n\nfunction _setViewport( target, x, y, width, height ) {\n\n\ttarget.viewport.set( x, y, width, height );\n\ttarget.scissor.set( x, y, width, height );\n\n}\n\nfunction _getBlurShader( maxSamples ) {\n\n\tconst weights = new Float32Array( maxSamples );\n\tconst poleAxis = new Vector3( 0, 1, 0 );\n\tconst shaderMaterial = new RawShaderMaterial( {\n\n\t\tname: 'SphericalGaussianBlur',\n\n\t\tdefines: { 'n': maxSamples },\n\n\t\tuniforms: {\n\t\t\t'envMap': { value: null },\n\t\t\t'samples': { value: 1 },\n\t\t\t'weights': { value: weights },\n\t\t\t'latitudinal': { value: false },\n\t\t\t'dTheta': { value: 0 },\n\t\t\t'mipInt': { value: 0 },\n\t\t\t'poleAxis': { value: poleAxis },\n\t\t\t'inputEncoding': { value: ENCODINGS[ LinearEncoding ] },\n\t\t\t'outputEncoding': { value: ENCODINGS[ LinearEncoding ] }\n\t\t},\n\n\t\tvertexShader: _getCommonVertexShader(),\n\n\t\tfragmentShader: /* glsl */`\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\t\t\tuniform int samples;\n\t\t\tuniform float weights[ n ];\n\t\t\tuniform bool latitudinal;\n\t\t\tuniform float dTheta;\n\t\t\tuniform float mipInt;\n\t\t\tuniform vec3 poleAxis;\n\n\t\t\t${ _getEncodings() }\n\n\t\t\t#define ENVMAP_TYPE_CUBE_UV\n\t\t\t#include \n\n\t\t\tvec3 getSample( float theta, vec3 axis ) {\n\n\t\t\t\tfloat cosTheta = cos( theta );\n\t\t\t\t// Rodrigues' axis-angle rotation\n\t\t\t\tvec3 sampleDirection = vOutputDirection * cosTheta\n\t\t\t\t\t+ cross( axis, vOutputDirection ) * sin( theta )\n\t\t\t\t\t+ axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta );\n\n\t\t\t\treturn bilinearCubeUV( envMap, sampleDirection, mipInt );\n\n\t\t\t}\n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection );\n\n\t\t\t\tif ( all( equal( axis, vec3( 0.0 ) ) ) ) {\n\n\t\t\t\t\taxis = vec3( vOutputDirection.z, 0.0, - vOutputDirection.x );\n\n\t\t\t\t}\n\n\t\t\t\taxis = normalize( axis );\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t\t\t\tgl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis );\n\n\t\t\t\tfor ( int i = 1; i < n; i++ ) {\n\n\t\t\t\t\tif ( i >= samples ) {\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfloat theta = dTheta * float( i );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( theta, axis );\n\n\t\t\t\t}\n\n\t\t\t\tgl_FragColor = linearToOutputTexel( gl_FragColor );\n\n\t\t\t}\n\t\t`,\n\n\t\tblending: NoBlending,\n\t\tdepthTest: false,\n\t\tdepthWrite: false\n\n\t} );\n\n\treturn shaderMaterial;\n\n}\n\nfunction _getEquirectShader() {\n\n\tconst texelSize = new Vector2( 1, 1 );\n\tconst shaderMaterial = new RawShaderMaterial( {\n\n\t\tname: 'EquirectangularToCubeUV',\n\n\t\tuniforms: {\n\t\t\t'envMap': { value: null },\n\t\t\t'texelSize': { value: texelSize },\n\t\t\t'inputEncoding': { value: ENCODINGS[ LinearEncoding ] },\n\t\t\t'outputEncoding': { value: ENCODINGS[ LinearEncoding ] }\n\t\t},\n\n\t\tvertexShader: _getCommonVertexShader(),\n\n\t\tfragmentShader: /* glsl */`\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\t\t\tuniform vec2 texelSize;\n\n\t\t\t${ _getEncodings() }\n\n\t\t\t#include \n\n\t\t\tvoid main() {\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\n\t\t\t\tvec3 outputDirection = normalize( vOutputDirection );\n\t\t\t\tvec2 uv = equirectUv( outputDirection );\n\n\t\t\t\tvec2 f = fract( uv / texelSize - 0.5 );\n\t\t\t\tuv -= f * texelSize;\n\t\t\t\tvec3 tl = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\t\t\t\tuv.x += texelSize.x;\n\t\t\t\tvec3 tr = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\t\t\t\tuv.y += texelSize.y;\n\t\t\t\tvec3 br = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\t\t\t\tuv.x -= texelSize.x;\n\t\t\t\tvec3 bl = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\n\t\t\t\tvec3 tm = mix( tl, tr, f.x );\n\t\t\t\tvec3 bm = mix( bl, br, f.x );\n\t\t\t\tgl_FragColor.rgb = mix( tm, bm, f.y );\n\n\t\t\t\tgl_FragColor = linearToOutputTexel( gl_FragColor );\n\n\t\t\t}\n\t\t`,\n\n\t\tblending: NoBlending,\n\t\tdepthTest: false,\n\t\tdepthWrite: false\n\n\t} );\n\n\treturn shaderMaterial;\n\n}\n\nfunction _getCubemapShader() {\n\n\tconst shaderMaterial = new RawShaderMaterial( {\n\n\t\tname: 'CubemapToCubeUV',\n\n\t\tuniforms: {\n\t\t\t'envMap': { value: null },\n\t\t\t'inputEncoding': { value: ENCODINGS[ LinearEncoding ] },\n\t\t\t'outputEncoding': { value: ENCODINGS[ LinearEncoding ] }\n\t\t},\n\n\t\tvertexShader: _getCommonVertexShader(),\n\n\t\tfragmentShader: /* glsl */`\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform samplerCube envMap;\n\n\t\t\t${ _getEncodings() }\n\n\t\t\tvoid main() {\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t\t\t\tgl_FragColor.rgb = envMapTexelToLinear( textureCube( envMap, vec3( - vOutputDirection.x, vOutputDirection.yz ) ) ).rgb;\n\t\t\t\tgl_FragColor = linearToOutputTexel( gl_FragColor );\n\n\t\t\t}\n\t\t`,\n\n\t\tblending: NoBlending,\n\t\tdepthTest: false,\n\t\tdepthWrite: false\n\n\t} );\n\n\treturn shaderMaterial;\n\n}\n\nfunction _getCommonVertexShader() {\n\n\treturn /* glsl */`\n\n\t\tprecision mediump float;\n\t\tprecision mediump int;\n\n\t\tattribute vec3 position;\n\t\tattribute vec2 uv;\n\t\tattribute float faceIndex;\n\n\t\tvarying vec3 vOutputDirection;\n\n\t\t// RH coordinate system; PMREM face-indexing convention\n\t\tvec3 getDirection( vec2 uv, float face ) {\n\n\t\t\tuv = 2.0 * uv - 1.0;\n\n\t\t\tvec3 direction = vec3( uv, 1.0 );\n\n\t\t\tif ( face == 0.0 ) {\n\n\t\t\t\tdirection = direction.zyx; // ( 1, v, u ) pos x\n\n\t\t\t} else if ( face == 1.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xz *= -1.0; // ( -u, 1, -v ) pos y\n\n\t\t\t} else if ( face == 2.0 ) {\n\n\t\t\t\tdirection.x *= -1.0; // ( -u, v, 1 ) pos z\n\n\t\t\t} else if ( face == 3.0 ) {\n\n\t\t\t\tdirection = direction.zyx;\n\t\t\t\tdirection.xz *= -1.0; // ( -1, v, -u ) neg x\n\n\t\t\t} else if ( face == 4.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xy *= -1.0; // ( -u, -1, v ) neg y\n\n\t\t\t} else if ( face == 5.0 ) {\n\n\t\t\t\tdirection.z *= -1.0; // ( u, v, -1 ) neg z\n\n\t\t\t}\n\n\t\t\treturn direction;\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvOutputDirection = getDirection( uv, faceIndex );\n\t\t\tgl_Position = vec4( position, 1.0 );\n\n\t\t}\n\t`;\n\n}\n\nfunction _getEncodings() {\n\n\treturn /* glsl */`\n\n\t\tuniform int inputEncoding;\n\t\tuniform int outputEncoding;\n\n\t\t#include \n\n\t\tvec4 inputTexelToLinear( vec4 value ) {\n\n\t\t\tif ( inputEncoding == 0 ) {\n\n\t\t\t\treturn value;\n\n\t\t\t} else if ( inputEncoding == 1 ) {\n\n\t\t\t\treturn sRGBToLinear( value );\n\n\t\t\t} else if ( inputEncoding == 2 ) {\n\n\t\t\t\treturn RGBEToLinear( value );\n\n\t\t\t} else if ( inputEncoding == 3 ) {\n\n\t\t\t\treturn RGBMToLinear( value, 7.0 );\n\n\t\t\t} else if ( inputEncoding == 4 ) {\n\n\t\t\t\treturn RGBMToLinear( value, 16.0 );\n\n\t\t\t} else if ( inputEncoding == 5 ) {\n\n\t\t\t\treturn RGBDToLinear( value, 256.0 );\n\n\t\t\t} else {\n\n\t\t\t\treturn GammaToLinear( value, 2.2 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvec4 linearToOutputTexel( vec4 value ) {\n\n\t\t\tif ( outputEncoding == 0 ) {\n\n\t\t\t\treturn value;\n\n\t\t\t} else if ( outputEncoding == 1 ) {\n\n\t\t\t\treturn LinearTosRGB( value );\n\n\t\t\t} else if ( outputEncoding == 2 ) {\n\n\t\t\t\treturn LinearToRGBE( value );\n\n\t\t\t} else if ( outputEncoding == 3 ) {\n\n\t\t\t\treturn LinearToRGBM( value, 7.0 );\n\n\t\t\t} else if ( outputEncoding == 4 ) {\n\n\t\t\t\treturn LinearToRGBM( value, 16.0 );\n\n\t\t\t} else if ( outputEncoding == 5 ) {\n\n\t\t\t\treturn LinearToRGBD( value, 256.0 );\n\n\t\t\t} else {\n\n\t\t\t\treturn LinearToGamma( value, 2.2 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvec4 envMapTexelToLinear( vec4 color ) {\n\n\t\t\treturn inputTexelToLinear( color );\n\n\t\t}\n\t`;\n\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\nconst LineStrip = 0;\nconst LinePieces = 1;\nconst NoColors = 0;\nconst FaceColors = 1;\nconst VertexColors = 2;\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\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().setUsage( THREE.DynamicDrawUsage ) instead.' );\n\treturn new BufferAttribute( array, itemSize ).setUsage( DynamicDrawUsage );\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\tconst 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\tconst 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\tconst geometry = new Geometry();\n\n\t\tfor ( let i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\tconst 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\treturn this.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\nLoader.Handlers = {\n\n\tadd: function ( /* regex, loader */ ) {\n\n\t\tconsole.error( 'THREE.Loader: Handlers.add() has been removed. Use LoadingManager.addHandler() instead.' );\n\n\t},\n\n\tget: function ( /* file */ ) {\n\n\t\tconsole.error( 'THREE.Loader: Handlers.get() has been removed. Use LoadingManager.getHandler() instead.' );\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\nObject.assign( ObjectLoader.prototype, {\n\n\tsetTexturePath: function ( value ) {\n\n\t\tconsole.warn( 'THREE.ObjectLoader: .setTexturePath() has been renamed to .setResourcePath().' );\n\t\treturn this.setResourcePath( value );\n\n\t}\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\nObject.assign( Sphere.prototype, {\n\n\tempty: function () {\n\n\t\tconsole.warn( 'THREE.Sphere: .empty() has been renamed to .isEmpty().' );\n\t\treturn this.isEmpty();\n\n\t},\n\n} );\n\nFrustum.prototype.setFromMatrix = function ( m ) {\n\n\tconsole.warn( 'THREE.Frustum: .setFromMatrix() has been renamed to .setFromProjectionMatrix().' );\n\treturn this.setFromProjectionMatrix( m );\n\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( MathUtils, {\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 MathUtils.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 MathUtils.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\tapplyToBufferAttribute: function ( attribute ) {\n\n\t\tconsole.warn( 'THREE.Matrix3: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix3( matrix ) instead.' );\n\t\treturn attribute.applyMatrix3( this );\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\tconsole.warn( 'THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead.' );\n\t\treturn new Vector3().setFromMatrixColumn( this, 3 );\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\tapplyToBufferAttribute: function ( attribute ) {\n\n\t\tconsole.warn( 'THREE.Matrix4: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix4( matrix ) instead.' );\n\t\treturn attribute.applyMatrix4( this );\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\tapplyMatrix: function ( matrix ) {\n\n\t\tconsole.warn( 'THREE.Geometry: .applyMatrix() has been renamed to .applyMatrix4().' );\n\t\treturn this.applyMatrix4( matrix );\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\tapplyMatrix: function ( matrix ) {\n\n\t\tconsole.warn( 'THREE.Object3D: .applyMatrix() has been renamed to .applyMatrix4().' );\n\t\treturn this.applyMatrix4( matrix );\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.assign( Mesh.prototype, {\n\n\tsetDrawMode: function () {\n\n\t\tconsole.error( 'THREE.Mesh: .setDrawMode() has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.' );\n\n\t},\n\n} );\n\nObject.defineProperties( Mesh.prototype, {\n\n\tdrawMode: {\n\t\tget: function () {\n\n\t\t\tconsole.error( 'THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode.' );\n\t\t\treturn TrianglesDrawMode;\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.error( 'THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.' );\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\nSkinnedMesh.prototype.initBones = function () {\n\n\tconsole.error( 'THREE.SkinnedMesh: initBones() has been removed.' );\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\tdynamic: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead.' );\n\t\t\treturn this.usage === DynamicDrawUsage;\n\n\t\t},\n\t\tset: function ( /* value */ ) {\n\n\t\t\tconsole.warn( 'THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead.' );\n\t\t\tthis.setUsage( DynamicDrawUsage );\n\n\t\t}\n\t}\n\n} );\n\nObject.assign( BufferAttribute.prototype, {\n\tsetDynamic: function ( value ) {\n\n\t\tconsole.warn( 'THREE.BufferAttribute: .setDynamic() has been deprecated. Use .setUsage() instead.' );\n\t\tthis.setUsage( value === true ? DynamicDrawUsage : StaticDrawUsage );\n\t\treturn this;\n\n\t},\n\tcopyIndicesArray: function ( /* indices */ ) {\n\n\t\tconsole.error( 'THREE.BufferAttribute: .copyIndicesArray() has been removed.' );\n\n\t},\n\tsetArray: function ( /* array */ ) {\n\n\t\tconsole.error( 'THREE.BufferAttribute: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers' );\n\n\t}\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\taddAttribute: function ( name, attribute ) {\n\n\t\tconsole.warn( 'THREE.BufferGeometry: .addAttribute() has been renamed to .setAttribute().' );\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\treturn this.setAttribute( name, new BufferAttribute( arguments[ 1 ], arguments[ 2 ] ) );\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 this;\n\n\t\t}\n\n\t\treturn this.setAttribute( name, attribute );\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\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\tremoveAttribute: function ( name ) {\n\n\t\tconsole.warn( 'THREE.BufferGeometry: .removeAttribute() has been renamed to .deleteAttribute().' );\n\n\t\treturn this.deleteAttribute( name );\n\n\t},\n\tapplyMatrix: function ( matrix ) {\n\n\t\tconsole.warn( 'THREE.BufferGeometry: .applyMatrix() has been renamed to .applyMatrix4().' );\n\t\treturn this.applyMatrix4( matrix );\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\nObject.defineProperties( InstancedBufferGeometry.prototype, {\n\n\tmaxInstancedCount: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.InstancedBufferGeometry: .maxInstancedCount has been renamed to .instanceCount.' );\n\t\t\treturn this.instanceCount;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.InstancedBufferGeometry: .maxInstancedCount has been renamed to .instanceCount.' );\n\t\t\tthis.instanceCount = value;\n\n\t\t}\n\t}\n\n} );\n\nObject.defineProperties( Raycaster.prototype, {\n\n\tlinePrecision: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.Raycaster: .linePrecision has been deprecated. Use .params.Line.threshold instead.' );\n\t\t\treturn this.params.Line.threshold;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Raycaster: .linePrecision has been deprecated. Use .params.Line.threshold instead.' );\n\t\t\tthis.params.Line.threshold = value;\n\n\t\t}\n\t}\n\n} );\n\nObject.defineProperties( InterleavedBuffer.prototype, {\n\n\tdynamic: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.InterleavedBuffer: .length has been deprecated. Use .usage instead.' );\n\t\t\treturn this.usage === DynamicDrawUsage;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.InterleavedBuffer: .length has been deprecated. Use .usage instead.' );\n\t\t\tthis.setUsage( value );\n\n\t\t}\n\t}\n\n} );\n\nObject.assign( InterleavedBuffer.prototype, {\n\tsetDynamic: function ( value ) {\n\n\t\tconsole.warn( 'THREE.InterleavedBuffer: .setDynamic() has been deprecated. Use .setUsage() instead.' );\n\t\tthis.setUsage( value === true ? DynamicDrawUsage : StaticDrawUsage );\n\t\treturn this;\n\n\t},\n\tsetArray: function ( /* array */ ) {\n\n\t\tconsole.error( 'THREE.InterleavedBuffer: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers' );\n\n\t}\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\n\toverdraw: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.Material: .overdraw has been removed.' );\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Material: .overdraw has been removed.' );\n\n\t\t}\n\t},\n\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\tstencilMask: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.' + this.type + ': .stencilMask has been removed. Use .stencilFuncMask instead.' );\n\t\t\treturn this.stencilFuncMask;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.' + this.type + ': .stencilMask has been removed. Use .stencilFuncMask instead.' );\n\t\t\tthis.stencilFuncMask = value;\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( MeshPhysicalMaterial.prototype, {\n\n\ttransparency: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.MeshPhysicalMaterial: .transparency has been renamed to .transmission.' );\n\t\t\treturn this.transmission;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.MeshPhysicalMaterial: .transparency has been renamed to .transmission.' );\n\t\t\tthis.transmission = value;\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\tclearTarget: function ( renderTarget, color, depth, stencil ) {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .clearTarget() has been deprecated. Use .setRenderTarget() and .clear() instead.' );\n\t\tthis.setRenderTarget( renderTarget );\n\t\tthis.clear( color, depth, stencil );\n\n\t},\n\tanimate: function ( callback ) {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .animate() is now .setAnimationLoop().' );\n\t\tthis.setAnimationLoop( callback );\n\n\t},\n\tgetCurrentRenderTarget: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .getCurrentRenderTarget() is now .getRenderTarget().' );\n\t\treturn this.getRenderTarget();\n\n\t},\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\tgetPrecision: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .getPrecision() is now .capabilities.precision.' );\n\t\treturn this.capabilities.precision;\n\n\t},\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\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\tallocTextureUnit: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .allocTextureUnit() has been removed.' );\n\n\t},\n\tsetTexture: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .setTexture() has been removed.' );\n\n\t},\n\tsetTexture2D: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .setTexture2D() has been removed.' );\n\n\t},\n\tsetTextureCube: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .setTextureCube() has been removed.' );\n\n\t},\n\tgetActiveMipMapLevel: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .getActiveMipMapLevel() is now .getActiveMipmapLevel().' );\n\t\treturn this.getActiveMipmapLevel();\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\tcontext: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .context has been removed. Use .getContext() instead.' );\n\t\t\treturn this.getContext();\n\n\t\t}\n\t},\n\tvr: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .vr has been renamed to .xr' );\n\t\t\treturn this.xr;\n\n\t\t}\n\t},\n\tgammaInput: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead.' );\n\t\t\treturn false;\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead.' );\n\n\t\t}\n\t},\n\tgammaOutput: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead.' );\n\t\t\treturn false;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead.' );\n\t\t\tthis.outputEncoding = ( value === true ) ? sRGBEncoding : LinearEncoding;\n\n\t\t}\n\t},\n\ttoneMappingWhitePoint: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .toneMappingWhitePoint has been removed.' );\n\t\t\treturn 1.0;\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .toneMappingWhitePoint has been removed.' );\n\n\t\t}\n\t},\n\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\nfunction WebGLRenderTargetCube( width, height, options ) {\n\n\tconsole.warn( 'THREE.WebGLRenderTargetCube( width, height, options ) is now WebGLCubeRenderTarget( size, options ).' );\n\treturn new WebGLCubeRenderTarget( width, options );\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( Audio.prototype, {\n\n\tload: {\n\t\tvalue: function ( file ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: .load has been deprecated. Use THREE.AudioLoader instead.' );\n\t\t\tconst scope = this;\n\t\t\tconst audioLoader = new AudioLoader();\n\t\t\taudioLoader.load( file, function ( buffer ) {\n\n\t\t\t\tscope.setBuffer( buffer );\n\n\t\t\t} );\n\t\t\treturn this;\n\n\t\t}\n\t},\n\tstartTime: {\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Audio: .startTime is now .play( delay ).' );\n\n\t\t}\n\t}\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\nconst 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\tlet 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\nImageUtils.crossOrigin = undefined;\n\nImageUtils.loadTexture = function ( url, mapping, onLoad, onError ) {\n\n\tconsole.warn( 'THREE.ImageUtils.loadTexture has been deprecated. Use THREE.TextureLoader() instead.' );\n\n\tconst loader = new TextureLoader();\n\tloader.setCrossOrigin( this.crossOrigin );\n\n\tconst texture = loader.load( url, onLoad, undefined, onError );\n\n\tif ( mapping ) texture.mapping = mapping;\n\n\treturn texture;\n\n};\n\nImageUtils.loadTextureCube = function ( urls, mapping, onLoad, onError ) {\n\n\tconsole.warn( 'THREE.ImageUtils.loadTextureCube has been deprecated. Use THREE.CubeTextureLoader() instead.' );\n\n\tconst loader = new CubeTextureLoader();\n\tloader.setCrossOrigin( this.crossOrigin );\n\n\tconst texture = loader.load( urls, onLoad, undefined, onError );\n\n\tif ( mapping ) texture.mapping = mapping;\n\n\treturn texture;\n\n};\n\nImageUtils.loadCompressedTexture = function () {\n\n\tconsole.error( 'THREE.ImageUtils.loadCompressedTexture has been removed. Use THREE.DDSLoader instead.' );\n\n};\n\nImageUtils.loadCompressedTextureCube = function () {\n\n\tconsole.error( 'THREE.ImageUtils.loadCompressedTextureCube has been removed. Use THREE.DDSLoader instead.' );\n\n};\n\n//\n\nfunction CanvasRenderer() {\n\n\tconsole.error( 'THREE.CanvasRenderer has been removed' );\n\n}\n\n//\n\nfunction JSONLoader() {\n\n\tconsole.error( 'THREE.JSONLoader has been removed.' );\n\n}\n\n//\n\nconst SceneUtils = {\n\n\tcreateMultiMaterialObject: function ( /* geometry, materials */ ) {\n\n\t\tconsole.error( 'THREE.SceneUtils has been moved to /examples/jsm/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/jsm/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/jsm/utils/SceneUtils.js' );\n\n\t}\n\n};\n\n//\n\nfunction LensFlare() {\n\n\tconsole.error( 'THREE.LensFlare has been moved to /examples/jsm/objects/Lensflare.js' );\n\n}\n\nif ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) {\n\n\t/* eslint-disable no-undef */\n\t__THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'register', { detail: {\n\t\trevision: REVISION,\n\t} } ) );\n\t/* eslint-enable no-undef */\n\n}\n\nexport { ACESFilmicToneMapping, AddEquation, AddOperation, AdditiveAnimationBlendMode, AdditiveBlending, AlphaFormat, AlwaysDepth, AlwaysStencilFunc, AmbientLight, AmbientLightProbe, AnimationClip, AnimationLoader, AnimationMixer, AnimationObjectGroup, AnimationUtils, ArcCurve, ArrayCamera, ArrowHelper, Audio, AudioAnalyser, AudioContext, AudioListener, AudioLoader, AxesHelper, AxisHelper, BackSide, BasicDepthPacking, BasicShadowMap, BinaryTextureLoader, Bone, BooleanKeyframeTrack, BoundingBoxHelper, Box2, Box3, Box3Helper, BoxBufferGeometry, BoxGeometry, BoxHelper, BufferAttribute, BufferGeometry, BufferGeometryLoader, ByteType, Cache, Camera, CameraHelper, CanvasRenderer, CanvasTexture, CatmullRomCurve3, CineonToneMapping, CircleBufferGeometry, CircleGeometry, ClampToEdgeWrapping, Clock, ClosedSplineCurve3, Color, ColorKeyframeTrack, CompressedTexture, CompressedTextureLoader, ConeBufferGeometry, ConeGeometry, CubeCamera, BoxGeometry as CubeGeometry, CubeReflectionMapping, CubeRefractionMapping, CubeTexture, CubeTextureLoader, CubeUVReflectionMapping, CubeUVRefractionMapping, CubicBezierCurve, CubicBezierCurve3, CubicInterpolant, CullFaceBack, CullFaceFront, CullFaceFrontBack, CullFaceNone, Curve, CurvePath, CustomBlending, CustomToneMapping, CylinderBufferGeometry, CylinderGeometry, Cylindrical, DataTexture, DataTexture2DArray, DataTexture3D, DataTextureLoader, DecrementStencilOp, DecrementWrapStencilOp, DefaultLoadingManager, DepthFormat, DepthStencilFormat, DepthTexture, DirectionalLight, DirectionalLightHelper, DirectionalLightShadow, DiscreteInterpolant, DodecahedronBufferGeometry, DodecahedronGeometry, DoubleSide, DstAlphaFactor, DstColorFactor, DynamicBufferAttribute, DynamicCopyUsage, DynamicDrawUsage, DynamicReadUsage, EdgesGeometry, EdgesHelper, EllipseCurve, EqualDepth, EqualStencilFunc, EquirectangularReflectionMapping, EquirectangularRefractionMapping, Euler, EventDispatcher, ExtrudeBufferGeometry, ExtrudeGeometry, Face3, Face4, FaceColors, FileLoader, FlatShading, Float32Attribute, Float32BufferAttribute, Float64Attribute, Float64BufferAttribute, FloatType, Fog, FogExp2, Font, FontLoader, FrontSide, Frustum, GammaEncoding, Geometry, GeometryUtils, GreaterDepth, GreaterEqualDepth, GreaterEqualStencilFunc, GreaterStencilFunc, GridHelper, Group, HalfFloatType, HemisphereLight, HemisphereLightHelper, HemisphereLightProbe, IcosahedronBufferGeometry, IcosahedronGeometry, ImageBitmapLoader, ImageLoader, ImageUtils, ImmediateRenderObject, IncrementStencilOp, IncrementWrapStencilOp, InstancedBufferAttribute, InstancedBufferGeometry, InstancedInterleavedBuffer, InstancedMesh, Int16Attribute, Int16BufferAttribute, Int32Attribute, Int32BufferAttribute, Int8Attribute, Int8BufferAttribute, IntType, InterleavedBuffer, InterleavedBufferAttribute, Interpolant, InterpolateDiscrete, InterpolateLinear, InterpolateSmooth, InvertStencilOp, JSONLoader, KeepStencilOp, KeyframeTrack, LOD, LatheBufferGeometry, LatheGeometry, Layers, LensFlare, LessDepth, LessEqualDepth, LessEqualStencilFunc, LessStencilFunc, Light, LightProbe, LightShadow, Line, Line3, LineBasicMaterial, LineCurve, LineCurve3, LineDashedMaterial, LineLoop, LinePieces, LineSegments, LineStrip, LinearEncoding, LinearFilter, LinearInterpolant, LinearMipMapLinearFilter, LinearMipMapNearestFilter, LinearMipmapLinearFilter, LinearMipmapNearestFilter, LinearToneMapping, Loader, LoaderUtils, LoadingManager, LogLuvEncoding, LoopOnce, LoopPingPong, LoopRepeat, LuminanceAlphaFormat, LuminanceFormat, MOUSE, Material, MaterialLoader, MathUtils as Math, MathUtils, Matrix3, Matrix4, MaxEquation, Mesh, MeshBasicMaterial, MeshDepthMaterial, MeshDistanceMaterial, MeshFaceMaterial, MeshLambertMaterial, MeshMatcapMaterial, MeshNormalMaterial, MeshPhongMaterial, MeshPhysicalMaterial, MeshStandardMaterial, MeshToonMaterial, MinEquation, MirroredRepeatWrapping, MixOperation, MultiMaterial, MultiplyBlending, MultiplyOperation, NearestFilter, NearestMipMapLinearFilter, NearestMipMapNearestFilter, NearestMipmapLinearFilter, NearestMipmapNearestFilter, NeverDepth, NeverStencilFunc, NoBlending, NoColors, NoToneMapping, NormalAnimationBlendMode, NormalBlending, NotEqualDepth, NotEqualStencilFunc, NumberKeyframeTrack, Object3D, ObjectLoader, ObjectSpaceNormalMap, OctahedronBufferGeometry, OctahedronGeometry, OneFactor, OneMinusDstAlphaFactor, OneMinusDstColorFactor, OneMinusSrcAlphaFactor, OneMinusSrcColorFactor, OrthographicCamera, PCFShadowMap, PCFSoftShadowMap, PMREMGenerator, ParametricBufferGeometry, ParametricGeometry, Particle, ParticleBasicMaterial, ParticleSystem, ParticleSystemMaterial, Path, PerspectiveCamera, Plane, PlaneBufferGeometry, PlaneGeometry, PlaneHelper, PointCloud, PointCloudMaterial, PointLight, PointLightHelper, Points, PointsMaterial, PolarGridHelper, PolyhedronBufferGeometry, PolyhedronGeometry, PositionalAudio, PropertyBinding, PropertyMixer, QuadraticBezierCurve, QuadraticBezierCurve3, Quaternion, QuaternionKeyframeTrack, QuaternionLinearInterpolant, REVISION, RGBADepthPacking, RGBAFormat, RGBAIntegerFormat, RGBA_ASTC_10x10_Format, RGBA_ASTC_10x5_Format, RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_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_BPTC_Format, RGBA_ETC2_EAC_Format, RGBA_PVRTC_2BPPV1_Format, RGBA_PVRTC_4BPPV1_Format, RGBA_S3TC_DXT1_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT5_Format, RGBDEncoding, RGBEEncoding, RGBEFormat, RGBFormat, RGBIntegerFormat, RGBM16Encoding, RGBM7Encoding, RGB_ETC1_Format, RGB_ETC2_Format, RGB_PVRTC_2BPPV1_Format, RGB_PVRTC_4BPPV1_Format, RGB_S3TC_DXT1_Format, RGFormat, RGIntegerFormat, RawShaderMaterial, Ray, Raycaster, RectAreaLight, RedFormat, RedIntegerFormat, ReinhardToneMapping, RepeatWrapping, ReplaceStencilOp, ReverseSubtractEquation, RingBufferGeometry, RingGeometry, SRGB8_ALPHA8_ASTC_10x10_Format, SRGB8_ALPHA8_ASTC_10x5_Format, SRGB8_ALPHA8_ASTC_10x6_Format, SRGB8_ALPHA8_ASTC_10x8_Format, SRGB8_ALPHA8_ASTC_12x10_Format, SRGB8_ALPHA8_ASTC_12x12_Format, SRGB8_ALPHA8_ASTC_4x4_Format, SRGB8_ALPHA8_ASTC_5x4_Format, SRGB8_ALPHA8_ASTC_5x5_Format, SRGB8_ALPHA8_ASTC_6x5_Format, SRGB8_ALPHA8_ASTC_6x6_Format, SRGB8_ALPHA8_ASTC_8x5_Format, SRGB8_ALPHA8_ASTC_8x6_Format, SRGB8_ALPHA8_ASTC_8x8_Format, Scene, SceneUtils, ShaderChunk, ShaderLib, ShaderMaterial, ShadowMaterial, Shape, ShapeBufferGeometry, ShapeGeometry, ShapePath, ShapeUtils, ShortType, Skeleton, SkeletonHelper, SkinnedMesh, SmoothShading, Sphere, SphereBufferGeometry, SphereGeometry, Spherical, SphericalHarmonics3, Spline, SplineCurve, SplineCurve3, SpotLight, SpotLightHelper, SpotLightShadow, Sprite, SpriteMaterial, SrcAlphaFactor, SrcAlphaSaturateFactor, SrcColorFactor, StaticCopyUsage, StaticDrawUsage, StaticReadUsage, StereoCamera, StreamCopyUsage, StreamDrawUsage, StreamReadUsage, StringKeyframeTrack, SubtractEquation, SubtractiveBlending, TOUCH, TangentSpaceNormalMap, TetrahedronBufferGeometry, TetrahedronGeometry, TextBufferGeometry, TextGeometry, Texture, TextureLoader, TorusBufferGeometry, TorusGeometry, TorusKnotBufferGeometry, TorusKnotGeometry, Triangle, TriangleFanDrawMode, TriangleStripDrawMode, TrianglesDrawMode, TubeBufferGeometry, TubeGeometry, UVMapping, Uint16Attribute, Uint16BufferAttribute, Uint32Attribute, Uint32BufferAttribute, Uint8Attribute, Uint8BufferAttribute, Uint8ClampedAttribute, Uint8ClampedBufferAttribute, Uniform, UniformsLib, UniformsUtils, UnsignedByteType, UnsignedInt248Type, UnsignedIntType, UnsignedShort4444Type, UnsignedShort5551Type, UnsignedShort565Type, UnsignedShortType, VSMShadowMap, Vector2, Vector3, Vector4, VectorKeyframeTrack, Vertex, VertexColors, VideoTexture, WebGL1Renderer, WebGLCubeRenderTarget, WebGLMultisampleRenderTarget, WebGLRenderTarget, WebGLRenderTargetCube, WebGLRenderer, WebGLUtils, WireframeGeometry, WireframeHelper, WrapAroundEnding, XHRLoader, ZeroCurvatureEnding, ZeroFactor, ZeroSlopeEnding, ZeroStencilOp, sRGBEncoding };\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar isArray = require('isarray')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n * incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n ? global.TYPED_ARRAY_SUPPORT\n : typedArraySupport()\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nexports.kMaxLength = kMaxLength()\n\nfunction typedArraySupport () {\n try {\n var arr = new Uint8Array(1)\n arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\n return arr.foo() === 42 && // typed array instances can be augmented\n typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n } catch (e) {\n return false\n }\n}\n\nfunction kMaxLength () {\n return Buffer.TYPED_ARRAY_SUPPORT\n ? 0x7fffffff\n : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n if (kMaxLength() < length) {\n throw new RangeError('Invalid typed array length')\n }\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = new Uint8Array(length)\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n if (that === null) {\n that = new Buffer(length)\n }\n that.length = length\n }\n\n return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n return new Buffer(arg, encodingOrOffset, length)\n }\n\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new Error(\n 'If encoding is specified then the first argument must be a string'\n )\n }\n return allocUnsafe(this, arg)\n }\n return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n arr.__proto__ = Buffer.prototype\n return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('\"value\" argument must not be a number')\n }\n\n if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n return fromArrayBuffer(that, value, encodingOrOffset, length)\n }\n\n if (typeof value === 'string') {\n return fromString(that, value, encodingOrOffset)\n }\n\n return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n Buffer.prototype.__proto__ = Uint8Array.prototype\n Buffer.__proto__ = Uint8Array\n if (typeof Symbol !== 'undefined' && Symbol.species &&\n Buffer[Symbol.species] === Buffer) {\n // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n Object.defineProperty(Buffer, Symbol.species, {\n value: null,\n configurable: true\n })\n }\n}\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be a number')\n } else if (size < 0) {\n throw new RangeError('\"size\" argument must not be negative')\n }\n}\n\nfunction alloc (that, size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(that, size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpretted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(that, size).fill(fill, encoding)\n : createBuffer(that, size).fill(fill)\n }\n return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n assertSize(size)\n that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n for (var i = 0; i < size; ++i) {\n that[i] = 0\n }\n }\n return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('\"encoding\" must be a valid string encoding')\n }\n\n var length = byteLength(string, encoding) | 0\n that = createBuffer(that, length)\n\n var actual = that.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n that = that.slice(0, actual)\n }\n\n return that\n}\n\nfunction fromArrayLike (that, array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0\n that = createBuffer(that, length)\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255\n }\n return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\\'offset\\' is out of bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\\'length\\' is out of bounds')\n }\n\n if (byteOffset === undefined && length === undefined) {\n array = new Uint8Array(array)\n } else if (length === undefined) {\n array = new Uint8Array(array, byteOffset)\n } else {\n array = new Uint8Array(array, byteOffset, length)\n }\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = array\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n that = fromArrayLike(that, array)\n }\n return that\n}\n\nfunction fromObject (that, obj) {\n if (Buffer.isBuffer(obj)) {\n var len = checked(obj.length) | 0\n that = createBuffer(that, len)\n\n if (that.length === 0) {\n return that\n }\n\n obj.copy(that, 0, 0, len)\n return that\n }\n\n if (obj) {\n if ((typeof ArrayBuffer !== 'undefined' &&\n obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n if (typeof obj.length !== 'number' || isnan(obj.length)) {\n return createBuffer(that, 0)\n }\n return fromArrayLike(that, obj)\n }\n\n if (obj.type === 'Buffer' && isArray(obj.data)) {\n return fromArrayLike(that, obj.data)\n }\n }\n\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n // Note: cannot use `length < kMaxLength()` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= kMaxLength()) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + kMaxLength().toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError('Arguments must be Buffers')\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n var buffer = Buffer.allocUnsafe(length)\n var pos = 0\n for (i = 0; i < list.length; ++i) {\n var buf = list[i]\n if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n buf.copy(buffer, pos)\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n string = '' + string\n }\n\n var len = string.length\n if (len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n case undefined:\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) return utf8ToBytes(string).length // assume utf8\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n var i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n var length = this.length | 0\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n var str = ''\n var max = exports.INSPECT_MAX_BYTES\n if (this.length > 0) {\n str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n if (this.length > max) str += ' ... '\n }\n return ''\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (!Buffer.isBuffer(target)) {\n throw new TypeError('Argument must be a Buffer')\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart\n var y = end - start\n var len = Math.min(x, y)\n\n var thisCopy = this.slice(thisStart, thisEnd)\n var targetCopy = target.slice(start, end)\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (isNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (Buffer.TYPED_ARRAY_SUPPORT &&\n typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1\n var arrLength = arr.length\n var valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i\n if (dir) {\n var foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n var found = true\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n var remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n // must be an even number of digits\n var strLen = string.length\n if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (isNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset | 0\n if (isFinite(length)) {\n length = length | 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n // legacy write(string, encoding, offset, length) - remove in v0.13\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n return asciiWrite(this, string, offset, length)\n\n case 'latin1':\n case 'binary':\n return latin1Write(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF) ? 4\n : (firstByte > 0xDF) ? 3\n : (firstByte > 0xBF) ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = ''\n var i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; ++i) {\n out += toHex(buf[i])\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n for (var i = 0; i < bytes.length; i += 2) {\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n newBuf = this.subarray(start, end)\n newBuf.__proto__ = Buffer.prototype\n } else {\n var sliceLen = end - start\n newBuf = new Buffer(sliceLen, undefined)\n for (var i = 0; i < sliceLen; ++i) {\n newBuf[i] = this[i + start]\n }\n }\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var i = byteLength\n var mul = 1\n var val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var mul = 1\n var i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var i = byteLength - 1\n var mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n (littleEndian ? i : 1 - i) * 8\n }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffffffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n var i\n\n if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (i = len - 1; i >= 0; --i) {\n target[i + targetStart] = this[i + start]\n }\n } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n // ascending copy from start\n for (i = 0; i < len; ++i) {\n target[i + targetStart] = this[i + start]\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, start + len),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0)\n if (code < 256) {\n val = code\n }\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n } else if (typeof val === 'number') {\n val = val & 255\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n var i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n var bytes = Buffer.isBuffer(val)\n ? val\n : utf8ToBytes(new Buffer(val, encoding).toString())\n var len = bytes.length\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction stringtrim (str) {\n if (str.trim) return str.trim()\n return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n if (n < 16) return '0' + n.toString(16)\n return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\nfunction isnan (val) {\n return val !== val // eslint-disable-line no-self-compare\n}\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","module.exports = extend\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction extend() {\n var target = {}\n\n for (var i = 0; i < arguments.length; i++) {\n var source = arguments[i]\n\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n target[key] = source[key]\n }\n }\n }\n\n return target\n}\n","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n","module.exports = function(dtype) {\n switch (dtype) {\n case 'int8':\n return Int8Array\n case 'int16':\n return Int16Array\n case 'int32':\n return Int32Array\n case 'uint8':\n return Uint8Array\n case 'uint16':\n return Uint16Array\n case 'uint32':\n return Uint32Array\n case 'float32':\n return Float32Array\n case 'float64':\n return Float64Array\n case 'array':\n return Array\n case 'uint8_clamped':\n return Uint8ClampedArray\n }\n}\n","var xhr = require('xhr')\nvar noop = function(){}\nvar parseASCII = require('parse-bmfont-ascii')\nvar parseXML = require('parse-bmfont-xml')\nvar readBinary = require('parse-bmfont-binary')\nvar isBinaryFormat = require('./lib/is-binary')\nvar xtend = require('xtend')\n\nvar xml2 = (function hasXML2() {\n return self.XMLHttpRequest && \"withCredentials\" in new XMLHttpRequest\n})()\n\nmodule.exports = function(opt, cb) {\n cb = typeof cb === 'function' ? cb : noop\n\n if (typeof opt === 'string')\n opt = { uri: opt }\n else if (!opt)\n opt = {}\n\n var expectBinary = opt.binary\n if (expectBinary)\n opt = getBinaryOpts(opt)\n\n xhr(opt, function(err, res, body) {\n if (err)\n return cb(err)\n if (!/^2/.test(res.statusCode))\n return cb(new Error('http status code: '+res.statusCode))\n if (!body)\n return cb(new Error('no body result'))\n\n var binary = false \n\n //if the response type is an array buffer,\n //we need to convert it into a regular Buffer object\n if (isArrayBuffer(body)) {\n var array = new Uint8Array(body)\n body = new Buffer(array, 'binary')\n }\n\n //now check the string/Buffer response\n //and see if it has a binary BMF header\n if (isBinaryFormat(body)) {\n binary = true\n //if we have a string, turn it into a Buffer\n if (typeof body === 'string') \n body = new Buffer(body, 'binary')\n } \n\n //we are not parsing a binary format, just ASCII/XML/etc\n if (!binary) {\n //might still be a buffer if responseType is 'arraybuffer'\n if (Buffer.isBuffer(body))\n body = body.toString(opt.encoding)\n body = body.trim()\n }\n\n var result\n try {\n var type = res.headers['content-type']\n if (binary)\n result = readBinary(body)\n else if (/json/.test(type) || body.charAt(0) === '{')\n result = JSON.parse(body)\n else if (/xml/.test(type) || body.charAt(0) === '<')\n result = parseXML(body)\n else\n result = parseASCII(body)\n } catch (e) {\n cb(new Error('error parsing font '+e.message))\n cb = noop\n }\n cb(null, result)\n })\n}\n\nfunction isArrayBuffer(arr) {\n var str = Object.prototype.toString\n return str.call(arr) === '[object ArrayBuffer]'\n}\n\nfunction getBinaryOpts(opt) {\n //IE10+ and other modern browsers support array buffers\n if (xml2)\n return xtend(opt, { responseType: 'arraybuffer' })\n \n if (typeof self.XMLHttpRequest === 'undefined')\n throw new Error('your browser does not support XHR loading')\n\n //IE9 and XML1 browsers could still use an override\n var req = new self.XMLHttpRequest()\n req.overrideMimeType('text/plain; charset=x-user-defined')\n return xtend({\n xhr: req\n }, opt)\n}\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(\n uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)\n ))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","exports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n","\"use strict\";\nvar window = require(\"global/window\")\nvar isFunction = require(\"is-function\")\nvar parseHeaders = require(\"parse-headers\")\nvar xtend = require(\"xtend\")\n\nmodule.exports = createXHR\n// Allow use of default import syntax in TypeScript\nmodule.exports.default = createXHR;\ncreateXHR.XMLHttpRequest = window.XMLHttpRequest || noop\ncreateXHR.XDomainRequest = \"withCredentials\" in (new createXHR.XMLHttpRequest()) ? createXHR.XMLHttpRequest : window.XDomainRequest\n\nforEachArray([\"get\", \"put\", \"post\", \"patch\", \"head\", \"delete\"], function(method) {\n createXHR[method === \"delete\" ? \"del\" : method] = function(uri, options, callback) {\n options = initParams(uri, options, callback)\n options.method = method.toUpperCase()\n return _createXHR(options)\n }\n})\n\nfunction forEachArray(array, iterator) {\n for (var i = 0; i < array.length; i++) {\n iterator(array[i])\n }\n}\n\nfunction isEmpty(obj){\n for(var i in obj){\n if(obj.hasOwnProperty(i)) return false\n }\n return true\n}\n\nfunction initParams(uri, options, callback) {\n var params = uri\n\n if (isFunction(options)) {\n callback = options\n if (typeof uri === \"string\") {\n params = {uri:uri}\n }\n } else {\n params = xtend(options, {uri: uri})\n }\n\n params.callback = callback\n return params\n}\n\nfunction createXHR(uri, options, callback) {\n options = initParams(uri, options, callback)\n return _createXHR(options)\n}\n\nfunction _createXHR(options) {\n if(typeof options.callback === \"undefined\"){\n throw new Error(\"callback argument missing\")\n }\n\n var called = false\n var callback = function cbOnce(err, response, body){\n if(!called){\n called = true\n options.callback(err, response, body)\n }\n }\n\n function readystatechange() {\n if (xhr.readyState === 4) {\n setTimeout(loadFunc, 0)\n }\n }\n\n function getBody() {\n // Chrome with requestType=blob throws errors arround when even testing access to responseText\n var body = undefined\n\n if (xhr.response) {\n body = xhr.response\n } else {\n body = xhr.responseText || getXml(xhr)\n }\n\n if (isJson) {\n try {\n body = JSON.parse(body)\n } catch (e) {}\n }\n\n return body\n }\n\n function errorFunc(evt) {\n clearTimeout(timeoutTimer)\n if(!(evt instanceof Error)){\n evt = new Error(\"\" + (evt || \"Unknown XMLHttpRequest Error\") )\n }\n evt.statusCode = 0\n return callback(evt, failureResponse)\n }\n\n // will load the data & process the response in a special response object\n function loadFunc() {\n if (aborted) return\n var status\n clearTimeout(timeoutTimer)\n if(options.useXDR && xhr.status===undefined) {\n //IE8 CORS GET successful response doesn't have a status field, but body is fine\n status = 200\n } else {\n status = (xhr.status === 1223 ? 204 : xhr.status)\n }\n var response = failureResponse\n var err = null\n\n if (status !== 0){\n response = {\n body: getBody(),\n statusCode: status,\n method: method,\n headers: {},\n url: uri,\n rawRequest: xhr\n }\n if(xhr.getAllResponseHeaders){ //remember xhr can in fact be XDR for CORS in IE\n response.headers = parseHeaders(xhr.getAllResponseHeaders())\n }\n } else {\n err = new Error(\"Internal XMLHttpRequest Error\")\n }\n return callback(err, response, response.body)\n }\n\n var xhr = options.xhr || null\n\n if (!xhr) {\n if (options.cors || options.useXDR) {\n xhr = new createXHR.XDomainRequest()\n }else{\n xhr = new createXHR.XMLHttpRequest()\n }\n }\n\n var key\n var aborted\n var uri = xhr.url = options.uri || options.url\n var method = xhr.method = options.method || \"GET\"\n var body = options.body || options.data\n var headers = xhr.headers = options.headers || {}\n var sync = !!options.sync\n var isJson = false\n var timeoutTimer\n var failureResponse = {\n body: undefined,\n headers: {},\n statusCode: 0,\n method: method,\n url: uri,\n rawRequest: xhr\n }\n\n if (\"json\" in options && options.json !== false) {\n isJson = true\n headers[\"accept\"] || headers[\"Accept\"] || (headers[\"Accept\"] = \"application/json\") //Don't override existing accept header declared by user\n if (method !== \"GET\" && method !== \"HEAD\") {\n headers[\"content-type\"] || headers[\"Content-Type\"] || (headers[\"Content-Type\"] = \"application/json\") //Don't override existing accept header declared by user\n body = JSON.stringify(options.json === true ? body : options.json)\n }\n }\n\n xhr.onreadystatechange = readystatechange\n xhr.onload = loadFunc\n xhr.onerror = errorFunc\n // IE9 must have onprogress be set to a unique function.\n xhr.onprogress = function () {\n // IE must die\n }\n xhr.onabort = function(){\n aborted = true;\n }\n xhr.ontimeout = errorFunc\n xhr.open(method, uri, !sync, options.username, options.password)\n //has to be after open\n if(!sync) {\n xhr.withCredentials = !!options.withCredentials\n }\n // Cannot set timeout with sync request\n // not setting timeout on the xhr object, because of old webkits etc. not handling that correctly\n // both npm's request and jquery 1.x use this kind of timeout, so this is being consistent\n if (!sync && options.timeout > 0 ) {\n timeoutTimer = setTimeout(function(){\n if (aborted) return\n aborted = true//IE9 may still call readystatechange\n xhr.abort(\"timeout\")\n var e = new Error(\"XMLHttpRequest timeout\")\n e.code = \"ETIMEDOUT\"\n errorFunc(e)\n }, options.timeout )\n }\n\n if (xhr.setRequestHeader) {\n for(key in headers){\n if(headers.hasOwnProperty(key)){\n xhr.setRequestHeader(key, headers[key])\n }\n }\n } else if (options.headers && !isEmpty(options.headers)) {\n throw new Error(\"Headers cannot be set on an XDomainRequest object\")\n }\n\n if (\"responseType\" in options) {\n xhr.responseType = options.responseType\n }\n\n if (\"beforeSend\" in options &&\n typeof options.beforeSend === \"function\"\n ) {\n options.beforeSend(xhr)\n }\n\n // Microsoft Edge browser sends \"undefined\" when send is called with undefined value.\n // XMLHttpRequest spec says to pass null as body to indicate no body\n // See https://github.com/naugtur/xhr/issues/100.\n xhr.send(body || null)\n\n return xhr\n\n\n}\n\nfunction getXml(xhr) {\n // xhr.responseXML will throw Exception \"InvalidStateError\" or \"DOMException\"\n // See https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/responseXML.\n try {\n if (xhr.responseType === \"document\") {\n return xhr.responseXML\n }\n var firefoxBugTakenEffect = xhr.responseXML && xhr.responseXML.documentElement.nodeName === \"parsererror\"\n if (xhr.responseType === \"\" && !firefoxBugTakenEffect) {\n return xhr.responseXML\n }\n } catch (e) {}\n\n return null\n}\n\nfunction noop() {}\n","var win;\n\nif (typeof window !== \"undefined\") {\n win = window;\n} else if (typeof global !== \"undefined\") {\n win = global;\n} else if (typeof self !== \"undefined\"){\n win = self;\n} else {\n win = {};\n}\n\nmodule.exports = win;\n","module.exports = isFunction\n\nvar toString = Object.prototype.toString\n\nfunction isFunction (fn) {\n var string = toString.call(fn)\n return string === '[object Function]' ||\n (typeof fn === 'function' && string !== '[object RegExp]') ||\n (typeof window !== 'undefined' &&\n // IE8 and below\n (fn === window.setTimeout ||\n fn === window.alert ||\n fn === window.confirm ||\n fn === window.prompt))\n};\n","var trim = function(string) {\n return string.replace(/^\\s+|\\s+$/g, '');\n}\n , isArray = function(arg) {\n return Object.prototype.toString.call(arg) === '[object Array]';\n }\n\nmodule.exports = function (headers) {\n if (!headers)\n return {}\n\n var result = {}\n\n var headersArr = trim(headers).split('\\n')\n\n for (var i = 0; i < headersArr.length; i++) {\n var row = headersArr[i]\n var index = row.indexOf(':')\n , key = trim(row.slice(0, index)).toLowerCase()\n , value = trim(row.slice(index + 1))\n\n if (typeof(result[key]) === 'undefined') {\n result[key] = value\n } else if (isArray(result[key])) {\n result[key].push(value)\n } else {\n result[key] = [ result[key], value ]\n }\n }\n\n return result\n}\n","module.exports = function parseBMFontAscii(data) {\n if (!data)\n throw new Error('no data provided')\n data = data.toString().trim()\n\n var output = {\n pages: [],\n chars: [],\n kernings: []\n }\n\n var lines = data.split(/\\r\\n?|\\n/g)\n\n if (lines.length === 0)\n throw new Error('no data in BMFont file')\n\n for (var i = 0; i < lines.length; i++) {\n var lineData = splitLine(lines[i], i)\n if (!lineData) //skip empty lines\n continue\n\n if (lineData.key === 'page') {\n if (typeof lineData.data.id !== 'number')\n throw new Error('malformed file at line ' + i + ' -- needs page id=N')\n if (typeof lineData.data.file !== 'string')\n throw new Error('malformed file at line ' + i + ' -- needs page file=\"path\"')\n output.pages[lineData.data.id] = lineData.data.file\n } else if (lineData.key === 'chars' || lineData.key === 'kernings') {\n //... do nothing for these two ...\n } else if (lineData.key === 'char') {\n output.chars.push(lineData.data)\n } else if (lineData.key === 'kerning') {\n output.kernings.push(lineData.data)\n } else {\n output[lineData.key] = lineData.data\n }\n }\n\n return output\n}\n\nfunction splitLine(line, idx) {\n line = line.replace(/\\t+/g, ' ').trim()\n if (!line)\n return null\n\n var space = line.indexOf(' ')\n if (space === -1) \n throw new Error(\"no named row at line \" + idx)\n\n var key = line.substring(0, space)\n\n line = line.substring(space + 1)\n //clear \"letter\" field as it is non-standard and\n //requires additional complexity to parse \" / = symbols\n line = line.replace(/letter=[\\'\\\"]\\S+[\\'\\\"]/gi, '') \n line = line.split(\"=\")\n line = line.map(function(str) {\n return str.trim().match((/(\".*?\"|[^\"\\s]+)+(?=\\s*|\\s*$)/g))\n })\n\n var data = []\n for (var i = 0; i < line.length; i++) {\n var dt = line[i]\n if (i === 0) {\n data.push({\n key: dt[0],\n data: \"\"\n })\n } else if (i === line.length - 1) {\n data[data.length - 1].data = parseData(dt[0])\n } else {\n data[data.length - 1].data = parseData(dt[0])\n data.push({\n key: dt[1],\n data: \"\"\n })\n }\n }\n\n var out = {\n key: key,\n data: {}\n }\n\n data.forEach(function(v) {\n out.data[v.key] = v.data;\n })\n\n return out\n}\n\nfunction parseData(data) {\n if (!data || data.length === 0)\n return \"\"\n\n if (data.indexOf('\"') === 0 || data.indexOf(\"'\") === 0)\n return data.substring(1, data.length - 1)\n if (data.indexOf(',') !== -1)\n return parseIntList(data)\n return parseInt(data, 10)\n}\n\nfunction parseIntList(data) {\n return data.split(',').map(function(val) {\n return parseInt(val, 10)\n })\n}","var parseAttributes = require('./parse-attribs')\nvar parseFromString = require('xml-parse-from-string')\n\n//In some cases element.attribute.nodeName can return\n//all lowercase values.. so we need to map them to the correct \n//case\nvar NAME_MAP = {\n scaleh: 'scaleH',\n scalew: 'scaleW',\n stretchh: 'stretchH',\n lineheight: 'lineHeight',\n alphachnl: 'alphaChnl',\n redchnl: 'redChnl',\n greenchnl: 'greenChnl',\n bluechnl: 'blueChnl'\n}\n\nmodule.exports = function parse(data) {\n data = data.toString()\n \n var xmlRoot = parseFromString(data)\n var output = {\n pages: [],\n chars: [],\n kernings: []\n }\n\n //get config settings\n ;['info', 'common'].forEach(function(key) {\n var element = xmlRoot.getElementsByTagName(key)[0]\n if (element)\n output[key] = parseAttributes(getAttribs(element))\n })\n\n //get page info\n var pageRoot = xmlRoot.getElementsByTagName('pages')[0]\n if (!pageRoot)\n throw new Error('malformed file -- no element')\n var pages = pageRoot.getElementsByTagName('page')\n for (var i=0; i 3)\n throw new Error('Only supports BMFont Binary v3 (BMFont App v1.10)')\n \n var target = { kernings: [], chars: [] }\n for (var b=0; b<5; b++)\n i += readBlock(target, buf, i)\n return target\n}\n\nfunction readBlock(target, buf, i) {\n if (i > buf.length-1)\n return 0\n\n var blockID = buf.readUInt8(i++)\n var blockSize = buf.readInt32LE(i)\n i += 4\n\n switch(blockID) {\n case 1: \n target.info = readInfo(buf, i)\n break\n case 2:\n target.common = readCommon(buf, i)\n break\n case 3:\n target.pages = readPages(buf, i, blockSize)\n break\n case 4:\n target.chars = readChars(buf, i, blockSize)\n break\n case 5:\n target.kernings = readKernings(buf, i, blockSize)\n break\n }\n return 5 + blockSize\n}\n\nfunction readInfo(buf, i) {\n var info = {}\n info.size = buf.readInt16LE(i)\n\n var bitField = buf.readUInt8(i+2)\n info.smooth = (bitField >> 7) & 1\n info.unicode = (bitField >> 6) & 1\n info.italic = (bitField >> 5) & 1\n info.bold = (bitField >> 4) & 1\n \n //fixedHeight is only mentioned in binary spec \n if ((bitField >> 3) & 1)\n info.fixedHeight = 1\n \n info.charset = buf.readUInt8(i+3) || ''\n info.stretchH = buf.readUInt16LE(i+4)\n info.aa = buf.readUInt8(i+6)\n info.padding = [\n buf.readInt8(i+7),\n buf.readInt8(i+8),\n buf.readInt8(i+9),\n buf.readInt8(i+10)\n ]\n info.spacing = [\n buf.readInt8(i+11),\n buf.readInt8(i+12)\n ]\n info.outline = buf.readUInt8(i+13)\n info.face = readStringNT(buf, i+14)\n return info\n}\n\nfunction readCommon(buf, i) {\n var common = {}\n common.lineHeight = buf.readUInt16LE(i)\n common.base = buf.readUInt16LE(i+2)\n common.scaleW = buf.readUInt16LE(i+4)\n common.scaleH = buf.readUInt16LE(i+6)\n common.pages = buf.readUInt16LE(i+8)\n var bitField = buf.readUInt8(i+10)\n common.packed = 0\n common.alphaChnl = buf.readUInt8(i+11)\n common.redChnl = buf.readUInt8(i+12)\n common.greenChnl = buf.readUInt8(i+13)\n common.blueChnl = buf.readUInt8(i+14)\n return common\n}\n\nfunction readPages(buf, i, size) {\n var pages = []\n var text = readNameNT(buf, i)\n var len = text.length+1\n var count = size / len\n for (var c=0; c 4 && equal(buf.slice(0, 4), HEADER)\n}","var Buffer = require('buffer').Buffer; // for use with browserify\n\nmodule.exports = function (a, b) {\n if (!Buffer.isBuffer(a)) return undefined;\n if (!Buffer.isBuffer(b)) return undefined;\n if (typeof a.equals === 'function') return a.equals(b);\n if (a.length !== b.length) return false;\n \n for (var i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) return false;\n }\n \n return true;\n};\n","var assign = require('object-assign');\r\n\r\nmodule.exports = function createMSDFShader (opt) {\r\n opt = opt || {};\r\n var opacity = typeof opt.opacity === 'number' ? opt.opacity : 1;\r\n var alphaTest = typeof opt.alphaTest === 'number' ? opt.alphaTest : 0.0001;\r\n var precision = opt.precision || 'highp';\r\n var color = opt.color;\r\n var map = opt.map;\r\n var negate = typeof opt.negate === 'boolean' ? opt.negate : true;\r\n\r\n // remove to satisfy r73\r\n delete opt.map;\r\n delete opt.color;\r\n delete opt.precision;\r\n delete opt.opacity;\r\n delete opt.negate;\r\n\r\n return assign({\r\n uniforms: {\r\n opacity: { type: 'f', value: opacity },\r\n map: { type: 't', value: map || new THREE.Texture() },\r\n color: { type: 'c', value: new THREE.Color(color) }\r\n },\r\n vertexShader: [\r\n 'attribute vec2 uv;',\r\n 'attribute vec4 position;',\r\n 'uniform mat4 projectionMatrix;',\r\n 'uniform mat4 modelViewMatrix;',\r\n 'varying vec2 vUv;',\r\n 'void main() {',\r\n 'vUv = uv;',\r\n 'gl_Position = projectionMatrix * modelViewMatrix * position;',\r\n '}'\r\n ].join('\\n'),\r\n fragmentShader: [\r\n '#ifdef GL_OES_standard_derivatives',\r\n '#extension GL_OES_standard_derivatives : enable',\r\n '#endif',\r\n 'precision ' + precision + ' float;',\r\n 'uniform float opacity;',\r\n 'uniform vec3 color;',\r\n 'uniform sampler2D map;',\r\n 'varying vec2 vUv;',\r\n\r\n 'float median(float r, float g, float b) {',\r\n ' return max(min(r, g), min(max(r, g), b));',\r\n '}',\r\n\r\n 'void main() {',\r\n ' vec3 sample = ' + (negate ? '1.0 - ' : '') + 'texture2D(map, vUv).rgb;',\r\n ' float sigDist = median(sample.r, sample.g, sample.b) - 0.5;',\r\n ' float alpha = clamp(sigDist/fwidth(sigDist) + 0.5, 0.0, 1.0);',\r\n ' gl_FragColor = vec4(color.xyz, alpha * opacity);',\r\n alphaTest === 0\r\n ? ''\r\n : ' if (gl_FragColor.a < ' + alphaTest + ') discard;',\r\n '}'\r\n ].join('\\n')\r\n }, opt);\r\n};\r\n","var createLayout = require('layout-bmfont-text')\r\nvar inherits = require('inherits')\r\nvar createIndices = require('quad-indices')\r\nvar buffer = require('three-buffer-vertex-data')\r\nvar assign = require('object-assign')\r\n\r\nvar vertices = require('./lib/vertices')\r\nvar utils = require('./lib/utils')\r\n\r\nvar Base = THREE.BufferGeometry\r\n\r\nmodule.exports = function createTextGeometry (opt) {\r\n return new TextGeometry(opt)\r\n}\r\n\r\nfunction TextGeometry (opt) {\r\n Base.call(this)\r\n\r\n if (typeof opt === 'string') {\r\n opt = { text: opt }\r\n }\r\n\r\n // use these as default values for any subsequent\r\n // calls to update()\r\n this._opt = assign({}, opt)\r\n\r\n // also do an initial setup...\r\n if (opt) this.update(opt)\r\n}\r\n\r\ninherits(TextGeometry, Base)\r\n\r\nTextGeometry.prototype.update = function (opt) {\r\n if (typeof opt === 'string') {\r\n opt = { text: opt }\r\n }\r\n\r\n // use constructor defaults\r\n opt = assign({}, this._opt, opt)\r\n\r\n if (!opt.font) {\r\n throw new TypeError('must specify a { font } in options')\r\n }\r\n\r\n this.layout = createLayout(opt)\r\n\r\n // get vec2 texcoords\r\n var flipY = opt.flipY !== false\r\n\r\n // the desired BMFont data\r\n var font = opt.font\r\n\r\n // determine texture size from font file\r\n var texWidth = font.common.scaleW\r\n var texHeight = font.common.scaleH\r\n\r\n // get visible glyphs\r\n var glyphs = this.layout.glyphs.filter(function (glyph) {\r\n var bitmap = glyph.data\r\n return bitmap.width * bitmap.height > 0\r\n })\r\n\r\n // provide visible glyphs for convenience\r\n this.visibleGlyphs = glyphs\r\n\r\n // get common vertex data\r\n var positions = vertices.positions(glyphs)\r\n var uvs = vertices.uvs(glyphs, texWidth, texHeight, flipY)\r\n var indices = createIndices({\r\n clockwise: true,\r\n type: 'uint16',\r\n count: glyphs.length\r\n })\r\n\r\n // update vertex data\r\n buffer.index(this, indices, 1, 'uint16')\r\n buffer.attr(this, 'position', positions, 2)\r\n buffer.attr(this, 'uv', uvs, 2)\r\n\r\n // update multipage data\r\n if (!opt.multipage && 'page' in this.attributes) {\r\n // disable multipage rendering\r\n this.removeAttribute('page')\r\n } else if (opt.multipage) {\r\n var pages = vertices.pages(glyphs)\r\n // enable multipage rendering\r\n buffer.attr(this, 'page', pages, 1)\r\n }\r\n}\r\n\r\nTextGeometry.prototype.computeBoundingSphere = function () {\r\n if (this.boundingSphere === null) {\r\n this.boundingSphere = new THREE.Sphere()\r\n }\r\n\r\n var positions = this.attributes.position.array\r\n var itemSize = this.attributes.position.itemSize\r\n if (!positions || !itemSize || positions.length < 2) {\r\n this.boundingSphere.radius = 0\r\n this.boundingSphere.center.set(0, 0, 0)\r\n return\r\n }\r\n utils.computeSphere(positions, this.boundingSphere)\r\n if (isNaN(this.boundingSphere.radius)) {\r\n console.error('THREE.BufferGeometry.computeBoundingSphere(): ' +\r\n 'Computed radius is NaN. The ' +\r\n '\"position\" attribute is likely to have NaN values.')\r\n }\r\n}\r\n\r\nTextGeometry.prototype.computeBoundingBox = function () {\r\n if (this.boundingBox === null) {\r\n this.boundingBox = new THREE.Box3()\r\n }\r\n\r\n var bbox = this.boundingBox\r\n var positions = this.attributes.position.array\r\n var itemSize = this.attributes.position.itemSize\r\n if (!positions || !itemSize || positions.length < 2) {\r\n bbox.makeEmpty()\r\n return\r\n }\r\n utils.computeBox(positions, bbox)\r\n}\r\n","var wordWrap = require('word-wrapper')\nvar xtend = require('xtend')\nvar number = require('as-number')\n\nvar X_HEIGHTS = ['x', 'e', 'a', 'o', 'n', 's', 'r', 'c', 'u', 'm', 'v', 'w', 'z']\nvar M_WIDTHS = ['m', 'w']\nvar CAP_HEIGHTS = ['H', 'I', 'N', 'E', 'F', 'K', 'L', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']\n\n\nvar TAB_ID = '\\t'.charCodeAt(0)\nvar SPACE_ID = ' '.charCodeAt(0)\nvar ALIGN_LEFT = 0, \n ALIGN_CENTER = 1, \n ALIGN_RIGHT = 2\n\nmodule.exports = function createLayout(opt) {\n return new TextLayout(opt)\n}\n\nfunction TextLayout(opt) {\n this.glyphs = []\n this._measure = this.computeMetrics.bind(this)\n this.update(opt)\n}\n\nTextLayout.prototype.update = function(opt) {\n opt = xtend({\n measure: this._measure\n }, opt)\n this._opt = opt\n this._opt.tabSize = number(this._opt.tabSize, 4)\n\n if (!opt.font)\n throw new Error('must provide a valid bitmap font')\n\n var glyphs = this.glyphs\n var text = opt.text||'' \n var font = opt.font\n this._setupSpaceGlyphs(font)\n \n var lines = wordWrap.lines(text, opt)\n var minWidth = opt.width || 0\n\n //clear glyphs\n glyphs.length = 0\n\n //get max line width\n var maxLineWidth = lines.reduce(function(prev, line) {\n return Math.max(prev, line.width, minWidth)\n }, 0)\n\n //the pen position\n var x = 0\n var y = 0\n var lineHeight = number(opt.lineHeight, font.common.lineHeight)\n var baseline = font.common.base\n var descender = lineHeight-baseline\n var letterSpacing = opt.letterSpacing || 0\n var height = lineHeight * lines.length - descender\n var align = getAlignType(this._opt.align)\n\n //draw text along baseline\n y -= height\n \n //the metrics for this text layout\n this._width = maxLineWidth\n this._height = height\n this._descender = lineHeight - baseline\n this._baseline = baseline\n this._xHeight = getXHeight(font)\n this._capHeight = getCapHeight(font)\n this._lineHeight = lineHeight\n this._ascender = lineHeight - descender - this._xHeight\n \n //layout each glyph\n var self = this\n lines.forEach(function(line, lineIndex) {\n var start = line.start\n var end = line.end\n var lineWidth = line.width\n var lastGlyph\n \n //for each glyph in that line...\n for (var i=start; i= width || nextPen >= width)\n break\n\n //otherwise continue along our line\n curPen = nextPen\n curWidth = nextWidth\n lastGlyph = glyph\n }\n count++\n }\n \n //make sure rightmost edge lines up with rendered glyphs\n if (lastGlyph)\n curWidth += lastGlyph.xoffset\n\n return {\n start: start,\n end: start + count,\n width: curWidth\n }\n}\n\n//getters for the private vars\n;['width', 'height', \n 'descender', 'ascender',\n 'xHeight', 'baseline',\n 'capHeight',\n 'lineHeight' ].forEach(addGetter)\n\nfunction addGetter(name) {\n Object.defineProperty(TextLayout.prototype, name, {\n get: wrapper(name),\n configurable: true\n })\n}\n\n//create lookups for private vars\nfunction wrapper(name) {\n return (new Function([\n 'return function '+name+'() {',\n ' return this._'+name,\n '}'\n ].join('\\n')))()\n}\n\nfunction getGlyphById(font, id) {\n if (!font.chars || font.chars.length === 0)\n return null\n\n var glyphIdx = findChar(font.chars, id)\n if (glyphIdx >= 0)\n return font.chars[glyphIdx]\n return null\n}\n\nfunction getXHeight(font) {\n for (var i=0; i= 0) \n return font.chars[idx].height\n }\n return 0\n}\n\nfunction getMGlyph(font) {\n for (var i=0; i= 0) \n return font.chars[idx]\n }\n return 0\n}\n\nfunction getCapHeight(font) {\n for (var i=0; i= 0) \n return font.chars[idx].height\n }\n return 0\n}\n\nfunction getKerning(font, left, right) {\n if (!font.kernings || font.kernings.length === 0)\n return 0\n\n var table = font.kernings\n for (var i=0; i end)\n return end\n return idx\n}\n\nfunction isWhitespace(chr) {\n return whitespace.test(chr)\n}\n\nfunction pre(measure, text, start, end, width) {\n var lines = []\n var lineStart = start\n for (var i=start; i start) {\n if (isWhitespace(text.charAt(lineEnd)))\n break\n lineEnd--\n }\n if (lineEnd === start) {\n if (nextStart > start + newlineChar.length) nextStart--\n lineEnd = nextStart // If no characters to break, show all.\n } else {\n nextStart = lineEnd\n //eat whitespace at end of line\n while (lineEnd > start) {\n if (!isWhitespace(text.charAt(lineEnd - newlineChar.length)))\n break\n lineEnd--\n }\n }\n }\n if (lineEnd >= start) {\n var result = measure(text, start, lineEnd, testWidth)\n lines.push(result)\n }\n start = nextStart\n }\n return lines\n}\n\n//determines the visible number of glyphs within a given width\nfunction monospace(text, start, end, width) {\n var glyphs = Math.min(width, end-start)\n return {\n start: start,\n end: start+glyphs\n }\n}","module.exports = function numtype(num, def) {\n\treturn typeof num === 'number'\n\t\t? num \n\t\t: (typeof def === 'number' ? def : 0)\n}","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n","var dtype = require('dtype')\nvar anArray = require('an-array')\nvar isBuffer = require('is-buffer')\n\nvar CW = [0, 2, 3]\nvar CCW = [2, 1, 3]\n\nmodule.exports = function createQuadElements(array, opt) {\n //if user didn't specify an output array\n if (!array || !(anArray(array) || isBuffer(array))) {\n opt = array || {}\n array = null\n }\n\n if (typeof opt === 'number') //backwards-compatible\n opt = { count: opt }\n else\n opt = opt || {}\n\n var type = typeof opt.type === 'string' ? opt.type : 'uint16'\n var count = typeof opt.count === 'number' ? opt.count : 1\n var start = (opt.start || 0) \n\n var dir = opt.clockwise !== false ? CW : CCW,\n a = dir[0], \n b = dir[1],\n c = dir[2]\n\n var numIndices = count * 6\n\n var indices = array || new (dtype(type))(numIndices)\n for (var i = 0, j = 0; i < numIndices; i += 6, j += 4) {\n var x = i + start\n indices[x + 0] = j + 0\n indices[x + 1] = j + 1\n indices[x + 2] = j + 2\n indices[x + 3] = j + a\n indices[x + 4] = j + b\n indices[x + 5] = j + c\n }\n return indices\n}","var str = Object.prototype.toString\n\nmodule.exports = anArray\n\nfunction anArray(arr) {\n return (\n arr.BYTES_PER_ELEMENT\n && str.call(arr.buffer) === '[object ArrayBuffer]'\n || Array.isArray(arr)\n )\n}\n","/*!\n * Determine if an object is a Buffer\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n\n// The _isBuffer check is for Safari 5-7 support, because it's missing\n// Object.prototype.constructor. Remove this eventually\nmodule.exports = function (obj) {\n return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)\n}\n\nfunction isBuffer (obj) {\n return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)\n}\n\n// For Node v0.10 support. Remove this eventually.\nfunction isSlowBuffer (obj) {\n return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))\n}\n","var flatten = require('flatten-vertex-data')\r\nvar warned = false;\r\n\r\nmodule.exports.attr = setAttribute\r\nmodule.exports.index = setIndex\r\n\r\nfunction setIndex (geometry, data, itemSize, dtype) {\r\n if (typeof itemSize !== 'number') itemSize = 1\r\n if (typeof dtype !== 'string') dtype = 'uint16'\r\n\r\n var isR69 = !geometry.index && typeof geometry.setIndex !== 'function'\r\n var attrib = isR69 ? geometry.getAttribute('index') : geometry.index\r\n var newAttrib = updateAttribute(attrib, data, itemSize, dtype)\r\n if (newAttrib) {\r\n if (isR69) geometry.addAttribute('index', newAttrib)\r\n else geometry.index = newAttrib\r\n }\r\n}\r\n\r\nfunction setAttribute (geometry, key, data, itemSize, dtype) {\r\n if (typeof itemSize !== 'number') itemSize = 3\r\n if (typeof dtype !== 'string') dtype = 'float32'\r\n if (Array.isArray(data) &&\r\n Array.isArray(data[0]) &&\r\n data[0].length !== itemSize) {\r\n throw new Error('Nested vertex array has unexpected size; expected ' +\r\n itemSize + ' but found ' + data[0].length)\r\n }\r\n\r\n var attrib = geometry.getAttribute(key)\r\n var newAttrib = updateAttribute(attrib, data, itemSize, dtype)\r\n geometry.setAttribute(key, newAttrib)\r\n}\r\n\r\nfunction updateAttribute (attrib, data, itemSize, dtype) {\r\n data = data || []\r\n\r\n // create a new array with desired type\r\n data = flatten(data, dtype)\r\n\r\n attrib = new THREE.BufferAttribute(data, itemSize);\r\n attrib.itemSize = itemSize;\r\n attrib.needsUpdate = true;\r\n\r\n return attrib\r\n}\r\n\r\n// Test whether the attribute needs to be re-created,\r\n// returns false if we can re-use it as-is.\r\nfunction rebuildAttribute (attrib, data, itemSize) {\r\n if (attrib.itemSize !== itemSize) return true\r\n if (!attrib.array) return true\r\n var attribLength = attrib.array.length\r\n if (Array.isArray(data) && Array.isArray(data[0])) {\r\n // [ [ x, y, z ] ]\r\n return attribLength !== data.length * itemSize\r\n } else {\r\n // [ x, y, z ]\r\n return attribLength !== data.length\r\n }\r\n return false\r\n}\r\n","/*eslint new-cap:0*/\nvar dtype = require('dtype')\n\nmodule.exports = flattenVertexData\n\nfunction flattenVertexData (data, output, offset) {\n if (!data) throw new TypeError('must specify data as first parameter')\n offset = +(offset || 0) | 0\n\n if (Array.isArray(data) && (data[0] && typeof data[0][0] === 'number')) {\n var dim = data[0].length\n var length = data.length * dim\n var i, j, k, l\n\n // no output specified, create a new typed array\n if (!output || typeof output === 'string') {\n output = new (dtype(output || 'float32'))(length + offset)\n }\n\n var dstLength = output.length - offset\n if (length !== dstLength) {\n throw new Error('source length ' + length + ' (' + dim + 'x' + data.length + ')' +\n ' does not match destination length ' + dstLength)\n }\n\n for (i = 0, k = offset; i < data.length; i++) {\n for (j = 0; j < dim; j++) {\n output[k++] = data[i][j] === null ? NaN : data[i][j]\n }\n }\n } else {\n if (!output || typeof output === 'string') {\n // no output, create a new one\n var Ctor = dtype(output || 'float32')\n\n // handle arrays separately due to possible nulls\n if (Array.isArray(data) || output === 'array') {\n output = new Ctor(data.length + offset)\n for (i = 0, k = offset, l = output.length; k < l; k++, i++) {\n output[k] = data[i] === null ? NaN : data[i]\n }\n } else {\n if (offset === 0) {\n output = new Ctor(data)\n } else {\n output = new Ctor(data.length + offset)\n\n output.set(data, offset)\n }\n }\n } else {\n // store output in existing array\n output.set(data, offset)\n }\n }\n\n return output\n}\n","module.exports.pages = function pages (glyphs) {\r\n var pages = new Float32Array(glyphs.length * 4 * 1)\r\n var i = 0\r\n glyphs.forEach(function (glyph) {\r\n var id = glyph.data.page || 0\r\n pages[i++] = id\r\n pages[i++] = id\r\n pages[i++] = id\r\n pages[i++] = id\r\n })\r\n return pages\r\n}\r\n\r\nmodule.exports.uvs = function uvs (glyphs, texWidth, texHeight, flipY) {\r\n var uvs = new Float32Array(glyphs.length * 4 * 2)\r\n var i = 0\r\n glyphs.forEach(function (glyph) {\r\n var bitmap = glyph.data\r\n var bw = (bitmap.x + bitmap.width)\r\n var bh = (bitmap.y + bitmap.height)\r\n\r\n // top left position\r\n var u0 = bitmap.x / texWidth\r\n var v1 = bitmap.y / texHeight\r\n var u1 = bw / texWidth\r\n var v0 = bh / texHeight\r\n\r\n if (flipY) {\r\n v1 = (texHeight - bitmap.y) / texHeight\r\n v0 = (texHeight - bh) / texHeight\r\n }\r\n\r\n // BL\r\n uvs[i++] = u0\r\n uvs[i++] = v1\r\n // TL\r\n uvs[i++] = u0\r\n uvs[i++] = v0\r\n // TR\r\n uvs[i++] = u1\r\n uvs[i++] = v0\r\n // BR\r\n uvs[i++] = u1\r\n uvs[i++] = v1\r\n })\r\n return uvs\r\n}\r\n\r\nmodule.exports.positions = function positions (glyphs) {\r\n var positions = new Float32Array(glyphs.length * 4 * 2)\r\n var i = 0\r\n glyphs.forEach(function (glyph) {\r\n var bitmap = glyph.data\r\n\r\n // bottom left position\r\n var x = glyph.position[0] + bitmap.xoffset\r\n var y = glyph.position[1] + bitmap.yoffset\r\n\r\n // quad size\r\n var w = bitmap.width\r\n var h = bitmap.height\r\n\r\n // BL\r\n positions[i++] = x\r\n positions[i++] = y\r\n // TL\r\n positions[i++] = x\r\n positions[i++] = y + h\r\n // TR\r\n positions[i++] = x + w\r\n positions[i++] = y + h\r\n // BR\r\n positions[i++] = x + w\r\n positions[i++] = y\r\n })\r\n return positions\r\n}\r\n","var itemSize = 2\r\nvar box = { min: [0, 0], max: [0, 0] }\r\n\r\nfunction bounds (positions) {\r\n var count = positions.length / itemSize\r\n box.min[0] = positions[0]\r\n box.min[1] = positions[1]\r\n box.max[0] = positions[0]\r\n box.max[1] = positions[1]\r\n\r\n for (var i = 0; i < count; i++) {\r\n var x = positions[i * itemSize + 0]\r\n var y = positions[i * itemSize + 1]\r\n box.min[0] = Math.min(x, box.min[0])\r\n box.min[1] = Math.min(y, box.min[1])\r\n box.max[0] = Math.max(x, box.max[0])\r\n box.max[1] = Math.max(y, box.max[1])\r\n }\r\n}\r\n\r\nmodule.exports.computeBox = function (positions, output) {\r\n bounds(positions)\r\n output.min.set(box.min[0], box.min[1], 0)\r\n output.max.set(box.max[0], box.max[1], 0)\r\n}\r\n\r\nmodule.exports.computeSphere = function (positions, output) {\r\n bounds(positions)\r\n var minX = box.min[0]\r\n var minY = box.min[1]\r\n var maxX = box.max[0]\r\n var maxY = box.max[1]\r\n var width = maxX - minX\r\n var height = maxY - minY\r\n var length = Math.sqrt(width * width + height * height)\r\n output.center.set(minX + width / 2, minY + height / 2, 0)\r\n output.radius = length / 2\r\n}\r\n","var assign = require('object-assign');\r\n\r\nmodule.exports = function createMSDFShader (opt) {\r\n opt = opt || {};\r\n var opacity = typeof opt.opacity === 'number' ? opt.opacity : 1;\r\n var alphaTest = typeof opt.alphaTest === 'number' ? opt.alphaTest : 0.0001;\r\n var precision = opt.precision || 'highp';\r\n var color = opt.color;\r\n var map = opt.map;\r\n var negate = typeof opt.negate === 'boolean' ? opt.negate : true;\r\n\r\n // remove to satisfy r73\r\n delete opt.map;\r\n delete opt.color;\r\n delete opt.precision;\r\n delete opt.opacity;\r\n delete opt.negate;\r\n\r\n return assign({\r\n uniforms: {\r\n opacity: { type: 'f', value: opacity },\r\n map: { type: 't', value: map || new THREE.Texture() },\r\n color: { type: 'c', value: new THREE.Color(color) },\r\n center: {type: 'vec2', value: new THREE.Vector2(0.5,0.5)}\r\n },\r\n vertexShader: [\r\n 'attribute vec2 uv;',\r\n 'attribute vec4 position;',\r\n 'uniform mat4 modelMatrix;',\r\n 'uniform mat4 modelViewMatrix;',\r\n 'uniform mat4 projectionMatrix;',\r\n 'uniform float rotation;',\r\n 'uniform vec2 center;',\r\n 'varying vec2 vUv;',\r\n 'void main() {',\r\n 'vUv = uv;',\r\n 'vec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );',\r\n 'vec2 scale;',\r\n 'scale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );',\r\n 'scale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );',\r\n 'vec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;',\r\n 'vec2 rotatedPosition;',\r\n 'float PI = 3.1415926538;',\r\n 'rotatedPosition.x = sin( rotation ) * alignedPosition.y + cos( rotation ) * alignedPosition.x;',\r\n 'rotatedPosition.y = cos( rotation ) * (-alignedPosition.y) - sin( rotation ) * (-alignedPosition.x);',\r\n 'mvPosition.xy += rotatedPosition;',\r\n 'gl_Position = projectionMatrix * mvPosition;',\r\n '}'\r\n ].join('\\n'),\r\n fragmentShader: [\r\n '#ifdef GL_OES_standard_derivatives',\r\n '#extension GL_OES_standard_derivatives : enable',\r\n '#endif',\r\n 'precision ' + precision + ' float;',\r\n 'uniform float opacity;',\r\n 'uniform vec3 color;',\r\n 'uniform sampler2D map;',\r\n 'varying vec2 vUv;',\r\n\r\n 'float median(float r, float g, float b) {',\r\n ' return max(min(r, g), min(max(r, g), b));',\r\n '}',\r\n\r\n 'void main() {',\r\n ' vec3 sample = ' + (negate ? '1.0 - ' : '') + 'texture2D(map, vUv).rgb;',\r\n ' float sigDist = median(sample.r, sample.g, sample.b) - 0.5;',\r\n ' float alpha = clamp(sigDist/fwidth(sigDist) + 0.5, 0.0, 1.0);',\r\n ' gl_FragColor = vec4(color.xyz, alpha * opacity);',\r\n alphaTest === 0\r\n ? ''\r\n : ' if (gl_FragColor.a < ' + alphaTest + ') discard;',\r\n '}'\r\n ].join('\\n')\r\n }, opt);\r\n};\r\n","!function(t){\"function\"==typeof define&&define.amd?define(t):t()}(function(){\"use strict\";\n/** @license\n * jsPDF - PDF Document creation from JavaScript\n * Version 1.5.3 Built on 2018-12-27T14:11:42.696Z\n * CommitID d93d28db14\n *\n * Copyright (c) 2010-2016 James Hall , https://github.com/MrRio/jsPDF\n * 2010 Aaron Spike, https://github.com/acspike\n * 2012 Willow Systems Corporation, willow-systems.com\n * 2012 Pablo Hess, https://github.com/pablohess\n * 2012 Florian Jenett, https://github.com/fjenett\n * 2013 Warren Weckesser, https://github.com/warrenweckesser\n * 2013 Youssef Beddad, https://github.com/lifof\n * 2013 Lee Driscoll, https://github.com/lsdriscoll\n * 2013 Stefan Slonevskiy, https://github.com/stefslon\n * 2013 Jeremy Morel, https://github.com/jmorel\n * 2013 Christoph Hartmann, https://github.com/chris-rock\n * 2014 Juan Pablo Gaviria, https://github.com/juanpgaviria\n * 2014 James Makes, https://github.com/dollaruw\n * 2014 Diego Casorran, https://github.com/diegocr\n * 2014 Steven Spungin, https://github.com/Flamenco\n * 2014 Kenneth Glassey, https://github.com/Gavvers\n *\n * Licensed under the MIT License\n *\n * Contributor(s):\n * siefkenj, ahwolf, rickygu, Midnith, saintclair, eaparango,\n * kim3er, mfo, alnorth, Flamenco\n */function se(t){return(se=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t})(t)}!function(t){if(\"object\"!==se(t.console)){t.console={};for(var e,n,r=t.console,i=function(){},o=[\"memory\"],a=\"assert,clear,count,debug,dir,dirxml,error,exception,group,groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn\".split(\",\");e=o.pop();)r[e]||(r[e]={});for(;n=a.pop();)r[n]||(r[n]=i)}var s,l,h,u,c=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";void 0===t.btoa&&(t.btoa=function(t){var e,n,r,i,o,a=0,s=0,l=\"\",h=[];if(!t)return t;for(;e=(o=t.charCodeAt(a++)<<16|t.charCodeAt(a++)<<8|t.charCodeAt(a++))>>18&63,n=o>>12&63,r=o>>6&63,i=63&o,h[s++]=c.charAt(e)+c.charAt(n)+c.charAt(r)+c.charAt(i),a>16&255,n=a>>8&255,r=255&a,h[l++]=64==i?String.fromCharCode(e):64==o?String.fromCharCode(e,n):String.fromCharCode(e,n,r),s>>0,r=new Array(n),i=1>>0,i=0;i>>0;if(\"function\"!=typeof t)throw new TypeError(\"predicate must be a function\");for(var r=arguments[1],i=0;i>16&255,r=l>>8&255,i=255&l}if(void 0===r||void 0===o&&n===r&&r===i)if(\"string\"==typeof n)e=n+\" \"+a[0];else switch(t.precision){case 2:e=Z(n/255)+\" \"+a[0];break;case 3:default:e=Q(n/255)+\" \"+a[0]}else if(void 0===o||\"object\"===se(o)){if(o&&!isNaN(o.a)&&0===o.a)return e=[\"1.000\",\"1.000\",\"1.000\",a[1]].join(\" \");if(\"string\"==typeof n)e=[n,r,i,a[1]].join(\" \");else switch(t.precision){case 2:e=[Z(n/255),Z(r/255),Z(i/255),a[1]].join(\" \");break;default:case 3:e=[Q(n/255),Q(r/255),Q(i/255),a[1]].join(\" \")}}else if(\"string\"==typeof n)e=[n,r,i,o,a[2]].join(\" \");else switch(t.precision){case 2:e=[Z(n/255),Z(r/255),Z(i/255),Z(o/255),a[2]].join(\" \");break;case 3:default:e=[Q(n/255),Q(r/255),Q(i/255),Q(o/255),a[2]].join(\" \")}return e},ct=l.__private__.getFilters=function(){return o},ft=l.__private__.putStream=function(t){var e=(t=t||{}).data||\"\",n=t.filters||ct(),r=t.alreadyAppliedFilters||[],i=t.addLength1||!1,o=e.length,a={};!0===n&&(n=[\"FlateEncode\"]);var s=t.additionalKeyValues||[],l=(a=void 0!==ae.API.processDataByFilters?ae.API.processDataByFilters(e,n):{data:e,reverseChain:[]}).reverseChain+(Array.isArray(r)?r.join(\" \"):r.toString());0!==a.data.length&&(s.push({key:\"Length\",value:a.data.length}),!0===i&&s.push({key:\"Length1\",value:o})),0!=l.length&&(l.split(\"/\").length-1==1?s.push({key:\"Filter\",value:l}):s.push({key:\"Filter\",value:\"[\"+l+\"]\"})),tt(\"<<\");for(var h=0;h>\"),0!==a.data.length&&(tt(\"stream\"),tt(a.data),tt(\"endstream\"))},pt=l.__private__.putPage=function(t){t.mediaBox;var e=t.number,n=t.data,r=t.objId,i=t.contentsObjId;ot(r,!0);V[x].mediaBox.topRightX,V[x].mediaBox.bottomLeftX,V[x].mediaBox.topRightY,V[x].mediaBox.bottomLeftY;tt(\"<>\"),tt(\"endobj\");var o=n.join(\"\\n\");return ot(i,!0),ft({data:o,filters:ct()}),tt(\"endobj\"),r},dt=l.__private__.putPages=function(){var t,e,n=[];for(t=1;t<=W;t++)V[t].objId=X(),V[t].contentsObjId=X();for(t=1;t<=W;t++)n.push(pt({number:t,data:I[t],objId:V[t].objId,contentsObjId:V[t].contentsObjId,mediaBox:V[t].mediaBox,cropBox:V[t].cropBox,bleedBox:V[t].bleedBox,trimBox:V[t].trimBox,artBox:V[t].artBox,userUnit:V[t].userUnit,rootDictionaryObjId:st,resourceDictionaryObjId:lt}));ot(st,!0),tt(\"<>\"),tt(\"endobj\"),it.publish(\"postPutPages\")},gt=function(){!function(){for(var t in rt)rt.hasOwnProperty(t)&&(!1===s||!0===s&&K.hasOwnProperty(t))&&(e=rt[t],it.publish(\"putFont\",{font:e,out:tt,newObject:J,putStream:ft}),!0!==e.isAlreadyPutted&&(e.objectNumber=J(),tt(\"<<\"),tt(\"/Type /Font\"),tt(\"/BaseFont /\"+e.postScriptName),tt(\"/Subtype /Type1\"),\"string\"==typeof e.encoding&&tt(\"/Encoding /\"+e.encoding),tt(\"/FirstChar 32\"),tt(\"/LastChar 255\"),tt(\">>\"),tt(\"endobj\")));var e}(),it.publish(\"putResources\"),ot(lt,!0),tt(\"<<\"),function(){for(var t in tt(\"/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]\"),tt(\"/Font <<\"),rt)rt.hasOwnProperty(t)&&(!1===s||!0===s&&K.hasOwnProperty(t))&&tt(\"/\"+t+\" \"+rt[t].objectNumber+\" 0 R\");tt(\">>\"),tt(\"/XObject <<\"),it.publish(\"putXobjectDict\"),tt(\">>\")}(),tt(\">>\"),tt(\"endobj\"),it.publish(\"postPutResources\")},mt=function(t,e,n){H.hasOwnProperty(e)||(H[e]={}),H[e][n]=t},yt=function(t,e,n,r,i){i=i||!1;var o=\"F\"+(Object.keys(rt).length+1).toString(10),a={id:o,postScriptName:t,fontName:e,fontStyle:n,encoding:r,isStandardFont:i,metadata:{}};return it.publish(\"addFont\",{font:a,instance:this}),void 0!==o&&(rt[o]=a,mt(o,e,n)),o},vt=l.__private__.pdfEscape=l.pdfEscape=function(t,e){return function(t,e){var n,r,i,o,a,s,l,h,u;if(i=(e=e||{}).sourceEncoding||\"Unicode\",a=e.outputEncoding,(e.autoencode||a)&&rt[$].metadata&&rt[$].metadata[i]&&rt[$].metadata[i].encoding&&(o=rt[$].metadata[i].encoding,!a&&rt[$].encoding&&(a=rt[$].encoding),!a&&o.codePages&&(a=o.codePages[0]),\"string\"==typeof a&&(a=o[a]),a)){for(l=!1,s=[],n=0,r=t.length;n>8&&(l=!0);t=s.join(\"\")}for(n=t.length;void 0===l&&0!==n;)t.charCodeAt(n-1)>>8&&(l=!0),n--;if(!l)return t;for(s=e.noBOM?[]:[254,255],n=0,r=t.length;n>8)>>8)throw new Error(\"Character at position \"+n+\" of string '\"+t+\"' exceeds 16bits. Cannot be encoded into UCS-2 BE\");s.push(u),s.push(h-(u<<8))}return String.fromCharCode.apply(void 0,s)}(t,e).replace(/\\\\/g,\"\\\\\\\\\").replace(/\\(/g,\"\\\\(\").replace(/\\)/g,\"\\\\)\")},wt=l.__private__.beginPage=function(t,e){var n,r=\"string\"==typeof e&&e.toLowerCase();if(\"string\"==typeof t&&(n=f(t.toLowerCase()))&&(t=n[0],e=n[1]),Array.isArray(t)&&(e=t[1],t=t[0]),(isNaN(t)||isNaN(e))&&(t=i[0],e=i[1]),r){switch(r.substr(0,1)){case\"l\":t>\"),tt(\"endobj\")},St=l.__private__.putCatalog=function(t){var e=(t=t||{}).rootDictionaryObjId||st;switch(J(),tt(\"<<\"),tt(\"/Type /Catalog\"),tt(\"/Pages \"+e+\" 0 R\"),L||(L=\"fullwidth\"),L){case\"fullwidth\":tt(\"/OpenAction [3 0 R /FitH null]\");break;case\"fullheight\":tt(\"/OpenAction [3 0 R /FitV null]\");break;case\"fullpage\":tt(\"/OpenAction [3 0 R /Fit]\");break;case\"original\":tt(\"/OpenAction [3 0 R /XYZ null null 1]\");break;default:var n=\"\"+L;\"%\"===n.substr(n.length-1)&&(L=parseInt(L)/100),\"number\"==typeof L&&tt(\"/OpenAction [3 0 R /XYZ null null \"+Z(L)+\"]\")}switch(S||(S=\"continuous\"),S){case\"continuous\":tt(\"/PageLayout /OneColumn\");break;case\"single\":tt(\"/PageLayout /SinglePage\");break;case\"two\":case\"twoleft\":tt(\"/PageLayout /TwoColumnLeft\");break;case\"tworight\":tt(\"/PageLayout /TwoColumnRight\")}A&&tt(\"/PageMode /\"+A),it.publish(\"putCatalog\"),tt(\">>\"),tt(\"endobj\")},_t=l.__private__.putTrailer=function(){tt(\"trailer\"),tt(\"<<\"),tt(\"/Size \"+(U+1)),tt(\"/Root \"+U+\" 0 R\"),tt(\"/Info \"+(U-1)+\" 0 R\"),tt(\"/ID [ <\"+d+\"> <\"+d+\"> ]\"),tt(\">>\")},Ft=l.__private__.putHeader=function(){tt(\"%PDF-\"+h),tt(\"%ºß¬à\")},Pt=l.__private__.putXRef=function(){var t=1,e=\"0000000000\";for(tt(\"xref\"),tt(\"0 \"+(U+1)),tt(\"0000000000 65535 f \"),t=1;t<=U;t++){\"function\"==typeof z[t]?tt((e+z[t]()).slice(-10)+\" 00000 n \"):void 0!==z[t]?tt((e+z[t]).slice(-10)+\" 00000 n \"):tt(\"0000000000 00000 n \")}},kt=l.__private__.buildDocument=function(){k=!1,B=U=0,C=[],z=[],G=[],st=X(),lt=X(),it.publish(\"buildDocument\"),Ft(),dt(),function(){it.publish(\"putAdditionalObjects\");for(var t=0;t',i=ie.open();if(null!==i&&i.document.write(r),i||\"undefined\"==typeof safari)return i;case\"datauri\":case\"dataurl\":return ie.document.location.href=\"data:application/pdf;filename=\"+e.filename+\";base64,\"+btoa(n);default:return null}}).foo=function(){try{return F.apply(this,arguments)}catch(t){var e=t.stack||\"\";~e.indexOf(\" at \")&&(e=e.split(\" at \")[1]);var n=\"Error in function \"+e.split(\"\\n\")[0].split(\"<\")[0]+\": \"+t.message;if(!ie.console)throw new Error(n);ie.console.error(n,t),ie.alert&&alert(n)}},(F.foo.bar=F).foo),Bt=function(t){return!0===Array.isArray(Y)&&-1\":\")\"),Y=1):(W=Wt(e),V=Vt(n),G=(l?\"<\":\"(\")+v[H]+(l?\">\":\")\")),void 0!==q&&void 0!==q[H]&&(J=q[H]+\" Tw\\n\"),0!==S.length&&0===H?t.push(J+S.join(\" \")+\" \"+W.toFixed(2)+\" \"+V.toFixed(2)+\" Tm\\n\"+G):1===Y||0===Y&&0===H?t.push(J+W.toFixed(2)+\" \"+V.toFixed(2)+\" Td\\n\"+G):t.push(J+G);t=0===Y?t.join(\" Tj\\nT* \"):t.join(\" Tj\\n\"),t+=\" Tj\\n\";var X=\"BT\\n/\"+$+\" \"+et+\" Tf\\n\"+(et*u).toFixed(2)+\" TL\\n\"+Kt+\"\\n\";return X+=h,X+=t,tt(X+=\"ET\"),K[$]=!0,c},l.__private__.lstext=l.lstext=function(t,e,n,r){return console.warn(\"jsPDF.lstext is deprecated\"),this.text(t,e,n,{charSpace:r})},l.__private__.clip=l.clip=function(t){tt(\"evenodd\"===t?\"W*\":\"W\"),tt(\"n\")},l.__private__.clip_fixed=l.clip_fixed=function(t){console.log(\"clip_fixed is deprecated\"),l.clip(t)};var Ot=l.__private__.isValidStyle=function(t){var e=!1;return-1!==[void 0,null,\"S\",\"F\",\"DF\",\"FD\",\"f\",\"f*\",\"B\",\"B*\"].indexOf(t)&&(e=!0),e},qt=l.__private__.getStyle=function(t){var e=\"S\";return\"F\"===t?e=\"f\":\"FD\"===t||\"DF\"===t?e=\"B\":\"f\"!==t&&\"f*\"!==t&&\"B\"!==t&&\"B*\"!==t||(e=t),e};l.__private__.line=l.line=function(t,e,n,r){if(isNaN(t)||isNaN(e)||isNaN(n)||isNaN(r))throw new Error(\"Invalid arguments passed to jsPDF.line\");return this.lines([[n-t,r-e]],t,e)},l.__private__.lines=l.lines=function(t,e,n,r,i,o){var a,s,l,h,u,c,f,p,d,g,m,y;if(\"number\"==typeof t&&(y=n,n=e,e=t,t=y),r=r||[1,1],o=o||!1,isNaN(e)||isNaN(n)||!Array.isArray(t)||!Array.isArray(r)||!Ot(i)||\"boolean\"!=typeof o)throw new Error(\"Invalid arguments passed to jsPDF.lines\");for(tt(Q(Wt(e))+\" \"+Q(Vt(n))+\" m \"),a=r[0],s=r[1],h=t.length,g=e,m=n,l=0;l=o.length-1;if(b&&!x){m+=\" \";continue}if(b||x){if(x)d=w;else if(i.multiline&&a<(h+2)*(y+2)+2)continue t}else{if(!i.multiline)continue t;if(a<(h+2)*(y+2)+2)continue t;d=w}for(var N=\"\",L=p;L<=d;L++)N+=o[L]+\" \";switch(N=\" \"==N.substr(N.length-1)?N.substr(0,N.length-1):N,g=F(N,i,r).width,i.textAlign){case\"right\":c=s-g-2;break;case\"center\":c=(s-g)/2;break;case\"left\":default:c=2}t+=_(c)+\" \"+_(f)+\" Td\\n\",t+=\"(\"+S(N)+\") Tj\\n\",t+=-_(c)+\" 0 Td\\n\",f=-(r+2),g=0,p=d+1,y++,m=\"\"}else;break}return n.text=t,n.fontSize=r,n},F=function(t,e,n){var r=A.internal.getFont(e.fontName,e.fontStyle),i=A.getStringUnitWidth(t,{font:r,fontSize:parseFloat(n),charSpace:0})*parseFloat(n);return{height:A.getStringUnitWidth(\"3\",{font:r,fontSize:parseFloat(n),charSpace:0})*parseFloat(n)*1.5,width:i}},u={fields:[],xForms:[],acroFormDictionaryRoot:null,printedOut:!1,internal:null,isInitialized:!1},p=function(){A.internal.acroformPlugin.acroFormDictionaryRoot.objId=void 0;var t=A.internal.acroformPlugin.acroFormDictionaryRoot.Fields;for(var e in t)if(t.hasOwnProperty(e)){var n=t[e];n.objId=void 0,n.hasAnnotation&&d.call(A,n)}},d=function(t){var e={type:\"reference\",object:t};void 0===A.internal.getPageInfo(t.page).pageContext.annotations.find(function(t){return t.type===e.type&&t.object===e.object})&&A.internal.getPageInfo(t.page).pageContext.annotations.push(e)},g=function(){if(void 0===A.internal.acroformPlugin.acroFormDictionaryRoot)throw new Error(\"putCatalogCallback: Root missing.\");A.internal.write(\"/AcroForm \"+A.internal.acroformPlugin.acroFormDictionaryRoot.objId+\" 0 R\")},m=function(){A.internal.events.unsubscribe(A.internal.acroformPlugin.acroFormDictionaryRoot._eventID),delete A.internal.acroformPlugin.acroFormDictionaryRoot._eventID,A.internal.acroformPlugin.printedOut=!0},L=function(t){var e=!t;t||(A.internal.newObjectDeferredBegin(A.internal.acroformPlugin.acroFormDictionaryRoot.objId,!0),A.internal.acroformPlugin.acroFormDictionaryRoot.putStream());t=t||A.internal.acroformPlugin.acroFormDictionaryRoot.Kids;for(var n in t)if(t.hasOwnProperty(n)){var r=t[n],i=[],o=r.Rect;if(r.Rect&&(r.Rect=c.call(this,r.Rect)),A.internal.newObjectDeferredBegin(r.objId,!0),r.DA=Y.createDefaultAppearanceStream(r),\"object\"===se(r)&&\"function\"==typeof r.getKeyValueListForStream&&(i=r.getKeyValueListForStream()),r.Rect=o,r.hasAppearanceStream&&!r.appearanceStreamContent){var a=f.call(this,r);i.push({key:\"AP\",value:\"<>\"}),A.internal.acroformPlugin.xForms.push(a)}if(r.appearanceStreamContent){var s=\"\";for(var l in r.appearanceStreamContent)if(r.appearanceStreamContent.hasOwnProperty(l)){var h=r.appearanceStreamContent[l];if(s+=\"/\"+l+\" \",s+=\"<<\",1<=Object.keys(h).length||Array.isArray(h))for(var n in h){var u;if(h.hasOwnProperty(n))\"function\"==typeof(u=h[n])&&(u=u.call(this,r)),s+=\"/\"+n+\" \"+u+\" \",0<=A.internal.acroformPlugin.xForms.indexOf(u)||A.internal.acroformPlugin.xForms.push(u)}else\"function\"==typeof(u=h)&&(u=u.call(this,r)),s+=\"/\"+n+\" \"+u,0<=A.internal.acroformPlugin.xForms.indexOf(u)||A.internal.acroformPlugin.xForms.push(u);s+=\">>\"}i.push({key:\"AP\",value:\"<<\\n\"+s+\">>\"})}A.internal.putStream({additionalKeyValues:i}),A.internal.out(\"endobj\")}e&&P.call(this,A.internal.acroformPlugin.xForms)},P=function(t){for(var e in t)if(t.hasOwnProperty(e)){var n=e,r=t[e];A.internal.newObjectDeferredBegin(r&&r.objId,!0),\"object\"===se(r)&&\"function\"==typeof r.putStream&&r.putStream(),delete t[n]}},k=function(){if(void 0!==this.internal&&(void 0===this.internal.acroformPlugin||!1===this.internal.acroformPlugin.isInitialized)){if(A=this,M.FieldNum=0,this.internal.acroformPlugin=JSON.parse(JSON.stringify(u)),this.internal.acroformPlugin.acroFormDictionaryRoot)throw new Error(\"Exception while creating AcroformDictionary\");n=A.internal.scaleFactor,A.internal.acroformPlugin.acroFormDictionaryRoot=new E,A.internal.acroformPlugin.acroFormDictionaryRoot._eventID=A.internal.events.subscribe(\"postPutResources\",m),A.internal.events.subscribe(\"buildDocument\",p),A.internal.events.subscribe(\"putCatalog\",g),A.internal.events.subscribe(\"postPutPages\",L),A.internal.acroformPlugin.isInitialized=!0}},I=t.__acroform__.arrayToPdfArray=function(t){if(Array.isArray(t)){for(var e=\"[\",n=0;n>\"),e.join(\"\\n\")}},set:function(t){\"object\"===se(t)&&(n=t)}}),Object.defineProperty(this,\"caption\",{enumerable:!0,configurable:!0,get:function(){return n.CA||\"\"},set:function(t){\"string\"==typeof t&&(n.CA=t)}}),Object.defineProperty(this,\"AS\",{enumerable:!1,configurable:!1,get:function(){return e},set:function(t){e=t}}),Object.defineProperty(this,\"appearanceState\",{enumerable:!0,configurable:!0,get:function(){return e.substr(1,e.length-1)},set:function(t){e=\"/\"+t}})};r(D,M);var U=function(){D.call(this),this.pushButton=!0};r(U,D);var z=function(){D.call(this),this.radio=!0,this.pushButton=!1;var e=[];Object.defineProperty(this,\"Kids\",{enumerable:!0,configurable:!1,get:function(){return e},set:function(t){e=void 0!==t?t:[]}})};r(z,D);var H=function(){var e,n;M.call(this),Object.defineProperty(this,\"Parent\",{enumerable:!1,configurable:!1,get:function(){return e},set:function(t){e=t}}),Object.defineProperty(this,\"optionName\",{enumerable:!1,configurable:!0,get:function(){return n},set:function(t){n=t}});var r,i={};Object.defineProperty(this,\"MK\",{enumerable:!1,configurable:!1,get:function(){var t,e=[];for(t in e.push(\"<<\"),i)e.push(\"/\"+t+\" (\"+i[t]+\")\");return e.push(\">>\"),e.join(\"\\n\")},set:function(t){\"object\"===se(t)&&(i=t)}}),Object.defineProperty(this,\"caption\",{enumerable:!0,configurable:!0,get:function(){return i.CA||\"\"},set:function(t){\"string\"==typeof t&&(i.CA=t)}}),Object.defineProperty(this,\"AS\",{enumerable:!1,configurable:!1,get:function(){return r},set:function(t){r=t}}),Object.defineProperty(this,\"appearanceState\",{enumerable:!0,configurable:!0,get:function(){return r.substr(1,r.length-1)},set:function(t){r=\"/\"+t}}),this.optionName=name,this.caption=\"l\",this.appearanceState=\"Off\",this._AppearanceType=Y.RadioButton.Circle,this.appearanceStreamContent=this._AppearanceType.createAppearanceStream(name)};r(H,M),z.prototype.setAppearance=function(t){if(!(\"createAppearanceStream\"in t&&\"getCA\"in t))throw new Error(\"Couldn't assign Appearance to RadioButton. Appearance was Invalid!\");for(var e in this.Kids)if(this.Kids.hasOwnProperty(e)){var n=this.Kids[e];n.appearanceStreamContent=t.createAppearanceStream(n.optionName),n.caption=t.getCA()}},z.prototype.createOption=function(t){this.Kids.length;var e=new H;return e.Parent=this,e.optionName=t,this.Kids.push(e),J.call(this,e),e};var W=function(){D.call(this),this.fontName=\"zapfdingbats\",this.caption=\"3\",this.appearanceState=\"On\",this.value=\"On\",this.textAlign=\"center\",this.appearanceStreamContent=Y.CheckBox.createAppearanceStream()};r(W,D);var V=function(){M.call(this),this.FT=\"/Tx\",Object.defineProperty(this,\"multiline\",{enumerable:!0,configurable:!0,get:function(){return Boolean(b(this.Ff,13))},set:function(t){!0===Boolean(t)?this.Ff=x(this.Ff,13):this.Ff=N(this.Ff,13)}}),Object.defineProperty(this,\"fileSelect\",{enumerable:!0,configurable:!0,get:function(){return Boolean(b(this.Ff,21))},set:function(t){!0===Boolean(t)?this.Ff=x(this.Ff,21):this.Ff=N(this.Ff,21)}}),Object.defineProperty(this,\"doNotSpellCheck\",{enumerable:!0,configurable:!0,get:function(){return Boolean(b(this.Ff,23))},set:function(t){!0===Boolean(t)?this.Ff=x(this.Ff,23):this.Ff=N(this.Ff,23)}}),Object.defineProperty(this,\"doNotScroll\",{enumerable:!0,configurable:!0,get:function(){return Boolean(b(this.Ff,24))},set:function(t){!0===Boolean(t)?this.Ff=x(this.Ff,24):this.Ff=N(this.Ff,24)}}),Object.defineProperty(this,\"comb\",{enumerable:!0,configurable:!0,get:function(){return Boolean(b(this.Ff,25))},set:function(t){!0===Boolean(t)?this.Ff=x(this.Ff,25):this.Ff=N(this.Ff,25)}}),Object.defineProperty(this,\"richText\",{enumerable:!0,configurable:!0,get:function(){return Boolean(b(this.Ff,26))},set:function(t){!0===Boolean(t)?this.Ff=x(this.Ff,26):this.Ff=N(this.Ff,26)}});var e=null;Object.defineProperty(this,\"MaxLen\",{enumerable:!0,configurable:!1,get:function(){return e},set:function(t){e=t}}),Object.defineProperty(this,\"maxLength\",{enumerable:!0,configurable:!0,get:function(){return e},set:function(t){Number.isInteger(t)&&(e=t)}}),Object.defineProperty(this,\"hasAppearanceStream\",{enumerable:!0,configurable:!0,get:function(){return this.V||this.DV}})};r(V,M);var G=function(){V.call(this),Object.defineProperty(this,\"password\",{enumerable:!0,configurable:!0,get:function(){return Boolean(b(this.Ff,14))},set:function(t){!0===Boolean(t)?this.Ff=x(this.Ff,14):this.Ff=N(this.Ff,14)}}),this.password=!0};r(G,V);var Y={CheckBox:{createAppearanceStream:function(){return{N:{On:Y.CheckBox.YesNormal},D:{On:Y.CheckBox.YesPushDown,Off:Y.CheckBox.OffPushDown}}},YesPushDown:function(t){var e=l(t),n=[],r=A.internal.getFont(t.fontName,t.fontStyle).id,i=A.__private__.encodeColorString(t.color),o=h(t,t.caption);return n.push(\"0.749023 g\"),n.push(\"0 0 \"+_(Y.internal.getWidth(t))+\" \"+_(Y.internal.getHeight(t))+\" re\"),n.push(\"f\"),n.push(\"BMC\"),n.push(\"q\"),n.push(\"0 0 1 rg\"),n.push(\"/\"+r+\" \"+_(o.fontSize)+\" Tf \"+i),n.push(\"BT\"),n.push(o.text),n.push(\"ET\"),n.push(\"Q\"),n.push(\"EMC\"),e.stream=n.join(\"\\n\"),e},YesNormal:function(t){var e=l(t),n=A.internal.getFont(t.fontName,t.fontStyle).id,r=A.__private__.encodeColorString(t.color),i=[],o=Y.internal.getHeight(t),a=Y.internal.getWidth(t),s=h(t,t.caption);return i.push(\"1 g\"),i.push(\"0 0 \"+_(a)+\" \"+_(o)+\" re\"),i.push(\"f\"),i.push(\"q\"),i.push(\"0 0 1 rg\"),i.push(\"0 0 \"+_(a-1)+\" \"+_(o-1)+\" re\"),i.push(\"W\"),i.push(\"n\"),i.push(\"0 g\"),i.push(\"BT\"),i.push(\"/\"+n+\" \"+_(s.fontSize)+\" Tf \"+r),i.push(s.text),i.push(\"ET\"),i.push(\"Q\"),e.stream=i.join(\"\\n\"),e},OffPushDown:function(t){var e=l(t),n=[];return n.push(\"0.749023 g\"),n.push(\"0 0 \"+_(Y.internal.getWidth(t))+\" \"+_(Y.internal.getHeight(t))+\" re\"),n.push(\"f\"),e.stream=n.join(\"\\n\"),e}},RadioButton:{Circle:{createAppearanceStream:function(t){var e={D:{Off:Y.RadioButton.Circle.OffPushDown},N:{}};return e.N[t]=Y.RadioButton.Circle.YesNormal,e.D[t]=Y.RadioButton.Circle.YesPushDown,e},getCA:function(){return\"l\"},YesNormal:function(t){var e=l(t),n=[],r=Y.internal.getWidth(t)<=Y.internal.getHeight(t)?Y.internal.getWidth(t)/4:Y.internal.getHeight(t)/4;r=Number((.9*r).toFixed(5));var i=Y.internal.Bezier_C,o=Number((r*i).toFixed(5));return n.push(\"q\"),n.push(\"1 0 0 1 \"+s(Y.internal.getWidth(t)/2)+\" \"+s(Y.internal.getHeight(t)/2)+\" cm\"),n.push(r+\" 0 m\"),n.push(r+\" \"+o+\" \"+o+\" \"+r+\" 0 \"+r+\" c\"),n.push(\"-\"+o+\" \"+r+\" -\"+r+\" \"+o+\" -\"+r+\" 0 c\"),n.push(\"-\"+r+\" -\"+o+\" -\"+o+\" -\"+r+\" 0 -\"+r+\" c\"),n.push(o+\" -\"+r+\" \"+r+\" -\"+o+\" \"+r+\" 0 c\"),n.push(\"f\"),n.push(\"Q\"),e.stream=n.join(\"\\n\"),e},YesPushDown:function(t){var e=l(t),n=[],r=Y.internal.getWidth(t)<=Y.internal.getHeight(t)?Y.internal.getWidth(t)/4:Y.internal.getHeight(t)/4,i=(r=Number((.9*r).toFixed(5)),Number((2*r).toFixed(5))),o=Number((i*Y.internal.Bezier_C).toFixed(5)),a=Number((r*Y.internal.Bezier_C).toFixed(5));return n.push(\"0.749023 g\"),n.push(\"q\"),n.push(\"1 0 0 1 \"+s(Y.internal.getWidth(t)/2)+\" \"+s(Y.internal.getHeight(t)/2)+\" cm\"),n.push(i+\" 0 m\"),n.push(i+\" \"+o+\" \"+o+\" \"+i+\" 0 \"+i+\" c\"),n.push(\"-\"+o+\" \"+i+\" -\"+i+\" \"+o+\" -\"+i+\" 0 c\"),n.push(\"-\"+i+\" -\"+o+\" -\"+o+\" -\"+i+\" 0 -\"+i+\" c\"),n.push(o+\" -\"+i+\" \"+i+\" -\"+o+\" \"+i+\" 0 c\"),n.push(\"f\"),n.push(\"Q\"),n.push(\"0 g\"),n.push(\"q\"),n.push(\"1 0 0 1 \"+s(Y.internal.getWidth(t)/2)+\" \"+s(Y.internal.getHeight(t)/2)+\" cm\"),n.push(r+\" 0 m\"),n.push(r+\" \"+a+\" \"+a+\" \"+r+\" 0 \"+r+\" c\"),n.push(\"-\"+a+\" \"+r+\" -\"+r+\" \"+a+\" -\"+r+\" 0 c\"),n.push(\"-\"+r+\" -\"+a+\" -\"+a+\" -\"+r+\" 0 -\"+r+\" c\"),n.push(a+\" -\"+r+\" \"+r+\" -\"+a+\" \"+r+\" 0 c\"),n.push(\"f\"),n.push(\"Q\"),e.stream=n.join(\"\\n\"),e},OffPushDown:function(t){var e=l(t),n=[],r=Y.internal.getWidth(t)<=Y.internal.getHeight(t)?Y.internal.getWidth(t)/4:Y.internal.getHeight(t)/4,i=(r=Number((.9*r).toFixed(5)),Number((2*r).toFixed(5))),o=Number((i*Y.internal.Bezier_C).toFixed(5));return n.push(\"0.749023 g\"),n.push(\"q\"),n.push(\"1 0 0 1 \"+s(Y.internal.getWidth(t)/2)+\" \"+s(Y.internal.getHeight(t)/2)+\" cm\"),n.push(i+\" 0 m\"),n.push(i+\" \"+o+\" \"+o+\" \"+i+\" 0 \"+i+\" c\"),n.push(\"-\"+o+\" \"+i+\" -\"+i+\" \"+o+\" -\"+i+\" 0 c\"),n.push(\"-\"+i+\" -\"+o+\" -\"+o+\" -\"+i+\" 0 -\"+i+\" c\"),n.push(o+\" -\"+i+\" \"+i+\" -\"+o+\" \"+i+\" 0 c\"),n.push(\"f\"),n.push(\"Q\"),e.stream=n.join(\"\\n\"),e}},Cross:{createAppearanceStream:function(t){var e={D:{Off:Y.RadioButton.Cross.OffPushDown},N:{}};return e.N[t]=Y.RadioButton.Cross.YesNormal,e.D[t]=Y.RadioButton.Cross.YesPushDown,e},getCA:function(){return\"8\"},YesNormal:function(t){var e=l(t),n=[],r=Y.internal.calculateCross(t);return n.push(\"q\"),n.push(\"1 1 \"+_(Y.internal.getWidth(t)-2)+\" \"+_(Y.internal.getHeight(t)-2)+\" re\"),n.push(\"W\"),n.push(\"n\"),n.push(_(r.x1.x)+\" \"+_(r.x1.y)+\" m\"),n.push(_(r.x2.x)+\" \"+_(r.x2.y)+\" l\"),n.push(_(r.x4.x)+\" \"+_(r.x4.y)+\" m\"),n.push(_(r.x3.x)+\" \"+_(r.x3.y)+\" l\"),n.push(\"s\"),n.push(\"Q\"),e.stream=n.join(\"\\n\"),e},YesPushDown:function(t){var e=l(t),n=Y.internal.calculateCross(t),r=[];return r.push(\"0.749023 g\"),r.push(\"0 0 \"+_(Y.internal.getWidth(t))+\" \"+_(Y.internal.getHeight(t))+\" re\"),r.push(\"f\"),r.push(\"q\"),r.push(\"1 1 \"+_(Y.internal.getWidth(t)-2)+\" \"+_(Y.internal.getHeight(t)-2)+\" re\"),r.push(\"W\"),r.push(\"n\"),r.push(_(n.x1.x)+\" \"+_(n.x1.y)+\" m\"),r.push(_(n.x2.x)+\" \"+_(n.x2.y)+\" l\"),r.push(_(n.x4.x)+\" \"+_(n.x4.y)+\" m\"),r.push(_(n.x3.x)+\" \"+_(n.x3.y)+\" l\"),r.push(\"s\"),r.push(\"Q\"),e.stream=r.join(\"\\n\"),e},OffPushDown:function(t){var e=l(t),n=[];return n.push(\"0.749023 g\"),n.push(\"0 0 \"+_(Y.internal.getWidth(t))+\" \"+_(Y.internal.getHeight(t))+\" re\"),n.push(\"f\"),e.stream=n.join(\"\\n\"),e}}},createDefaultAppearanceStream:function(t){var e=A.internal.getFont(t.fontName,t.fontStyle).id,n=A.__private__.encodeColorString(t.color);return\"/\"+e+\" \"+t.fontSize+\" Tf \"+n}};Y.internal={Bezier_C:.551915024494,calculateCross:function(t){var e=Y.internal.getWidth(t),n=Y.internal.getHeight(t),r=Math.min(e,n);return{x1:{x:(e-r)/2,y:(n-r)/2+r},x2:{x:(e-r)/2+r,y:(n-r)/2},x3:{x:(e-r)/2,y:(n-r)/2},x4:{x:(e-r)/2+r,y:(n-r)/2+r}}}},Y.internal.getWidth=function(t){var e=0;return\"object\"===se(t)&&(e=v(t.Rect[2])),e},Y.internal.getHeight=function(t){var e=0;return\"object\"===se(t)&&(e=v(t.Rect[3])),e};var J=t.addField=function(t){if(k.call(this),!(t instanceof M))throw new Error(\"Invalid argument passed to jsPDF.addField.\");return function(t){A.internal.acroformPlugin.printedOut&&(A.internal.acroformPlugin.printedOut=!1,A.internal.acroformPlugin.acroFormDictionaryRoot=null),A.internal.acroformPlugin.acroFormDictionaryRoot||k.call(A),A.internal.acroformPlugin.acroFormDictionaryRoot.Fields.push(t)}.call(this,t),t.page=A.internal.getCurrentPageInfo().pageNumber,this};t.addButton=function(t){if(t instanceof D==!1)throw new Error(\"Invalid argument passed to jsPDF.addButton.\");return J.call(this,t)},t.addTextField=function(t){if(t instanceof V==!1)throw new Error(\"Invalid argument passed to jsPDF.addTextField.\");return J.call(this,t)},t.addChoiceField=function(t){if(t instanceof O==!1)throw new Error(\"Invalid argument passed to jsPDF.addChoiceField.\");return J.call(this,t)};\"object\"==se(e)&&void 0===e.ChoiceField&&void 0===e.ListBox&&void 0===e.ComboBox&&void 0===e.EditBox&&void 0===e.Button&&void 0===e.PushButton&&void 0===e.RadioButton&&void 0===e.CheckBox&&void 0===e.TextField&&void 0===e.PasswordField?(e.ChoiceField=O,e.ListBox=q,e.ComboBox=T,e.EditBox=R,e.Button=D,e.PushButton=U,e.RadioButton=z,e.CheckBox=W,e.TextField=V,e.PasswordField=G,e.AcroForm={Appearance:Y}):console.warn(\"AcroForm-Classes are not populated into global-namespace, because the class-Names exist already.\"),t.AcroFormChoiceField=O,t.AcroFormListBox=q,t.AcroFormComboBox=T,t.AcroFormEditBox=R,t.AcroFormButton=D,t.AcroFormPushButton=U,t.AcroFormRadioButton=z,t.AcroFormCheckBox=W,t.AcroFormTextField=V,t.AcroFormPasswordField=G,t.AcroFormAppearance=Y,t.AcroForm={ChoiceField:O,ListBox:q,ComboBox:T,EditBox:R,Button:D,PushButton:U,RadioButton:z,CheckBox:W,TextField:V,PasswordField:G,Appearance:Y}})((window.tmp=lt).API,\"undefined\"!=typeof window&&window||\"undefined\"!=typeof global&&global),\n/** @license\n * jsPDF addImage plugin\n * Copyright (c) 2012 Jason Siefken, https://github.com/siefkenj/\n * 2013 Chris Dowling, https://github.com/gingerchris\n * 2013 Trinh Ho, https://github.com/ineedfat\n * 2013 Edwin Alejandro Perez, https://github.com/eaparango\n * 2013 Norah Smith, https://github.com/burnburnrocket\n * 2014 Diego Casorran, https://github.com/diegocr\n * 2014 James Robb, https://github.com/jamesbrobb\n *\n * \n */\nfunction(x){var N=\"addImage_\",l={PNG:[[137,80,78,71]],TIFF:[[77,77,0,42],[73,73,42,0]],JPEG:[[255,216,255,224,void 0,void 0,74,70,73,70,0],[255,216,255,225,void 0,void 0,69,120,105,102,0,0]],JPEG2000:[[0,0,0,12,106,80,32,32]],GIF87a:[[71,73,70,56,55,97]],GIF89a:[[71,73,70,56,57,97]],BMP:[[66,77],[66,65],[67,73],[67,80],[73,67],[80,84]]},h=x.getImageFileTypeByImageData=function(t,e){var n,r;e=e||\"UNKNOWN\";var i,o,a,s=\"UNKNOWN\";for(a in x.isArrayBufferView(t)&&(t=x.arrayBufferToBinaryString(t)),l)for(i=l[a],n=0;n>\"}),\"trns\"in e&&e.trns.constructor==Array){for(var s=\"\",l=0,h=e.trns.length;l>18]+r[(258048&e)>>12]+r[(4032&e)>>6]+r[63&e];return 1==a?n+=r[(252&(e=i[s]))>>2]+r[(3&e)<<4]+\"==\":2==a&&(n+=r[(64512&(e=i[s]<<8|i[s+1]))>>10]+r[(1008&e)>>4]+r[(15&e)<<2]+\"=\"),n},x.createImageInfo=function(t,e,n,r,i,o,a,s,l,h,u,c,f){var p={alias:s,w:e,h:n,cs:r,bpc:i,i:a,data:t};return o&&(p.f=o),l&&(p.dp=l),h&&(p.trns=h),u&&(p.pal=u),c&&(p.smask=c),f&&(p.p=f),p},x.addImage=function(t,e,n,r,i,o,a,s,l){var h=\"\";if(\"string\"!=typeof e){var u=o;o=i,i=r,r=n,n=e,e=u}if(\"object\"===se(t)&&!_(t)&&\"imageData\"in t){var c=t;t=c.imageData,e=c.format||e||\"UNKNOWN\",n=c.x||n||0,r=c.y||r||0,i=c.w||i,o=c.h||o,a=c.alias||a,s=c.compression||s,l=c.rotation||c.angle||l}var f=this.internal.getFilters();if(void 0===s&&-1!==f.indexOf(\"FlateEncode\")&&(s=\"SLOW\"),\"string\"==typeof t&&(t=unescape(t)),isNaN(n)||isNaN(r))throw console.error(\"jsPDF.addImage: Invalid coordinates\",arguments),new Error(\"Invalid coordinates passed to jsPDF.addImage\");var p,d,g,m,y,v,w,b=function(){var t=this.internal.collections[N+\"images\"];return t||(this.internal.collections[N+\"images\"]=t={},this.internal.events.subscribe(\"putResources\",L),this.internal.events.subscribe(\"putXobjectDict\",A)),t}.call(this);if(!((p=P(t,b))||(_(t)&&(t=F(t,e)),(null==(w=a)||0===w.length)&&(a=\"string\"==typeof(v=t)?x.sHashCode(v):x.isArrayBufferView(v)?x.sHashCode(x.arrayBufferToBinaryString(v)):null),p=P(a,b)))){if(this.isString(t)&&(\"\"!==(h=this.convertStringToImageData(t))?t=h:void 0!==(h=x.loadFile(t))&&(t=h)),e=this.getImageFileTypeByImageData(t,e),!S(e))throw new Error(\"addImage does not support files of type '\"+e+\"', please ensure that a plugin for '\"+e+\"' support is added.\");if(this.supportsArrayBuffer()&&(t instanceof Uint8Array||(d=t,t=this.binaryStringToUint8Array(t))),!(p=this[\"process\"+e.toUpperCase()](t,(y=0,(m=b)&&(y=Object.keys?Object.keys(m).length:function(t){var e=0;for(var n in t)t.hasOwnProperty(n)&&e++;return e}(m)),y),a,((g=s)&&\"string\"==typeof g&&(g=g.toUpperCase()),g in x.image_compression?g:x.image_compression.NONE),d)))throw new Error(\"An unknown error occurred whilst processing the image\")}return function(t,e,n,r,i,o,a,s){var l=function(t,e,n){return t||e||(e=t=-96),t<0&&(t=-1*n.w*72/t/this.internal.scaleFactor),e<0&&(e=-1*n.h*72/e/this.internal.scaleFactor),0===t&&(t=e*n.w/n.h),0===e&&(e=t*n.h/n.w),[t,e]}.call(this,n,r,i),h=this.internal.getCoordinateString,u=this.internal.getVerticalCoordinateString;if(n=l[0],r=l[1],a[o]=i,s){s*=Math.PI/180;var c=Math.cos(s),f=Math.sin(s),p=function(t){return t.toFixed(4)},d=[p(c),p(f),p(-1*f),p(c),0,0,\"cm\"]}this.internal.write(\"q\"),s?(this.internal.write([1,\"0\",\"0\",1,h(t),u(e+r),\"cm\"].join(\" \")),this.internal.write(d.join(\" \")),this.internal.write([h(n),\"0\",\"0\",h(r),\"0\",\"0\",\"cm\"].join(\" \"))):this.internal.write([h(n),\"0\",\"0\",h(r),h(t),u(e+r),\"cm\"].join(\" \")),this.internal.write(\"/I\"+i.i+\" Do\"),this.internal.write(\"Q\")}.call(this,n,r,i,o,p,p.i,b,l),this},x.convertStringToImageData=function(t){var e,n=\"\";if(this.isString(t)){var r;e=null!==(r=this.extractImageFromDataUrl(t))?r.data:t;try{n=atob(e)}catch(t){throw x.validateStringAsBase64(e)?new Error(\"atob-Error in jsPDF.convertStringToImageData \"+t.message):new Error(\"Supplied Data is not a valid base64-String jsPDF.convertStringToImageData \")}}return n};var u=function(t,e){return t.subarray(e,e+5)};x.processJPEG=function(t,e,n,r,i,o){var a,s=this.decode.DCT_DECODE;if(!this.isString(t)&&!this.isArrayBuffer(t)&&!this.isArrayBufferView(t))return null;if(this.isString(t)&&(a=function(t){var e;if(\"JPEG\"!==h(t))throw new Error(\"getJpegSize requires a binary string jpeg file\");for(var n=256*t.charCodeAt(4)+t.charCodeAt(5),r=4,i=t.length;r>\",h.content=m;var f=h.objId+\" 0 R\";m=\"<>\",u.content=m,this.internal.write(h.objId,\"0 R\",u.objId,\"0 R\");break;case\"freetext\":var p=\"/Rect [\"+a(l.bounds.x)+\" \"+s(l.bounds.y)+\" \"+a(l.bounds.x+l.bounds.w)+\" \"+s(l.bounds.y+l.bounds.h)+\"] \",d=l.color||\"#000000\";m=\"<>\",this.internal.write(m);break;case\"link\":if(l.options.name){var g=this.annotations._nameMap[l.options.name];l.options.pageNumber=g.page,l.options.top=g.y}else l.options.top||(l.options.top=0);p=\"/Rect [\"+a(l.x)+\" \"+s(l.y)+\" \"+a(l.x+l.w)+\" \"+s(l.y+l.h)+\"] \";var m=\"\";if(l.options.url)m=\"<>\";else if(l.options.pageNumber)switch(m=\"<>\",this.internal.write(m))}}this.internal.write(\"]\")}}]),t.createAnnotation=function(t){var e=this.internal.getCurrentPageInfo();switch(t.type){case\"link\":this.link(t.bounds.x,t.bounds.y,t.bounds.w,t.bounds.h,t);break;case\"text\":case\"freetext\":e.pageContext.annotations.push(t)}},t.link=function(t,e,n,r,i){this.internal.getCurrentPageInfo().pageContext.annotations.push({x:t,y:e,w:n,h:r,options:i,type:\"link\"})},t.textWithLink=function(t,e,n,r){var i=this.getTextWidth(t),o=this.internal.getLineHeight()/this.internal.scaleFactor;return this.text(t,e,n),n+=.2*o,this.link(e,n-o,i,o,r),i},t.getTextWidth=function(t){var e=this.internal.getFontSize();return this.getStringUnitWidth(t)*e/this.internal.scaleFactor},\n/**\n * @license\n * Copyright (c) 2017 Aras Abbasi \n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\nfunction(t){var h={1569:[65152],1570:[65153,65154],1571:[65155,65156],1572:[65157,65158],1573:[65159,65160],1574:[65161,65162,65163,65164],1575:[65165,65166],1576:[65167,65168,65169,65170],1577:[65171,65172],1578:[65173,65174,65175,65176],1579:[65177,65178,65179,65180],1580:[65181,65182,65183,65184],1581:[65185,65186,65187,65188],1582:[65189,65190,65191,65192],1583:[65193,65194],1584:[65195,65196],1585:[65197,65198],1586:[65199,65200],1587:[65201,65202,65203,65204],1588:[65205,65206,65207,65208],1589:[65209,65210,65211,65212],1590:[65213,65214,65215,65216],1591:[65217,65218,65219,65220],1592:[65221,65222,65223,65224],1593:[65225,65226,65227,65228],1594:[65229,65230,65231,65232],1601:[65233,65234,65235,65236],1602:[65237,65238,65239,65240],1603:[65241,65242,65243,65244],1604:[65245,65246,65247,65248],1605:[65249,65250,65251,65252],1606:[65253,65254,65255,65256],1607:[65257,65258,65259,65260],1608:[65261,65262],1609:[65263,65264,64488,64489],1610:[65265,65266,65267,65268],1649:[64336,64337],1655:[64477],1657:[64358,64359,64360,64361],1658:[64350,64351,64352,64353],1659:[64338,64339,64340,64341],1662:[64342,64343,64344,64345],1663:[64354,64355,64356,64357],1664:[64346,64347,64348,64349],1667:[64374,64375,64376,64377],1668:[64370,64371,64372,64373],1670:[64378,64379,64380,64381],1671:[64382,64383,64384,64385],1672:[64392,64393],1676:[64388,64389],1677:[64386,64387],1678:[64390,64391],1681:[64396,64397],1688:[64394,64395],1700:[64362,64363,64364,64365],1702:[64366,64367,64368,64369],1705:[64398,64399,64400,64401],1709:[64467,64468,64469,64470],1711:[64402,64403,64404,64405],1713:[64410,64411,64412,64413],1715:[64406,64407,64408,64409],1722:[64414,64415],1723:[64416,64417,64418,64419],1726:[64426,64427,64428,64429],1728:[64420,64421],1729:[64422,64423,64424,64425],1733:[64480,64481],1734:[64473,64474],1735:[64471,64472],1736:[64475,64476],1737:[64482,64483],1739:[64478,64479],1740:[64508,64509,64510,64511],1744:[64484,64485,64486,64487],1746:[64430,64431],1747:[64432,64433]},a={65247:{65154:65269,65156:65271,65160:65273,65166:65275},65248:{65154:65270,65156:65272,65160:65274,65166:65276},65165:{65247:{65248:{65258:65010}}},1617:{1612:64606,1613:64607,1614:64608,1615:64609,1616:64610}},e={1612:64606,1613:64607,1614:64608,1615:64609,1616:64610},n=[1570,1571,1573,1575];t.__arabicParser__={};var r=t.__arabicParser__.isInArabicSubstitutionA=function(t){return void 0!==h[t.charCodeAt(0)]},u=t.__arabicParser__.isArabicLetter=function(t){return\"string\"==typeof t&&/^[\\u0600-\\u06FF\\u0750-\\u077F\\u08A0-\\u08FF\\uFB50-\\uFDFF\\uFE70-\\uFEFF]+$/.test(t)},i=t.__arabicParser__.isArabicEndLetter=function(t){return u(t)&&r(t)&&h[t.charCodeAt(0)].length<=2},o=t.__arabicParser__.isArabicAlfLetter=function(t){return u(t)&&0<=n.indexOf(t.charCodeAt(0))},s=(t.__arabicParser__.arabicLetterHasIsolatedForm=function(t){return u(t)&&r(t)&&1<=h[t.charCodeAt(0)].length},t.__arabicParser__.arabicLetterHasFinalForm=function(t){return u(t)&&r(t)&&2<=h[t.charCodeAt(0)].length}),l=(t.__arabicParser__.arabicLetterHasInitialForm=function(t){return u(t)&&r(t)&&3<=h[t.charCodeAt(0)].length},t.__arabicParser__.arabicLetterHasMedialForm=function(t){return u(t)&&r(t)&&4==h[t.charCodeAt(0)].length}),c=t.__arabicParser__.resolveLigatures=function(t){var e=0,n=a,r=0,i=\"\",o=0;for(e=0;e>\"),this.internal.out(\"endobj\")}),this.internal.events.subscribe(\"putCatalog\",function(){this.internal.out(\"/OpenAction \"+e+\" 0 R\")})}return this},\n/**\n * @license\n * Copyright (c) 2014 Steven Spungin (TwelveTone LLC) steven@twelvetone.tv\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\ne=lt.API,(n=function(){var e=void 0;Object.defineProperty(this,\"pdf\",{get:function(){return e},set:function(t){e=t}});var n=150;Object.defineProperty(this,\"width\",{get:function(){return n},set:function(t){n=isNaN(t)||!1===Number.isInteger(t)||t<0?150:t,this.getContext(\"2d\").pageWrapXEnabled&&(this.getContext(\"2d\").pageWrapX=n+1)}});var r=300;Object.defineProperty(this,\"height\",{get:function(){return r},set:function(t){r=isNaN(t)||!1===Number.isInteger(t)||t<0?300:t,this.getContext(\"2d\").pageWrapYEnabled&&(this.getContext(\"2d\").pageWrapY=r+1)}});var i=[];Object.defineProperty(this,\"childNodes\",{get:function(){return i},set:function(t){i=t}});var o={};Object.defineProperty(this,\"style\",{get:function(){return o},set:function(t){o=t}}),Object.defineProperty(this,\"parentNode\",{get:function(){return!1}})}).prototype.getContext=function(t,e){var n;if(\"2d\"!==(t=t||\"2d\"))return null;for(n in e)this.pdf.context2d.hasOwnProperty(n)&&(this.pdf.context2d[n]=e[n]);return(this.pdf.context2d._canvas=this).pdf.context2d},n.prototype.toDataURL=function(){throw new Error(\"toDataURL is not implemented.\")},e.events.push([\"initialized\",function(){this.canvas=new n,this.canvas.pdf=this}]),\n/** \n * @license\n * ====================================================================\n * Copyright (c) 2013 Youssef Beddad, youssef.beddad@gmail.com\n * 2013 Eduardo Menezes de Morais, eduardo.morais@usp.br\n * 2013 Lee Driscoll, https://github.com/lsdriscoll\n * 2014 Juan Pablo Gaviria, https://github.com/juanpgaviria\n * 2014 James Hall, james@parall.ax\n * 2014 Diego Casorran, https://github.com/diegocr\n *\n * \n * ====================================================================\n */\n_=lt.API,F={x:void 0,y:void 0,w:void 0,h:void 0,ln:void 0},P=1,p=function(t,e,n,r,i){F={x:t,y:e,w:n,h:r,ln:i}},d=function(){return F},k={left:0,top:0,bottom:0},_.setHeaderFunction=function(t){l=t},_.getTextDimensions=function(t,e){var n=this.table_font_size||this.internal.getFontSize(),r=(this.internal.getFont().fontStyle,(e=e||{}).scaleFactor||this.internal.scaleFactor),i=0,o=0,a=0;if(\"string\"==typeof t)0!=(i=this.getStringUnitWidth(t)*n)&&(o=1);else{if(\"[object Array]\"!==Object.prototype.toString.call(t))throw new Error(\"getTextDimensions expects text-parameter to be of type String or an Array of Strings.\");for(var s=0;s=this.internal.pageSize.getHeight()-h.bottom&&(this.cellAddPage(),l=!0,this.printHeaders&&this.tableHeaderRow&&this.printHeaderRow(o,!0)),e=d().y+d().h,l&&(e=23)}if(void 0!==i[0])if(this.printingHeaderRow?this.rect(t,e,n,r,\"FD\"):this.rect(t,e,n,r),\"right\"===a){i instanceof Array||(i=[i]);for(var u=0;u=2*Math.PI&&(r=0,i=2*Math.PI),this.path.push({type:\"arc\",x:t,y:e,radius:n,startAngle:r,endAngle:i,counterclockwise:o})},n.prototype.arcTo=function(t,e,n,r,i){throw new Error(\"arcTo not implemented.\")},n.prototype.rect=function(t,e,n,r){if(isNaN(t)||isNaN(e)||isNaN(n)||isNaN(r))throw console.error(\"jsPDF.context2d.rect: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.rect\");this.moveTo(t,e),this.lineTo(t+n,e),this.lineTo(t+n,e+r),this.lineTo(t,e+r),this.lineTo(t,e),this.lineTo(t+n,e),this.lineTo(t,e)},n.prototype.fillRect=function(t,e,n,r){if(isNaN(t)||isNaN(e)||isNaN(n)||isNaN(r))throw console.error(\"jsPDF.context2d.fillRect: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.fillRect\");if(!N.call(this)){var i={};\"butt\"!==this.lineCap&&(i.lineCap=this.lineCap,this.lineCap=\"butt\"),\"miter\"!==this.lineJoin&&(i.lineJoin=this.lineJoin,this.lineJoin=\"miter\"),this.beginPath(),this.rect(t,e,n,r),this.fill(),i.hasOwnProperty(\"lineCap\")&&(this.lineCap=i.lineCap),i.hasOwnProperty(\"lineJoin\")&&(this.lineJoin=i.lineJoin)}},n.prototype.strokeRect=function(t,e,n,r){if(isNaN(t)||isNaN(e)||isNaN(n)||isNaN(r))throw console.error(\"jsPDF.context2d.strokeRect: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.strokeRect\");L.call(this)||(this.beginPath(),this.rect(t,e,n,r),this.stroke())},n.prototype.clearRect=function(t,e,n,r){if(isNaN(t)||isNaN(e)||isNaN(n)||isNaN(r))throw console.error(\"jsPDF.context2d.clearRect: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.clearRect\");this.ignoreClearRect||(this.fillStyle=\"#ffffff\",this.fillRect(t,e,n,r))},n.prototype.save=function(t){t=\"boolean\"!=typeof t||t;for(var e=this.pdf.internal.getCurrentPageInfo().pageNumber,n=0;n\"},s=function(t){var r,e,n,i,o,a=String,s=\"length\",l=\"charCodeAt\",h=\"slice\",u=\"replace\";for(t[h](-2),t=t[h](0,-2)[u](/\\s/g,\"\")[u](\"z\",\"!!!!!\"),n=[],i=0,o=(t+=r=\"uuuuu\"[h](t[s]%5||5))[s];i>24,255&e>>16,255&e>>8,255&e);return function(t,e){for(var n=r[s];0\"},u=function(t){var e=new RegExp(/^([0-9A-Fa-f]{2})+$/);if(-1!==(t=t.replace(/\\s/g,\"\")).indexOf(\">\")&&(t=t.substr(0,t.indexOf(\">\"))),t.length%2&&(t+=\"0\"),!1===e.test(t))return\"\";for(var n=\"\",r=0;r>8&255,n>>16&255,n>>24&255]),t.length+2),t=String.fromCharCode.apply(null,i)},a.processDataByFilters=function(t,e){var n=0,r=t||\"\",i=[];for(\"string\"==typeof(e=e||[])&&(e=[e]),n=0;n>\"),this.internal.out(\"endobj\"),w=this.internal.newObject(),this.internal.out(\"<<\"),this.internal.out(\"/S /JavaScript\"),this.internal.out(\"/JS (\"+b+\")\"),this.internal.out(\">>\"),this.internal.out(\"endobj\")}),this.internal.events.subscribe(\"putCatalog\",function(){void 0!==v&&void 0!==w&&this.internal.out(\"/Names <>\")}),this},(\n/**\n * @license\n * Copyright (c) 2014 Steven Spungin (TwelveTone LLC) steven@twelvetone.tv\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\nx=lt.API).events.push([\"postPutResources\",function(){var t=this,e=/^(\\d+) 0 obj$/;if(0> endobj\")}var c=t.internal.newObject();for(t.internal.write(\"<< /Names [ \"),r=0;r>\",\"endobj\"),t.internal.newObject(),t.internal.write(\"<< /Dests \"+c+\" 0 R\"),t.internal.write(\">>\",\"endobj\")}}]),x.events.push([\"putCatalog\",function(){0> \\r\\nendobj\\r\\n\"},a.outline.count_r=function(t,e){for(var n=0;n>>24&255,f[c++]=s>>>16&255,f[c++]=s>>>8&255,f[c++]=255&s,I.arrayBufferToBinaryString(f)},N=function(t,e){var n=Math.LOG2E*Math.log(32768)-8<<4|8,r=n<<8;return r|=Math.min(3,(e-1&255)>>1)<<6,r|=0,[n,255&(r+=31-r%31)]},L=function(t,e){for(var n,r=1,i=0,o=t.length,a=0;0>>0},A=function(t,e,n,r){for(var i,o,a,s=t.length/e,l=new Uint8Array(t.length+s),h=T(),u=0;u>>1)&255;return o},O=function(t,e,n){var r,i,o,a,s=[],l=0,h=t.length;for(s[0]=4;l>>d&255,d+=o.bits;y[w]=x>>>d&255}if(16===o.bits){g=(_=new Uint32Array(o.decodePixels().buffer)).length,m=new Uint8Array(g*(32/o.pixelBitlength)*o.colors),y=new Uint8Array(g*(32/o.pixelBitlength));for(var x,N=1>>0&255,N&&(m[b++]=x>>>16&255,x=_[w++],m[b++]=x>>>0&255),y[L++]=x>>>16&255;p=8}r!==I.image_compression.NONE&&C()?(t=B(m,o.width*o.colors,o.colors,r),u=B(y,o.width,1,r)):(t=m,u=y,f=null)}if(3===o.colorType&&(c=this.color_spaces.INDEXED,h=o.palette,o.transparency.indexed)){var A=o.transparency.indexed,S=0;for(w=0,g=A.length;wr&&(i.push(t.slice(l,o)),s=0,l=o),s+=e[o],o++;return l!==o&&i.push(t.slice(l,o)),i},J=function(t,e,n){n||(n={});var r,i,o,a,s,l,h=[],u=[h],c=n.textIndent||0,f=0,p=0,d=t.split(\" \"),g=W.apply(this,[\" \",n])[0];if(l=-1===n.lineIndent?d[0].length+2:n.lineIndent||0){var m=Array(l).join(\" \"),y=[];d.map(function(t){1<(t=t.split(/\\s*\\n/)).length?y=y.concat(t.map(function(t,e){return(e&&t.length?\"\\n\":\"\")+t})):y.push(t[0])}),d=y,l=G.apply(this,[m,n])}for(o=0,a=d.length;o>\")}),this.internal.viewerpreferences.isSubscribed=!0),this.internal.viewerpreferences.configuration=n,this},\n/** ==================================================================== \n * jsPDF XMP metadata plugin\n * Copyright (c) 2016 Jussi Utunen, u-jussi@suomi24.fi\n * \n * \n * ====================================================================\n */\nnt=lt.API,ot=it=rt=\"\",nt.addMetadata=function(t,e){return it=e||\"http://jspdf.default.namespaceuri/\",rt=t,this.internal.events.subscribe(\"postPutResources\",function(){if(rt){var t='',e=unescape(encodeURIComponent('')),n=unescape(encodeURIComponent(t)),r=unescape(encodeURIComponent(rt)),i=unescape(encodeURIComponent(\"\")),o=unescape(encodeURIComponent(\"\")),a=n.length+r.length+i.length+e.length+o.length;ot=this.internal.newObject(),this.internal.write(\"<< /Type /Metadata /Subtype /XML /Length \"+a+\" >>\"),this.internal.write(\"stream\"),this.internal.write(e+n+r+i+o),this.internal.write(\"endstream\"),this.internal.write(\"endobj\")}else ot=\"\"}),this.internal.events.subscribe(\"putCatalog\",function(){ot&&this.internal.write(\"/Metadata \"+ot+\" 0 R\")}),this},function(f,t){var e=f.API;var m=e.pdfEscape16=function(t,e){for(var n,r=e.metadata.Unicode.widths,i=[\"\",\"0\",\"00\",\"000\",\"0000\"],o=[\"\"],a=0,s=t.length;a> def\\n/CMapName /Adobe-Identity-UCS def\\n/CMapType 2 def\\n1 begincodespacerange\\n<0000>\\nendcodespacerange\",r=[],a=0,s=(n=Object.keys(t).sort(function(t,e){return t-e})).length;a<\"+i+\">\");return r.length&&(o+=\"\\n\"+r.length+\" beginbfchar\\n\"+r.join(\"\\n\")+\"\\nendbfchar\\n\"),o+=\"endcmap\\nCMapName currentdict /CMap defineresource pop\\nend\\nend\"};e.events.push([\"putFont\",function(t){!function(t,e,n,r){if(t.metadata instanceof f.API.TTFFont&&\"Identity-H\"===t.encoding){for(var i=t.metadata.Unicode.widths,o=t.metadata.subset.encode(t.metadata.glyIdsUsed,1),a=\"\",s=0;s>\"),e(\"endobj\");var c=n();e(\"<<\"),e(\"/Type /Font\"),e(\"/BaseFont /\"+t.fontName),e(\"/FontDescriptor \"+u+\" 0 R\"),e(\"/W \"+f.API.PDFObject.convert(i)),e(\"/CIDToGIDMap /Identity\"),e(\"/DW 1000\"),e(\"/Subtype /CIDFontType2\"),e(\"/CIDSystemInfo\"),e(\"<<\"),e(\"/Supplement 0\"),e(\"/Registry (Adobe)\"),e(\"/Ordering (\"+t.encoding+\")\"),e(\">>\"),e(\">>\"),e(\"endobj\"),t.objectNumber=n(),e(\"<<\"),e(\"/Type /Font\"),e(\"/Subtype /Type0\"),e(\"/ToUnicode \"+h+\" 0 R\"),e(\"/BaseFont /\"+t.fontName),e(\"/Encoding /\"+t.encoding),e(\"/DescendantFonts [\"+c+\" 0 R]\"),e(\">>\"),e(\"endobj\"),t.isAlreadyPutted=!0}}(t.font,t.out,t.newObject,t.putStream)}]);e.events.push([\"putFont\",function(t){!function(t,e,n,r){if(t.metadata instanceof f.API.TTFFont&&\"WinAnsiEncoding\"===t.encoding){t.metadata.Unicode.widths;for(var i=t.metadata.rawData,o=\"\",a=0;a>\"),e(\"endobj\"),t.objectNumber=n(),a=0;a>\"),e(\"endobj\"),t.isAlreadyPutted=!0}}(t.font,t.out,t.newObject,t.putStream)}]);var h=function(t){var e,n,r=t.text||\"\",i=t.x,o=t.y,a=t.options||{},s=t.mutex||{},l=s.pdfEscape,h=s.activeFontKey,u=s.fonts,c=(s.activeFontSize,\"\"),f=0,p=\"\",d=u[n=h].encoding;if(\"Identity-H\"!==u[n].encoding)return{text:r,x:i,y:o,options:a,mutex:s};for(p=r,n=h,\"[object Array]\"===Object.prototype.toString.call(r)&&(p=r[0]),f=0;fw-h.top-h.bottom&&s.pagesplit){var p=function(t,e,n,r,i){var o=document.createElement(\"canvas\");o.height=i,o.width=r;var a=o.getContext(\"2d\");return a.mozImageSmoothingEnabled=!1,a.webkitImageSmoothingEnabled=!1,a.msImageSmoothingEnabled=!1,a.imageSmoothingEnabled=!1,a.fillStyle=s.backgroundColor||\"#ffffff\",a.fillRect(0,0,r,i),a.drawImage(t,e,n,r,i,0,0,r,i),o},n=function(){for(var t,e,n=0,r=0,i={},o=!1;;){var a;if(r=0,i.top=0!==n?h.top:g,i.left=0!==n?h.left:d,o=(v-h.left-h.right)*y=l.width)break;this.addPage()}else s=[a=p(l,0,n,t,e),i.left,i.top,a.width/y,a.height/y,c,null,f],this.addImage.apply(this,s);if((n+=e)>=l.height)break;this.addPage()}m(u,n,null,s)}.bind(this);if(\"CANVAS\"===l.nodeName){var r=new Image;r.onload=n,r.src=l.toDataURL(\"image/png\"),l=r}else n()}else{var i=Math.random().toString(35),o=[l,d,g,u,e,c,i,f];this.addImage.apply(this,o),m(u,e,i,o)}}.bind(this),\"undefined\"!=typeof html2canvas&&!s.rstz)return html2canvas(t,s);if(\"undefined\"==typeof rasterizeHTML)return null;var n=\"drawDocument\";return\"string\"==typeof t&&(n=/^http/.test(t)?\"drawURL\":\"drawHTML\"),s.width=s.width||v*y,rasterizeHTML[n](t,void 0,s).then(function(t){s.onrendered(t.image)},function(t){m(null,t)})},\n/**\n * jsPDF fromHTML plugin. BETA stage. API subject to change. Needs browser\n * Copyright (c) 2012 Willow Systems Corporation, willow-systems.com\n * 2014 Juan Pablo Gaviria, https://github.com/juanpgaviria\n * 2014 Diego Casorran, https://github.com/diegocr\n * 2014 Daniel Husar, https://github.com/danielhusar\n * 2014 Wolfgang Gassler, https://github.com/woolfg\n * 2014 Steven Spungin, https://github.com/flamenco\n *\n * @license\n * \n * ====================================================================\n */\nfunction(t){var P,k,i,a,s,l,h,u,I,w,f,c,p,n,C,B,d,g,m,j;P=function(){return function(t){return e.prototype=t,new e};function e(){}}(),w=function(t){var e,n,r,i,o,a,s;for(n=0,r=t.length,e=void 0,a=i=!1;!i&&n!==r;)(e=t[n]=t[n].trimLeft())&&(i=!0),n++;for(n=r-1;r&&!a&&-1!==n;)(e=t[n]=t[n].trimRight())&&(a=!0),n--;for(o=/\\s+$/g,s=!0,n=0;n!==r;)\"\\u2028\"!=t[n]&&(e=t[n].replace(/\\s+/g,\" \"),s&&(e=e.trimLeft()),e&&(s=o.test(e)),t[n]=e),n++;return t},c=function(t){var e,n,r;for(e=void 0,n=(r=t.split(\",\")).shift();!e&&n;)e=i[n.trim().toLowerCase()],n=r.shift();return e},p=function(t){var e;return-1<(t=\"auto\"===t?\"0px\":t).indexOf(\"em\")&&!isNaN(Number(t.replace(\"em\",\"\")))&&(t=18.719*Number(t.replace(\"em\",\"\"))+\"px\"),-1i.pdf.margins_doc.top&&(i.pdf.addPage(),i.y=i.pdf.margins_doc.top,i.executeWatchFunctions(n));var b=I(n),x=i.x,N=12/i.pdf.internal.scaleFactor,L=(b[\"margin-left\"]+b[\"padding-left\"])*N,A=(b[\"margin-right\"]+b[\"padding-right\"])*N,S=(b[\"margin-top\"]+b[\"padding-top\"])*N,_=(b[\"margin-bottom\"]+b[\"padding-bottom\"])*N;void 0!==b.float&&\"right\"===b.float?x+=i.settings.width-n.width-A:x+=L,i.pdf.addImage(v,x,i.y+S,n.width,n.height),v=void 0,\"right\"===b.float||\"left\"===b.float?(i.watchFunctions.push(function(t,e,n,r){return i.y>=e?(i.x+=t,i.settings.width+=n,!0):!!(r&&1===r.nodeType&&!E[r.nodeName]&&i.x+r.width>i.pdf.margins_doc.left+i.pdf.margins_doc.width)&&(i.x+=t,i.y=e,i.settings.width+=n,!0)}.bind(this,\"left\"===b.float?-n.width-L-A:0,i.y+n.height+S+_,n.width)),i.watchFunctions.push(function(t,e,n){return!(i.y]*?>/gi,\"\"),h=\"jsPDFhtmlText\"+Date.now().toString()+(1e3*Math.random()).toFixed(0),(l=document.createElement(\"div\")).style.cssText=\"position: absolute !important;clip: rect(1px 1px 1px 1px); /* IE6, IE7 */clip: rect(1px, 1px, 1px, 1px);padding:0 !important;border:0 !important;height: 1px !important;width: 1px !important; top:auto;left:-100px;overflow: hidden;\",l.innerHTML='